Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 10814190 | 1440 days ago | IN | 0 ETH | 0.10556723 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
UniswapV2AssetInteractiveAdapter
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity Standard Json-Input format)
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; pragma experimental ABIEncoderV2; import { ERC20 } from "../../shared/ERC20.sol"; import { SafeERC20 } from "../../shared/SafeERC20.sol"; import { TokenAmount } from "../../shared/Structs.sol"; import { UniswapV2AssetAdapter } from "../../adapters/uniswap/UniswapV2AssetAdapter.sol"; import { InteractiveAdapter } from "../InteractiveAdapter.sol"; /** * @dev UniswapV2Pair contract interface. * Only the functions required for UniswapV2AssetZapInteractiveAdapter contract are added. * The UniswapV2Pair contract is available here * github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2Pair.sol. */ interface UniswapV2Pair { function mint(address) external returns (uint256); function burn(address) external returns (uint256, uint256); function getReserves() external view returns (uint112, uint112); function token0() external view returns (address); function token1() external view returns (address); } /** * @title Interactive adapter for Uniswap V2 protocol (liquidity). * @dev Implementation of InteractiveAdapter abstract contract. * @author Igor Sobolev <[email protected]> */ contract UniswapV2AssetInteractiveAdapter is InteractiveAdapter, UniswapV2AssetAdapter { using SafeERC20 for ERC20; address internal constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; /** * @notice Deposits tokens to the Uniswap pool (pair). * @param tokenAmounts Array with one element - TokenAmount struct with * underlying tokens addresses, underlying tokens amounts to be deposited, and amount types. * @param data ABI-encoded additional parameters: * - pairAddress - pair address. * @return tokensToBeWithdrawn Array with one element - UNI-token (pair) address. * @dev Implementation of InteractiveAdapter function. */ function deposit( TokenAmount[] memory tokenAmounts, bytes memory data ) public payable override returns (address[] memory tokensToBeWithdrawn) { require(tokenAmounts.length == 2, "ULIA: should be 2 tokenAmounts"); address pairAddress = abi.decode(data, (address)); tokensToBeWithdrawn = new address[](1); tokensToBeWithdrawn[0] = pairAddress; uint256 amount0 = getAbsoluteAmountDeposit(tokenAmounts[0]); uint256 amount1 = getAbsoluteAmountDeposit(tokenAmounts[1]); uint256 reserve0; uint256 reserve1; if (tokenAmounts[0].token == UniswapV2Pair(pairAddress).token0()) { (reserve0, reserve1) = UniswapV2Pair(pairAddress).getReserves(); } else { (reserve1, reserve0) = UniswapV2Pair(pairAddress).getReserves(); } uint256 amount1Optimal = amount0 * reserve1 / reserve0; if (amount1Optimal < amount1) { amount1 = amount1Optimal; } else if (amount1Optimal > amount1) { amount0 = amount1 * reserve0 / reserve1; } ERC20(tokenAmounts[0].token).safeTransfer(pairAddress, amount0, "ULIA[1]"); ERC20(tokenAmounts[1].token).safeTransfer(pairAddress, amount1, "ULIA[2]"); try UniswapV2Pair(pairAddress).mint( address(this) ) returns (uint256) { // solhint-disable-line no-empty-blocks } catch Error(string memory reason) { revert(reason); } catch { revert("ULIA: deposit fail"); } } /** * @notice Withdraws tokens from the Uniswap pool. * @param tokenAmounts Array with one element - TokenAmount struct with * UNI token address, UNI token amount to be redeemed, and amount type. * @return tokensToBeWithdrawn Array with two elements - underlying tokens. * @dev Implementation of InteractiveAdapter function. */ function withdraw( TokenAmount[] memory tokenAmounts, bytes memory ) public payable override returns (address[] memory tokensToBeWithdrawn) { require(tokenAmounts.length == 1, "ULIA: should be 1 tokenAmount"); address token = tokenAmounts[0].token; uint256 amount = getAbsoluteAmountWithdraw(tokenAmounts[0]); tokensToBeWithdrawn = new address[](2); tokensToBeWithdrawn[0] = UniswapV2Pair(token).token0(); tokensToBeWithdrawn[1] = UniswapV2Pair(token).token1(); ERC20(token).safeTransfer(token, amount, "ULIA[3]"); try UniswapV2Pair(token).burn( address(this) ) returns (uint256, uint256) { // solhint-disable-line no-empty-blocks } catch Error(string memory reason) { revert(reason); } catch { revert("ULIA: withdraw fail"); } } }
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; pragma experimental ABIEncoderV2; interface ERC20 { function approve(address, uint256) external returns (bool); function transfer(address, uint256) external returns (bool); function transferFrom(address, address, uint256) external returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address) external view returns (uint256); function allowance(address, address) external view returns (uint256); }
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; import "./ERC20.sol"; /** * @title SafeERC20 * @dev 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 ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer( ERC20 token, address to, uint256 value, string memory location ) internal { callOptionalReturn( token, abi.encodeWithSelector( token.transfer.selector, to, value ), "transfer", location ); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value, string memory location ) internal { callOptionalReturn( token, abi.encodeWithSelector( token.transferFrom.selector, from, to, value ), "transferFrom", location ); } function safeApprove( ERC20 token, address spender, uint256 value, string memory location ) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: bad approve call" ); callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, value ), "approve", location ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), * relaxing the requirement on the return value: the return value is optional * (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * @param location Location of the call (for debug). */ function callOptionalReturn( ERC20 token, bytes memory data, string memory functionName, string memory location ) private { // We need to perform a low level call here, to bypass Solidity's return data size checking // mechanism, since we're implementing it ourselves. // We implement two-steps call as callee is a contract is a responsibility of a caller. // 1. The call itself is made, and success asserted // 2. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require( success, string( abi.encodePacked( "SafeERC20: ", functionName, " failed in ", location ) ) ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), string( abi.encodePacked( "SafeERC20: ", functionName, " returned false in ", location ) ) ); } } }
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; pragma experimental ABIEncoderV2; // The struct consists of AbsoluteTokenAmount structs for // (base) token and its underlying tokens (if any). struct FullAbsoluteTokenAmount { AbsoluteTokenAmountMeta base; AbsoluteTokenAmountMeta[] underlying; } // The struct consists of AbsoluteTokenAmount struct // with token address and absolute amount // and ERC20Metadata struct with ERC20-style metadata. // NOTE: 0xEeee...EEeE address is used for ETH. struct AbsoluteTokenAmountMeta { AbsoluteTokenAmount absoluteTokenAmount; ERC20Metadata erc20metadata; } // The struct consists of ERC20-style token metadata. struct ERC20Metadata { string name; string symbol; uint8 decimals; } // The struct consists of protocol adapter's name // and array of AbsoluteTokenAmount structs // with token addresses and absolute amounts. struct AdapterBalance { bytes32 protocolAdapterName; AbsoluteTokenAmount[] absoluteTokenAmounts; } // The struct consists of token address // and its absolute amount. struct AbsoluteTokenAmount { address token; uint256 amount; } // The struct consists of token address, // and price per full share (1e18). struct Component { address token; uint256 rate; } //=============================== Interactive Adapters Structs ==================================== struct TransactionData { Action[] actions; TokenAmount[] inputs; Fee fee; AbsoluteTokenAmount[] requiredOutputs; uint256 nonce; } struct Action { bytes32 protocolAdapterName; ActionType actionType; TokenAmount[] tokenAmounts; bytes data; } struct TokenAmount { address token; uint256 amount; AmountType amountType; } struct Fee { uint256 share; address beneficiary; } enum ActionType { None, Deposit, Withdraw } enum AmountType { None, Relative, Absolute }
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; pragma experimental ABIEncoderV2; import { ERC20 } from "../../shared/ERC20.sol"; import { ProtocolAdapter } from "../ProtocolAdapter.sol"; /** * @title Adapter for Uniswap V2 protocol (liquidity). * @dev Implementation of ProtocolAdapter abstract contract. * @author Igor Sobolev <[email protected]> */ contract UniswapV2AssetAdapter is ProtocolAdapter { /** * @return Amount of Uniswap Pool Tokens held by the given account. * @param token Address of the exchange (pair)! * @dev Implementation of ProtocolAdapter abstract contract function. */ function getBalance( address token, address account ) public view override returns (uint256) { return ERC20(token).balanceOf(account); } }
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; pragma experimental ABIEncoderV2; /** * @title Protocol adapter abstract contract. * @dev adapterType(), tokenType(), and getBalance() functions MUST be implemented. * @author Igor Sobolev <[email protected]> */ abstract contract ProtocolAdapter { /** * @dev MUST return amount and type of the given token * locked on the protocol by the given account. */ function getBalance( address token, address account ) public view virtual returns (uint256); }
// Copyright (C) 2020 Zerion Inc. <https://zerion.io> // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. // // SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.6.11; pragma experimental ABIEncoderV2; import { ProtocolAdapter } from "../adapters/ProtocolAdapter.sol"; import { TokenAmount, AmountType } from "../shared/Structs.sol"; import { ERC20 } from "../shared/ERC20.sol"; /** * @title Base contract for interactive protocol adapters. * @dev deposit() and withdraw() functions MUST be implemented * as well as all the functions from ProtocolAdapter abstract contract. * @author Igor Sobolev <[email protected]> */ abstract contract InteractiveAdapter is ProtocolAdapter { uint256 internal constant DELIMITER = 1e18; address internal constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; /** * @dev The function must deposit assets to the protocol. * @return MUST return assets to be sent back to the `msg.sender`. */ function deposit( TokenAmount[] memory tokenAmounts, bytes memory data ) public payable virtual returns (address[] memory); /** * @dev The function must withdraw assets from the protocol. * @return MUST return assets to be sent back to the `msg.sender`. */ function withdraw( TokenAmount[] memory tokenAmounts, bytes memory data ) public payable virtual returns (address[] memory); function getAbsoluteAmountDeposit( TokenAmount memory tokenAmount ) internal view virtual returns (uint256) { address token = tokenAmount.token; uint256 amount = tokenAmount.amount; AmountType amountType = tokenAmount.amountType; require( amountType == AmountType.Relative || amountType == AmountType.Absolute, "IA: bad amount type" ); if (amountType == AmountType.Relative) { require(amount <= DELIMITER, "IA: bad amount"); uint256 balance; if (token == ETH) { balance = address(this).balance; } else { balance = ERC20(token).balanceOf(address(this)); } if (amount == DELIMITER) { return balance; } else { return mul(balance, amount) / DELIMITER; } } else { return amount; } } function getAbsoluteAmountWithdraw( TokenAmount memory tokenAmount ) internal view virtual returns (uint256) { address token = tokenAmount.token; uint256 amount = tokenAmount.amount; AmountType amountType = tokenAmount.amountType; require( amountType == AmountType.Relative || amountType == AmountType.Absolute, "IA: bad amount type" ); if (amountType == AmountType.Relative) { require(amount <= DELIMITER, "IA: bad amount"); uint256 balance = getBalance(token, address(this)); if (amount == DELIMITER) { return balance; } else { return mul(balance, amount) / DELIMITER; } } else { return amount; } } function mul( uint256 a, uint256 b ) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "IA: mul overflow"); return c; } }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"enum AmountType","name":"amountType","type":"uint8"}],"internalType":"struct TokenAmount[]","name":"tokenAmounts","type":"tuple[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deposit","outputs":[{"internalType":"address[]","name":"tokensToBeWithdrawn","type":"address[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"enum AmountType","name":"amountType","type":"uint8"}],"internalType":"struct TokenAmount[]","name":"tokenAmounts","type":"tuple[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"withdraw","outputs":[{"internalType":"address[]","name":"tokensToBeWithdrawn","type":"address[]"}],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611706806100206000396000f3fe6080604052600436106100345760003560e01c806328ffb83d14610039578063387b817414610062578063d4fac45d14610075575b600080fd5b61004c61004736600461105a565b6100a2565b604051610059919061131c565b60405180910390f35b61004c61007036600461105a565b6105d4565b34801561008157600080fd5b50610095610090366004611022565b610963565b6040516100599190611548565b606082516002146100e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906114a3565b60405180910390fd5b6000828060200190518101906100fe9190611006565b60408051600180825281830190925291925060208083019080368337019050509150808260008151811061012e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006101878560008151811061017a57fe5b6020026020010151610a11565b9050600061019b8660018151811061017a57fe5b90506000808473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101e657600080fd5b505afa1580156101fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021e9190611006565b73ffffffffffffffffffffffffffffffffffffffff168860008151811061024157fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610302578473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b1580156102ae57600080fd5b505afa1580156102c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e6919061114c565b6dffffffffffffffffffffffffffff9182169350169050610397565b8473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b15801561034757600080fd5b505afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f919061114c565b6dffffffffffffffffffffffffffff90811693501690505b600082828602816103a457fe5b049050838110156103b7578093506103ce565b838111156103ce5781838502816103ca57fe5b0494505b61044886866040518060400160405280600781526020017f554c49415b315d000000000000000000000000000000000000000000000000008152508c60008151811061041657fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16610c03909392919063ffffffff16565b61049086856040518060400160405280600781526020017f554c49415b325d000000000000000000000000000000000000000000000000008152508c60018151811061041657fe5b6040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871690636a627842906104e29030906004016112d5565b602060405180830381600087803b1580156104fc57600080fd5b505af192505050801561054a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526105479181019061117a565b60015b6105c7576105566115aa565b806105615750610595565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9190611376565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906113c7565b5050505050505092915050565b60608251600114610611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9061146c565b60008360008151811061062057fe5b6020026020010151600001519050600061064d8560008151811061064057fe5b6020026020010151610cc1565b60408051600280825260608201835292935091906020830190803683370190505092508173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156106b657600080fd5b505afa1580156106ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ee9190611006565b836000815181106106fb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561077b57600080fd5b505afa15801561078f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b39190611006565b836001815181106107c057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061085c82826040518060400160405280600781526020017f554c49415b335d000000000000000000000000000000000000000000000000008152508573ffffffffffffffffffffffffffffffffffffffff16610c03909392919063ffffffff16565b6040517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906389afcb44906108ae9030906004016112d5565b6040805180830381600087803b1580156108c757600080fd5b505af1925050508015610915575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261091291810190611192565b60015b610959576109216115aa565b8061056157506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906114da565b5050505092915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a08231906109b89085906004016112d5565b60206040518083038186803b1580156109d057600080fd5b505afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a08919061117a565b90505b92915050565b80516020820151604083015160009291906001816002811115610a3057fe5b1480610a4757506002816002811115610a4557fe5b145b610a7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906113fe565b6001816002811115610a8b57fe5b1415610bf457670de0b6b3a7640000821115610ad3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df90611435565b600073ffffffffffffffffffffffffffffffffffffffff841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610b0e575047610bb3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516906370a0823190610b609030906004016112d5565b60206040518083038186803b158015610b7857600080fd5b505afa158015610b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb0919061117a565b90505b670de0b6b3a7640000831415610bce579350610bfe92505050565b670de0b6b3a7640000610be18285610d8f565b81610be857fe5b04945050505050610bfe565b509150610bfe9050565b919050565b610cbb8463a9059cbb60e01b8585604051602401610c229291906112f6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280600881526020017f7472616e7366657200000000000000000000000000000000000000000000000081525084610de3565b50505050565b80516020820151604083015160009291906001816002811115610ce057fe5b1480610cf757506002816002811115610cf557fe5b145b610d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906113fe565b6001816002811115610d3b57fe5b1415610bf457670de0b6b3a7640000821115610d83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df90611435565b6000610bb08430610963565b600082610d9e57506000610a0b565b82820282848281610dab57fe5b0414610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df90611511565b600060608573ffffffffffffffffffffffffffffffffffffffff1685604051610e0c91906111b5565b6000604051808303816000865af19150503d8060008114610e49576040519150601f19603f3d011682016040523d82523d6000602084013e610e4e565b606091505b5091509150818484604051602001610e67929190611253565b60405160208183030381529060405290610eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9190611376565b50805115610f265780806020019051810190610eca919061112c565b8484604051602001610edd9291906111d1565b60405160208183030381529060405290610f24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9190611376565b505b505050505050565b600082601f830112610f3e578081fd5b813567ffffffffffffffff811115610f54578182fd5b610f8560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611551565b9150808252836020828501011115610f9c57600080fd5b8060208401602084013760009082016020015292915050565b600060608284031215610fc6578081fd5b610fd06060611551565b90508135610fdd8161168f565b815260208281013590820152604082013560038110610ffb57600080fd5b604082015292915050565b600060208284031215611017578081fd5b8151610a088161168f565b60008060408385031215611034578081fd5b823561103f8161168f565b9150602083013561104f8161168f565b809150509250929050565b6000806040838503121561106c578182fd5b823567ffffffffffffffff80821115611083578384fd5b81850186601f820112611094578485fd5b80359250818311156110a4578485fd5b60206110b38182860201611551565b848152818101908383016060808802860185018c10156110d157898afd5b8995505b878610156110fd576110e78c83610fb5565b84526001959095019492840192908101906110d5565b50909750505086013592505080821115611115578283fd5b5061112285828601610f2e565b9150509250929050565b60006020828403121561113d578081fd5b81518015158114610a08578182fd5b6000806040838503121561115e578182fd5b8251611169816116b4565b602084015190925061104f816116b4565b60006020828403121561118b578081fd5b5051919050565b600080604083850312156111a4578182fd5b505080516020909101519092909150565b600082516111c7818460208701611578565b9190910192915050565b60007f5361666545524332303a200000000000000000000000000000000000000000008252835161120981600b850160208801611578565b8083017f2072657475726e65642066616c736520696e2000000000000000000000000000600b8201528451915061124782601e830160208801611578565b01601e01949350505050565b60007f5361666545524332303a200000000000000000000000000000000000000000008252835161128b81600b850160208801611578565b8083017f206661696c656420696e20000000000000000000000000000000000000000000600b820152845191506112c9826016830160208801611578565b01601601949350505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561136a57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611338565b50909695505050505050565b6000602082528251806020840152611395816040850160208701611578565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60208082526012908201527f554c49413a206465706f736974206661696c0000000000000000000000000000604082015260600190565b60208082526013908201527f49413a2062616420616d6f756e74207479706500000000000000000000000000604082015260600190565b6020808252600e908201527f49413a2062616420616d6f756e74000000000000000000000000000000000000604082015260600190565b6020808252601d908201527f554c49413a2073686f756c64206265203120746f6b656e416d6f756e74000000604082015260600190565b6020808252601e908201527f554c49413a2073686f756c64206265203220746f6b656e416d6f756e74730000604082015260600190565b60208082526013908201527f554c49413a207769746864726177206661696c00000000000000000000000000604082015260600190565b60208082526010908201527f49413a206d756c206f766572666c6f7700000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561157057600080fd5b604052919050565b60005b8381101561159357818101518382015260200161157b565b83811115610cbb5750506000910152565b60e01c90565b600060443d10156115ba5761168c565b600481823e6308c379a06115ce82516115a4565b146115d85761168c565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715611626575050505061168c565b82840191508151925080831115611640575050505061168c565b503d830160208383010111156116585750505061168c565b601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150505b90565b73ffffffffffffffffffffffffffffffffffffffff811681146116b157600080fd5b50565b6dffffffffffffffffffffffffffff811681146116b157600080fdfea26469706673582212204195445f3da09b7ef54c2556d8b3ee4adfc108a31376eb2a9f10429108b2d41164736f6c634300060b0033
Deployed Bytecode
0x6080604052600436106100345760003560e01c806328ffb83d14610039578063387b817414610062578063d4fac45d14610075575b600080fd5b61004c61004736600461105a565b6100a2565b604051610059919061131c565b60405180910390f35b61004c61007036600461105a565b6105d4565b34801561008157600080fd5b50610095610090366004611022565b610963565b6040516100599190611548565b606082516002146100e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906114a3565b60405180910390fd5b6000828060200190518101906100fe9190611006565b60408051600180825281830190925291925060208083019080368337019050509150808260008151811061012e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006101878560008151811061017a57fe5b6020026020010151610a11565b9050600061019b8660018151811061017a57fe5b90506000808473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156101e657600080fd5b505afa1580156101fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061021e9190611006565b73ffffffffffffffffffffffffffffffffffffffff168860008151811061024157fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415610302578473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b1580156102ae57600080fd5b505afa1580156102c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102e6919061114c565b6dffffffffffffffffffffffffffff9182169350169050610397565b8473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b15801561034757600080fd5b505afa15801561035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037f919061114c565b6dffffffffffffffffffffffffffff90811693501690505b600082828602816103a457fe5b049050838110156103b7578093506103ce565b838111156103ce5781838502816103ca57fe5b0494505b61044886866040518060400160405280600781526020017f554c49415b315d000000000000000000000000000000000000000000000000008152508c60008151811061041657fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16610c03909392919063ffffffff16565b61049086856040518060400160405280600781526020017f554c49415b325d000000000000000000000000000000000000000000000000008152508c60018151811061041657fe5b6040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871690636a627842906104e29030906004016112d5565b602060405180830381600087803b1580156104fc57600080fd5b505af192505050801561054a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526105479181019061117a565b60015b6105c7576105566115aa565b806105615750610595565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9190611376565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906113c7565b5050505050505092915050565b60608251600114610611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9061146c565b60008360008151811061062057fe5b6020026020010151600001519050600061064d8560008151811061064057fe5b6020026020010151610cc1565b60408051600280825260608201835292935091906020830190803683370190505092508173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156106b657600080fd5b505afa1580156106ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ee9190611006565b836000815181106106fb57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561077b57600080fd5b505afa15801561078f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b39190611006565b836001815181106107c057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061085c82826040518060400160405280600781526020017f554c49415b335d000000000000000000000000000000000000000000000000008152508573ffffffffffffffffffffffffffffffffffffffff16610c03909392919063ffffffff16565b6040517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906389afcb44906108ae9030906004016112d5565b6040805180830381600087803b1580156108c757600080fd5b505af1925050508015610915575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261091291810190611192565b60015b610959576109216115aa565b8061056157506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906114da565b5050505092915050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff8416906370a08231906109b89085906004016112d5565b60206040518083038186803b1580156109d057600080fd5b505afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a08919061117a565b90505b92915050565b80516020820151604083015160009291906001816002811115610a3057fe5b1480610a4757506002816002811115610a4557fe5b145b610a7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906113fe565b6001816002811115610a8b57fe5b1415610bf457670de0b6b3a7640000821115610ad3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df90611435565b600073ffffffffffffffffffffffffffffffffffffffff841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610b0e575047610bb3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516906370a0823190610b609030906004016112d5565b60206040518083038186803b158015610b7857600080fd5b505afa158015610b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb0919061117a565b90505b670de0b6b3a7640000831415610bce579350610bfe92505050565b670de0b6b3a7640000610be18285610d8f565b81610be857fe5b04945050505050610bfe565b509150610bfe9050565b919050565b610cbb8463a9059cbb60e01b8585604051602401610c229291906112f6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060400160405280600881526020017f7472616e7366657200000000000000000000000000000000000000000000000081525084610de3565b50505050565b80516020820151604083015160009291906001816002811115610ce057fe5b1480610cf757506002816002811115610cf557fe5b145b610d2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df906113fe565b6001816002811115610d3b57fe5b1415610bf457670de0b6b3a7640000821115610d83576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df90611435565b6000610bb08430610963565b600082610d9e57506000610a0b565b82820282848281610dab57fe5b0414610a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df90611511565b600060608573ffffffffffffffffffffffffffffffffffffffff1685604051610e0c91906111b5565b6000604051808303816000865af19150503d8060008114610e49576040519150601f19603f3d011682016040523d82523d6000602084013e610e4e565b606091505b5091509150818484604051602001610e67929190611253565b60405160208183030381529060405290610eae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9190611376565b50805115610f265780806020019051810190610eca919061112c565b8484604051602001610edd9291906111d1565b60405160208183030381529060405290610f24576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100df9190611376565b505b505050505050565b600082601f830112610f3e578081fd5b813567ffffffffffffffff811115610f54578182fd5b610f8560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611551565b9150808252836020828501011115610f9c57600080fd5b8060208401602084013760009082016020015292915050565b600060608284031215610fc6578081fd5b610fd06060611551565b90508135610fdd8161168f565b815260208281013590820152604082013560038110610ffb57600080fd5b604082015292915050565b600060208284031215611017578081fd5b8151610a088161168f565b60008060408385031215611034578081fd5b823561103f8161168f565b9150602083013561104f8161168f565b809150509250929050565b6000806040838503121561106c578182fd5b823567ffffffffffffffff80821115611083578384fd5b81850186601f820112611094578485fd5b80359250818311156110a4578485fd5b60206110b38182860201611551565b848152818101908383016060808802860185018c10156110d157898afd5b8995505b878610156110fd576110e78c83610fb5565b84526001959095019492840192908101906110d5565b50909750505086013592505080821115611115578283fd5b5061112285828601610f2e565b9150509250929050565b60006020828403121561113d578081fd5b81518015158114610a08578182fd5b6000806040838503121561115e578182fd5b8251611169816116b4565b602084015190925061104f816116b4565b60006020828403121561118b578081fd5b5051919050565b600080604083850312156111a4578182fd5b505080516020909101519092909150565b600082516111c7818460208701611578565b9190910192915050565b60007f5361666545524332303a200000000000000000000000000000000000000000008252835161120981600b850160208801611578565b8083017f2072657475726e65642066616c736520696e2000000000000000000000000000600b8201528451915061124782601e830160208801611578565b01601e01949350505050565b60007f5361666545524332303a200000000000000000000000000000000000000000008252835161128b81600b850160208801611578565b8083017f206661696c656420696e20000000000000000000000000000000000000000000600b820152845191506112c9826016830160208801611578565b01601601949350505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561136a57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611338565b50909695505050505050565b6000602082528251806020840152611395816040850160208701611578565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60208082526012908201527f554c49413a206465706f736974206661696c0000000000000000000000000000604082015260600190565b60208082526013908201527f49413a2062616420616d6f756e74207479706500000000000000000000000000604082015260600190565b6020808252600e908201527f49413a2062616420616d6f756e74000000000000000000000000000000000000604082015260600190565b6020808252601d908201527f554c49413a2073686f756c64206265203120746f6b656e416d6f756e74000000604082015260600190565b6020808252601e908201527f554c49413a2073686f756c64206265203220746f6b656e416d6f756e74730000604082015260600190565b60208082526013908201527f554c49413a207769746864726177206661696c00000000000000000000000000604082015260600190565b60208082526010908201527f49413a206d756c206f766572666c6f7700000000000000000000000000000000604082015260600190565b90815260200190565b60405181810167ffffffffffffffff8111828210171561157057600080fd5b604052919050565b60005b8381101561159357818101518382015260200161157b565b83811115610cbb5750506000910152565b60e01c90565b600060443d10156115ba5761168c565b600481823e6308c379a06115ce82516115a4565b146115d85761168c565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff8160248401118184111715611626575050505061168c565b82840191508151925080831115611640575050505061168c565b503d830160208383010111156116585750505061168c565b601f919091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150505b90565b73ffffffffffffffffffffffffffffffffffffffff811681146116b157600080fd5b50565b6dffffffffffffffffffffffffffff811681146116b157600080fdfea26469706673582212204195445f3da09b7ef54c2556d8b3ee4adfc108a31376eb2a9f10429108b2d41164736f6c634300060b0033
Deployed Bytecode Sourcemap
1902:3585:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2597:1595;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4560:925;;;;;;:::i;:::-;;:::i;1354:204:1:-;;;;;;;;;;-1:-1:-1;1354:204:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2597:1595:3:-;2755:36;2815:12;:19;2838:1;2815:24;2807:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2885:19;2918:4;2907:27;;;;;;;;;;;;:::i;:::-;2966:16;;;2980:1;2966:16;;;;;;;;;2885:49;;-1:-1:-1;2966:16:3;;;;;;;;;;;-1:-1:-1;2966:16:3;2944:38;;3017:11;2992:19;3012:1;2992:22;;;;;;;;;;;;;:36;;;;;;;;;;;3039:15;3057:41;3082:12;3095:1;3082:15;;;;;;;;;;;;;;3057:24;:41::i;:::-;3039:59;;3108:15;3126:41;3151:12;3164:1;3151:15;;;;;;;3126:41;3108:59;;3178:16;3204;3273:11;3259:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3234:60;;:12;3247:1;3234:15;;;;;;;;;;;;;;:21;;;:60;;;3230:248;;;3347:11;3333:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3310:63;;;;;-1:-1:-1;3310:63:3;;-1:-1:-1;3230:248:3;;;3441:11;3427:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3404:63;;;;;-1:-1:-1;3404:63:3;;-1:-1:-1;3230:248:3;3488:22;3534:8;3523;3513:7;:18;:29;;;;;;3488:54;;3573:7;3556:14;:24;3552:179;;;3606:14;3596:24;;3552:179;;;3658:7;3641:14;:24;3637:94;;;3712:8;3701;3691:7;:18;:29;;;;;;3681:39;;3637:94;3741:74;3783:11;3796:7;3741:74;;;;;;;;;;;;;;;;;3747:12;3760:1;3747:15;;;;;;;;;;;;;;:21;;;3741:41;;;;:74;;;;;;:::i;:::-;3825;3867:11;3880:7;3825:74;;;;;;;;;;;;;;;;;3831:12;3844:1;3831:15;;;;;;;3825:74;3914:68;;;;;:31;;;;;;:68;;3967:4;;3914:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3914:68:3;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;3910:276;;;;:::i;:::-;;;;;;;;4108:6;4101:14;;;;;;;;;;;:::i;3910:276::-;4147:28;;;;;;;;;;:::i;3910:276::-;3983:69;2597:1595;;;;;;;;;;:::o;4560:925::-;4714:36;4774:12;:19;4797:1;4774:24;4766:66;;;;;;;;;;;;:::i;:::-;4843:13;4859:12;4872:1;4859:15;;;;;;;;;;;;;;:21;;;4843:37;;4890:14;4907:42;4933:12;4946:1;4933:15;;;;;;;;;;;;;;4907:25;:42::i;:::-;4982:16;;;4996:1;4982:16;;;;;;;;4890:59;;-1:-1:-1;4982:16:3;4996:1;4982:16;;;;;;;;;;-1:-1:-1;4982:16:3;4960:38;;5047:5;5033:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5008:19;5028:1;5008:22;;;;;;;;;;;;;:54;;;;;;;;;;;5111:5;5097:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5072:19;5092:1;5072:22;;;;;;;;;;;;;:54;;;;;;;;;;;5137:51;5163:5;5170:6;5137:51;;;;;;;;;;;;;;;;;5143:5;5137:25;;;;:51;;;;;;:::i;:::-;5203:62;;;;;:25;;;;;;:62;;5250:4;;5203:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5203:62:3;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5199:280;;;;:::i;:::-;;;;;5439:29;;;;;;;;;;:::i;5199:280::-;5266:78;;4560:925;;;;;;:::o;1354:204:1:-;1520:31;;;;;1490:7;;1520:22;;;;;;:31;;1543:7;;1520:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1513:38;;1354:204;;;;;:::o;2088:992:2:-;2270:17;;2314:18;;;;2366:22;;;;2231:7;;2270:17;2314:18;2434:19;2420:10;:33;;;;;;;;;:70;;;-1:-1:-1;2471:19:2;2457:10;:33;;;;;;;;;2420:70;2399:136;;;;;;;;;;;;:::i;:::-;2563:19;2549:10;:33;;;;;;;;;2545:529;;;1333:4;2606:6;:19;;2598:46;;;;;;;;;;;;:::i;:::-;2659:15;2692:12;;;1375:42;2692:12;2688:168;;;-1:-1:-1;2734:21:2;2688:168;;;2804:37;;;;;:22;;;;;;:37;;2835:4;;2804:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2794:47;;2688:168;1333:4;2874:6;:19;2870:150;;;2920:7;-1:-1:-1;2913:14:2;;-1:-1:-1;;;2913:14:2;2870:150;1333:4;2973:20;2977:7;2986:6;2973:3;:20::i;:::-;:32;;;;;;2966:39;;;;;;;;2545:529;-1:-1:-1;3057:6:2;-1:-1:-1;3050:13:2;;-1:-1:-1;3050:13:2;2088:992;;;;:::o;1276:389:5:-;1431:227;1463:5;1522:23;;;1563:2;1583:5;1482:120;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1431:227;;;;;;;;;;;;;;;;;1640:8;1431:18;:227::i;:::-;1276:389;;;;:::o;3086:846:2:-;3269:17;;3313:18;;;;3365:22;;;;3230:7;;3269:17;3313:18;3433:19;3419:10;:33;;;;;;;;;:70;;;-1:-1:-1;3470:19:2;3456:10;:33;;;;;;;;;3419:70;3398:136;;;;;;;;;;;;:::i;:::-;3562:19;3548:10;:33;;;;;;;;;3544:382;;;1333:4;3605:6;:19;;3597:46;;;;;;;;;;;;:::i;:::-;3658:15;3676:32;3687:5;3702:4;3676:10;:32::i;3938:274::-;4042:7;4069:6;4065:45;;-1:-1:-1;4098:1:2;4091:8;;4065:45;4132:5;;;4136:1;4132;:5;:1;4155:5;;;;;:10;4147:39;;;;;;;;;;;;:::i;3111:1415:5:-;3767:12;3781:23;3816:5;3808:19;;3828:4;3808:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3766:67;;;;3864:7;3982:12;4051:8;3909:168;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3843:258;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4116:17:5;;:21;4112:408;;4216:10;4205:30;;;;;;;;;;;;:::i;:::-;4362:12;4447:8;4281:196;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4180:329;;;;;;;;;;;;;;:::i;:::-;;4112:408;3111:1415;;;;;;:::o;1404:440:-1:-;;1505:3;1498:4;1490:6;1486:17;1482:27;1472:2;;-1:-1;;1513:12;1472:2;1560:6;1547:20;19208:18;19200:6;19197:30;19194:2;;;-1:-1;;19230:12;19194:2;1582:64;19371:4;19303:9;1498:4;19288:6;19284:17;19280:33;19361:15;1582:64;:::i;:::-;1573:73;;1666:6;1659:5;1652:21;1770:3;19371:4;1761:6;1694;1752:16;;1749:25;1746:2;;;1787:1;;1777:12;1746:2;21434:6;19371:4;1694:6;1690:17;19371:4;1728:5;1724:16;21411:30;21490:1;21472:16;;;19371:4;21472:16;21465:27;1728:5;1465:379;-1:-1;;1465:379::o;2042:637::-;;2159:4;2147:9;2142:3;2138:19;2134:30;2131:2;;;-1:-1;;2167:12;2131:2;2195:20;2159:4;2195:20;:::i;:::-;2186:29;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;2273:75;;2411:2;2465:22;;;2894:20;2426:16;;;2419:75;2561:2;2629:22;;1933:20;23213:1;23203:12;;23193:2;;23229:1;;23219:12;23193:2;2561;2576:16;;2569:89;2580:5;2125:554;-1:-1;;2125:554::o;3105:263::-;;3220:2;3208:9;3199:7;3195:23;3191:32;3188:2;;;-1:-1;;3226:12;3188:2;226:6;220:13;238:33;265:5;238:33;:::i;3661:366::-;;;3782:2;3770:9;3761:7;3757:23;3753:32;3750:2;;;-1:-1;;3788:12;3750:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3840:63;-1:-1;3940:2;3979:22;;72:20;97:33;72:20;97:33;:::i;:::-;3948:63;;;;3744:283;;;;;:::o;4034:662::-;;;4217:2;4205:9;4196:7;4192:23;4188:32;4185:2;;;-1:-1;;4223:12;4185:2;4281:17;4268:31;4319:18;;4311:6;4308:30;4305:2;;;-1:-1;;4341:12;4305:2;4460:6;4449:9;4445:22;614:3;607:4;599:6;595:17;591:27;581:2;;-1:-1;;622:12;581:2;669:6;656:20;642:34;;4319:18;18905:6;18902:30;18899:2;;;-1:-1;;18935:12;18899:2;18980:4;691:108;18980:4;;18972:6;18968:17;19033:15;691:108;:::i;:::-;827:21;;;884:14;;;;859:17;;;985:4;973:17;;;964:27;;;;961:36;-1:-1;958:2;;;-1:-1;;1000:12;958:2;-1:-1;1026:10;;1020:234;1045:6;1042:1;1039:13;1020:234;;;1125:65;1186:3;1174:10;1125:65;:::i;:::-;1113:78;;1067:1;1060:9;;;;;1205:14;;;;1233;;;;1020:234;;;-1:-1;4361:116;;-1:-1;;;4527:18;;4514:32;;-1:-1;;4555:30;;;4552:2;;;-1:-1;;4588:12;4552:2;;4618:62;4672:7;4663:6;4652:9;4648:22;4618:62;:::i;:::-;4608:72;;;4179:517;;;;;:::o;4703:257::-;;4815:2;4803:9;4794:7;4790:23;4786:32;4783:2;;;-1:-1;;4821:12;4783:2;1349:6;1343:13;23093:5;21003:13;20996:21;23071:5;23068:32;23058:2;;-1:-1;;23104:12;4967:399;;;5099:2;5087:9;5078:7;5074:23;5070:32;5067:2;;;-1:-1;;5105:12;5067:2;2770:6;2764:13;2782:33;2809:5;2782:33;:::i;:::-;5268:2;5318:22;;2764:13;5157:74;;-1:-1;2782:33;2764:13;2782:33;:::i;5373:263::-;;5488:2;5476:9;5467:7;5463:23;5459:32;5456:2;;;-1:-1;;5494:12;5456:2;-1:-1;3042:13;;5450:186;-1:-1;5450:186::o;5643:399::-;;;5775:2;5763:9;5754:7;5750:23;5746:32;5743:2;;;-1:-1;;5781:12;5743:2;-1:-1;;3042:13;;5944:2;5994:22;;;3042:13;;;;;-1:-1;5737:305::o;11778:271::-;;7350:5;19654:12;7461:52;7506:6;7501:3;7494:4;7487:5;7483:16;7461:52;:::i;:::-;7525:16;;;;;11912:137;-1:-1;;11912:137::o;12056:970::-;;11274:13;11261:11;11254:34;7350:5;19654:12;7461:52;7506:6;11238:2;11311:3;11307:12;7494:4;7487:5;7483:16;7461:52;:::i;:::-;7534:6;11311:3;7525:16;9226:21;11238:2;7525:16;;9206:42;7350:5;19654:12;7304:52;;7461;7506:6;9267:12;7525:16;9267:12;7494:4;7487:5;7483:16;7461:52;:::i;:::-;7525:16;9267:12;7525:16;;12442:584;-1:-1;;;;12442:584::o;13033:970::-;;11274:13;11261:11;11254:34;7350:5;19654:12;7461:52;7506:6;11238:2;11311:3;11307:12;7494:4;7487:5;7483:16;7461:52;:::i;:::-;7534:6;11311:3;7525:16;10918:13;11238:2;7525:16;;10898:34;7350:5;19654:12;7304:52;;7461;7506:6;10951:12;7525:16;10951:12;7494:4;7487:5;7483:16;7461:52;:::i;:::-;7525:16;10951:12;7525:16;;13419:584;-1:-1;;;;13419:584::o;14010:222::-;21218:42;21207:54;;;;6292:37;;14137:2;14122:18;;14108:124::o;14239:333::-;21218:42;21207:54;;;;6292:37;;14558:2;14543:18;;11729:37;14394:2;14379:18;;14365:207::o;14579:370::-;14756:2;14770:47;;;19654:12;;14741:18;;;20186:19;;;14579:370;;14756:2;19508:14;;;;20226;;;;14579:370;6900:260;6925:6;6922:1;6919:13;6900:260;;;6986:13;;21218:42;21207:54;6292:37;;20041:14;;;;6203;;;;6947:1;6940:9;6900:260;;;-1:-1;14823:116;;14727:222;-1:-1;;;;;;14727:222::o;14956:310::-;;15103:2;15124:17;15117:47;7698:5;19654:12;20198:6;15103:2;15092:9;15088:18;20186:19;7792:52;7837:6;20226:14;15092:9;20226:14;15103:2;7818:5;7814:16;7792:52;:::i;:::-;21871:2;21851:14;21867:7;21847:28;7856:39;;;;20226:14;7856:39;;15074:192;-1:-1;;15074:192::o;15273:416::-;15473:2;15487:47;;;8499:2;15458:18;;;20186:19;8535:20;20226:14;;;8515:41;8575:12;;;15444:245::o;15696:416::-;15896:2;15910:47;;;8826:2;15881:18;;;20186:19;8862:21;20226:14;;;8842:42;8903:12;;;15867:245::o;16119:416::-;16319:2;16333:47;;;9518:2;16304:18;;;20186:19;9554:16;20226:14;;;9534:37;9590:12;;;16290:245::o;16542:416::-;16742:2;16756:47;;;9841:2;16727:18;;;20186:19;9877:31;20226:14;;;9857:52;9928:12;;;16713:245::o;16965:416::-;17165:2;17179:47;;;10179:2;17150:18;;;20186:19;10215:32;20226:14;;;10195:53;10267:12;;;17136:245::o;17388:416::-;17588:2;17602:47;;;10518:2;17573:18;;;20186:19;10554:21;20226:14;;;10534:42;10595:12;;;17559:245::o;17811:416::-;18011:2;18025:47;;;11558:2;17996:18;;;20186:19;11594:18;20226:14;;;11574:39;11632:12;;;17982:245::o;18234:222::-;11729:37;;;18361:2;18346:18;;18332:124::o;18463:256::-;18525:2;18519:9;18551:17;;;18626:18;18611:34;;18647:22;;;18608:62;18605:2;;;18683:1;;18673:12;18605:2;18525;18692:22;18503:216;;-1:-1;18503:216::o;21507:268::-;21572:1;21579:101;21593:6;21590:1;21587:13;21579:101;;;21660:11;;;21654:18;21641:11;;;21634:39;21615:2;21608:10;21579:101;;;21695:6;21692:1;21689:13;21686:2;;;-1:-1;;21572:1;21742:16;;21735:27;21556:219::o;21888:106::-;21973:3;21969:15;;21941:53::o;22002:739::-;;22075:4;22057:16;22054:26;22051:2;;;22083:5;;22051:2;22117:1;-1:-1;;22096:23;22192:10;22135:34;-1:-1;22160:8;22135:34;:::i;:::-;22184:19;22174:2;;22207:5;;22174:2;22238;22232:9;22270:24;22274:16;22270:24;22117:1;22261:4;22246:49;22321:4;22315:11;22402:16;22354:18;22402:16;22395:4;22387:6;22383:17;22380:39;22354:18;22346:6;22343:30;22334:91;22331:2;;;22433:5;;;;;;22331:2;22471:6;22465:4;22461:17;22450:28;;22503:3;22497:10;22483:24;;22354:18;22518:6;22515:30;22512:2;;;22548:5;;;;;;22512:2;;22625:16;22619:4;22615:27;22585:4;22592:6;22580:3;22572:27;;22607:36;22604:2;;;22646:5;;;;;22604:2;21871;21851:14;;;;21867:7;21847:28;22670:50;;22585:4;22670:50;22238:2;22659:62;22678:3;-1:-1;;22045:696;;:::o;22748:117::-;21218:42;22835:5;21207:54;22810:5;22807:35;22797:2;;22856:1;;22846:12;22797:2;22791:74;:::o;23245:117::-;21102:30;23332:5;21091:42;23307:5;23304:35;23294:2;;23353:1;;23343:12
Swarm Source
ipfs://4195445f3da09b7ef54c2556d8b3ee4adfc108a31376eb2a9f10429108b2d411
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.