ETH Price: $2,133.94 (+1.33%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Core121054802021-03-25 2:48:181833 days ago1616640498IN
0xcb2978a5...CF66265dC
0 ETH0.00539752175
Update Farm121005752021-03-24 8:41:261834 days ago1616575286IN
0xcb2978a5...CF66265dC
0 ETH0.00631537125
Update Farm120958922021-03-23 15:10:351835 days ago1616512235IN
0xcb2978a5...CF66265dC
0 ETH0.02002005150
Update Farm120953572021-03-23 13:17:351835 days ago1616505455IN
0xcb2978a5...CF66265dC
0 ETH0.00631537125
Update Farm120951832021-03-23 12:38:481835 days ago1616503128IN
0xcb2978a5...CF66265dC
0 ETH0.00606276120
Update Farm120949012021-03-23 11:37:221835 days ago1616499442IN
0xcb2978a5...CF66265dC
0 ETH0.03396187125
Update Farm120885262021-03-22 12:05:091836 days ago1616414709IN
0xcb2978a5...CF66265dC
0 ETH0.00631537125
Set Swap Proxy120290842021-03-13 8:24:251845 days ago1615623865IN
0xcb2978a5...CF66265dC
0 ETH0.0045823100
Set SAFU120288402021-03-13 7:35:481845 days ago1615620948IN
0xcb2978a5...CF66265dC
0 ETH0.00323872105

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
XConfig

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2021-03-13
*/

// File: contracts/XConst.sol

pragma solidity 0.5.17;

contract XConst {
    uint256 public constant BONE = 10**18;

    uint256 public constant MIN_BOUND_TOKENS = 2;
    uint256 public constant MAX_BOUND_TOKENS = 8;

    uint256 public constant EXIT_ZERO_FEE = 0;

    uint256 public constant MIN_WEIGHT = BONE;
    uint256 public constant MAX_WEIGHT = BONE * 50;
    uint256 public constant MAX_TOTAL_WEIGHT = BONE * 50;

    // min effective value: 0.000001 TOKEN
    uint256 public constant MIN_BALANCE = 10**6;

    // BONE/(10**10) XPT
    uint256 public constant MIN_POOL_AMOUNT = 10**8;

    uint256 public constant INIT_POOL_SUPPLY = BONE * 100;

    uint256 public constant MAX_IN_RATIO = BONE / 2;
    uint256 public constant MAX_OUT_RATIO = (BONE / 3) + 1 wei;
}

// File: contracts/interface/IXPool.sol

pragma solidity 0.5.17;

interface IXPool {
    // XPToken
    event Approval(address indexed src, address indexed dst, uint256 amt);
    event Transfer(address indexed src, address indexed dst, uint256 amt);

    function totalSupply() external view returns (uint256);

    function balanceOf(address whom) external view returns (uint256);

    function allowance(address src, address dst)
        external
        view
        returns (uint256);

    function approve(address dst, uint256 amt) external returns (bool);

    function transfer(address dst, uint256 amt) external returns (bool);

    function transferFrom(
        address src,
        address dst,
        uint256 amt
    ) external returns (bool);

    // Swap
    function swapExactAmountIn(
        address tokenIn,
        uint256 tokenAmountIn,
        address tokenOut,
        uint256 minAmountOut,
        uint256 maxPrice
    ) external returns (uint256 tokenAmountOut, uint256 spotPriceAfter);

    function swapExactAmountOut(
        address tokenIn,
        uint256 maxAmountIn,
        address tokenOut,
        uint256 tokenAmountOut,
        uint256 maxPrice
    ) external returns (uint256 tokenAmountIn, uint256 spotPriceAfter);

    // Referral
    function swapExactAmountInRefer(
        address tokenIn,
        uint256 tokenAmountIn,
        address tokenOut,
        uint256 minAmountOut,
        uint256 maxPrice,
        address referrer
    ) external returns (uint256 tokenAmountOut, uint256 spotPriceAfter);

    function swapExactAmountOutRefer(
        address tokenIn,
        uint256 maxAmountIn,
        address tokenOut,
        uint256 tokenAmountOut,
        uint256 maxPrice,
        address referrer
    ) external returns (uint256 tokenAmountIn, uint256 spotPriceAfter);

    // Pool Data
    function isBound(address token) external view returns (bool);

    function getFinalTokens() external view returns (address[] memory tokens);

    function getBalance(address token) external view returns (uint256);

    function swapFee() external view returns (uint256);

    function exitFee() external view returns (uint256);

    function finalized() external view returns (uint256);

    function controller() external view returns (uint256);

    function isFarmPool() external view returns (uint256);

    function xconfig() external view returns (uint256);

    function getDenormalizedWeight(address) external view returns (uint256);

    function getTotalDenormalizedWeight() external view returns (uint256);

    function getVersion() external view returns (bytes32);

    function calcInGivenOut(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountOut,
        uint256 _swapFee
    ) external pure returns (uint256 tokenAmountIn);

    function calcOutGivenIn(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 tokenBalanceOut,
        uint256 tokenWeightOut,
        uint256 tokenAmountIn,
        uint256 _swapFee
    ) external pure returns (uint256 tokenAmountOut);

    // Pool Managment
    function setController(address _controller) external;

    function setExitFee(uint256 newFee) external;

    function finalize(uint256 _swapFee) external;

    function bind(address token, uint256 denorm) external;

    function joinPool(uint256 poolAmountOut, uint256[] calldata maxAmountsIn)
        external;

    function exitPool(uint256 poolAmountIn, uint256[] calldata minAmountsOut)
        external;

    function joinswapExternAmountIn(
        address tokenIn,
        uint256 tokenAmountIn,
        uint256 minPoolAmountOut
    ) external returns (uint256 poolAmountOut);

    function exitswapPoolAmountIn(
        address tokenOut,
        uint256 poolAmountIn,
        uint256 minAmountOut
    ) external returns (uint256 tokenAmountOut);

    // Pool Governance
    function updateSafu(address safu, uint256 fee) external;

    function updateFarm(bool isFarm) external;
}

// File: contracts/interface/IERC20.sol

pragma solidity 0.5.17;

interface IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transfer(address _to, uint256 _value)
        external
        returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function approve(address _spender, uint256 _value)
        external
        returns (bool success);

    function allowance(address _owner, address _spender)
        external
        view
        returns (uint256 remaining);
}

// File: contracts/lib/Address.sol

pragma solidity 0.5.17;

