Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 45 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Swap Tokens | 16532943 | 806 days ago | IN | 0.002 ETH | 0.00229336 | ||||
Swap Tokens | 16519897 | 808 days ago | IN | 0 ETH | 0.00238733 | ||||
Swap Tokens | 16463517 | 816 days ago | IN | 0.026 ETH | 0.00233272 | ||||
Swap Tokens | 16416820 | 822 days ago | IN | 0 ETH | 0.00307867 | ||||
Swap Tokens | 16394289 | 825 days ago | IN | 0.00660921 ETH | 0.00263603 | ||||
Swap Tokens | 16345846 | 832 days ago | IN | 0.034 ETH | 0.00249676 | ||||
Swap Tokens | 16336948 | 833 days ago | IN | 0.04 ETH | 0.00264893 | ||||
Swap Tokens | 16255914 | 845 days ago | IN | 0.013 ETH | 0.00223122 | ||||
Swap Tokens | 16244358 | 846 days ago | IN | 0.021 ETH | 0.00179011 | ||||
Swap Tokens | 16230439 | 848 days ago | IN | 0.01379767 ETH | 0.00214198 | ||||
Swap Tokens | 16222663 | 849 days ago | IN | 0.024 ETH | 0.00232533 | ||||
Swap Tokens | 16215518 | 850 days ago | IN | 0.021 ETH | 0.00173314 | ||||
Swap Tokens | 16212839 | 851 days ago | IN | 0.0216573 ETH | 0.00204984 | ||||
Swap Tokens | 16207176 | 851 days ago | IN | 0.005 ETH | 0.00187595 | ||||
Swap Tokens | 16200992 | 852 days ago | IN | 0.021 ETH | 0.00305 | ||||
Swap Tokens | 16181948 | 855 days ago | IN | 0.1 ETH | 0.00293628 | ||||
Swap Tokens | 16168895 | 857 days ago | IN | 0.001 ETH | 0.00424829 | ||||
Swap Tokens | 16166265 | 857 days ago | IN | 0.015 ETH | 0.00165171 | ||||
Swap Tokens | 16151780 | 859 days ago | IN | 0.07 ETH | 0.00200044 | ||||
Swap Tokens | 16151158 | 859 days ago | IN | 0.008 ETH | 0.0019699 | ||||
Swap Tokens | 16151054 | 859 days ago | IN | 0.011 ETH | 0.00234083 | ||||
Swap Tokens | 16135143 | 861 days ago | IN | 0.01 ETH | 0.00232592 | ||||
Swap Tokens | 16135079 | 861 days ago | IN | 0.0001 ETH | 0.00276552 | ||||
Swap Tokens | 16130049 | 862 days ago | IN | 0.0001 ETH | 0.00228364 | ||||
Swap Tokens | 16128049 | 862 days ago | IN | 0 ETH | 0.00277724 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Swap Exact ETH F... | 16532943 | 806 days ago | 0.001995 ETH | ||||
Transfer | 16532943 | 806 days ago | 0.000005 ETH | ||||
Swap Exact ETH F... | 16463517 | 816 days ago | 0.025935 ETH | ||||
Transfer | 16463517 | 816 days ago | 0.000065 ETH | ||||
Swap Exact ETH F... | 16394289 | 825 days ago | 0.00659268 ETH | ||||
Transfer | 16394289 | 825 days ago | 0.00001652 ETH | ||||
Swap Exact ETH F... | 16345846 | 832 days ago | 0.033915 ETH | ||||
Transfer | 16345846 | 832 days ago | 0.000085 ETH | ||||
Swap Exact ETH F... | 16336948 | 833 days ago | 0.0399 ETH | ||||
Transfer | 16336948 | 833 days ago | 0.0001 ETH | ||||
Swap Exact ETH F... | 16255914 | 845 days ago | 0.0129675 ETH | ||||
Transfer | 16255914 | 845 days ago | 0.0000325 ETH | ||||
Swap Exact ETH F... | 16244358 | 846 days ago | 0.0209475 ETH | ||||
Transfer | 16244358 | 846 days ago | 0.0000525 ETH | ||||
Swap Exact ETH F... | 16230439 | 848 days ago | 0.01376317 ETH | ||||
Transfer | 16230439 | 848 days ago | 0.00003449 ETH | ||||
Swap Exact ETH F... | 16222663 | 849 days ago | 0.02394 ETH | ||||
Transfer | 16222663 | 849 days ago | 0.00006 ETH | ||||
Swap Exact ETH F... | 16215518 | 850 days ago | 0.0209475 ETH | ||||
Transfer | 16215518 | 850 days ago | 0.0000525 ETH | ||||
Swap Exact ETH F... | 16212839 | 851 days ago | 0.02160316 ETH | ||||
Transfer | 16212839 | 851 days ago | 0.00005414 ETH | ||||
Swap Exact ETH F... | 16207176 | 851 days ago | 0.0049875 ETH | ||||
Transfer | 16207176 | 851 days ago | 0.0000125 ETH | ||||
Swap Exact ETH F... | 16200992 | 852 days ago | 0.0209475 ETH |
Loading...
Loading
Contract Name:
ToonFinanceSwap
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-05 */ /*################## ############# ############# ### #### ################## ## ## ## ## ## ## ## ### ## ## ## ## ## ## ## ### ## ##### ## ## ##### ## ## ## ## ### ## # # ## ## # # ## ## ## ## ### ## ##### ## ## ##### ## ## ## ## ### ## ## ## ## ## ## ## ### ## ## ## ## ## # ## ### ############# ############# #### ### ########## #### ### ## ## ### ## ####### ####### ## ## ## # ## ## # ## # ## ## ## ###### ## ## # ## ## # ## # ## ## ##### ## ## ## # ## ## # # # ## # ## ## ## ## ## ## ### ## # ## ### ## ## ## #### ## ## ## # ## ## ####### ####### */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev 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. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev 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. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` 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. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev 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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev 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. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/utils/math/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @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 IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @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). */ function _callOptionalReturn(IERC20 token, bytes memory data) 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 use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } pragma solidity ^0.8.0; interface IRouter { function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); } contract ToonFinanceSwap is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; uint public feePercent = 25; // 0.25% address public feeAccount; address public router; address public weth; mapping(address => bool) public whitelistedTokens; constructor(address _feeAccount, address _router, address _weth) { feeAccount = _feeAccount; router = _router; weth = _weth; } function swapTokens(address _tokenA, address _tokenB, uint256 _amountIn) external payable { address[] memory path = new address[](2); if (_tokenA == address(0)) { path[0] = weth; path[1] = _tokenB; } else if (_tokenB == address(0)) { path[0] = _tokenA; path[1] = weth; } else { path[0] = _tokenA; path[1] = _tokenB; } _swap(_tokenA, _tokenB, _amountIn, path); } function customSwapTokens(address _tokenA, address _tokenB, uint256 _amountIn, address[]memory path) external payable{ if (_tokenA == address(0)) { require(weth == path[0] && _tokenB == path[path.length - 1], "ToonSwap: Path must be specified"); } else if (_tokenB == address(0)) { require(_tokenA == path[0] && weth == path[path.length - 1], "ToonSwap: Path must be specified"); } else { require(_tokenA == path[0] && _tokenB == path[path.length - 1], "ToonSwap: Path must be specified"); } _swap(_tokenA, _tokenB, _amountIn, path); } function _swap(address _tokenA, address _tokenB, uint256 _amountIn, address[]memory path) internal { require(_amountIn > 0, "ToonSwap: amountIn must be greater than 0"); require(whitelistedTokens[_tokenA], "ToonSwap: TokenA is not whitelisted"); if (_tokenA == address(0)) { require (_amountIn >= msg.value, "ToonSwap: Insufficient ETH"); uint fee = _amountIn * feePercent / 10000; payable(feeAccount).transfer(fee); uint amountToSwap = _amountIn - fee; _swapETHForTokens(amountToSwap, path); } else{ IERC20(_tokenA).safeTransferFrom(msg.sender, address(this), _amountIn); uint fee = _amountIn * feePercent / 10000; IERC20(_tokenA).safeTransfer(feeAccount, fee); uint amountToSwap = _amountIn - fee; if (_tokenB == address(0)) { _swapTokensForETH(amountToSwap, path); } else { _swapTokensForTokens(amountToSwap, path); } } } function _swapTokensForTokens(uint _amount, address[]memory path) internal { IRouter(router).swapExactTokensForTokens( _amount, 0, path, msg.sender, block.timestamp ); } function _swapETHForTokens(uint _amount, address[]memory path) internal { IRouter(router).swapExactETHForTokens{ value: _amount }( 0, path, msg.sender, block.timestamp ); } function _swapTokensForETH(uint _amount, address[]memory path) internal { IRouter(router).swapExactTokensForETH( _amount, 0, path, msg.sender, block.timestamp ); } function _approve(address _token, uint _amount) internal { IERC20(_token).approve(address(router), _amount); } function getOutputTokenAmount(uint inputAmount, address[]memory path) external view returns (uint outputAmount) { uint[]memory outputs = IRouter(router).getAmountsOut(inputAmount, path); return outputs[outputs.length - 1]; } function setFeePercent(uint _feePercent) external onlyOwner { feePercent = _feePercent; } function setFeeAccount(address _feeAccount) external onlyOwner { feeAccount = _feeAccount; } function setRouterWETH(address _router, address _weth) external onlyOwner { router = _router; weth = _weth; } function addWhitelistedTokens(address[]memory _tokens) external onlyOwner { for (uint i = 0; i < _tokens.length; i++) { whitelistedTokens[_tokens[i]] = true; if (_tokens[i] != address(0)) { _approve(_tokens[i], type(uint256).max); } } } function removeWhitelistedTokens(address[]memory _tokens) external onlyOwner { for (uint i = 0; i < _tokens.length; i++) { whitelistedTokens[_tokens[i]] = false; } } function approveTokens(address[]memory _tokens, uint[] memory _amounts) external onlyOwner { for (uint i = 0; i < _tokens.length; i++) { _approve(_tokens[i], _amounts[i]); } } function emergencyWithdraw(address _token, uint _amount) external onlyOwner { IERC20(_token).safeTransfer(msg.sender, _amount); } function emergencyWithdrawETH(uint _amount) external onlyOwner { payable(owner()).transfer(_amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_feeAccount","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_weth","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":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"addWhitelistedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"approveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"customSwapTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getOutputTokenAmount","outputs":[{"internalType":"uint256","name":"outputAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"removeWhitelistedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAccount","type":"address"}],"name":"setFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feePercent","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_weth","type":"address"}],"name":"setRouterWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenA","type":"address"},{"internalType":"address","name":"_tokenB","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260196001553480156200001657600080fd5b506040516200355f3803806200355f83398181016040528101906200003c91906200020b565b6200005c620000506200012860201b60201c565b6200013060201b60201c565b82600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002af565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620002058162000295565b92915050565b6000806000606084860312156200022157600080fd5b60006200023186828701620001f4565b93505060206200024486828701620001f4565b92505060406200025786828701620001f4565b9150509250925092565b60006200026e8262000275565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620002a08162000261565b8114620002ac57600080fd5b50565b6132a080620002bf6000396000f3fe6080604052600436106101145760003560e01c80639c833fa7116100a0578063d654e9a411610064578063d654e9a414610340578063daf9c2101461037d578063ec6cc0cc146103ba578063f2fde38b146103d6578063f887ea40146103ff57610114565b80639c833fa7146102805780639d841628146102a95780639de2827b146102d2578063bcec454f146102ee578063cd698e691461031757610114565b8063715018a6116100e7578063715018a6146101c15780637ce3489b146101d85780637fd6f15c146102015780638da5cb5b1461022c57806395ccea671461025757610114565b80633fc8cef3146101195780634b023cf81461014457806365e17c9d1461016d5780636b792c4b14610198575b600080fd5b34801561012557600080fd5b5061012e61042a565b60405161013b91906129e1565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190612465565b610450565b005b34801561017957600080fd5b50610182610510565b60405161018f91906129e1565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba91906126e7565b610536565b005b3480156101cd57600080fd5b506101d6610603565b005b3480156101e457600080fd5b506101ff60048036038101906101fa91906126e7565b61068b565b005b34801561020d57600080fd5b50610216610711565b6040516102239190612c05565b60405180910390f35b34801561023857600080fd5b50610241610717565b60405161024e91906129e1565b60405180910390f35b34801561026357600080fd5b5061027e60048036038101906102799190612594565b610740565b005b34801561028c57600080fd5b506102a760048036038101906102a29190612611565b6107eb565b005b3480156102b557600080fd5b506102d060048036038101906102cb919061248e565b610915565b005b6102ec60048036038101906102e79190612519565b610a17565b005b3480156102fa57600080fd5b50610315600480360381019061031091906125d0565b610e7c565b005b34801561032357600080fd5b5061033e600480360381019061033991906125d0565b610fb3565b005b34801561034c57600080fd5b5061036760048036038101906103629190612710565b6111c9565b6040516103749190612c05565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190612465565b6112d7565b6040516103b19190612a5c565b60405180910390f35b6103d460048036038101906103cf91906124ca565b6112f7565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190612465565b6116f5565b005b34801561040b57600080fd5b506104146117ed565b60405161042191906129e1565b60405180910390f35b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610458611813565b73ffffffffffffffffffffffffffffffffffffffff16610476610717565b73ffffffffffffffffffffffffffffffffffffffff16146104cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c390612b65565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61053e611813565b73ffffffffffffffffffffffffffffffffffffffff1661055c610717565b73ffffffffffffffffffffffffffffffffffffffff16146105b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a990612b65565b60405180910390fd5b6105ba610717565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105ff573d6000803e3d6000fd5b5050565b61060b611813565b73ffffffffffffffffffffffffffffffffffffffff16610629610717565b73ffffffffffffffffffffffffffffffffffffffff161461067f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067690612b65565b60405180910390fd5b610689600061181b565b565b610693611813565b73ffffffffffffffffffffffffffffffffffffffff166106b1610717565b73ffffffffffffffffffffffffffffffffffffffff1614610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe90612b65565b60405180910390fd5b8060018190555050565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610748611813565b73ffffffffffffffffffffffffffffffffffffffff16610766610717565b73ffffffffffffffffffffffffffffffffffffffff16146107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390612b65565b60405180910390fd5b6107e733828473ffffffffffffffffffffffffffffffffffffffff166118df9092919063ffffffff16565b5050565b6107f3611813565b73ffffffffffffffffffffffffffffffffffffffff16610811610717565b73ffffffffffffffffffffffffffffffffffffffff1614610867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085e90612b65565b60405180910390fd5b60005b8251811015610910576108fd8382815181106108af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106108f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611965565b808061090890612f0f565b91505061086a565b505050565b61091d611813565b73ffffffffffffffffffffffffffffffffffffffff1661093b610717565b73ffffffffffffffffffffffffffffffffffffffff1614610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612b65565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ba65780600081518110610a86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610b6257508060018251610af49190612e1d565b81518110610b2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9890612b45565b60405180910390fd5b610e6a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d355780600081518110610c15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610cf157508060018251610c619190612e1d565b81518110610c98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612b45565b60405180910390fd5b610e69565b80600081518110610d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610e2957508060018251610dbb9190612e1d565b81518110610df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90612b45565b60405180910390fd5b5b5b610e7684848484611a19565b50505050565b610e84611813565b73ffffffffffffffffffffffffffffffffffffffff16610ea2610717565b73ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90612b65565b60405180910390fd5b60005b8151811015610faf57600060056000848481518110610f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fa790612f0f565b915050610efb565b5050565b610fbb611813565b73ffffffffffffffffffffffffffffffffffffffff16610fd9610717565b73ffffffffffffffffffffffffffffffffffffffff161461102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690612b65565b60405180910390fd5b60005b81518110156111c55760016005600084848151811061107a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16828281518110611124577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16146111b2576111b1828281518110611183577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611965565b5b80806111bd90612f0f565b915050611032565b5050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85856040518363ffffffff1660e01b8152600401611229929190612c20565b60006040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061127e919061267d565b9050806001825161128f9190612e1d565b815181106112c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015191505092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b6000600267ffffffffffffffff81111561133a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113685781602001602082028036833780820191505090505b509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114b157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110611472577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506116e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115f7578381600081518110611521577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106115b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506116e2565b8381600081518110611632577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816001815181106116a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5b6116ef84848484611a19565b50505050565b6116fd611813565b73ffffffffffffffffffffffffffffffffffffffff1661171b610717565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890612b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612b05565b60405180910390fd5b6117ea8161181b565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119608363a9059cbb60e01b84846040516024016118fe929190612a33565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d0a565b505050565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016119c2929190612a33565b602060405180830381600087803b1580156119dc57600080fd5b505af11580156119f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1491906126be565b505050565b60008211611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390612ba5565b60405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90612b85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c095734821015611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790612ae5565b60405180910390fd5b600061271060015484611b739190612dc3565b611b7d9190612d92565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611be7573d6000803e3d6000fd5b5060008184611bf69190612e1d565b9050611c028184611dd1565b5050611d04565b611c363330848773ffffffffffffffffffffffffffffffffffffffff16611e90909392919063ffffffff16565b600061271060015484611c499190612dc3565b611c539190612d92565b9050611ca2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828773ffffffffffffffffffffffffffffffffffffffff166118df9092919063ffffffff16565b60008184611cb09190612e1d565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611cf657611cf18184611f19565b611d01565b611d008184611fd9565b5b50505b50505050565b6000611d6c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120999092919063ffffffff16565b9050600081511115611dcc5780806020019051810190611d8c91906126be565b611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290612be5565b60405180910390fd5b5b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58360008433426040518663ffffffff1660e01b8152600401611e349493929190612a77565b6000604051808303818588803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190611e8b919061267d565b505050565b611f13846323b872dd60e01b858585604051602401611eb1939291906129fc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d0a565b50505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008433426040518663ffffffff1660e01b8152600401611f7d959493929190612c50565b600060405180830381600087803b158015611f9757600080fd5b505af1158015611fab573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611fd4919061267d565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398360008433426040518663ffffffff1660e01b815260040161203d959493929190612c50565b600060405180830381600087803b15801561205757600080fd5b505af115801561206b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612094919061267d565b505050565b60606120a884846000856120b1565b90509392505050565b6060824710156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90612b25565b60405180910390fd5b6120ff856121c5565b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590612bc5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161216791906129ca565b60006040518083038185875af1925050503d80600081146121a4576040519150601f19603f3d011682016040523d82523d6000602084013e6121a9565b606091505b50915091506121b98282866121e8565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156121f857829050612248565b60008351111561220b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223f9190612ac3565b60405180910390fd5b9392505050565b600061226261225d84612ccf565b612caa565b9050808382526020820190508285602086028201111561228157600080fd5b60005b858110156122b157816122978882612393565b845260208401935060208301925050600181019050612284565b5050509392505050565b60006122ce6122c984612cfb565b612caa565b905080838252602082019050828560208602820111156122ed57600080fd5b60005b8581101561231d5781612303888261243b565b8452602084019350602083019250506001810190506122f0565b5050509392505050565b600061233a61233584612cfb565b612caa565b9050808382526020820190508285602086028201111561235957600080fd5b60005b85811015612389578161236f8882612450565b84526020840193506020830192505060018101905061235c565b5050509392505050565b6000813590506123a281613225565b92915050565b600082601f8301126123b957600080fd5b81356123c984826020860161224f565b91505092915050565b600082601f8301126123e357600080fd5b81356123f38482602086016122bb565b91505092915050565b600082601f83011261240d57600080fd5b815161241d848260208601612327565b91505092915050565b6000815190506124358161323c565b92915050565b60008135905061244a81613253565b92915050565b60008151905061245f81613253565b92915050565b60006020828403121561247757600080fd5b600061248584828501612393565b91505092915050565b600080604083850312156124a157600080fd5b60006124af85828601612393565b92505060206124c085828601612393565b9150509250929050565b6000806000606084860312156124df57600080fd5b60006124ed86828701612393565b93505060206124fe86828701612393565b925050604061250f8682870161243b565b9150509250925092565b6000806000806080858703121561252f57600080fd5b600061253d87828801612393565b945050602061254e87828801612393565b935050604061255f8782880161243b565b925050606085013567ffffffffffffffff81111561257c57600080fd5b612588878288016123a8565b91505092959194509250565b600080604083850312156125a757600080fd5b60006125b585828601612393565b92505060206125c68582860161243b565b9150509250929050565b6000602082840312156125e257600080fd5b600082013567ffffffffffffffff8111156125fc57600080fd5b612608848285016123a8565b91505092915050565b6000806040838503121561262457600080fd5b600083013567ffffffffffffffff81111561263e57600080fd5b61264a858286016123a8565b925050602083013567ffffffffffffffff81111561266757600080fd5b612673858286016123d2565b9150509250929050565b60006020828403121561268f57600080fd5b600082015167ffffffffffffffff8111156126a957600080fd5b6126b5848285016123fc565b91505092915050565b6000602082840312156126d057600080fd5b60006126de84828501612426565b91505092915050565b6000602082840312156126f957600080fd5b60006127078482850161243b565b91505092915050565b6000806040838503121561272357600080fd5b60006127318582860161243b565b925050602083013567ffffffffffffffff81111561274e57600080fd5b61275a858286016123a8565b9150509250929050565b6000612770838361277c565b60208301905092915050565b61278581612e51565b82525050565b61279481612e51565b82525050565b60006127a582612d37565b6127af8185612d65565b93506127ba83612d27565b8060005b838110156127eb5781516127d28882612764565b97506127dd83612d58565b9250506001810190506127be565b5085935050505092915050565b61280181612e63565b82525050565b600061281282612d42565b61281c8185612d76565b935061282c818560208601612eab565b80840191505092915050565b61284181612e99565b82525050565b600061285282612d4d565b61285c8185612d81565b935061286c818560208601612eab565b61287581612fe5565b840191505092915050565b600061288d601a83612d81565b915061289882612ff6565b602082019050919050565b60006128b0602683612d81565b91506128bb8261301f565b604082019050919050565b60006128d3602683612d81565b91506128de8261306e565b604082019050919050565b60006128f6602083612d81565b9150612901826130bd565b602082019050919050565b6000612919602083612d81565b9150612924826130e6565b602082019050919050565b600061293c602383612d81565b91506129478261310f565b604082019050919050565b600061295f602983612d81565b915061296a8261315e565b604082019050919050565b6000612982601d83612d81565b915061298d826131ad565b602082019050919050565b60006129a5602a83612d81565b91506129b0826131d6565b604082019050919050565b6129c481612e8f565b82525050565b60006129d68284612807565b915081905092915050565b60006020820190506129f6600083018461278b565b92915050565b6000606082019050612a11600083018661278b565b612a1e602083018561278b565b612a2b60408301846129bb565b949350505050565b6000604082019050612a48600083018561278b565b612a5560208301846129bb565b9392505050565b6000602082019050612a7160008301846127f8565b92915050565b6000608082019050612a8c6000830187612838565b8181036020830152612a9e818661279a565b9050612aad604083018561278b565b612aba60608301846129bb565b95945050505050565b60006020820190508181036000830152612add8184612847565b905092915050565b60006020820190508181036000830152612afe81612880565b9050919050565b60006020820190508181036000830152612b1e816128a3565b9050919050565b60006020820190508181036000830152612b3e816128c6565b9050919050565b60006020820190508181036000830152612b5e816128e9565b9050919050565b60006020820190508181036000830152612b7e8161290c565b9050919050565b60006020820190508181036000830152612b9e8161292f565b9050919050565b60006020820190508181036000830152612bbe81612952565b9050919050565b60006020820190508181036000830152612bde81612975565b9050919050565b60006020820190508181036000830152612bfe81612998565b9050919050565b6000602082019050612c1a60008301846129bb565b92915050565b6000604082019050612c3560008301856129bb565b8181036020830152612c47818461279a565b90509392505050565b600060a082019050612c6560008301886129bb565b612c726020830187612838565b8181036040830152612c84818661279a565b9050612c93606083018561278b565b612ca060808301846129bb565b9695505050505050565b6000612cb4612cc5565b9050612cc08282612ede565b919050565b6000604051905090565b600067ffffffffffffffff821115612cea57612ce9612fb6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1657612d15612fb6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612d9d82612e8f565b9150612da883612e8f565b925082612db857612db7612f87565b5b828204905092915050565b6000612dce82612e8f565b9150612dd983612e8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e1257612e11612f58565b5b828202905092915050565b6000612e2882612e8f565b9150612e3383612e8f565b925082821015612e4657612e45612f58565b5b828203905092915050565b6000612e5c82612e6f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612ea482612e8f565b9050919050565b60005b83811015612ec9578082015181840152602081019050612eae565b83811115612ed8576000848401525b50505050565b612ee782612fe5565b810181811067ffffffffffffffff82111715612f0657612f05612fb6565b5b80604052505050565b6000612f1a82612e8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f4d57612f4c612f58565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f546f6f6e537761703a20496e73756666696369656e7420455448000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f546f6f6e537761703a2050617468206d75737420626520737065636966696564600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f6e537761703a20546f6b656e41206973206e6f742077686974656c697360008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6f6e537761703a20616d6f756e74496e206d75737420626520677265617460008201527f6572207468616e20300000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61322e81612e51565b811461323957600080fd5b50565b61324581612e63565b811461325057600080fd5b50565b61325c81612e8f565b811461326757600080fd5b5056fea26469706673582212206b74a3b5e4102972c966738588a9aca33624d0fa7bbd202508316fd7289d464d64736f6c6343000801003300000000000000000000000042148775d4635e87966aa42233747f4a87048bad0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode
0x6080604052600436106101145760003560e01c80639c833fa7116100a0578063d654e9a411610064578063d654e9a414610340578063daf9c2101461037d578063ec6cc0cc146103ba578063f2fde38b146103d6578063f887ea40146103ff57610114565b80639c833fa7146102805780639d841628146102a95780639de2827b146102d2578063bcec454f146102ee578063cd698e691461031757610114565b8063715018a6116100e7578063715018a6146101c15780637ce3489b146101d85780637fd6f15c146102015780638da5cb5b1461022c57806395ccea671461025757610114565b80633fc8cef3146101195780634b023cf81461014457806365e17c9d1461016d5780636b792c4b14610198575b600080fd5b34801561012557600080fd5b5061012e61042a565b60405161013b91906129e1565b60405180910390f35b34801561015057600080fd5b5061016b60048036038101906101669190612465565b610450565b005b34801561017957600080fd5b50610182610510565b60405161018f91906129e1565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba91906126e7565b610536565b005b3480156101cd57600080fd5b506101d6610603565b005b3480156101e457600080fd5b506101ff60048036038101906101fa91906126e7565b61068b565b005b34801561020d57600080fd5b50610216610711565b6040516102239190612c05565b60405180910390f35b34801561023857600080fd5b50610241610717565b60405161024e91906129e1565b60405180910390f35b34801561026357600080fd5b5061027e60048036038101906102799190612594565b610740565b005b34801561028c57600080fd5b506102a760048036038101906102a29190612611565b6107eb565b005b3480156102b557600080fd5b506102d060048036038101906102cb919061248e565b610915565b005b6102ec60048036038101906102e79190612519565b610a17565b005b3480156102fa57600080fd5b50610315600480360381019061031091906125d0565b610e7c565b005b34801561032357600080fd5b5061033e600480360381019061033991906125d0565b610fb3565b005b34801561034c57600080fd5b5061036760048036038101906103629190612710565b6111c9565b6040516103749190612c05565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190612465565b6112d7565b6040516103b19190612a5c565b60405180910390f35b6103d460048036038101906103cf91906124ca565b6112f7565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190612465565b6116f5565b005b34801561040b57600080fd5b506104146117ed565b60405161042191906129e1565b60405180910390f35b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610458611813565b73ffffffffffffffffffffffffffffffffffffffff16610476610717565b73ffffffffffffffffffffffffffffffffffffffff16146104cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104c390612b65565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61053e611813565b73ffffffffffffffffffffffffffffffffffffffff1661055c610717565b73ffffffffffffffffffffffffffffffffffffffff16146105b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a990612b65565b60405180910390fd5b6105ba610717565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105ff573d6000803e3d6000fd5b5050565b61060b611813565b73ffffffffffffffffffffffffffffffffffffffff16610629610717565b73ffffffffffffffffffffffffffffffffffffffff161461067f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067690612b65565b60405180910390fd5b610689600061181b565b565b610693611813565b73ffffffffffffffffffffffffffffffffffffffff166106b1610717565b73ffffffffffffffffffffffffffffffffffffffff1614610707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fe90612b65565b60405180910390fd5b8060018190555050565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610748611813565b73ffffffffffffffffffffffffffffffffffffffff16610766610717565b73ffffffffffffffffffffffffffffffffffffffff16146107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390612b65565b60405180910390fd5b6107e733828473ffffffffffffffffffffffffffffffffffffffff166118df9092919063ffffffff16565b5050565b6107f3611813565b73ffffffffffffffffffffffffffffffffffffffff16610811610717565b73ffffffffffffffffffffffffffffffffffffffff1614610867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085e90612b65565b60405180910390fd5b60005b8251811015610910576108fd8382815181106108af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106108f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611965565b808061090890612f0f565b91505061086a565b505050565b61091d611813565b73ffffffffffffffffffffffffffffffffffffffff1661093b610717565b73ffffffffffffffffffffffffffffffffffffffff1614610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612b65565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610ba65780600081518110610a86577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015610b6257508060018251610af49190612e1d565b81518110610b2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9890612b45565b60405180910390fd5b610e6a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d355780600081518110610c15577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610cf157508060018251610c619190612e1d565b81518110610c98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2790612b45565b60405180910390fd5b610e69565b80600081518110610d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610e2957508060018251610dbb9190612e1d565b81518110610df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90612b45565b60405180910390fd5b5b5b610e7684848484611a19565b50505050565b610e84611813565b73ffffffffffffffffffffffffffffffffffffffff16610ea2610717565b73ffffffffffffffffffffffffffffffffffffffff1614610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef90612b65565b60405180910390fd5b60005b8151811015610faf57600060056000848481518110610f43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fa790612f0f565b915050610efb565b5050565b610fbb611813565b73ffffffffffffffffffffffffffffffffffffffff16610fd9610717565b73ffffffffffffffffffffffffffffffffffffffff161461102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102690612b65565b60405180910390fd5b60005b81518110156111c55760016005600084848151811061107a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16828281518110611124577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16146111b2576111b1828281518110611183577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611965565b5b80806111bd90612f0f565b915050611032565b5050565b600080600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f85856040518363ffffffff1660e01b8152600401611229929190612c20565b60006040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061127e919061267d565b9050806001825161128f9190612e1d565b815181106112c6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015191505092915050565b60056020528060005260406000206000915054906101000a900460ff1681565b6000600267ffffffffffffffff81111561133a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113685781602001602082028036833780820191505090505b509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156114b157600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508281600181518110611472577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506116e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115f7578381600081518110611521577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106115b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506116e2565b8381600081518110611632577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816001815181106116a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5b6116ef84848484611a19565b50505050565b6116fd611813565b73ffffffffffffffffffffffffffffffffffffffff1661171b610717565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890612b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890612b05565b60405180910390fd5b6117ea8161181b565b50565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119608363a9059cbb60e01b84846040516024016118fe929190612a33565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d0a565b505050565b8173ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016119c2929190612a33565b602060405180830381600087803b1580156119dc57600080fd5b505af11580156119f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1491906126be565b505050565b60008211611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390612ba5565b60405180910390fd5b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ae8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adf90612b85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c095734821015611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790612ae5565b60405180910390fd5b600061271060015484611b739190612dc3565b611b7d9190612d92565b9050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611be7573d6000803e3d6000fd5b5060008184611bf69190612e1d565b9050611c028184611dd1565b5050611d04565b611c363330848773ffffffffffffffffffffffffffffffffffffffff16611e90909392919063ffffffff16565b600061271060015484611c499190612dc3565b611c539190612d92565b9050611ca2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828773ffffffffffffffffffffffffffffffffffffffff166118df9092919063ffffffff16565b60008184611cb09190612e1d565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611cf657611cf18184611f19565b611d01565b611d008184611fd9565b5b50505b50505050565b6000611d6c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120999092919063ffffffff16565b9050600081511115611dcc5780806020019051810190611d8c91906126be565b611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290612be5565b60405180910390fd5b5b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58360008433426040518663ffffffff1660e01b8152600401611e349493929190612a77565b6000604051808303818588803b158015611e4d57600080fd5b505af1158015611e61573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190611e8b919061267d565b505050565b611f13846323b872dd60e01b858585604051602401611eb1939291906129fc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d0a565b50505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008433426040518663ffffffff1660e01b8152600401611f7d959493929190612c50565b600060405180830381600087803b158015611f9757600080fd5b505af1158015611fab573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611fd4919061267d565b505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398360008433426040518663ffffffff1660e01b815260040161203d959493929190612c50565b600060405180830381600087803b15801561205757600080fd5b505af115801561206b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612094919061267d565b505050565b60606120a884846000856120b1565b90509392505050565b6060824710156120f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ed90612b25565b60405180910390fd5b6120ff856121c5565b61213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590612bc5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161216791906129ca565b60006040518083038185875af1925050503d80600081146121a4576040519150601f19603f3d011682016040523d82523d6000602084013e6121a9565b606091505b50915091506121b98282866121e8565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156121f857829050612248565b60008351111561220b5782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223f9190612ac3565b60405180910390fd5b9392505050565b600061226261225d84612ccf565b612caa565b9050808382526020820190508285602086028201111561228157600080fd5b60005b858110156122b157816122978882612393565b845260208401935060208301925050600181019050612284565b5050509392505050565b60006122ce6122c984612cfb565b612caa565b905080838252602082019050828560208602820111156122ed57600080fd5b60005b8581101561231d5781612303888261243b565b8452602084019350602083019250506001810190506122f0565b5050509392505050565b600061233a61233584612cfb565b612caa565b9050808382526020820190508285602086028201111561235957600080fd5b60005b85811015612389578161236f8882612450565b84526020840193506020830192505060018101905061235c565b5050509392505050565b6000813590506123a281613225565b92915050565b600082601f8301126123b957600080fd5b81356123c984826020860161224f565b91505092915050565b600082601f8301126123e357600080fd5b81356123f38482602086016122bb565b91505092915050565b600082601f83011261240d57600080fd5b815161241d848260208601612327565b91505092915050565b6000815190506124358161323c565b92915050565b60008135905061244a81613253565b92915050565b60008151905061245f81613253565b92915050565b60006020828403121561247757600080fd5b600061248584828501612393565b91505092915050565b600080604083850312156124a157600080fd5b60006124af85828601612393565b92505060206124c085828601612393565b9150509250929050565b6000806000606084860312156124df57600080fd5b60006124ed86828701612393565b93505060206124fe86828701612393565b925050604061250f8682870161243b565b9150509250925092565b6000806000806080858703121561252f57600080fd5b600061253d87828801612393565b945050602061254e87828801612393565b935050604061255f8782880161243b565b925050606085013567ffffffffffffffff81111561257c57600080fd5b612588878288016123a8565b91505092959194509250565b600080604083850312156125a757600080fd5b60006125b585828601612393565b92505060206125c68582860161243b565b9150509250929050565b6000602082840312156125e257600080fd5b600082013567ffffffffffffffff8111156125fc57600080fd5b612608848285016123a8565b91505092915050565b6000806040838503121561262457600080fd5b600083013567ffffffffffffffff81111561263e57600080fd5b61264a858286016123a8565b925050602083013567ffffffffffffffff81111561266757600080fd5b612673858286016123d2565b9150509250929050565b60006020828403121561268f57600080fd5b600082015167ffffffffffffffff8111156126a957600080fd5b6126b5848285016123fc565b91505092915050565b6000602082840312156126d057600080fd5b60006126de84828501612426565b91505092915050565b6000602082840312156126f957600080fd5b60006127078482850161243b565b91505092915050565b6000806040838503121561272357600080fd5b60006127318582860161243b565b925050602083013567ffffffffffffffff81111561274e57600080fd5b61275a858286016123a8565b9150509250929050565b6000612770838361277c565b60208301905092915050565b61278581612e51565b82525050565b61279481612e51565b82525050565b60006127a582612d37565b6127af8185612d65565b93506127ba83612d27565b8060005b838110156127eb5781516127d28882612764565b97506127dd83612d58565b9250506001810190506127be565b5085935050505092915050565b61280181612e63565b82525050565b600061281282612d42565b61281c8185612d76565b935061282c818560208601612eab565b80840191505092915050565b61284181612e99565b82525050565b600061285282612d4d565b61285c8185612d81565b935061286c818560208601612eab565b61287581612fe5565b840191505092915050565b600061288d601a83612d81565b915061289882612ff6565b602082019050919050565b60006128b0602683612d81565b91506128bb8261301f565b604082019050919050565b60006128d3602683612d81565b91506128de8261306e565b604082019050919050565b60006128f6602083612d81565b9150612901826130bd565b602082019050919050565b6000612919602083612d81565b9150612924826130e6565b602082019050919050565b600061293c602383612d81565b91506129478261310f565b604082019050919050565b600061295f602983612d81565b915061296a8261315e565b604082019050919050565b6000612982601d83612d81565b915061298d826131ad565b602082019050919050565b60006129a5602a83612d81565b91506129b0826131d6565b604082019050919050565b6129c481612e8f565b82525050565b60006129d68284612807565b915081905092915050565b60006020820190506129f6600083018461278b565b92915050565b6000606082019050612a11600083018661278b565b612a1e602083018561278b565b612a2b60408301846129bb565b949350505050565b6000604082019050612a48600083018561278b565b612a5560208301846129bb565b9392505050565b6000602082019050612a7160008301846127f8565b92915050565b6000608082019050612a8c6000830187612838565b8181036020830152612a9e818661279a565b9050612aad604083018561278b565b612aba60608301846129bb565b95945050505050565b60006020820190508181036000830152612add8184612847565b905092915050565b60006020820190508181036000830152612afe81612880565b9050919050565b60006020820190508181036000830152612b1e816128a3565b9050919050565b60006020820190508181036000830152612b3e816128c6565b9050919050565b60006020820190508181036000830152612b5e816128e9565b9050919050565b60006020820190508181036000830152612b7e8161290c565b9050919050565b60006020820190508181036000830152612b9e8161292f565b9050919050565b60006020820190508181036000830152612bbe81612952565b9050919050565b60006020820190508181036000830152612bde81612975565b9050919050565b60006020820190508181036000830152612bfe81612998565b9050919050565b6000602082019050612c1a60008301846129bb565b92915050565b6000604082019050612c3560008301856129bb565b8181036020830152612c47818461279a565b90509392505050565b600060a082019050612c6560008301886129bb565b612c726020830187612838565b8181036040830152612c84818661279a565b9050612c93606083018561278b565b612ca060808301846129bb565b9695505050505050565b6000612cb4612cc5565b9050612cc08282612ede565b919050565b6000604051905090565b600067ffffffffffffffff821115612cea57612ce9612fb6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612d1657612d15612fb6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612d9d82612e8f565b9150612da883612e8f565b925082612db857612db7612f87565b5b828204905092915050565b6000612dce82612e8f565b9150612dd983612e8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612e1257612e11612f58565b5b828202905092915050565b6000612e2882612e8f565b9150612e3383612e8f565b925082821015612e4657612e45612f58565b5b828203905092915050565b6000612e5c82612e6f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612ea482612e8f565b9050919050565b60005b83811015612ec9578082015181840152602081019050612eae565b83811115612ed8576000848401525b50505050565b612ee782612fe5565b810181811067ffffffffffffffff82111715612f0657612f05612fb6565b5b80604052505050565b6000612f1a82612e8f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612f4d57612f4c612f58565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f546f6f6e537761703a20496e73756666696369656e7420455448000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f546f6f6e537761703a2050617468206d75737420626520737065636966696564600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f6e537761703a20546f6b656e41206973206e6f742077686974656c697360008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f546f6f6e537761703a20616d6f756e74496e206d75737420626520677265617460008201527f6572207468616e20300000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61322e81612e51565b811461323957600080fd5b50565b61324581612e63565b811461325057600080fd5b50565b61325c81612e8f565b811461326757600080fd5b5056fea26469706673582212206b74a3b5e4102972c966738588a9aca33624d0fa7bbd202508316fd7289d464d64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000042148775d4635e87966aa42233747f4a87048bad0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
-----Decoded View---------------
Arg [0] : _feeAccount (address): 0x42148775d4635e87966Aa42233747F4a87048BAd
Arg [1] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000042148775d4635e87966aa42233747f4a87048bad
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Deployed Bytecode Sourcemap
27758:5232:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27974:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31715:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27914:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32871:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6511:103;;;;;;;;;;;;;:::i;:::-;;31604;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27869:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5860:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32720:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32501:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31829:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28734:624;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32292:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31969:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31349:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28002:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28226:500;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6769:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27946:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27974:19;;;;;;;;;;;;;:::o;31715:106::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31802:11:::1;31789:10;;:24;;;;;;;;;;;;;;;;;;31715:106:::0;:::o;27914:25::-;;;;;;;;;;;;;:::o;32871:116::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32953:7:::1;:5;:7::i;:::-;32945:25;;:34;32971:7;32945:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32871:116:::0;:::o;6511:103::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6576:30:::1;6603:1;6576:18;:30::i;:::-;6511:103::o:0;31604:::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31688:11:::1;31675:10;:24;;;;31604:103:::0;:::o;27869:27::-;;;;:::o;5860:87::-;5906:7;5933:6;;;;;;;;;;;5926:13;;5860:87;:::o;32720:143::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32807:48:::1;32835:10;32847:7;32814:6;32807:27;;;;:48;;;;;:::i;:::-;32720:143:::0;;:::o;32501:211::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32608:6:::1;32603:102;32624:7;:14;32620:1;:18;32603:102;;;32660:33;32669:7;32677:1;32669:10;;;;;;;;;;;;;;;;;;;;;;32681:8;32690:1;32681:11;;;;;;;;;;;;;;;;;;;;;;32660:8;:33::i;:::-;32640:3;;;;;:::i;:::-;;;;32603:102;;;;32501:211:::0;;:::o;31829:132::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31923:7:::1;31914:6;;:16;;;;;;;;;;;;;;;;;;31948:5;31941:4;;:12;;;;;;;;;;;;;;;;;;31829:132:::0;;:::o;28734:624::-;28885:1;28866:21;;:7;:21;;;28862:438;;;28920:4;28925:1;28920:7;;;;;;;;;;;;;;;;;;;;;;28912:15;;:4;;;;;;;;;;;:15;;;:51;;;;;28942:4;28961:1;28947:4;:11;:15;;;;:::i;:::-;28942:21;;;;;;;;;;;;;;;;;;;;;;28931:32;;:7;:32;;;28912:51;28904:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28862:438;;;29041:1;29022:21;;:7;:21;;;29018:282;;;29079:4;29084:1;29079:7;;;;;;;;;;;;;;;;;;;;;;29068:18;;:7;:18;;;:51;;;;;29098:4;29117:1;29103:4;:11;:15;;;;:::i;:::-;29098:21;;;;;;;;;;;;;;;;;;;;;;29090:29;;:4;;;;;;;;;;;:29;;;29068:51;29060:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;29018:282;;;29208:4;29213:1;29208:7;;;;;;;;;;;;;;;;;;;;;;29197:18;;:7;:18;;;:54;;;;;29230:4;29249:1;29235:4;:11;:15;;;;:::i;:::-;29230:21;;;;;;;;;;;;;;;;;;;;;;29219:32;;:7;:32;;;29197:54;29189:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;29018:282;28862:438;29310:40;29316:7;29325;29334:9;29345:4;29310:5;:40::i;:::-;28734:624;;;;:::o;32292:201::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32385:6:::1;32380:106;32401:7;:14;32397:1;:18;32380:106;;;32469:5;32437:17;:29;32455:7;32463:1;32455:10;;;;;;;;;;;;;;;;;;;;;;32437:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32417:3;;;;;:::i;:::-;;;;32380:106;;;;32292:201:::0;:::o;31969:315::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32059:6:::1;32054:223;32075:7;:14;32071:1;:18;32054:223;;;32143:4;32111:17;:29;32129:7;32137:1;32129:10;;;;;;;;;;;;;;;;;;;;;;32111:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32188:1;32166:24;;:7;32174:1;32166:10;;;;;;;;;;;;;;;;;;;;;;:24;;;32162:104;;32211:39;32220:7;32228:1;32220:10;;;;;;;;;;;;;;;;;;;;;;32232:17;32211:8;:39::i;:::-;32162:104;32091:3;;;;;:::i;:::-;;;;32054:223;;;;31969:315:::0;:::o;31349:247::-;31442:17;31472:20;31503:6;;;;;;;;;;;31495:29;;;31525:11;31538:4;31495:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31472:71;;31561:7;31586:1;31569:7;:14;:18;;;;:::i;:::-;31561:27;;;;;;;;;;;;;;;;;;;;;;31554:34;;;31349:247;;;;:::o;28002:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;28226:500::-;28327:21;28365:1;28351:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28327:40;;28401:1;28382:21;;:7;:21;;;28378:288;;;28430:4;;;;;;;;;;;28420;28425:1;28420:7;;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;28459:7;28449:4;28454:1;28449:7;;;;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;28378:288;;;28507:1;28488:21;;:7;:21;;;28484:182;;;28536:7;28526:4;28531:1;28526:7;;;;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;28568:4;;;;;;;;;;;28558;28563:1;28558:7;;;;;;;;;;;;;;;;;;;;;:14;;;;;;;;;;;28484:182;;;28615:7;28605:4;28610:1;28605:7;;;;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;28647:7;28637:4;28642:1;28637:7;;;;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;28484:182;28378:288;28678:40;28684:7;28693;28702:9;28713:4;28678:5;:40::i;:::-;28226:500;;;;:::o;6769:201::-;6091:12;:10;:12::i;:::-;6080:23;;:7;:5;:7::i;:::-;:23;;;6072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6878:1:::1;6858:22;;:8;:22;;;;6850:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6934:28;6953:8;6934:18;:28::i;:::-;6769:201:::0;:::o;27946:21::-;;;;;;;;;;;;;:::o;4580:98::-;4633:7;4660:10;4653:17;;4580:98;:::o;7130:191::-;7204:16;7223:6;;;;;;;;;;;7204:25;;7249:8;7240:6;;:17;;;;;;;;;;;;;;;;;;7304:8;7273:40;;7294:8;7273:40;;;;;;;;;;;;7130:191;;:::o;23585:211::-;23702:86;23722:5;23752:23;;;23777:2;23781:5;23729:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23702:19;:86::i;:::-;23585:211;;;:::o;31217:124::-;31292:6;31285:22;;;31316:6;;;;;;;;;;;31325:7;31285:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31217:124;;:::o;29366:1064::-;29496:1;29484:9;:13;29476:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29562:17;:26;29580:7;29562:26;;;;;;;;;;;;;;;;;;;;;;;;;29554:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29662:1;29643:21;;:7;:21;;;29639:784;;;29703:9;29690;:22;;29681:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29758:8;29794:5;29781:10;;29769:9;:22;;;;:::i;:::-;:30;;;;:::i;:::-;29758:41;;29822:10;;;;;;;;;;;29814:28;;:33;29843:3;29814:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29862:17;29894:3;29882:9;:15;;;;:::i;:::-;29862:35;;29912:37;29930:12;29944:4;29912:17;:37::i;:::-;29639:784;;;;;29981:70;30014:10;30034:4;30041:9;29988:7;29981:32;;;;:70;;;;;;:::i;:::-;30066:8;30102:5;30089:10;;30077:9;:22;;;;:::i;:::-;:30;;;;:::i;:::-;30066:41;;30122:45;30151:10;;;;;;;;;;;30163:3;30129:7;30122:28;;;;:45;;;;;:::i;:::-;30182:17;30214:3;30202:9;:15;;;;:::i;:::-;30182:35;;30255:1;30236:21;;:7;:21;;;30232:180;;;30278:37;30296:12;30310:4;30278:17;:37::i;:::-;30232:180;;;30356:40;30377:12;30391:4;30356:20;:40::i;:::-;30232:180;29639:784;;;29366:1064;;;;:::o;26158:716::-;26582:23;26608:69;26636:4;26608:69;;;;;;;;;;;;;;;;;26616:5;26608:27;;;;:69;;;;;:::i;:::-;26582:95;;26712:1;26692:10;:17;:21;26688:179;;;26789:10;26778:30;;;;;;;;;;;;:::i;:::-;26770:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26688:179;26158:716;;;:::o;30703:247::-;30794:6;;;;;;;;;;;30786:37;;;30832:7;30856:1;30872:4;30891:10;30916:15;30786:156;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30703:247;;:::o;23804:248::-;23948:96;23968:5;23998:27;;;24027:4;24033:2;24037:5;23975:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23948:19;:96::i;:::-;23804:248;;;;:::o;30958:251::-;31049:6;;;;;;;;;;;31041:37;;;31093:7;31115:1;31131:4;31150:10;31175:15;31041:160;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30958:251;;:::o;30438:257::-;30532:6;;;;;;;;;;;30524:40;;;30579:7;30601:1;30617:4;30636:10;30661:15;30524:163;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30438:257;;:::o;18359:229::-;18496:12;18528:52;18550:6;18558:4;18564:1;18567:12;18528:21;:52::i;:::-;18521:59;;18359:229;;;;;:::o;19479:510::-;19649:12;19707:5;19682:21;:30;;19674:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;19774:18;19785:6;19774:10;:18::i;:::-;19766:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;19840:12;19854:23;19881:6;:11;;19900:5;19907:4;19881:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19839:73;;;;19930:51;19947:7;19956:10;19968:12;19930:16;:51::i;:::-;19923:58;;;;19479:510;;;;;;:::o;15614:326::-;15674:4;15931:1;15909:7;:19;;;:23;15902:30;;15614:326;;;:::o;22165:712::-;22315:12;22344:7;22340:530;;;22375:10;22368:17;;;;22340:530;22509:1;22489:10;:17;:21;22485:374;;;22687:10;22681:17;22748:15;22735:10;22731:2;22727:19;22720:44;22635:148;22830:12;22823:20;;;;;;;;;;;:::i;:::-;;;;;;;;22165:712;;;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;670:623::-;;791:81;807:64;864:6;807:64;:::i;:::-;791:81;:::i;:::-;782:90;;892:5;920:6;913:5;906:21;946:4;939:5;935:16;928:23;;971:6;1021:3;1013:4;1005:6;1001:17;996:3;992:27;989:36;986:2;;;1038:1;1035;1028:12;986:2;1066:1;1051:236;1076:6;1073:1;1070:13;1051:236;;;1143:3;1171:37;1204:3;1192:10;1171:37;:::i;:::-;1166:3;1159:50;1238:4;1233:3;1229:14;1222:21;;1272:4;1267:3;1263:14;1256:21;;1111:176;1098:1;1095;1091:9;1086:14;;1051:236;;;1055:14;772:521;;;;;;;:::o;1316:645::-;;1448:81;1464:64;1521:6;1464:64;:::i;:::-;1448:81;:::i;:::-;1439:90;;1549:5;1577:6;1570:5;1563:21;1603:4;1596:5;1592:16;1585:23;;1628:6;1678:3;1670:4;1662:6;1658:17;1653:3;1649:27;1646:36;1643:2;;;1695:1;1692;1685:12;1643:2;1723:1;1708:247;1733:6;1730:1;1727:13;1708:247;;;1800:3;1828:48;1872:3;1860:10;1828:48;:::i;:::-;1823:3;1816:61;1906:4;1901:3;1897:14;1890:21;;1940:4;1935:3;1931:14;1924:21;;1768:187;1755:1;1752;1748:9;1743:14;;1708:247;;;1712:14;1429:532;;;;;;;:::o;1967:139::-;;2051:6;2038:20;2029:29;;2067:33;2094:5;2067:33;:::i;:::-;2019:87;;;;:::o;2129:303::-;;2249:3;2242:4;2234:6;2230:17;2226:27;2216:2;;2267:1;2264;2257:12;2216:2;2307:6;2294:20;2332:94;2422:3;2414:6;2407:4;2399:6;2395:17;2332:94;:::i;:::-;2323:103;;2206:226;;;;;:::o;2455:303::-;;2575:3;2568:4;2560:6;2556:17;2552:27;2542:2;;2593:1;2590;2583:12;2542:2;2633:6;2620:20;2658:94;2748:3;2740:6;2733:4;2725:6;2721:17;2658:94;:::i;:::-;2649:103;;2532:226;;;;;:::o;2781:318::-;;2912:3;2905:4;2897:6;2893:17;2889:27;2879:2;;2930:1;2927;2920:12;2879:2;2963:6;2957:13;2988:105;3089:3;3081:6;3074:4;3066:6;3062:17;2988:105;:::i;:::-;2979:114;;2869:230;;;;;:::o;3105:137::-;;3190:6;3184:13;3175:22;;3206:30;3230:5;3206:30;:::i;:::-;3165:77;;;;:::o;3248:139::-;;3332:6;3319:20;3310:29;;3348:33;3375:5;3348:33;:::i;:::-;3300:87;;;;:::o;3393:143::-;;3481:6;3475:13;3466:22;;3497:33;3524:5;3497:33;:::i;:::-;3456:80;;;;:::o;3542:262::-;;3650:2;3638:9;3629:7;3625:23;3621:32;3618:2;;;3666:1;3663;3656:12;3618:2;3709:1;3734:53;3779:7;3770:6;3759:9;3755:22;3734:53;:::i;:::-;3724:63;;3680:117;3608:196;;;;:::o;3810:407::-;;;3935:2;3923:9;3914:7;3910:23;3906:32;3903:2;;;3951:1;3948;3941:12;3903:2;3994:1;4019:53;4064:7;4055:6;4044:9;4040:22;4019:53;:::i;:::-;4009:63;;3965:117;4121:2;4147:53;4192:7;4183:6;4172:9;4168:22;4147:53;:::i;:::-;4137:63;;4092:118;3893:324;;;;;:::o;4223:552::-;;;;4365:2;4353:9;4344:7;4340:23;4336:32;4333:2;;;4381:1;4378;4371:12;4333:2;4424:1;4449:53;4494:7;4485:6;4474:9;4470:22;4449:53;:::i;:::-;4439:63;;4395:117;4551:2;4577:53;4622:7;4613:6;4602:9;4598:22;4577:53;:::i;:::-;4567:63;;4522:118;4679:2;4705:53;4750:7;4741:6;4730:9;4726:22;4705:53;:::i;:::-;4695:63;;4650:118;4323:452;;;;;:::o;4781:841::-;;;;;4965:3;4953:9;4944:7;4940:23;4936:33;4933:2;;;4982:1;4979;4972:12;4933:2;5025:1;5050:53;5095:7;5086:6;5075:9;5071:22;5050:53;:::i;:::-;5040:63;;4996:117;5152:2;5178:53;5223:7;5214:6;5203:9;5199:22;5178:53;:::i;:::-;5168:63;;5123:118;5280:2;5306:53;5351:7;5342:6;5331:9;5327:22;5306:53;:::i;:::-;5296:63;;5251:118;5436:2;5425:9;5421:18;5408:32;5467:18;5459:6;5456:30;5453:2;;;5499:1;5496;5489:12;5453:2;5527:78;5597:7;5588:6;5577:9;5573:22;5527:78;:::i;:::-;5517:88;;5379:236;4923:699;;;;;;;:::o;5628:407::-;;;5753:2;5741:9;5732:7;5728:23;5724:32;5721:2;;;5769:1;5766;5759:12;5721:2;5812:1;5837:53;5882:7;5873:6;5862:9;5858:22;5837:53;:::i;:::-;5827:63;;5783:117;5939:2;5965:53;6010:7;6001:6;5990:9;5986:22;5965:53;:::i;:::-;5955:63;;5910:118;5711:324;;;;;:::o;6041:405::-;;6174:2;6162:9;6153:7;6149:23;6145:32;6142:2;;;6190:1;6187;6180:12;6142:2;6261:1;6250:9;6246:17;6233:31;6291:18;6283:6;6280:30;6277:2;;;6323:1;6320;6313:12;6277:2;6351:78;6421:7;6412:6;6401:9;6397:22;6351:78;:::i;:::-;6341:88;;6204:235;6132:314;;;;:::o;6452:693::-;;;6627:2;6615:9;6606:7;6602:23;6598:32;6595:2;;;6643:1;6640;6633:12;6595:2;6714:1;6703:9;6699:17;6686:31;6744:18;6736:6;6733:30;6730:2;;;6776:1;6773;6766:12;6730:2;6804:78;6874:7;6865:6;6854:9;6850:22;6804:78;:::i;:::-;6794:88;;6657:235;6959:2;6948:9;6944:18;6931:32;6990:18;6982:6;6979:30;6976:2;;;7022:1;7019;7012:12;6976:2;7050:78;7120:7;7111:6;7100:9;7096:22;7050:78;:::i;:::-;7040:88;;6902:236;6585:560;;;;;:::o;7151:420::-;;7295:2;7283:9;7274:7;7270:23;7266:32;7263:2;;;7311:1;7308;7301:12;7263:2;7375:1;7364:9;7360:17;7354:24;7405:18;7397:6;7394:30;7391:2;;;7437:1;7434;7427:12;7391:2;7465:89;7546:7;7537:6;7526:9;7522:22;7465:89;:::i;:::-;7455:99;;7325:239;7253:318;;;;:::o;7577:278::-;;7693:2;7681:9;7672:7;7668:23;7664:32;7661:2;;;7709:1;7706;7699:12;7661:2;7752:1;7777:61;7830:7;7821:6;7810:9;7806:22;7777:61;:::i;:::-;7767:71;;7723:125;7651:204;;;;:::o;7861:262::-;;7969:2;7957:9;7948:7;7944:23;7940:32;7937:2;;;7985:1;7982;7975:12;7937:2;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;7927:196;;;;:::o;8129:550::-;;;8279:2;8267:9;8258:7;8254:23;8250:32;8247:2;;;8295:1;8292;8285:12;8247:2;8338:1;8363:53;8408:7;8399:6;8388:9;8384:22;8363:53;:::i;:::-;8353:63;;8309:117;8493:2;8482:9;8478:18;8465:32;8524:18;8516:6;8513:30;8510:2;;;8556:1;8553;8546:12;8510:2;8584:78;8654:7;8645:6;8634:9;8630:22;8584:78;:::i;:::-;8574:88;;8436:236;8237:442;;;;;:::o;8685:179::-;;8775:46;8817:3;8809:6;8775:46;:::i;:::-;8853:4;8848:3;8844:14;8830:28;;8765:99;;;;:::o;8870:108::-;8947:24;8965:5;8947:24;:::i;:::-;8942:3;8935:37;8925:53;;:::o;8984:118::-;9071:24;9089:5;9071:24;:::i;:::-;9066:3;9059:37;9049:53;;:::o;9138:732::-;;9286:54;9334:5;9286:54;:::i;:::-;9356:86;9435:6;9430:3;9356:86;:::i;:::-;9349:93;;9466:56;9516:5;9466:56;:::i;:::-;9545:7;9576:1;9561:284;9586:6;9583:1;9580:13;9561:284;;;9662:6;9656:13;9689:63;9748:3;9733:13;9689:63;:::i;:::-;9682:70;;9775:60;9828:6;9775:60;:::i;:::-;9765:70;;9621:224;9608:1;9605;9601:9;9596:14;;9561:284;;;9565:14;9861:3;9854:10;;9262:608;;;;;;;:::o;9876:109::-;9957:21;9972:5;9957:21;:::i;:::-;9952:3;9945:34;9935:50;;:::o;9991:373::-;;10123:38;10155:5;10123:38;:::i;:::-;10177:88;10258:6;10253:3;10177:88;:::i;:::-;10170:95;;10274:52;10319:6;10314:3;10307:4;10300:5;10296:16;10274:52;:::i;:::-;10351:6;10346:3;10342:16;10335:23;;10099:265;;;;;:::o;10370:147::-;10465:45;10504:5;10465:45;:::i;:::-;10460:3;10453:58;10443:74;;:::o;10523:364::-;;10639:39;10672:5;10639:39;:::i;:::-;10694:71;10758:6;10753:3;10694:71;:::i;:::-;10687:78;;10774:52;10819:6;10814:3;10807:4;10800:5;10796:16;10774:52;:::i;:::-;10851:29;10873:6;10851:29;:::i;:::-;10846:3;10842:39;10835:46;;10615:272;;;;;:::o;10893:366::-;;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;11039:220;;;:::o;11265:366::-;;11428:67;11492:2;11487:3;11428:67;:::i;:::-;11421:74;;11504:93;11593:3;11504:93;:::i;:::-;11622:2;11617:3;11613:12;11606:19;;11411:220;;;:::o;11637:366::-;;11800:67;11864:2;11859:3;11800:67;:::i;:::-;11793:74;;11876:93;11965:3;11876:93;:::i;:::-;11994:2;11989:3;11985:12;11978:19;;11783:220;;;:::o;12009:366::-;;12172:67;12236:2;12231:3;12172:67;:::i;:::-;12165:74;;12248:93;12337:3;12248:93;:::i;:::-;12366:2;12361:3;12357:12;12350:19;;12155:220;;;:::o;12381:366::-;;12544:67;12608:2;12603:3;12544:67;:::i;:::-;12537:74;;12620:93;12709:3;12620:93;:::i;:::-;12738:2;12733:3;12729:12;12722:19;;12527:220;;;:::o;12753:366::-;;12916:67;12980:2;12975:3;12916:67;:::i;:::-;12909:74;;12992:93;13081:3;12992:93;:::i;:::-;13110:2;13105:3;13101:12;13094:19;;12899:220;;;:::o;13125:366::-;;13288:67;13352:2;13347:3;13288:67;:::i;:::-;13281:74;;13364:93;13453:3;13364:93;:::i;:::-;13482:2;13477:3;13473:12;13466:19;;13271:220;;;:::o;13497:366::-;;13660:67;13724:2;13719:3;13660:67;:::i;:::-;13653:74;;13736:93;13825:3;13736:93;:::i;:::-;13854:2;13849:3;13845:12;13838:19;;13643:220;;;:::o;13869:366::-;;14032:67;14096:2;14091:3;14032:67;:::i;:::-;14025:74;;14108:93;14197:3;14108:93;:::i;:::-;14226:2;14221:3;14217:12;14210:19;;14015:220;;;:::o;14241:118::-;14328:24;14346:5;14328:24;:::i;:::-;14323:3;14316:37;14306:53;;:::o;14365:271::-;;14517:93;14606:3;14597:6;14517:93;:::i;:::-;14510:100;;14627:3;14620:10;;14499:137;;;;:::o;14642:222::-;;14773:2;14762:9;14758:18;14750:26;;14786:71;14854:1;14843:9;14839:17;14830:6;14786:71;:::i;:::-;14740:124;;;;:::o;14870:442::-;;15057:2;15046:9;15042:18;15034:26;;15070:71;15138:1;15127:9;15123:17;15114:6;15070:71;:::i;:::-;15151:72;15219:2;15208:9;15204:18;15195:6;15151:72;:::i;:::-;15233;15301:2;15290:9;15286:18;15277:6;15233:72;:::i;:::-;15024:288;;;;;;:::o;15318:332::-;;15477:2;15466:9;15462:18;15454:26;;15490:71;15558:1;15547:9;15543:17;15534:6;15490:71;:::i;:::-;15571:72;15639:2;15628:9;15624:18;15615:6;15571:72;:::i;:::-;15444:206;;;;;:::o;15656:210::-;;15781:2;15770:9;15766:18;15758:26;;15794:65;15856:1;15845:9;15841:17;15832:6;15794:65;:::i;:::-;15748:118;;;;:::o;15872:720::-;;16145:3;16134:9;16130:19;16122:27;;16159:79;16235:1;16224:9;16220:17;16211:6;16159:79;:::i;:::-;16285:9;16279:4;16275:20;16270:2;16259:9;16255:18;16248:48;16313:108;16416:4;16407:6;16313:108;:::i;:::-;16305:116;;16431:72;16499:2;16488:9;16484:18;16475:6;16431:72;:::i;:::-;16513;16581:2;16570:9;16566:18;16557:6;16513:72;:::i;:::-;16112:480;;;;;;;:::o;16598:313::-;;16749:2;16738:9;16734:18;16726:26;;16798:9;16792:4;16788:20;16784:1;16773:9;16769:17;16762:47;16826:78;16899:4;16890:6;16826:78;:::i;:::-;16818:86;;16716:195;;;;:::o;16917:419::-;;17121:2;17110:9;17106:18;17098:26;;17170:9;17164:4;17160:20;17156:1;17145:9;17141:17;17134:47;17198:131;17324:4;17198:131;:::i;:::-;17190:139;;17088:248;;;:::o;17342:419::-;;17546:2;17535:9;17531:18;17523:26;;17595:9;17589:4;17585:20;17581:1;17570:9;17566:17;17559:47;17623:131;17749:4;17623:131;:::i;:::-;17615:139;;17513:248;;;:::o;17767:419::-;;17971:2;17960:9;17956:18;17948:26;;18020:9;18014:4;18010:20;18006:1;17995:9;17991:17;17984:47;18048:131;18174:4;18048:131;:::i;:::-;18040:139;;17938:248;;;:::o;18192:419::-;;18396:2;18385:9;18381:18;18373:26;;18445:9;18439:4;18435:20;18431:1;18420:9;18416:17;18409:47;18473:131;18599:4;18473:131;:::i;:::-;18465:139;;18363:248;;;:::o;18617:419::-;;18821:2;18810:9;18806:18;18798:26;;18870:9;18864:4;18860:20;18856:1;18845:9;18841:17;18834:47;18898:131;19024:4;18898:131;:::i;:::-;18890:139;;18788:248;;;:::o;19042:419::-;;19246:2;19235:9;19231:18;19223:26;;19295:9;19289:4;19285:20;19281:1;19270:9;19266:17;19259:47;19323:131;19449:4;19323:131;:::i;:::-;19315:139;;19213:248;;;:::o;19467:419::-;;19671:2;19660:9;19656:18;19648:26;;19720:9;19714:4;19710:20;19706:1;19695:9;19691:17;19684:47;19748:131;19874:4;19748:131;:::i;:::-;19740:139;;19638:248;;;:::o;19892:419::-;;20096:2;20085:9;20081:18;20073:26;;20145:9;20139:4;20135:20;20131:1;20120:9;20116:17;20109:47;20173:131;20299:4;20173:131;:::i;:::-;20165:139;;20063:248;;;:::o;20317:419::-;;20521:2;20510:9;20506:18;20498:26;;20570:9;20564:4;20560:20;20556:1;20545:9;20541:17;20534:47;20598:131;20724:4;20598:131;:::i;:::-;20590:139;;20488:248;;;:::o;20742:222::-;;20873:2;20862:9;20858:18;20850:26;;20886:71;20954:1;20943:9;20939:17;20930:6;20886:71;:::i;:::-;20840:124;;;;:::o;20970:483::-;;21179:2;21168:9;21164:18;21156:26;;21192:71;21260:1;21249:9;21245:17;21236:6;21192:71;:::i;:::-;21310:9;21304:4;21300:20;21295:2;21284:9;21280:18;21273:48;21338:108;21441:4;21432:6;21338:108;:::i;:::-;21330:116;;21146:307;;;;;:::o;21459:831::-;;21760:3;21749:9;21745:19;21737:27;;21774:71;21842:1;21831:9;21827:17;21818:6;21774:71;:::i;:::-;21855:80;21931:2;21920:9;21916:18;21907:6;21855:80;:::i;:::-;21982:9;21976:4;21972:20;21967:2;21956:9;21952:18;21945:48;22010:108;22113:4;22104:6;22010:108;:::i;:::-;22002:116;;22128:72;22196:2;22185:9;22181:18;22172:6;22128:72;:::i;:::-;22210:73;22278:3;22267:9;22263:19;22254:6;22210:73;:::i;:::-;21727:563;;;;;;;;:::o;22296:129::-;;22357:20;;:::i;:::-;22347:30;;22386:33;22414:4;22406:6;22386:33;:::i;:::-;22337:88;;;:::o;22431:75::-;;22497:2;22491:9;22481:19;;22471:35;:::o;22512:311::-;;22679:18;22671:6;22668:30;22665:2;;;22701:18;;:::i;:::-;22665:2;22751:4;22743:6;22739:17;22731:25;;22811:4;22805;22801:15;22793:23;;22594:229;;;:::o;22829:311::-;;22996:18;22988:6;22985:30;22982:2;;;23018:18;;:::i;:::-;22982:2;23068:4;23060:6;23056:17;23048:25;;23128:4;23122;23118:15;23110:23;;22911:229;;;:::o;23146:132::-;;23236:3;23228:11;;23266:4;23261:3;23257:14;23249:22;;23218:60;;;:::o;23284:114::-;;23385:5;23379:12;23369:22;;23358:40;;;:::o;23404:98::-;;23489:5;23483:12;23473:22;;23462:40;;;:::o;23508:99::-;;23594:5;23588:12;23578:22;;23567:40;;;:::o;23613:113::-;;23715:4;23710:3;23706:14;23698:22;;23688:38;;;:::o;23732:184::-;;23865:6;23860:3;23853:19;23905:4;23900:3;23896:14;23881:29;;23843:73;;;;:::o;23922:147::-;;24060:3;24045:18;;24035:34;;;;:::o;24075:169::-;;24193:6;24188:3;24181:19;24233:4;24228:3;24224:14;24209:29;;24171:73;;;;:::o;24250:185::-;;24307:20;24325:1;24307:20;:::i;:::-;24302:25;;24341:20;24359:1;24341:20;:::i;:::-;24336:25;;24380:1;24370:2;;24385:18;;:::i;:::-;24370:2;24427:1;24424;24420:9;24415:14;;24292:143;;;;:::o;24441:348::-;;24504:20;24522:1;24504:20;:::i;:::-;24499:25;;24538:20;24556:1;24538:20;:::i;:::-;24533:25;;24726:1;24658:66;24654:74;24651:1;24648:81;24643:1;24636:9;24629:17;24625:105;24622:2;;;24733:18;;:::i;:::-;24622:2;24781:1;24778;24774:9;24763:20;;24489:300;;;;:::o;24795:191::-;;24855:20;24873:1;24855:20;:::i;:::-;24850:25;;24889:20;24907:1;24889:20;:::i;:::-;24884:25;;24928:1;24925;24922:8;24919:2;;;24933:18;;:::i;:::-;24919:2;24978:1;24975;24971:9;24963:17;;24840:146;;;;:::o;24992:96::-;;25058:24;25076:5;25058:24;:::i;:::-;25047:35;;25037:51;;;:::o;25094:90::-;;25171:5;25164:13;25157:21;25146:32;;25136:48;;;:::o;25190:126::-;;25267:42;25260:5;25256:54;25245:65;;25235:81;;;:::o;25322:77::-;;25388:5;25377:16;;25367:32;;;:::o;25405:121::-;;25496:24;25514:5;25496:24;:::i;:::-;25483:37;;25473:53;;;:::o;25532:307::-;25600:1;25610:113;25624:6;25621:1;25618:13;25610:113;;;25709:1;25704:3;25700:11;25694:18;25690:1;25685:3;25681:11;25674:39;25646:2;25643:1;25639:10;25634:15;;25610:113;;;25741:6;25738:1;25735:13;25732:2;;;25821:1;25812:6;25807:3;25803:16;25796:27;25732:2;25581:258;;;;:::o;25845:281::-;25928:27;25950:4;25928:27;:::i;:::-;25920:6;25916:40;26058:6;26046:10;26043:22;26022:18;26010:10;26007:34;26004:62;26001:2;;;26069:18;;:::i;:::-;26001:2;26109:10;26105:2;26098:22;25888:238;;;:::o;26132:233::-;;26194:24;26212:5;26194:24;:::i;:::-;26185:33;;26240:66;26233:5;26230:77;26227:2;;;26310:18;;:::i;:::-;26227:2;26357:1;26350:5;26346:13;26339:20;;26175:190;;;:::o;26371:180::-;26419:77;26416:1;26409:88;26516:4;26513:1;26506:15;26540:4;26537:1;26530:15;26557:180;26605:77;26602:1;26595:88;26702:4;26699:1;26692:15;26726:4;26723:1;26716:15;26743:180;26791:77;26788:1;26781:88;26888:4;26885:1;26878:15;26912:4;26909:1;26902:15;26929:102;;27021:2;27017:7;27012:2;27005:5;27001:14;26997:28;26987:38;;26977:54;;;:::o;27037:176::-;27177:28;27173:1;27165:6;27161:14;27154:52;27143:70;:::o;27219:225::-;27359:34;27355:1;27347:6;27343:14;27336:58;27428:8;27423:2;27415:6;27411:15;27404:33;27325:119;:::o;27450:225::-;27590:34;27586:1;27578:6;27574:14;27567:58;27659:8;27654:2;27646:6;27642:15;27635:33;27556:119;:::o;27681:182::-;27821:34;27817:1;27809:6;27805:14;27798:58;27787:76;:::o;27869:182::-;28009:34;28005:1;27997:6;27993:14;27986:58;27975:76;:::o;28057:222::-;28197:34;28193:1;28185:6;28181:14;28174:58;28266:5;28261:2;28253:6;28249:15;28242:30;28163:116;:::o;28285:228::-;28425:34;28421:1;28413:6;28409:14;28402:58;28494:11;28489:2;28481:6;28477:15;28470:36;28391:122;:::o;28519:179::-;28659:31;28655:1;28647:6;28643:14;28636:55;28625:73;:::o;28704:229::-;28844:34;28840:1;28832:6;28828:14;28821:58;28913:12;28908:2;28900:6;28896:15;28889:37;28810:123;:::o;28939:122::-;29012:24;29030:5;29012:24;:::i;:::-;29005:5;29002:35;28992:2;;29051:1;29048;29041:12;28992:2;28982:79;:::o;29067:116::-;29137:21;29152:5;29137:21;:::i;:::-;29130:5;29127:32;29117:2;;29173:1;29170;29163:12;29117:2;29107:76;:::o;29189:122::-;29262:24;29280:5;29262:24;:::i;:::-;29255:5;29252:35;29242:2;;29301:1;29298;29291:12;29242:2;29232:79;:::o
Swarm Source
ipfs://6b74a3b5e4102972c966738588a9aca33624d0fa7bbd202508316fd7289d464d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.