//https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v2.5.0/contracts/utils/Address.sol

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash =
            0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account)
        internal
        pure
        returns (address payable)
    {
        return address(uint160(account));
    }

    /**
     * @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].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount).gas(9100)("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

// File: contracts/lib/SafeERC20.sol

pragma solidity 0.5.17;



//https://github.com/OpenZeppelin/openzeppelin-contracts/blob/release-v2.5.0/contracts/token/ERC20/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    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)
        );
    }

    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'
        // solhint-disable-next-line max-line-length
        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)
        );
    }

    /**
     * @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.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

// File: contracts/lib/XNum.sol

pragma solidity 0.5.17;

library XNum {
    uint256 public constant BONE = 10**18;
    uint256 public constant MIN_BPOW_BASE = 1 wei;
    uint256 public constant MAX_BPOW_BASE = (2 * BONE) - 1 wei;
    uint256 public constant BPOW_PRECISION = BONE / 10**10;

    function btoi(uint256 a) internal pure returns (uint256) {
        return a / BONE;
    }

    function bfloor(uint256 a) internal pure returns (uint256) {
        return btoi(a) * BONE;
    }

    function badd(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "ERR_ADD_OVERFLOW");
        return c;
    }

    function bsub(uint256 a, uint256 b) internal pure returns (uint256) {
        (uint256 c, bool flag) = bsubSign(a, b);
        require(!flag, "ERR_SUB_UNDERFLOW");
        return c;
    }

    function bsubSign(uint256 a, uint256 b)
        internal
        pure
        returns (uint256, bool)
    {
        if (a >= b) {
            return (a - b, false);
        } else {
            return (b - a, true);
        }
    }

    function bmul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c0 = a * b;
        require(a == 0 || c0 / a == b, "ERR_MUL_OVERFLOW");
        uint256 c1 = c0 + (BONE / 2);
        require(c1 >= c0, "ERR_MUL_OVERFLOW");
        uint256 c2 = c1 / BONE;
        return c2;
    }

    function bdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "ERR_DIV_ZERO");
        uint256 c0 = a * BONE;
        require(a == 0 || c0 / a == BONE, "ERR_DIV_INTERNAL"); // bmul overflow
        uint256 c1 = c0 + (b / 2);
        require(c1 >= c0, "ERR_DIV_INTERNAL"); //  badd require
        uint256 c2 = c1 / b;
        return c2;
    }

    // DSMath.wpow
    function bpowi(uint256 a, uint256 n) internal pure returns (uint256) {
        uint256 z = n % 2 != 0 ? a : BONE;

        for (n /= 2; n != 0; n /= 2) {
            a = bmul(a, a);

            if (n % 2 != 0) {
                z = bmul(z, a);
            }
        }
        return z;
    }

    // Compute b^(e.w) by splitting it into (b^e)*(b^0.w).
    // Use `bpowi` for `b^e` and `bpowK` for k iterations
    // of approximation of b^0.w
    function bpow(uint256 base, uint256 exp) internal pure returns (uint256) {
        require(base >= MIN_BPOW_BASE, "ERR_BPOW_BASE_TOO_LOW");
        require(base <= MAX_BPOW_BASE, "ERR_BPOW_BASE_TOO_HIGH");

        uint256 whole = bfloor(exp);
        uint256 remain = bsub(exp, whole);

        uint256 wholePow = bpowi(base, btoi(whole));

        if (remain == 0) {
            return wholePow;
        }

        uint256 partialResult = bpowApprox(base, remain, BPOW_PRECISION);
        return bmul(wholePow, partialResult);
    }

    function bpowApprox(
        uint256 base,
        uint256 exp,
        uint256 precision
    ) internal pure returns (uint256) {
        // term 0:
        uint256 a = exp;
        (uint256 x, bool xneg) = bsubSign(base, BONE);
        uint256 term = BONE;
        uint256 sum = term;
        bool negative = false;

        // term(k) = numer / denom
        //         = (product(a - i + 1, i=1-->k) * x^k) / (k!)
        // each iteration, multiply previous term by (a-(k-1)) * x / k
        // continue until term is less than precision
        for (uint256 i = 1; term >= precision; i++) {
            uint256 bigK = i * BONE;
            (uint256 c, bool cneg) = bsubSign(a, bsub(bigK, BONE));
            term = bmul(term, bmul(c, x));
            term = bdiv(term, bigK);
            if (term == 0) break;

            if (xneg) negative = !negative;
            if (cneg) negative = !negative;
            if (negative) {
                sum = bsub(sum, term);
            } else {
                sum = badd(sum, term);
            }
        }

        return sum;
    }
}

// File: contracts/XConfig.sol

pragma solidity 0.5.17;







/**
1. SAFU is a multi-sig account
2. SAFU is the core of XConfig contract instance
3. DEV firstly deploys XConfig contract, then setups the xconfig.core and xconfig.safu to SAFU with setSAFU() and setCore() 
*/
contract XConfig is XConst {
    using XNum for uint256;
    using Address for address;
    using SafeERC20 for IERC20;

    address private core;

    // Secure Asset Fund for Users(SAFU) address
    address private safu;
    uint256 public SAFU_FEE = (5 * BONE) / 10000; // 0.05%

    // Swap Proxy Address
    address private swapProxy;

    // ETH and WETH address
    address public constant ETH_ADDR =
        address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
    address public weth;

    // pool sigs for pool deduplication
    // key: keccak256(tokens[i], norms[i]), value: pool_address
    mapping(bytes32 => address) public poolSigs;
    uint256 public poolSigCount;
    // empty pool: if XPT totalSupply <= MIN_EFFECTIVE_XPT
    uint256 public minEffeciveXPT = 10**14; //0.0001 XPT

    uint256 public maxExitFee = BONE / 1000; // 0.1%

    event INIT_SAFU(address indexed addr);
    event SET_CORE(address indexed core, address indexed coreNew);

    event SET_SAFU(address indexed safu, address indexed safuNew);
    event SET_SAFU_FEE(uint256 indexed fee, uint256 indexed feeNew);

    event SET_PROXY(address indexed proxy, address indexed proxyNew);

    event ADD_POOL_SIG(
        address indexed caller,
        address indexed pool,
        bytes32 sig
    );
    event RM_POOL_SIG(
        address indexed caller,
        address indexed pool,
        bytes32 sig
    );

    event ADD_FARM_POOL(address indexed pool);
    event RM_FARM_POOL(address indexed pool);
    event SET_MFXPT(uint256 amount);

    event COLLECT(address indexed token, uint256 amount);

    modifier onlyCore() {
        require(msg.sender == core, "ERR_CORE_AUTH");
        _;
    }

    constructor(address _weth) public {
        require(_weth != address(0), "ERR_ZERO_ADDR");
        weth = _weth;
        core = msg.sender;
        safu = address(this);
        emit INIT_SAFU(address(this));
    }

    function getCore() external view returns (address) {
        return core;
    }

    function getSAFU() external view returns (address) {
        return safu;
    }

    function getMaxExitFee() external view returns (uint256) {
        return maxExitFee;
    }

    function getSafuFee() external view returns (uint256) {
        return SAFU_FEE;
    }

    function getSwapProxy() external view returns (address) {
        return swapProxy;
    }

    /**
     * pool deduplication
     * @dev check pool existence which has the same tokens(sorted by address) and weights
     * the denorms will allways between [10**18, 50 * 10**18]
     * @notice if pool is address(0), means not created yet
     * @return pool exists and pool sig
     */
    function dedupPool(address[] calldata tokens, uint256[] calldata denorms)
        external
        returns (bool exist, bytes32 sig)
    {
        require(msg.sender == swapProxy, "ERR_NOT_SWAPPROXY");
        require(tokens.length == denorms.length, "ERR_LENGTH_MISMATCH");
        require(tokens.length >= MIN_BOUND_TOKENS, "ERR_MIN_TOKENS");
        require(tokens.length <= MAX_BOUND_TOKENS, "ERR_MAX_TOKENS");

        uint256 totalWeight = 0;
        address[] memory finalTokens = new address[](tokens.length);
        for (uint8 i = 0; i < tokens.length; i++) {
            if (i > 0) {
                //token address must bt sorted
                require(tokens[i] > tokens[i - 1], "ERR_TOKENS_NOT_SORTED");
            }

            finalTokens[i] = tokens[i];
            if (tokens[i] == ETH_ADDR) {
                finalTokens[i] = weth;
            }
            totalWeight = totalWeight.badd(denorms[i]);
        }

        //pool sig generated
        bytes memory poolInfo;
        for (uint8 i = 0; i < finalTokens.length; i++) {
            //normalized weight (multiplied by 100)
            uint256 nWeight = denorms[i].bmul(100).bdiv(totalWeight);
            poolInfo = abi.encodePacked(poolInfo, finalTokens[i], nWeight);
        }
        sig = keccak256(poolInfo);

        //check empty pool
        address pool = poolSigs[sig];
        if (pool != address(0)) {
            IERC20 TP = IERC20(pool);

            if (TP.totalSupply() > minEffeciveXPT) {
                return (true, sig);
            } else {
                //remove sig
                removePoolSig(sig);
            }
        }
        exist = false;
    }

    // add pool's sig
    // only allow called by swapProxy
    function addPoolSig(bytes32 sig, address pool) external {
        require(msg.sender == swapProxy, "ERR_NOT_SWAPPROXY");
        require(pool != address(0), "ERR_ZERO_ADDR");
        require(sig != 0, "ERR_NOT_SIG");

        if (poolSigs[sig] == address(0)) {
            //add new sig
            poolSigCount = poolSigCount.badd(1);
        }

        poolSigs[sig] = pool;
        emit ADD_POOL_SIG(msg.sender, pool, sig);
    }

    // remove pool's sig
    function removePoolSig(bytes32 sig) internal {
        require(sig != 0, "ERR_NOT_SIG");

        if (poolSigs[sig] != address(0)) {
            emit RM_POOL_SIG(msg.sender, poolSigs[sig], sig);
            delete poolSigs[sig];
            poolSigCount = poolSigCount.bsub(1);
        }
    }

    // manually batch update poolSig, called by core
    function updatePoolSigs(bytes32[] calldata sigs, address[] calldata pools)
        external
        onlyCore
    {
        require(sigs.length == pools.length, "ERR_LENGTH_MISMATCH");
        require(pools.length > 0 && pools.length <= 30, "ERR_BATCH_COUNT");

        for (uint8 i = 0; i < sigs.length; i++) {
            bytes32 sig = sigs[i];
            address pool = pools[i];
            require(sig != 0, "ERR_NOT_SIG");

            //remove
            if (pool == address(0)) {
                removePoolSig(sig);
                continue;
            }

            //update
            if (poolSigs[sig] != address(0)) {
                //over write
                poolSigs[sig] = pool;
            } else {
                //add new
                poolSigs[sig] = pool;
                poolSigCount = poolSigCount.badd(1);
                emit ADD_POOL_SIG(msg.sender, pool, sig);
            }
        }
    }

    function setCore(address _core) external onlyCore {
        require(_core != address(0), "ERR_ZERO_ADDR");
        emit SET_CORE(core, _core);
        core = _core;
    }

    function setSAFU(address _safu) external onlyCore {
        require(_safu != address(0), "ERR_ZERO_ADDR");
        emit SET_SAFU(safu, _safu);
        safu = _safu;
    }

    function setMaxExitFee(uint256 _fee) external onlyCore {
        require(_fee <= (BONE / 10), "INVALID_EXIT_FEE");
        maxExitFee = _fee;
    }

    function setSafuFee(uint256 _fee) external onlyCore {
        require(_fee <= (BONE / 10), "INVALID_SAFU_FEE");
        emit SET_SAFU_FEE(SAFU_FEE, _fee);
        SAFU_FEE = _fee;
    }

    function setMinEffeciveXPT(uint256 _mfxpt) external onlyCore {
        minEffeciveXPT = _mfxpt;
        emit SET_MFXPT(_mfxpt);
    }

    function setSwapProxy(address _proxy) external onlyCore {
        require(_proxy != address(0), "ERR_ZERO_ADDR");
        emit SET_PROXY(swapProxy, _proxy);
        swapProxy = _proxy;
    }

    // update SAFU address and SAFE_FEE to pools
    function updateSafu(address[] calldata pools) external onlyCore {
        require(pools.length > 0 && pools.length <= 30, "ERR_BATCH_COUNT");

        for (uint8 i = 0; i < pools.length; i++) {
            require(Address.isContract(pools[i]), "ERR_NOT_CONTRACT");

            IXPool pool = IXPool(pools[i]);
            pool.updateSafu(safu, SAFU_FEE);
        }
    }

    // update isFarmPool status to pools
    function updateFarm(address[] calldata pools, bool isFarm)
        external
        onlyCore
    {
        require(pools.length > 0 && pools.length <= 30, "ERR_BATCH_COUNT");

        for (uint8 i = 0; i < pools.length; i++) {
            require(Address.isContract(pools[i]), "ERR_NOT_CONTRACT");

            IXPool pool = IXPool(pools[i]);
            pool.updateFarm(isFarm);

            if (isFarm) {
                emit ADD_FARM_POOL(pools[i]);
            } else {
                emit RM_FARM_POOL(pools[i]);
            }
        }
    }

    // collect any tokens in this contract to safu
    function collect(address token) external onlyCore {
        IERC20 TI = IERC20(token);

        uint256 collected = TI.balanceOf(address(this));
        TI.safeTransfer(safu, collected);

        emit COLLECT(token, collected);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_weth","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"ADD_FARM_POOL","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bytes32","name":"sig","type":"bytes32"}],"name":"ADD_POOL_SIG","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"COLLECT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"INIT_SAFU","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"RM_FARM_POOL","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bytes32","name":"sig","type":"bytes32"}],"name":"RM_POOL_SIG","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"core","type":"address"},{"indexed":true,"internalType":"address","name":"coreNew","type":"address"}],"name":"SET_CORE","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SET_MFXPT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxy","type":"address"},{"indexed":true,"internalType":"address","name":"proxyNew","type":"address"}],"name":"SET_PROXY","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"safu","type":"address"},{"indexed":true,"internalType":"address","name":"safuNew","type":"address"}],"name":"SET_SAFU","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"feeNew","type":"uint256"}],"name":"SET_SAFU_FEE","type":"event"},{"constant":true,"inputs":[],"name":"BONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EXIT_ZERO_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INIT_POOL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_IN_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_OUT_RATIO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOTAL_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_BOUND_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_POOL_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_WEIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SAFU_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"sig","type":"bytes32"},{"internalType":"address","name":"pool","type":"address"}],"name":"addPoolSig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"denorms","type":"uint256[]"}],"name":"dedupPool","outputs":[{"internalType":"bool","name":"exist","type":"bool"},{"internalType":"bytes32","name":"sig","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMaxExitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSAFU","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSafuFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSwapProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxExitFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minEffeciveXPT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"poolSigCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"poolSigs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_core","type":"address"}],"name":"setCore","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setMaxExitFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_mfxpt","type":"uint256"}],"name":"setMinEffeciveXPT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_safu","type":"address"}],"name":"setSAFU","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setSafuFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"setSwapProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"bool","name":"isFarm","type":"bool"}],"name":"updateFarm","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32[]","name":"sigs","type":"bytes32[]"},{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"updatePoolSigs","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"updateSafu","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040526601c6bf52634000600255655af3107a400060075566038d7ea4c6800060085534801561003057600080fd5b506040516121b33803806121b38339818101604052602081101561005357600080fd5b50516001600160a01b0381166100a0576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b600480546001600160a01b03199081166001600160a01b03841617909155600080543390831617815560018054309316831790556040517f28e27a759aa739430ffb3eb49355160102731a1a5104cdaddf5859b2cf6c38049190a2506120a88061010b6000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c80638165376311610125578063b94a5320116100ad578063e4a28a521161007c578063e4a28a5214610249578063ec0930211461064d578063f316616414610655578063ff42517d14610681578063ff9b0c29146106895761021c565b8063b94a532014610617578063c36596a6146102eb578063c84a705c1461061f578063da4fbe52146106455761021c565b806397b63741116100f457806397b637411461051e578063992e2a92146105f7578063adf5f51f146105ff578063b0e0d13614610607578063b7b800a41461060f5761021c565b806381653763146104e957806385ea3742146104f1578063867378c51461050e5780639381cd2b146105165761021c565b80633aac9584116101a85780635437fc7a116101775780635437fc7a1461048557806362846f8c1461048d5780637753f47b14610495578063789176101461049d57806380009630146104c35761021c565b80633aac9584146103b95780633fc8cef3146103d65780634b2e3343146103fa5780634caa2ad3146104685761021c565b806317ab06e1116101ef57806317ab06e1146102735780631e75a30e1461027b578063218b5382146102eb5780632cb2d32f146102f3578063339e6948146103b15761021c565b806306ec16f81461022157806309a3bbe41461024957806310214dfe1461026357806311b42b1e1461026b575b600080fd5b6102476004803603602081101561023757600080fd5b50356001600160a01b03166106a6565b005b6102516107d3565b60408051918252519081900360200190f35b6102516107e0565b6102516107e6565b6102516107eb565b6102476004803603604081101561029157600080fd5b810190602081018135600160201b8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460208302840111600160201b831117156102de57600080fd5b91935091503515156107f3565b610251610a56565b6102476004803603604081101561030957600080fd5b810190602081018135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b919390929091602081019035600160201b81111561037357600080fd5b82018360208201111561038557600080fd5b803590602001918460208302840111600160201b831117156103a657600080fd5b509092509050610a62565b610251610cd1565b610247600480360360208110156103cf57600080fd5b5035610cd7565b6103de610d61565b604080516001600160a01b039092168252519081900360200190f35b6102476004803603602081101561041057600080fd5b810190602081018135600160201b81111561042a57600080fd5b82018360208201111561043c57600080fd5b803590602001918460208302840111600160201b8311171561045d57600080fd5b509092509050610d70565b6102476004803603602081101561047e57600080fd5b5035610f15565b6103de610fe8565b6103de610ff7565b6103de611006565b610247600480360360208110156104b357600080fd5b50356001600160a01b031661101e565b610247600480360360208110156104d957600080fd5b50356001600160a01b0316611114565b610251611208565b6103de6004803603602081101561050757600080fd5b503561120e565b610251611229565b610251611230565b6105dc6004803603604081101561053457600080fd5b810190602081018135600160201b81111561054e57600080fd5b82018360208201111561056057600080fd5b803590602001918460208302840111600160201b8311171561058157600080fd5b919390929091602081019035600160201b81111561059e57600080fd5b8201836020820111156105b057600080fd5b803590602001918460208302840111600160201b831117156105d157600080fd5b50909250905061123d565b60408051921515835260208301919091528051918290030190f35b61025161171d565b610251611729565b61025161172f565b610251611734565b610251611739565b6102476004803603602081101561063557600080fd5b50356001600160a01b031661173f565b6103de611835565b610251611844565b6102476004803603604081101561066b57600080fd5b50803590602001356001600160a01b0316611850565b6102516119c8565b6102476004803603602081101561069f57600080fd5b50356119ce565b6000546001600160a01b031633146106f5576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d602081101561076a57600080fd5b505160015490915061078f906001600160a01b0384811691168363ffffffff611a7216565b6040805182815290516001600160a01b038516917f8f18e6fd85b5d8dde11ae15efee2cb7fbb8648e6a9a45ca48f86bba51b15071b919081900360200190a2505050565b6802b5e3af16b188000081565b60085481565b600081565b6305f5e10081565b6000546001600160a01b03163314610842576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b81158015906108525750601e8211155b610895576040805162461bcd60e51b815260206004820152600f60248201526e11549497d0905510d217d0d3d55395608a1b604482015290519081900360640190fd5b60005b60ff8116831115610a50576108ca84848360ff168181106108b557fe5b905060200201356001600160a01b0316611ac4565b61090e576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d0d3d395149050d560821b604482015290519081900360640190fd5b600084848360ff1681811061091f57fe5b905060200201356001600160a01b03169050806001600160a01b0316631ca22ea5846040518263ffffffff1660e01b81526004018082151515158152602001915050600060405180830381600087803b15801561097b57600080fd5b505af115801561098f573d6000803e3d6000fd5b5050505082156109f25784848360ff168181106109a857fe5b905060200201356001600160a01b03166001600160a01b03167f18fca4cc1df174d0863c5c4a54164275fdba8b8118576f670d7bf76f4becd79160405160405180910390a2610a47565b84848360ff16818110610a0157fe5b905060200201356001600160a01b03166001600160a01b03167fedf2fb6f942bf99106e9c6a811fff36327aa11fc01c1ecdf76d5a2f38d534c0660405160405180910390a25b50600101610898565b50505050565b670de0b6b3a764000081565b6000546001600160a01b03163314610ab1576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b828114610afb576040805162461bcd60e51b815260206004820152601360248201527208aa4a4be988a9c8ea890be9a92a69a82a8869606b1b604482015290519081900360640190fd5b8015801590610b0b5750601e8111155b610b4e576040805162461bcd60e51b815260206004820152600f60248201526e11549497d0905510d217d0d3d55395608a1b604482015290519081900360640190fd5b60005b60ff8116841115610cca57600085858360ff16818110610b6d57fe5b905060200201359050600084848460ff16818110610b8757fe5b905060200201356001600160a01b03169050816000801b1415610bdf576040805162461bcd60e51b815260206004820152600b60248201526a4552525f4e4f545f53494760a81b604482015290519081900360640190fd5b6001600160a01b038116610bfd57610bf682611b00565b5050610cc2565b6000828152600560205260409020546001600160a01b031615610c4657600082815260056020526040902080546001600160a01b0319166001600160a01b038316179055610cbf565b600082815260056020526040902080546001600160a01b0319166001600160a01b038316179055600654610c7b906001611be5565b6006556040805183815290516001600160a01b0383169133917f0c9edbf5ba84d1e14b01ee9d8e014f0f178be48139f5b8e3ade62f57f08dfbbd9181900360200190a35b50505b600101610b51565b5050505050565b60065481565b6000546001600160a01b03163314610d26576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b60078190556040805182815290517f3195aa1ad5347903ddadaa494c56eeb155d2a534bc925908dc7bce7c858bd99e9181900360200190a150565b6004546001600160a01b031681565b6000546001600160a01b03163314610dbf576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b8015801590610dcf5750601e8111155b610e12576040805162461bcd60e51b815260206004820152600f60248201526e11549497d0905510d217d0d3d55395608a1b604482015290519081900360640190fd5b60005b60ff8116821115610f1057610e3283838360ff168181106108b557fe5b610e76576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d0d3d395149050d560821b604482015290519081900360640190fd5b600083838360ff16818110610e8757fe5b6001546002546040805163066b34df60e51b81526001600160a01b03938416600482015260248101929092525160209093029490940135169350839263cd669be0925060448082019260009290919082900301818387803b158015610eeb57600080fd5b505af1158015610eff573d6000803e3d6000fd5b505060019093019250610e15915050565b505050565b6000546001600160a01b03163314610f64576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b67016345785d8a0000811115610fb4576040805162461bcd60e51b815260206004820152601060248201526f494e56414c49445f534146555f46454560801b604482015290519081900360640190fd5b6002546040518291907f273e6984e840d3d07eaeac4cb6d97d66bef1a51fb6bc4cc2b1070779757cad6890600090a3600255565b6001546001600160a01b031690565b6003546001600160a01b031690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000546001600160a01b0316331461106d576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b6001600160a01b0381166110b8576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fbe25364dd2dd2ef676922ad795c084a0a86af0e709dd01fd54f3dc4cd9de86d990600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611163576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b6001600160a01b0381166111ae576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917e56b56524ccc7cf1d147fdc1b3201b6e5bf8df426ebc07861b3564064d7fc2d91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60025481565b6005602052600090815260409020546001600160a01b031681565b620f424081565b68056bc75e2d6310000081565b60035460009081906001600160a01b03163314611295576040805162461bcd60e51b81526020600482015260116024820152704552525f4e4f545f5357415050524f585960781b604482015290519081900360640190fd5b8483146112df576040805162461bcd60e51b815260206004820152601360248201527208aa4a4be988a9c8ea890be9a92a69a82a8869606b1b604482015290519081900360640190fd5b6002851015611326576040805162461bcd60e51b815260206004820152600e60248201526d4552525f4d494e5f544f4b454e5360901b604482015290519081900360640190fd5b600885111561136d576040805162461bcd60e51b815260206004820152600e60248201526d4552525f4d41585f544f4b454e5360901b604482015290519081900360640190fd5b60408051868152602080880282010190915260009060609087801561139c578160200160208202803883390190505b50905060005b60ff811688111561154f5760ff8116156114535788886001830360ff168181106113c857fe5b905060200201356001600160a01b03166001600160a01b031689898360ff168181106113f057fe5b905060200201356001600160a01b03166001600160a01b031611611453576040805162461bcd60e51b815260206004820152601560248201527411549497d513d2d15394d7d393d517d4d3d4951151605a1b604482015290519081900360640190fd5b88888260ff1681811061146257fe5b905060200201356001600160a01b0316828260ff168151811061148157fe5b6001600160a01b039092166020928302919091019091015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898960ff84168181106114bd57fe5b905060200201356001600160a01b03166001600160a01b0316141561151d5760045482516001600160a01b0390911690839060ff84169081106114fc57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b61154587878360ff1681811061152f57fe5b9050602002013584611be590919063ffffffff16565b92506001016113a2565b50606060005b82518160ff16101561165057600061159c8561159060648c8c8760ff1681811061157b57fe5b90506020020135611c3990919063ffffffff16565b9063ffffffff611d0216565b905082848360ff16815181106115ae57fe5b6020026020010151826040516020018084805190602001908083835b602083106115e95780518252601f1990920191602091820191016115ca565b6001836020036101000a038019825116818451168082178552505050505050905001836001600160a01b03166001600160a01b031660601b815260140182815260200193505050506040516020818303038152906040529250508080600101915050611555565b508051602080830191909120600081815260059092526040909120549094506001600160a01b0316801561170b576000819050600754816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116bf57600080fd5b505afa1580156116d3573d6000803e3d6000fd5b505050506040513d60208110156116e957600080fd5b505111156117005750600195506117149350505050565b61170986611b00565b505b60009550505050505b94509492505050565b6704a03ce68d21555681565b60025490565b600881565b600281565b60075481565b6000546001600160a01b0316331461178e576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b6001600160a01b0381166117d9576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b6003546040516001600160a01b038084169216907f40cf3a3e5ead7c479e23dfc4ed02bf3734aadbc60fa490bef7a28091b3a8767590600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6706f05b59d3b2000081565b6003546001600160a01b031633146118a3576040805162461bcd60e51b81526020600482015260116024820152704552525f4e4f545f5357415050524f585960781b604482015290519081900360640190fd5b6001600160a01b0381166118ee576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b8161192e576040805162461bcd60e51b815260206004820152600b60248201526a4552525f4e4f545f53494760a81b604482015290519081900360640190fd5b6000828152600560205260409020546001600160a01b03166119625760065461195e90600163ffffffff611be516565b6006555b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915582518581529251909233927f0c9edbf5ba84d1e14b01ee9d8e014f0f178be48139f5b8e3ade62f57f08dfbbd92918290030190a35050565b60085490565b6000546001600160a01b03163314611a1d576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b67016345785d8a0000811115611a6d576040805162461bcd60e51b815260206004820152601060248201526f494e56414c49445f455849545f46454560801b604482015290519081900360640190fd5b600855565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f10908490611e0a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611af857508115155b949350505050565b80611b40576040805162461bcd60e51b815260206004820152600b60248201526a4552525f4e4f545f53494760a81b604482015290519081900360640190fd5b6000818152600560205260409020546001600160a01b031615611be25760008181526005602090815260409182902054825184815292516001600160a01b039091169233927fe5bb0b961db3612bdacf2026900a737ab034adde73520ea0eaac2dba6c6b623892918290030190a3600081815260056020526040902080546001600160a01b0319169055600654611bde90600163ffffffff611fc216565b6006555b50565b600082820183811015611c32576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b6000828202831580611c53575082848281611c5057fe5b04145b611c97576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015611cea576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a7640000825b049695505050505050565b600081611d45576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580611d6d5750670de0b6b3a7640000848281611d6a57fe5b04145b611db1576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015611dff576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6000848281611cf757fe5b611e1c826001600160a01b0316611ac4565b611e6d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611eab5780518252601f199092019160209182019101611e8c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611f0d576040519150601f19603f3d011682016040523d82523d6000602084013e611f12565b606091505b509150915081611f69576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610a5057808060200190516020811015611f8557600080fd5b5051610a505760405162461bcd60e51b815260040180806020018281038252602a81526020018061204a602a913960400191505060405180910390fd5b6000806000611fd18585612024565b91509150801561201c576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60008082841061203a5750508082036000612042565b505081810360015b925092905056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158207417a3f608928a5fc5f33b2b2e647f4935dabd58de2d99ecb3a420f98fd852b764736f6c63430005110032000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061021c5760003560e01c80638165376311610125578063b94a5320116100ad578063e4a28a521161007c578063e4a28a5214610249578063ec0930211461064d578063f316616414610655578063ff42517d14610681578063ff9b0c29146106895761021c565b8063b94a532014610617578063c36596a6146102eb578063c84a705c1461061f578063da4fbe52146106455761021c565b806397b63741116100f457806397b637411461051e578063992e2a92146105f7578063adf5f51f146105ff578063b0e0d13614610607578063b7b800a41461060f5761021c565b806381653763146104e957806385ea3742146104f1578063867378c51461050e5780639381cd2b146105165761021c565b80633aac9584116101a85780635437fc7a116101775780635437fc7a1461048557806362846f8c1461048d5780637753f47b14610495578063789176101461049d57806380009630146104c35761021c565b80633aac9584146103b95780633fc8cef3146103d65780634b2e3343146103fa5780634caa2ad3146104685761021c565b806317ab06e1116101ef57806317ab06e1146102735780631e75a30e1461027b578063218b5382146102eb5780632cb2d32f146102f3578063339e6948146103b15761021c565b806306ec16f81461022157806309a3bbe41461024957806310214dfe1461026357806311b42b1e1461026b575b600080fd5b6102476004803603602081101561023757600080fd5b50356001600160a01b03166106a6565b005b6102516107d3565b60408051918252519081900360200190f35b6102516107e0565b6102516107e6565b6102516107eb565b6102476004803603604081101561029157600080fd5b810190602081018135600160201b8111156102ab57600080fd5b8201836020820111156102bd57600080fd5b803590602001918460208302840111600160201b831117156102de57600080fd5b91935091503515156107f3565b610251610a56565b6102476004803603604081101561030957600080fd5b810190602081018135600160201b81111561032357600080fd5b82018360208201111561033557600080fd5b803590602001918460208302840111600160201b8311171561035657600080fd5b919390929091602081019035600160201b81111561037357600080fd5b82018360208201111561038557600080fd5b803590602001918460208302840111600160201b831117156103a657600080fd5b509092509050610a62565b610251610cd1565b610247600480360360208110156103cf57600080fd5b5035610cd7565b6103de610d61565b604080516001600160a01b039092168252519081900360200190f35b6102476004803603602081101561041057600080fd5b810190602081018135600160201b81111561042a57600080fd5b82018360208201111561043c57600080fd5b803590602001918460208302840111600160201b8311171561045d57600080fd5b509092509050610d70565b6102476004803603602081101561047e57600080fd5b5035610f15565b6103de610fe8565b6103de610ff7565b6103de611006565b610247600480360360208110156104b357600080fd5b50356001600160a01b031661101e565b610247600480360360208110156104d957600080fd5b50356001600160a01b0316611114565b610251611208565b6103de6004803603602081101561050757600080fd5b503561120e565b610251611229565b610251611230565b6105dc6004803603604081101561053457600080fd5b810190602081018135600160201b81111561054e57600080fd5b82018360208201111561056057600080fd5b803590602001918460208302840111600160201b8311171561058157600080fd5b919390929091602081019035600160201b81111561059e57600080fd5b8201836020820111156105b057600080fd5b803590602001918460208302840111600160201b831117156105d157600080fd5b50909250905061123d565b60408051921515835260208301919091528051918290030190f35b61025161171d565b610251611729565b61025161172f565b610251611734565b610251611739565b6102476004803603602081101561063557600080fd5b50356001600160a01b031661173f565b6103de611835565b610251611844565b6102476004803603604081101561066b57600080fd5b50803590602001356001600160a01b0316611850565b6102516119c8565b6102476004803603602081101561069f57600080fd5b50356119ce565b6000546001600160a01b031633146106f5576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d602081101561076a57600080fd5b505160015490915061078f906001600160a01b0384811691168363ffffffff611a7216565b6040805182815290516001600160a01b038516917f8f18e6fd85b5d8dde11ae15efee2cb7fbb8648e6a9a45ca48f86bba51b15071b919081900360200190a2505050565b6802b5e3af16b188000081565b60085481565b600081565b6305f5e10081565b6000546001600160a01b03163314610842576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b81158015906108525750601e8211155b610895576040805162461bcd60e51b815260206004820152600f60248201526e11549497d0905510d217d0d3d55395608a1b604482015290519081900360640190fd5b60005b60ff8116831115610a50576108ca84848360ff168181106108b557fe5b905060200201356001600160a01b0316611ac4565b61090e576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d0d3d395149050d560821b604482015290519081900360640190fd5b600084848360ff1681811061091f57fe5b905060200201356001600160a01b03169050806001600160a01b0316631ca22ea5846040518263ffffffff1660e01b81526004018082151515158152602001915050600060405180830381600087803b15801561097b57600080fd5b505af115801561098f573d6000803e3d6000fd5b5050505082156109f25784848360ff168181106109a857fe5b905060200201356001600160a01b03166001600160a01b03167f18fca4cc1df174d0863c5c4a54164275fdba8b8118576f670d7bf76f4becd79160405160405180910390a2610a47565b84848360ff16818110610a0157fe5b905060200201356001600160a01b03166001600160a01b03167fedf2fb6f942bf99106e9c6a811fff36327aa11fc01c1ecdf76d5a2f38d534c0660405160405180910390a25b50600101610898565b50505050565b670de0b6b3a764000081565b6000546001600160a01b03163314610ab1576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b828114610afb576040805162461bcd60e51b815260206004820152601360248201527208aa4a4be988a9c8ea890be9a92a69a82a8869606b1b604482015290519081900360640190fd5b8015801590610b0b5750601e8111155b610b4e576040805162461bcd60e51b815260206004820152600f60248201526e11549497d0905510d217d0d3d55395608a1b604482015290519081900360640190fd5b60005b60ff8116841115610cca57600085858360ff16818110610b6d57fe5b905060200201359050600084848460ff16818110610b8757fe5b905060200201356001600160a01b03169050816000801b1415610bdf576040805162461bcd60e51b815260206004820152600b60248201526a4552525f4e4f545f53494760a81b604482015290519081900360640190fd5b6001600160a01b038116610bfd57610bf682611b00565b5050610cc2565b6000828152600560205260409020546001600160a01b031615610c4657600082815260056020526040902080546001600160a01b0319166001600160a01b038316179055610cbf565b600082815260056020526040902080546001600160a01b0319166001600160a01b038316179055600654610c7b906001611be5565b6006556040805183815290516001600160a01b0383169133917f0c9edbf5ba84d1e14b01ee9d8e014f0f178be48139f5b8e3ade62f57f08dfbbd9181900360200190a35b50505b600101610b51565b5050505050565b60065481565b6000546001600160a01b03163314610d26576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b60078190556040805182815290517f3195aa1ad5347903ddadaa494c56eeb155d2a534bc925908dc7bce7c858bd99e9181900360200190a150565b6004546001600160a01b031681565b6000546001600160a01b03163314610dbf576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b8015801590610dcf5750601e8111155b610e12576040805162461bcd60e51b815260206004820152600f60248201526e11549497d0905510d217d0d3d55395608a1b604482015290519081900360640190fd5b60005b60ff8116821115610f1057610e3283838360ff168181106108b557fe5b610e76576040805162461bcd60e51b815260206004820152601060248201526f11549497d393d517d0d3d395149050d560821b604482015290519081900360640190fd5b600083838360ff16818110610e8757fe5b6001546002546040805163066b34df60e51b81526001600160a01b03938416600482015260248101929092525160209093029490940135169350839263cd669be0925060448082019260009290919082900301818387803b158015610eeb57600080fd5b505af1158015610eff573d6000803e3d6000fd5b505060019093019250610e15915050565b505050565b6000546001600160a01b03163314610f64576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b67016345785d8a0000811115610fb4576040805162461bcd60e51b815260206004820152601060248201526f494e56414c49445f534146555f46454560801b604482015290519081900360640190fd5b6002546040518291907f273e6984e840d3d07eaeac4cb6d97d66bef1a51fb6bc4cc2b1070779757cad6890600090a3600255565b6001546001600160a01b031690565b6003546001600160a01b031690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000546001600160a01b0316331461106d576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b6001600160a01b0381166110b8576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b6001546040516001600160a01b038084169216907fbe25364dd2dd2ef676922ad795c084a0a86af0e709dd01fd54f3dc4cd9de86d990600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611163576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b6001600160a01b0381166111ae576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917e56b56524ccc7cf1d147fdc1b3201b6e5bf8df426ebc07861b3564064d7fc2d91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60025481565b6005602052600090815260409020546001600160a01b031681565b620f424081565b68056bc75e2d6310000081565b60035460009081906001600160a01b03163314611295576040805162461bcd60e51b81526020600482015260116024820152704552525f4e4f545f5357415050524f585960781b604482015290519081900360640190fd5b8483146112df576040805162461bcd60e51b815260206004820152601360248201527208aa4a4be988a9c8ea890be9a92a69a82a8869606b1b604482015290519081900360640190fd5b6002851015611326576040805162461bcd60e51b815260206004820152600e60248201526d4552525f4d494e5f544f4b454e5360901b604482015290519081900360640190fd5b600885111561136d576040805162461bcd60e51b815260206004820152600e60248201526d4552525f4d41585f544f4b454e5360901b604482015290519081900360640190fd5b60408051868152602080880282010190915260009060609087801561139c578160200160208202803883390190505b50905060005b60ff811688111561154f5760ff8116156114535788886001830360ff168181106113c857fe5b905060200201356001600160a01b03166001600160a01b031689898360ff168181106113f057fe5b905060200201356001600160a01b03166001600160a01b031611611453576040805162461bcd60e51b815260206004820152601560248201527411549497d513d2d15394d7d393d517d4d3d4951151605a1b604482015290519081900360640190fd5b88888260ff1681811061146257fe5b905060200201356001600160a01b0316828260ff168151811061148157fe5b6001600160a01b039092166020928302919091019091015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee898960ff84168181106114bd57fe5b905060200201356001600160a01b03166001600160a01b0316141561151d5760045482516001600160a01b0390911690839060ff84169081106114fc57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250505b61154587878360ff1681811061152f57fe5b9050602002013584611be590919063ffffffff16565b92506001016113a2565b50606060005b82518160ff16101561165057600061159c8561159060648c8c8760ff1681811061157b57fe5b90506020020135611c3990919063ffffffff16565b9063ffffffff611d0216565b905082848360ff16815181106115ae57fe5b6020026020010151826040516020018084805190602001908083835b602083106115e95780518252601f1990920191602091820191016115ca565b6001836020036101000a038019825116818451168082178552505050505050905001836001600160a01b03166001600160a01b031660601b815260140182815260200193505050506040516020818303038152906040529250508080600101915050611555565b508051602080830191909120600081815260059092526040909120549094506001600160a01b0316801561170b576000819050600754816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116bf57600080fd5b505afa1580156116d3573d6000803e3d6000fd5b505050506040513d60208110156116e957600080fd5b505111156117005750600195506117149350505050565b61170986611b00565b505b60009550505050505b94509492505050565b6704a03ce68d21555681565b60025490565b600881565b600281565b60075481565b6000546001600160a01b0316331461178e576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b6001600160a01b0381166117d9576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b6003546040516001600160a01b038084169216907f40cf3a3e5ead7c479e23dfc4ed02bf3734aadbc60fa490bef7a28091b3a8767590600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b6706f05b59d3b2000081565b6003546001600160a01b031633146118a3576040805162461bcd60e51b81526020600482015260116024820152704552525f4e4f545f5357415050524f585960781b604482015290519081900360640190fd5b6001600160a01b0381166118ee576040805162461bcd60e51b815260206004820152600d60248201526c22a9292fad22a927afa0a2222960991b604482015290519081900360640190fd5b8161192e576040805162461bcd60e51b815260206004820152600b60248201526a4552525f4e4f545f53494760a81b604482015290519081900360640190fd5b6000828152600560205260409020546001600160a01b03166119625760065461195e90600163ffffffff611be516565b6006555b60008281526005602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915582518581529251909233927f0c9edbf5ba84d1e14b01ee9d8e014f0f178be48139f5b8e3ade62f57f08dfbbd92918290030190a35050565b60085490565b6000546001600160a01b03163314611a1d576040805162461bcd60e51b815260206004820152600d60248201526c08aa4a4be869ea48abe82aaa89609b1b604482015290519081900360640190fd5b67016345785d8a0000811115611a6d576040805162461bcd60e51b815260206004820152601060248201526f494e56414c49445f455849545f46454560801b604482015290519081900360640190fd5b600855565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f10908490611e0a565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611af857508115155b949350505050565b80611b40576040805162461bcd60e51b815260206004820152600b60248201526a4552525f4e4f545f53494760a81b604482015290519081900360640190fd5b6000818152600560205260409020546001600160a01b031615611be25760008181526005602090815260409182902054825184815292516001600160a01b039091169233927fe5bb0b961db3612bdacf2026900a737ab034adde73520ea0eaac2dba6c6b623892918290030190a3600081815260056020526040902080546001600160a01b0319169055600654611bde90600163ffffffff611fc216565b6006555b50565b600082820183811015611c32576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fd5b9392505050565b6000828202831580611c53575082848281611c5057fe5b04145b611c97576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015611cea576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a7640000825b049695505050505050565b600081611d45576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580611d6d5750670de0b6b3a7640000848281611d6a57fe5b04145b611db1576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015611dff576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6000848281611cf757fe5b611e1c826001600160a01b0316611ac4565b611e6d576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310611eab5780518252601f199092019160209182019101611e8c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611f0d576040519150601f19603f3d011682016040523d82523d6000602084013e611f12565b606091505b509150915081611f69576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610a5057808060200190516020811015611f8557600080fd5b5051610a505760405162461bcd60e51b815260040180806020018281038252602a81526020018061204a602a913960400191505060405180910390fd5b6000806000611fd18585612024565b91509150801561201c576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b60008082841061203a5750508082036000612042565b505081810360015b925092905056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158207417a3f608928a5fc5f33b2b2e647f4935dabd58de2d99ecb3a420f98fd852b764736f6c63430005110032

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

17081:8744:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17081:8744:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25582:240;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25582:240:0;-1:-1:-1;;;;;25582:240:0;;:::i;:::-;;384:52;;;:::i;:::-;;;;;;;;;;;;;;;;17909:39;;;:::i;233:41::-;;;:::i;567:47::-;;;:::i;24956:566::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24956:566:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;24956:566:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24956:566:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24956:566:0;;-1:-1:-1;24956:566:0;-1:-1:-1;24956:566:0;;;;:::i;283:41::-;;;:::i;22449:955::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22449:955:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;22449:955:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22449:955:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;22449:955:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;22449:955:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22449:955:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;22449:955:0;;-1:-1:-1;22449:955:0;-1:-1:-1;22449:955:0;:::i;17755:27::-;;;:::i;24131:136::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24131:136:0;;:::i;17571:19::-;;;:::i;:::-;;;;-1:-1:-1;;;;;17571:19:0;;;;;;;;;;;;;;24527:379;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24527:379:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;24527:379:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24527:379:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;24527:379:0;;-1:-1:-1;24527:379:0;-1:-1:-1;24527:379:0;:::i;23934:189::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23934:189:0;;:::i;19145:81::-;;;:::i;19431:91::-;;;:::i;17469:95::-;;;:::i;23594:174::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23594:174:0;-1:-1:-1;;;;;23594:174:0;;:::i;23412:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23412:174:0;-1:-1:-1;;;;;23412:174:0;;:::i;17317:44::-;;;:::i;17705:43::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17705:43:0;;:::i;489:::-;;;:::i;623:53::-;;;:::i;19831:1707::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19831:1707:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;19831:1707:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19831:1707:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;19831:1707:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;19831:1707:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19831:1707:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;19831:1707:0;;-1:-1:-1;19831:1707:0;-1:-1:-1;19831:1707:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;739:58;;;:::i;19335:88::-;;;:::i;180:44::-;;;:::i;129:::-;;;:::i;17849:38::-;;;:::i;24275:194::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24275:194:0;-1:-1:-1;;;;;24275:194:0;;:::i;19056:81::-;;;:::i;685:47::-;;;:::i;21608:444::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21608:444:0;;;;;;-1:-1:-1;;;;;21608:444:0;;:::i;19234:93::-;;;:::i;23776:150::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23776:150:0;;:::i;25582:240::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;25701:27;;;-1:-1:-1;;;25701:27:0;;25722:4;25701:27;;;;;;25662:5;;25643:9;;-1:-1:-1;;;;;25701:12:0;;;;;:27;;;;;;;;;;;;;;:12;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;25701:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25701:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25701:27:0;25755:4;;25701:27;;-1:-1:-1;25739:32:0;;-1:-1:-1;;;;;25739:15:0;;;;25755:4;25701:27;25739:32;:15;:32;:::i;:::-;25789:25;;;;;;;;-1:-1:-1;;;;;25789:25:0;;;;;;;;;;;;;18811:1;;25582:240;:::o;384:52::-;427:9;384:52;:::o;17909:39::-;;;;:::o;233:41::-;273:1;233:41;:::o;567:47::-;609:5;567:47;:::o;24956:566::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;25075:16;;;;;:38;;-1:-1:-1;25111:2:0;25095:18;;;25075:38;25067:66;;;;;-1:-1:-1;;;25067:66:0;;;;;;;;;;;;-1:-1:-1;;;25067:66:0;;;;;;;;;;;;;;;25151:7;25146:369;25164:16;;;;-1:-1:-1;25146:369:0;;;25210:28;25229:5;;25235:1;25229:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;25229:8:0;25210:18;:28::i;:::-;25202:57;;;;;-1:-1:-1;;;25202:57:0;;;;;;;;;;;;-1:-1:-1;;;25202:57:0;;;;;;;;;;;;;;;25276:11;25297:5;;25303:1;25297:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;25297:8:0;25276:30;;25321:4;-1:-1:-1;;;;;25321:15:0;;25337:6;25321:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25321:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25321:23:0;;;;25365:6;25361:143;;;25411:5;;25417:1;25411:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;25411:8:0;-1:-1:-1;;;;;25397:23:0;;;;;;;;;;;25361:143;;;25479:5;;25485:1;25479:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;25479:8:0;-1:-1:-1;;;;;25466:22:0;;;;;;;;;;;25361:143;-1:-1:-1;25182:3:0;;25146:369;;;;24956:566;;;:::o;283:41::-;114:6;283:41;:::o;22449:955::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;22584:27;;;22576:59;;;;;-1:-1:-1;;;22576:59:0;;;;;;;;;;;;-1:-1:-1;;;22576:59:0;;;;;;;;;;;;;;;22654:16;;;;;:38;;-1:-1:-1;22690:2:0;22674:18;;;22654:38;22646:66;;;;;-1:-1:-1;;;22646:66:0;;;;;;;;;;;;-1:-1:-1;;;22646:66:0;;;;;;;;;;;;;;;22730:7;22725:672;22743:15;;;;-1:-1:-1;22725:672:0;;;22780:11;22794:4;;22799:1;22794:7;;;;;;;;;;;;;;;22780:21;;22816:12;22831:5;;22837:1;22831:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;22831:8:0;22816:23;;22862:3;22869:1;22862:8;;;;22854:32;;;;;-1:-1:-1;;;22854:32:0;;;;;;;;;;;;-1:-1:-1;;;22854:32:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22929:18:0;;22925:104;;22968:18;22982:3;22968:13;:18::i;:::-;23005:8;;;;22925:104;23096:1;23071:13;;;:8;:13;;;;;;-1:-1:-1;;;;;23071:13:0;:27;23067:319;;23149:13;;;;:8;:13;;;;;:20;;-1:-1:-1;;;;;;23149:20:0;-1:-1:-1;;;;;23149:20:0;;;;;23067:319;;;23237:13;;;;:8;:13;;;;;:20;;-1:-1:-1;;;;;;23237:20:0;-1:-1:-1;;;;;23237:20:0;;;;;23291:12;;:20;;-1:-1:-1;23291:17:0;:20::i;:::-;23276:12;:35;23335;;;;;;;;-1:-1:-1;;;;;23335:35:0;;;23348:10;;23335:35;;;;;;;;;23067:319;22725:672;;;22760:3;;22725:672;;;;22449:955;;;;:::o;17755:27::-;;;;:::o;24131:136::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;24203:14;:23;;;24242:17;;;;;;;;;;;;;;;;;24131:136;:::o;17571:19::-;;;-1:-1:-1;;;;;17571:19:0;;:::o;24527:379::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;24610:16;;;;;:38;;-1:-1:-1;24646:2:0;24630:18;;;24610:38;24602:66;;;;;-1:-1:-1;;;24602:66:0;;;;;;;;;;;;-1:-1:-1;;;24602:66:0;;;;;;;;;;;;;;;24686:7;24681:218;24699:16;;;;-1:-1:-1;24681:218:0;;;24745:28;24764:5;;24770:1;24764:8;;;;;;;;24745:28;24737:57;;;;;-1:-1:-1;;;24737:57:0;;;;;;;;;;;;-1:-1:-1;;;24737:57:0;;;;;;;;;;;;;;;24811:11;24832:5;;24838:1;24832:8;;;;;;;;;24872:4;;24878:8;;24856:31;;;-1:-1:-1;;;24856:31:0;;-1:-1:-1;;;;;24872:4:0;;;24856:31;;;;;;;;;;;;24832:8;;;;;;;;;;;-1:-1:-1;24832:8:0;;24856:15;;-1:-1:-1;24856:31:0;;;;;24872:4;;24856:31;;;;;;;;24872:4;24832:8;24856:31;;;5:2:-1;;;;30:1;27;20:12;5:2;24856:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24717:3:0;;;;;-1:-1:-1;24681:218:0;;-1:-1:-1;;24681:218:0;;;24527:379;;:::o;23934:189::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;24014:9;24005:19;;;23997:48;;;;;-1:-1:-1;;;23997:48:0;;;;;;;;;;;;-1:-1:-1;;;23997:48:0;;;;;;;;;;;;;;;24074:8;;24061:28;;24084:4;;24074:8;24061:28;;;;;24100:8;:15;23934:189::o;19145:81::-;19214:4;;-1:-1:-1;;;;;19214:4:0;19145:81;:::o;19431:91::-;19505:9;;-1:-1:-1;;;;;19505:9:0;19431:91;:::o;17469:95::-;17521:42;17469:95;:::o;23594:174::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23663:19:0;;23655:45;;;;;-1:-1:-1;;;23655:45:0;;;;;;;;;;;;-1:-1:-1;;;23655:45:0;;;;;;;;;;;;;;;23725:4;;23716:21;;-1:-1:-1;;;;;23716:21:0;;;;23725:4;;23716:21;;23725:4;;23716:21;23748:4;:12;;-1:-1:-1;;;;;;23748:12:0;-1:-1:-1;;;;;23748:12:0;;;;;;;;;;23594:174::o;23412:::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;23481:19:0;;23473:45;;;;;-1:-1:-1;;;23473:45:0;;;;;;;;;;;;-1:-1:-1;;;23473:45:0;;;;;;;;;;;;;;;23543:4;;;23534:21;;-1:-1:-1;;;;;23534:21:0;;;;23543:4;;;23534:21;;;23566:4;:12;;-1:-1:-1;;;;;;23566:12:0;-1:-1:-1;;;;;23566:12:0;;;;;;;;;;23412:174::o;17317:44::-;;;;:::o;17705:43::-;;;;;;;;;;;;-1:-1:-1;;;;;17705:43:0;;:::o;489:::-;527:5;489:43;:::o;623:53::-;666:10;623:53;:::o;19831:1707::-;20004:9;;19941:10;;;;-1:-1:-1;;;;;20004:9:0;19990:10;:23;19982:53;;;;;-1:-1:-1;;;19982:53:0;;;;;;;;;;;;-1:-1:-1;;;19982:53:0;;;;;;;;;;;;;;;20054:31;;;20046:63;;;;;-1:-1:-1;;;20046:63:0;;;;;;;;;;;;-1:-1:-1;;;20046:63:0;;;;;;;;;;;;;;;172:1;20128:33;;;20120:60;;;;;-1:-1:-1;;;20120:60:0;;;;;;;;;;;;-1:-1:-1;;;20120:60:0;;;;;;;;;;;;;;;223:1;20199:33;;;20191:60;;;;;-1:-1:-1;;;20191:60:0;;;;;;;;;;;;-1:-1:-1;;;20191:60:0;;;;;;;;;;;;;;;20329:28;;;;;;;;;;;;;;;;20264:19;;20298:28;;20343:6;20329:28;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;20329:28:0;-1:-1:-1;20298:59:0;-1:-1:-1;20373:7:0;20368:418;20386:17;;;;-1:-1:-1;20368:418:0;;;20429:5;;;;20425:153;;20523:6;;20534:1;20530;:5;20523:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;20523:13:0;-1:-1:-1;;;;;20511:25:0;:6;;20518:1;20511:9;;;;;;;;;;;;;;;-1:-1:-1;;;;;20511:9:0;-1:-1:-1;;;;;20511:25:0;;20503:59;;;;;-1:-1:-1;;;20503:59:0;;;;;;;;;;;;-1:-1:-1;;;20503:59:0;;;;;;;;;;;;;;;20611:6;;20618:1;20611:9;;;;;;;;;;;;;;;-1:-1:-1;;;;;20611:9:0;20594:11;20606:1;20594:14;;;;;;;;;;-1:-1:-1;;;;;20594:26:0;;;:14;;;;;;;;;;;:26;17521:42;20639:6;;:9;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20639:9:0;-1:-1:-1;;;;;20639:21:0;;20635:83;;;20698:4;;20681:14;;-1:-1:-1;;;;;20698:4:0;;;;20681:11;;:14;;;;;;;;;;;;;;;:21;-1:-1:-1;;;;;20681:21:0;;;-1:-1:-1;;;;;20681:21:0;;;;;20635:83;20746:28;20763:7;;20771:1;20763:10;;;;;;;;;;;;;;;20746:11;:16;;:28;;;;:::i;:::-;20732:42;-1:-1:-1;20405:3:0;;20368:418;;;-1:-1:-1;20828:21:0;20865:7;20860:260;20882:11;:18;20878:1;:22;;;20860:260;;;20975:15;20993:38;21019:11;20993:20;21009:3;20993:7;;21001:1;20993:10;;;;;;;;;;;;;;;:15;;:20;;;;:::i;:::-;:25;:38;:25;:38;:::i;:::-;20975:56;;21074:8;21084:11;21096:1;21084:14;;;;;;;;;;;;;;;;21100:7;21057:51;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;21057:51:0;;;;;;;-1:-1:-1;;;;;21057:51:0;-1:-1:-1;;;;;21057:51:0;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21057:51:0;;;21046:62;;20860:260;20902:3;;;;;;;20860:260;;;-1:-1:-1;21136:19:0;;;;;;;;;;21196:12;21211:13;;;:8;:13;;;;;;;;21136:19;;-1:-1:-1;;;;;;21211:13:0;21239:18;;21235:272;;21274:9;21293:4;21274:24;;21338:14;;21319:2;-1:-1:-1;;;;;21319:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21319:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21319:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21319:16:0;:33;21315:181;;;-1:-1:-1;21381:4:0;;-1:-1:-1;21373:18:0;;-1:-1:-1;;;;21373:18:0;21315:181;21462:18;21476:3;21462:13;:18::i;:::-;21235:272;;21525:5;21517:13;;19831:1707;;;;;;;;;;;;:::o;739:58::-;779:18;739:58;:::o;19335:88::-;19407:8;;19335:88;:::o;180:44::-;223:1;180:44;:::o;129:::-;172:1;129:44;:::o;17849:38::-;;;;:::o;24275:194::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24350:20:0;;24342:46;;;;;-1:-1:-1;;;24342:46:0;;;;;;;;;;;;-1:-1:-1;;;24342:46:0;;;;;;;;;;;;;;;24414:9;;24404:28;;-1:-1:-1;;;;;24404:28:0;;;;24414:9;;24404:28;;24414:9;;24404:28;24443:9;:18;;-1:-1:-1;;;;;;24443:18:0;-1:-1:-1;;;;;24443:18:0;;;;;;;;;;24275:194::o;19056:81::-;19098:7;19125:4;-1:-1:-1;;;;;19125:4:0;19056:81;:::o;685:47::-;724:8;685:47;:::o;21608:444::-;21697:9;;-1:-1:-1;;;;;21697:9:0;21683:10;:23;21675:53;;;;;-1:-1:-1;;;21675:53:0;;;;;;;;;;;;-1:-1:-1;;;21675:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21747:18:0;;21739:44;;;;;-1:-1:-1;;;21739:44:0;;;;;;;;;;;;-1:-1:-1;;;21739:44:0;;;;;;;;;;;;;;;21802:8;21794:32;;;;;-1:-1:-1;;;21794:32:0;;;;;;;;;;;;-1:-1:-1;;;21794:32:0;;;;;;;;;;;;;;;21868:1;21843:13;;;:8;:13;;;;;;-1:-1:-1;;;;;21843:13:0;21839:122;;21929:12;;:20;;21947:1;21929:20;:17;:20;:::i;:::-;21914:12;:35;21839:122;21973:13;;;;:8;:13;;;;;;;;;:20;;-1:-1:-1;;;;;;21973:20:0;-1:-1:-1;;;;;21973:20:0;;;;;;;;22009:35;;;;;;;21973:20;;22022:10;;22009:35;;;;;;;;;21608:444;;:::o;19234:93::-;19309:10;;19234:93;:::o;23776:150::-;18778:4;;-1:-1:-1;;;;;18778:4:0;18764:10;:18;18756:44;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;-1:-1:-1;;;18756:44:0;;;;;;;;;;;;;;;23859:9;23850:19;;;23842:48;;;;;-1:-1:-1;;;23842:48:0;;;;;;;;;;;;-1:-1:-1;;;23842:48:0;;;;;;;;;;;;;;;23901:10;:17;23776:150::o;9961:247::-;10131:58;;;-1:-1:-1;;;;;10131:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10131:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;10078:122:0;;10111:5;;10078:18;:122::i;6780:654::-;6840:4;7334:20;;7164:66;7383:23;;;;;;:42;;-1:-1:-1;7410:15:0;;;7383:42;7375:51;6780:654;-1:-1:-1;;;;6780:654:0:o;22086:301::-;22150:8;22142:32;;;;;-1:-1:-1;;;22142:32:0;;;;;;;;;;;;-1:-1:-1;;;22142:32:0;;;;;;;;;;;;;;;22216:1;22191:13;;;:8;:13;;;;;;-1:-1:-1;;;;;22191:13:0;:27;22187:193;;22264:13;;;;:8;:13;;;;;;;;;;22240:43;;;;;;;-1:-1:-1;;;;;22264:13:0;;;;22252:10;;22240:43;;;;;;;;;22305:13;;;;:8;:13;;;;;22298:20;;-1:-1:-1;;;;;;22298:20:0;;;22348:12;;:20;;22298;22348;:17;:20;:::i;:::-;22333:12;:35;22187:193;22086:301;:::o;13300:169::-;13359:7;13391:5;;;13415:6;;;;13407:35;;;;;-1:-1:-1;;;13407:35:0;;;;;;;;;;;;-1:-1:-1;;;13407:35:0;;;;;;;;;;;;;;;13460:1;13300:169;-1:-1:-1;;;13300:169:0:o;13925:306::-;13984:7;14017:5;;;14041:6;;;:21;;;14061:1;14056;14051:2;:6;;;;;;:11;14041:21;14033:50;;;;;-1:-1:-1;;;14033:50:0;;;;;;;;;;;;-1:-1:-1;;;14033:50:0;;;;;;;;;;;;;;;14113:8;14107:15;;14141:8;;;;14133:37;;;;;-1:-1:-1;;;14133:37:0;;;;;;;;;;;;-1:-1:-1;;;14133:37:0;;;;;;;;;;;;;;;14181:10;12901:6;14194:2;:9;;;13925:306;-1:-1:-1;;;;;;13925:306:0:o;14239:382::-;14298:7;14326:6;14318:31;;;;;-1:-1:-1;;;14318:31:0;;;;;;;;;;;;-1:-1:-1;;;14318:31:0;;;;;;;;;;;;;;;12901:6;14373:8;;14400:6;;;:24;;;12901:6;14415:1;14410:2;:6;;;;;;:14;14400:24;14392:53;;;;;-1:-1:-1;;;14392:53:0;;;;;;;;;;;;-1:-1:-1;;;14392:53:0;;;;;;;;;;;;;;;14496:1;14492:5;;14486:12;;14517:8;;;;14509:37;;;;;-1:-1:-1;;;14509:37:0;;;;;;;;;;;;-1:-1:-1;;;14509:37:0;;;;;;;;;;;;;;;14574:10;14592:1;14587:2;:6;;;;11605:1176;12209:27;12217:5;-1:-1:-1;;;;;12209:25:0;;:27::i;:::-;12201:71;;;;;-1:-1:-1;;;12201:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12346:12;12360:23;12395:5;-1:-1:-1;;;;;12387:19:0;12407:4;12387:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;12387:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;12345:67:0;;;;12431:7;12423:52;;;;;-1:-1:-1;;;12423:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12492:17;;:21;12488:286;;12665:10;12654:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12654:30:0;12628:134;;;;-1:-1:-1;;;12628:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13477:191;13536:7;13557:9;13568;13581:14;13590:1;13593;13581:8;:14::i;:::-;13556:39;;;;13615:4;13614:5;13606:35;;;;;-1:-1:-1;;;13606:35:0;;;;;;;;;;;;-1:-1:-1;;;13606:35:0;;;;;;;;;;;;;;;-1:-1:-1;13659:1:0;13477:191;-1:-1:-1;;;13477:191:0:o;13676:241::-;13766:7;13775:4;13806:1;13801;:6;13797:113;;-1:-1:-1;;13832:5:0;;;13839;13824:21;;13797:113;-1:-1:-1;;13886:5:0;;;13893:4;13797:113;13676:241;;;;;:::o

Swarm Source

bzzr://7417a3f608928a5fc5f33b2b2e647f4935dabd58de2d99ecb3a420f98fd852b7

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.