ETH Price: $3,395.06 (-1.54%)
Gas: 2 Gwei

Contract

0x1D09144F3479bb805CB7c92346987420BcbDC10C
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve188549752023-12-24 10:16:59188 days ago1703413019IN
0x1D09144F...0BcbDC10C
0 ETH0.0006037524.83363477
Add Liquidity Ex...188385602023-12-22 2:57:59190 days ago1703213879IN
0x1D09144F...0BcbDC10C
0 ETH0.0073408225.02899679
Swap Exact Amoun...188385412023-12-22 2:54:11190 days ago1703213651IN
0x1D09144F...0BcbDC10C
0 ETH0.0057122125.89785784
Approve187877422023-12-14 23:47:47197 days ago1702597667IN
0x1D09144F...0BcbDC10C
0 ETH0.0009215437.90477498
Remove Liquidity...185491052023-11-11 13:52:23230 days ago1699710743IN
0x1D09144F...0BcbDC10C
0 ETH0.0525614529.61202261
Approve185069922023-11-05 16:27:59236 days ago1699201679IN
0x1D09144F...0BcbDC10C
0 ETH0.0005261221.6407444
Swap Exact Amoun...184249962023-10-25 4:51:35248 days ago1698209495IN
0x1D09144F...0BcbDC10C
0 ETH0.0008724510
Add Liquidity Ex...184128692023-10-23 12:08:11249 days ago1698062891IN
0x1D09144F...0BcbDC10C
0 ETH0.0217392212
Swap Exact Amoun...184128382023-10-23 12:01:59249 days ago1698062519IN
0x1D09144F...0BcbDC10C
0 ETH0.0028428213
Swap Exact Amoun...182024382023-09-24 1:37:59279 days ago1695519479IN
0x1D09144F...0BcbDC10C
0 ETH0.002758396.39340793
Swap Exact Amoun...182023752023-09-24 1:25:23279 days ago1695518723IN
0x1D09144F...0BcbDC10C
0 ETH0.008425857.9877107
Swap Exact Amoun...182022922023-09-24 1:08:23279 days ago1695517703IN
0x1D09144F...0BcbDC10C
0 ETH0.002004597.16384933
Swap Exact Amoun...182022812023-09-24 1:06:11279 days ago1695517571IN
0x1D09144F...0BcbDC10C
0 ETH0.003007317.54257376
Swap Exact Amoun...182022632023-09-24 1:02:35279 days ago1695517355IN
0x1D09144F...0BcbDC10C
0 ETH0.00129847.26483671
Swap Exact Amoun...182022372023-09-24 0:57:23279 days ago1695517043IN
0x1D09144F...0BcbDC10C
0 ETH0.005319357.04577971
Swap Exact Amoun...182021602023-09-24 0:41:59279 days ago1695516119IN
0x1D09144F...0BcbDC10C
0 ETH0.002781537.34139215
Approve182007302023-09-23 19:53:59279 days ago1695498839IN
0x1D09144F...0BcbDC10C
0 ETH0.00031916.89082527
Add Liquidity Ex...182007032023-09-23 19:48:35279 days ago1695498515IN
0x1D09144F...0BcbDC10C
0 ETH0.014009577.88960927
Approve180830652023-09-07 7:28:11296 days ago1694071691IN
0x1D09144F...0BcbDC10C
0 ETH0.000287199.79637819
Remove Liquidity...179786942023-08-23 16:46:35310 days ago1692809195IN
0x1D09144F...0BcbDC10C
0 ETH0.0673219837.91574414
Remove Liquidity...179786902023-08-23 16:45:47310 days ago1692809147IN
0x1D09144F...0BcbDC10C
0 ETH0.0725470339.271736
Remove Liquidity...179786862023-08-23 16:44:59310 days ago1692809099IN
0x1D09144F...0BcbDC10C
0 ETH0.0731390439.28936702
Remove Liquidity...179786622023-08-23 16:40:11310 days ago1692808811IN
0x1D09144F...0BcbDC10C
0 ETH0.0598190233.67795533
Remove Liquidity...179786562023-08-23 16:38:59310 days ago1692808739IN
0x1D09144F...0BcbDC10C
0 ETH0.0615999934.94678117
Remove Liquidity...179786562023-08-23 16:38:59310 days ago1692808739IN
0x1D09144F...0BcbDC10C
0 ETH0.0615970134.5964731
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CreamY

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: creamY.sol
pragma solidity 0.5.17;

import './safeMath.sol';
import './normalizer.sol';

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

contract Context {
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint;

    mapping (address => uint) private _balances;

    mapping (address => mapping (address => uint)) private _allowances;

    uint private _totalSupply;
    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint) {
        return _balances[account];
    }
    function transfer(address recipient, uint amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view returns (uint) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using SafeMath for uint;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        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 callOptionalReturn(IERC20 token, bytes memory data) private {
        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");
        }
    }
}

library SignedSafeMath {
    int256 constant private _INT256_MIN = -2**255;
    function mul(int256 a, int256 b) internal pure returns (int256) {
        if (a == 0) {
            return 0;
        }

        require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow");

        int256 c = a * b;
        require(c / a == b, "SignedSafeMath: multiplication overflow");

        return c;
    }
    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != 0, "SignedSafeMath: division by zero");
        require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow");

        int256 c = a / b;

        return c;
    }
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow");

        return c;
    }
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow");

        return c;
    }
    function sqrt(int256 x) internal pure returns (int256) {
        int256 z = add(x / 2, 1);
        int256 y = x;
        while (z < y)
        {
            y = z;
            z = ((add((x / z), z)) / 2);
        }
        return y;
    }
}

contract CreamY is ERC20, ERC20Detailed {

    event LOG_SWAP(
        address indexed caller,
        address indexed tokenIn,
        address indexed tokenOut,
        uint            tokenAmountIn,
        uint            tokenAmountOut
    );

    event LOG_JOIN(
        address indexed caller,
        address indexed tokenIn,
        uint            tokenAmountIn
    );

    event LOG_EXIT(
        address indexed caller,
        address indexed tokenOut,
        uint            tokenAmountOut
    );

    using SafeMath for uint;
    using SignedSafeMath for int256;
    using SafeERC20 for IERC20;

    mapping(address => bool) public coins;
    mapping(address => bool) public pause;
    IERC20[] public allCoins;
    Normalizer public normalizer;
    address public governance;
    address public reservePool;

    constructor(address _normalizer, address _reservePool) public ERC20Detailed("CreamY USD", "cyUSD", 18) {
        governance = msg.sender;
        normalizer = Normalizer(_normalizer);
        reservePool = _reservePool;
    }

    function setGovernance(address _governance) external {
        require(msg.sender == governance, "!governance");
        governance = _governance;
    }

    function setNormalizer(address _normalizer) external {
        require(msg.sender == governance, "!governance");
        normalizer = Normalizer(_normalizer);
    }

    function setReservePool(address _reservePool) external {
        require(msg.sender == governance, "!governance");
        require(_reservePool != address(0), "invalid reserve pool");
        reservePool = _reservePool;
    }

    function setFees(uint _fee, uint _reserveRatio) external {
        require(msg.sender == governance, '!governance');
        require(_fee < 1e18 && _fee >= 0.99e18, 'Invalid fee'); // 0 < fee <= 1%
        if (_reserveRatio > 0) {
            require(_reserveRatio <= 1e18, 'Invalid reserve ratio'); // reserve ratio <= 100% fee
        }
        fee = _fee;
        reserveRatio = _reserveRatio;
    }

    function approveCoins(address _coin) external {
        require(msg.sender == governance, "!governance");
        require(coins[_coin] == false, "Already approved");
        coins[_coin] = true;
        allCoins.push(IERC20(_coin));
    }

    function setPause(address _coin, bool _pause) external {
        require(msg.sender == governance, "!governance");
        pause[_coin] = _pause;
    }

    function setA(uint _A) external {
        require(msg.sender == governance, "!governance");
        require(_A > 0 && _A <= 1e18, "Invalid A");
        // When A is close to 1, it becomes the fixed price model (x + y = k).
        // When A is close to 0, it degenerates to Uniswap (x * y = k).
        // However, A couldn't be exactly 0 since it will break the f function.
        A = _A;
    }

    function seize(IERC20 token, uint amount) external {
        require(msg.sender == governance, "!governance");
        require(!tokens[address(token)], "can't seize liquidity");

        uint bal = token.balanceOf(address(this));
        require(amount <= bal);

        token.safeTransfer(reservePool, amount);
    }

    uint public fee = 0.99965e18;
    uint public reserveRatio = 1e18;
    uint public constant BASE = 1e18;

    uint public A = 0.7e18;
    uint public count = 0;
    mapping(address => bool) tokens;

    function f(int256 _x, int256 x, int256 y) internal view returns (int256 _y) {
        int256 k;
        int256 c;
        {
            int256 u = x.add(y.mul(int256(A)).div(1e18));
            int256 v = y.add(x.mul(int256(A)).div(1e18));
            k = u.mul(v);
            c = _x.mul(_x).sub(k.mul(1e18).div(int256(A)));
        }

        int256 cst = int256(A).add(int256(1e36).div(int256(A)));
        int256 _b = _x.mul(cst).div(1e18);

        int256 D = _b.mul(_b).sub(c.mul(4));

        require(D >= 0, "!root");

        _y = (-_b).add(D.sqrt()).div(2);
    }

    function collectReserve(IERC20 from, uint input) internal {
        if (reserveRatio > 0) {
            uint _fee = input.mul(BASE.sub(fee)).div(BASE);
            uint _reserve = _fee.mul(reserveRatio).div(BASE);
            from.safeTransfer(reservePool, _reserve);
        }
    }

    // Get all support coins
    function getAllCoins() public view returns (IERC20[] memory) {
        return allCoins;
    }

    // Calculate total pool value in USD
    function calcTotalValue() public view returns (uint value) {
        uint totalValue = uint(0);
        for (uint i = 0; i < allCoins.length; i++) {
            totalValue = totalValue.add(balance(allCoins[i]));
        }
        return totalValue;
    }

    // Calculate _x given x, y, _y
    function getX(int256 output, int256 x, int256 y) internal view returns (int256 input) {
        int256 _y = y.sub(output);
        int256 _x = f(_y, y, x);
        input = _x.sub(x);
    }

    // Calculate _y given x, y, _x
    function getY(int256 input, int256 x, int256 y) internal view returns (int256 output) {
        int256 _x = x.add(input);
        int256 _y = f(_x, x, y);
        output = y.sub(_y);
    }

    // Calculate output given exact input
    function getOutExactIn(IERC20 from, IERC20 to, uint input, int256 x, int256 y) public view returns (uint output) {
        uint inputInUsd = normalize1e18(from, input).mul(normalizer.getPrice(address(from))).div(1e18);
        uint inputAfterFeeInUsd = inputInUsd.mul(fee).div(BASE);

        uint outputInUsd = uint(getY(i(inputAfterFeeInUsd), x, y));

        output = normalize(to, outputInUsd.mul(1e18).div(normalizer.getPrice(address(to))));
    }

    // Calculate input given exact output
    function getInExactOut(IERC20 from, IERC20 to, uint output, int256 x, int256 y) public view returns (uint input) {
        uint outputInUsd = normalize1e18(to, output).mul(normalizer.getPrice(address(to))).div(1e18);

        uint inputBeforeFeeInUsd = uint(getX(i(outputInUsd), x, y));
        uint inputInUsd = inputBeforeFeeInUsd.mul(BASE).div(fee);

        input = normalize(from, inputInUsd.mul(1e18).div(normalizer.getPrice(address(from))));
    }

    // Normalize coin to 1e18
    function normalize1e18(IERC20 token, uint _amount) internal view returns (uint) {
        uint _decimals = ERC20Detailed(address(token)).decimals();
        if (_decimals == uint(18)) {
            return _amount;
        } else {
            return _amount.mul(1e18).div(uint(10)**_decimals);
        }
    }

    // Normalize coin to original decimals
    function normalize(IERC20 token, uint _amount) internal view returns (uint) {
        uint _decimals = ERC20Detailed(address(token)).decimals();
        if (_decimals == uint(18)) {
            return _amount;
        } else {
            return _amount.mul(uint(10)**_decimals).div(1e18);
        }
    }

    // Contract balance of coin normalized to 1e18
    function balance(IERC20 token) public view returns (uint) {
        address _token = address(token);
        uint _balance = IERC20(_token).balanceOf(address(this));
        uint _balanceInUsd = _balance.mul(normalizer.getPrice(_token)).div(1e18);
        return normalize1e18(token, _balanceInUsd);
    }

    // Converter helper to int256
    function i(uint x) public pure returns (int256) {
        int256 value = int256(x);
        require(value >= 0, 'overflow');
        return value;
    }

    function swapExactAmountIn(IERC20 from, IERC20 to, uint input, uint minOutput, uint deadline) external returns (uint output) {
        require(coins[address(from)] == true, "!coin");
        require(pause[address(from)] == false, "pause");
        require(coins[address(to)] == true, "!coin");
        require(pause[address(to)] == false, "pause");
        require(normalizer.getPrice(address(from)) > 0, "zero price");
        require(normalizer.getPrice(address(to)) > 0, "zero price");

        require(block.timestamp <= deadline, "expired");

        output = getOutExactIn(from, to, input, i(balance(from)), i(balance(to)));

        require(balance(to) >= output, "insufficient output liquidity");
        require(output >= minOutput, "slippage");

        emit LOG_SWAP(msg.sender, address(from), address(to), input, output);

        from.safeTransferFrom(msg.sender, address(this), input);
        to.safeTransfer(msg.sender, output);
        collectReserve(from, input);
        return output;
    }

    function swapExactAmountOut(IERC20 from, IERC20 to, uint maxInput, uint output, uint deadline) external returns (uint input) {
        require(coins[address(from)] == true, "!coin");
        require(pause[address(from)] == false, "pause");
        require(coins[address(to)] == true, "!coin");
        require(pause[address(to)] == false, "pause");
        require(normalizer.getPrice(address(from)) > 0, "zero price");
        require(normalizer.getPrice(address(to)) > 0, "zero price");

        require(block.timestamp <= deadline, "expired");
        require(balance(to) >= output, "insufficient output liquidity");

        input = getInExactOut(from, to, output, i(balance(from)), i(balance(to)));

        require(input <= maxInput, "slippage");

        emit LOG_SWAP(msg.sender, address(from), address(to), input, output);

        from.safeTransferFrom(msg.sender, address(this), input);
        to.safeTransfer(msg.sender, output);
        collectReserve(from, input);
        return input;
    }

    function addLiquidityExactIn(IERC20 from, uint input, uint minOutput, uint deadline) external returns (uint output) {
        require(coins[address(from)] == true, "!coin");
        require(pause[address(from)] == false, "pause");
        require(block.timestamp <= deadline, "expired");
        require(input > 0, "zero input");
        require(normalizer.getPrice(address(from)) > 0, "zero price");
        require(normalizer.getPrice(address(this)) > 0, "zero price");

        if (totalSupply() == 0) {
            uint inputAfterFee = input.mul(fee).div(BASE);
            output = normalize1e18(from, inputAfterFee.mul(normalizer.getPrice(address(from))).div(1e18));
        } else {
            output = getOutExactIn(from, this, input, i(balance(from)), i(totalSupply().div(count)));
        }

        require(output >= minOutput, "slippage");

        emit LOG_JOIN(msg.sender, address(from), output);

        from.safeTransferFrom(msg.sender, address(this), input);
        _mint(msg.sender, output);

        if (!tokens[address(from)] && balance(from) > 0) {
            tokens[address(from)] = true;
            count = count.add(1);
        }
    }

    function addLiquidityExactOut(IERC20 from, uint maxInput, uint output, uint deadline) external returns (uint input) {
        require(coins[address(from)] == true, "!coin");
        require(pause[address(from)] == false, "pause");
        require(block.timestamp <= deadline, "expired");
        require(output > 0, "zero output");
        require(normalizer.getPrice(address(from)) > 0, "zero price");
        require(normalizer.getPrice(address(this)) > 0, "zero price");

        if (totalSupply() == 0) {
            uint inputAfterFee = normalize(from, output.mul(1e18).div(normalizer.getPrice(address(from))));
            input = inputAfterFee.mul(BASE).divCeil(fee);
        } else {
            input = getInExactOut(from, this, output, i(balance(from)), i(totalSupply().div(count)));
        }

        require(input <= maxInput, "slippage");

        emit LOG_JOIN(msg.sender, address(from), output);

        from.safeTransferFrom(msg.sender, address(this), input);
        _mint(msg.sender, output);

        if (!tokens[address(from)] && balance(from) > 0) {
            tokens[address(from)] = true;
            count = count.add(1);
        }
    }

    function removeLiquidityExactIn(IERC20 to, uint input, uint minOutput, uint deadline) external returns (uint output) {
        require(block.timestamp <= deadline, "expired");
        require(coins[address(to)] == true, "!coin");
        require(input > 0, "zero input");
        require(normalizer.getPrice(address(this)) > 0, "zero price");
        require(normalizer.getPrice(address(to)) > 0, "zero price");

        output = getOutExactIn(this, to, input, i(totalSupply().div(count)), i(balance(to)));

        require(output >= minOutput, "slippage");

        emit LOG_EXIT(msg.sender, address(to), output);

        _burn(msg.sender, input);
        to.safeTransfer(msg.sender, output);

        if (balance(to) == 0) {
            tokens[address(to)] = false;
            count = count.sub(1);
        }
    }

    function removeLiquidityExactOut(IERC20 to, uint maxInput, uint output, uint deadline) external returns (uint input) {
        require(block.timestamp <= deadline, "expired");
        require(coins[address(to)] == true, "!coin");
        require(output > 0, "zero output");
        require(normalizer.getPrice(address(this)) > 0, "zero price");
        require(normalizer.getPrice(address(to)) > 0, "zero price");

        input = getInExactOut(this, to, output, i(totalSupply().div(count)), i(balance(to)));

        require(input <= maxInput, "slippage");

        emit LOG_EXIT(msg.sender, address(to), output);

        _burn(msg.sender, input);
        to.safeTransfer(msg.sender, output);

        if (balance(to) == 0) {
            tokens[address(to)] = false;
            count = count.sub(1);
        }
    }
}

File 2 of 3: normalizer.sol
pragma solidity 0.5.17;

import './safeMath.sol';

interface Curve {
    function get_virtual_price() external view returns (uint);
}

interface Yearn {
    function getPricePerFullShare() external view returns (uint);
}

interface UnderlyingToken {
    function decimals() external view returns (uint8);
}

interface Compound {
    function exchangeRateStored() external view returns (uint);
    function underlying() external view returns (address);
}

interface Cream {
    function exchangeRateStored() external view returns (uint);
    function underlying() external view returns (address);
}

contract Normalizer {
    using SafeMath for uint;

    address public governance;
    address public creamY;
    mapping(address => bool) public native;
    mapping(address => bool) public yearn;
    mapping(address => bool) public curve;
    mapping(address => address) public curveSwap;
    mapping(address => bool) public vaults;
    mapping(address => bool) public compound;
    mapping(address => bool) public cream;
    mapping(address => uint) public underlyingDecimals;

    constructor() public {
        governance = msg.sender;

        native[0xdAC17F958D2ee523a2206206994597C13D831ec7] = true; // USDT
        native[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48] = true; // USDC
        native[0x4Fabb145d64652a948d72533023f6E7A623C7C53] = true; // BUSD
        native[0x0000000000085d4780B73119b644AE5ecd22b376] = true; // TUSD

        yearn[0xACd43E627e64355f1861cEC6d3a6688B31a6F952] = true; // vault yDAI
        yearn[0x37d19d1c4E1fa9DC47bD1eA12f742a0887eDa74a] = true; // vault yTUSD
        yearn[0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e] = true; // vault yUSDC
        yearn[0x2f08119C6f07c006695E079AAFc638b8789FAf18] = true; // vault yUSDT

        yearn[0x16de59092dAE5CcF4A1E6439D611fd0653f0Bd01] = true; // yDAI
        yearn[0xd6aD7a6750A7593E092a9B218d66C0A814a3436e] = true; // yUSDC
        yearn[0x83f798e925BcD4017Eb265844FDDAbb448f1707D] = true; // yUSDT
        yearn[0x73a052500105205d34Daf004eAb301916DA8190f] = true; // yTUSD
        yearn[0xF61718057901F84C4eEC4339EF8f0D86D2B45600] = true; // ySUSD

        yearn[0xC2cB1040220768554cf699b0d863A3cd4324ce32] = true; // bDAI
        yearn[0x26EA744E5B887E5205727f55dFBE8685e3b21951] = true; // bUSDC
        yearn[0xE6354ed5bC4b393a5Aad09f21c46E101e692d447] = true; // bUSDT
        yearn[0x04bC0Ab673d88aE9dbC9DA2380cB6B79C4BCa9aE] = true; // bBUSD

        curve[0x845838DF265Dcd2c412A1Dc9e959c7d08537f8a2] = true; // cCompound
        curveSwap[0x845838DF265Dcd2c412A1Dc9e959c7d08537f8a2] = 0xA2B47E3D5c44877cca798226B7B8118F9BFb7A56;
        curve[0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8] = true; // cYearn
        curveSwap[0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8] = 0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51;
        curve[0x3B3Ac5386837Dc563660FB6a0937DFAa5924333B] = true; // cBUSD
        curveSwap[0x3B3Ac5386837Dc563660FB6a0937DFAa5924333B] = 0x79a8C46DeA5aDa233ABaFFD40F3A0A2B1e5A4F27;
        curve[0xC25a3A3b969415c80451098fa907EC722572917F] = true; // cSUSD
        curveSwap[0xC25a3A3b969415c80451098fa907EC722572917F] = 0xA5407eAE9Ba41422680e2e00537571bcC53efBfD;
        curve[0xD905e2eaeBe188fc92179b6350807D8bd91Db0D8] = true; // cPAX
        curveSwap[0xD905e2eaeBe188fc92179b6350807D8bd91Db0D8] = 0x06364f10B501e868329afBc005b3492902d6C763;

        compound[0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643] = true; // cDAI
        underlyingDecimals[0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643] = 1e18;
        compound[0x39AA39c021dfbaE8faC545936693aC917d5E7563] = true; // cUSDC
        underlyingDecimals[0x39AA39c021dfbaE8faC545936693aC917d5E7563] = 1e6;
        compound[0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9] = true; // cUSDT
        underlyingDecimals[0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9] = 1e6;

        cream[0x44fbeBd2F576670a6C33f6Fc0B00aA8c5753b322] = true; // crUSDC
        underlyingDecimals[0x44fbeBd2F576670a6C33f6Fc0B00aA8c5753b322] = 1e6;
        cream[0x797AAB1ce7c01eB727ab980762bA88e7133d2157] = true; // crUSDT
        underlyingDecimals[0x797AAB1ce7c01eB727ab980762bA88e7133d2157] = 1e6;
        cream[0x1FF8CDB51219a8838b52E9cAc09b71e591BC998e] = true; // crBUSD
        underlyingDecimals[0x1FF8CDB51219a8838b52E9cAc09b71e591BC998e] = 1e18;
    }

    function setGovernance(address _governance) external {
        require(msg.sender == governance, "!governance");
        governance = _governance;
    }

    function setCreamY(address _creamY) external {
        require(msg.sender == governance, "!governance");
        creamY = _creamY;
    }

    function getPrice(address token) external view returns (uint) {
        if (native[token] || token == creamY) {
            return 1e18;
        } else if (yearn[token]) {
            return Yearn(token).getPricePerFullShare();
        } else if (curve[token]) {
            return Curve(curveSwap[token]).get_virtual_price();
        } else if (compound[token]) {
            return getCompoundPrice(token);
        } else if (cream[token]) {
            return getCreamPrice(token);
        } else {
            return uint(0);
        }
    }

    function getCompoundPrice(address token) public view returns (uint) {
        address underlying = Compound(token).underlying();
        uint8 decimals = UnderlyingToken(underlying).decimals();
        return Compound(token).exchangeRateStored().mul(1e8).div(uint(10) ** decimals);
    }

    function getCreamPrice(address token) public view returns (uint) {
        address underlying = Cream(token).underlying();
        uint8 decimals = UnderlyingToken(underlying).decimals();
        return Cream(token).exchangeRateStored().mul(1e8).div(uint(10) ** decimals);
    }
}

File 3 of 3: safeMath.sol
pragma solidity 0.5.17;

library SafeMath {
    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint a, uint b) internal pure returns (uint) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        require(b <= a, errorMessage);
        uint c = a - b;

        return c;
    }
    function mul(uint a, uint b) internal pure returns (uint) {
        if (a == 0) {
            return 0;
        }

        uint c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint a, uint b) internal pure returns (uint) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint a, uint b, string memory errorMessage) internal pure returns (uint) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint c = a / b;

        return c;
    }
    function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;
        if(a % b != 0)
            c = c + 1;
        return c;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_normalizer","type":"address"},{"internalType":"address","name":"_reservePool","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_EXIT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"}],"name":"LOG_JOIN","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenAmountOut","type":"uint256"}],"name":"LOG_SWAP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"A","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityExactIn","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"uint256","name":"maxInput","type":"uint256"},{"internalType":"uint256","name":"output","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityExactOut","outputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allCoins","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_coin","type":"address"}],"name":"approveCoins","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcTotalValue","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"count","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAllCoins","outputs":[{"internalType":"contract IERC20[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"output","type":"uint256"},{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"getInExactOut","outputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"getOutExactIn","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"i","outputs":[{"internalType":"int256","name":"","type":"int256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"normalizer","outputs":[{"internalType":"contract Normalizer","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityExactIn","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"maxInput","type":"uint256"},{"internalType":"uint256","name":"output","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityExactOut","outputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reservePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"reserveRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"seize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_A","type":"uint256"}],"name":"setA","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_reserveRatio","type":"uint256"}],"name":"setFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_normalizer","type":"address"}],"name":"setNormalizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_coin","type":"address"},{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_reservePool","type":"address"}],"name":"setReservePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"minOutput","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAmountIn","outputs":[{"internalType":"uint256","name":"output","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"from","type":"address"},{"internalType":"contract IERC20","name":"to","type":"address"},{"internalType":"uint256","name":"maxInput","type":"uint256"},{"internalType":"uint256","name":"output","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAmountOut","outputs":[{"internalType":"uint256","name":"input","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052670ddf7860edb82000600c55670de0b6b3a7640000600d556709b6e64a8ec60000600e556000600f553480156200003a57600080fd5b50604051620043c2380380620043c2833981810160405260408110156200006057600080fd5b508051602091820151604080518082018252600a81526910dc99585b56481554d160b21b8186019081528251808401909352600583526418de5554d160da1b958301959095528051939492939092601291620000bf9160039162000129565b508151620000d590600490602085019062000129565b506005805460ff191660ff929092169190911790555050600a8054336001600160a01b0319918216179091556009805482166001600160a01b03948516179055600b805490911691909216179055620001ce565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200016c57805160ff19168380011785556200019c565b828001600101855582156200019c579182015b828111156200019c5782518255916020019190600101906200017f565b50620001aa929150620001ae565b5090565b620001cb91905b80821115620001aa5760008155600101620001b5565b90565b6141e480620001de6000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c806370a0823111610146578063ab033ea9116100c3578063e3d670d711610087578063e3d670d71461083b578063eb9253c014610861578063ec342ad01461088d578063ee919d5014610895578063ef9aa9fc146108b2578063f446c1d0146108ea5761025e565b8063ab033ea914610779578063c22dc7221461079f578063cd55e092146107cd578063dd62ed3e14610805578063ddca3f43146108335761025e565b8063a00251c61161010a578063a00251c6146106b9578063a457c2d7146106c1578063a4ec0620146106ed578063a9059cbb14610745578063a919987b146107715761025e565b806370a082311461061957806376a67a511461063f5780637d0f7a88146106655780639179182d1461068b57806395d89b41146106b15761025e565b80631820b47f116101df5780633397d601116101a35780633397d6011461051f5780633575c19e1461056157806339509351146105875780634f393a07146105b35780635aa6e675146105d95780636015f4ef146105e15761025e565b80631820b47f1461042a57806323b872dd1461046c57806326e2da7b146104a257806329688a80146104e4578063313ce567146105015761025e565b806309866f611161022657806309866f61146103965780630b78f9c0146103d85780630c7d5cd8146103fd57806313560cac1461040557806318160ddd146104225761025e565b80630266f0441461026357806303d938681461028757806306661abd146102d157806306fdde03146102d9578063095ea7b314610356575b600080fd5b61026b6108f2565b604080516001600160a01b039092168252519081900360200190f35b6102bf6004803603608081101561029d57600080fd5b506001600160a01b038135169060208101359060408101359060600135610901565b60408051918252519081900360200190f35b6102bf610ddc565b6102e1610de2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031b578181015183820152602001610303565b50505050905090810190601f1680156103485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103826004803603604081101561036c57600080fd5b506001600160a01b038135169060200135610e78565b604080519115158252519081900360200190f35b6102bf600480360360a08110156103ac57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610e96565b6103fb600480360360408110156103ee57600080fd5b5080359060200135611026565b005b6102bf611137565b61026b6004803603602081101561041b57600080fd5b503561113d565b6102bf611164565b6102bf600480360360a081101561044057600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561116a565b6103826004803603606081101561048257600080fd5b506001600160a01b038135811691602081013590911690604001356115e8565b6102bf600480360360a08110156104b857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611675565b6102bf600480360360208110156104fa57600080fd5b50356117a3565b6105096117e6565b6040805160ff9092168252519081900360200190f35b6102bf600480360360a081101561053557600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001356117ef565b6103fb6004803603602081101561057757600080fd5b50356001600160a01b0316611c5f565b6103826004803603604081101561059d57600080fd5b506001600160a01b038135169060200135611cce565b6103fb600480360360208110156105c957600080fd5b50356001600160a01b0316611d22565b61026b611de3565b6102bf600480360360808110156105f757600080fd5b506001600160a01b038135169060208101359060408101359060600135611df2565b6102bf6004803603602081101561062f57600080fd5b50356001600160a01b0316612140565b6103826004803603602081101561065557600080fd5b50356001600160a01b031661215b565b6103826004803603602081101561067b57600080fd5b50356001600160a01b0316612170565b6103fb600480360360208110156106a157600080fd5b50356001600160a01b0316612185565b6102e1612299565b6102bf6122fa565b610382600480360360408110156106d757600080fd5b506001600160a01b038135169060200135612353565b6106f56123c1565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610731578181015183820152602001610719565b505050509050019250505060405180910390f35b6103826004803603604081101561075b57600080fd5b506001600160a01b038135169060200135612422565b61026b612436565b6103fb6004803603602081101561078f57600080fd5b50356001600160a01b0316612445565b6103fb600480360360408110156107b557600080fd5b506001600160a01b03813516906020013515156124b4565b6102bf600480360360808110156107e357600080fd5b506001600160a01b03813516906020810135906040810135906060013561252c565b6102bf6004803603604081101561081b57600080fd5b506001600160a01b038135811691602001351661297b565b6102bf6129a6565b6102bf6004803603602081101561085157600080fd5b50356001600160a01b03166129ac565b6103fb6004803603604081101561087757600080fd5b506001600160a01b038135169060200135612acf565b6102bf612c2c565b6103fb600480360360208110156108ab57600080fd5b5035612c38565b6102bf600480360360808110156108c857600080fd5b506001600160a01b038135169060208101359060408101359060600135612cdf565b6102bf612feb565b600b546001600160a01b031681565b6001600160a01b03841660009081526006602052604081205460ff16151560011461095b576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff16156109b1576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b814211156109f0576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b60008411610a32576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d6020811015610aad57600080fd5b505111610aee576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b158015610b3957600080fd5b505afa158015610b4d573d6000803e3d6000fd5b505050506040513d6020811015610b6357600080fd5b505111610ba4576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b610bac611164565b610c8d576000610bdf670de0b6b3a7640000610bd3600c5488612ff190919063ffffffff16565b9063ffffffff61305116565b600954604080516341976e0960e01b81526001600160a01b03808b1660048301529151939450610c85938a93610c8093670de0b6b3a764000093610bd39391909216916341976e09916024808301926020929190829003018186803b158015610c4757600080fd5b505afa158015610c5b573d6000803e3d6000fd5b505050506040513d6020811015610c7157600080fd5b5051869063ffffffff612ff116565b613093565b915050610cbd565b610cba853086610ca4610c9f8a6129ac565b6117a3565b610cb5610c9f600f54610bd3611164565b610e96565b90505b82811015610cfd576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805182815290516001600160a01b0387169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9181900360200190a3610d586001600160a01b03861633308763ffffffff61313a16565b610d62338261319a565b6001600160a01b03851660009081526010602052604090205460ff16158015610d9357506000610d91866129ac565b115b15610dd4576001600160a01b0385166000908152601060205260409020805460ff19166001908117909155600f54610dd09163ffffffff61328a16565b600f555b949350505050565b600f5481565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e6e5780601f10610e4357610100808354040283529160200191610e6e565b820191906000526020600020905b815481529060010190602001808311610e5157829003601f168201915b5050505050905090565b6000610e8c610e856132e4565b84846132e8565b5060015b92915050565b600954604080516341976e0960e01b81526001600160a01b03888116600483015291516000938493610f3d93670de0b6b3a764000093610bd39392909216916341976e0991602480820192602092909190829003018186803b158015610efb57600080fd5b505afa158015610f0f573d6000803e3d6000fd5b505050506040513d6020811015610f2557600080fd5b5051610f318b8a613093565b9063ffffffff612ff116565b90506000610f62670de0b6b3a7640000610bd3600c5485612ff190919063ffffffff16565b90506000610f79610f72836117a3565b87876133d4565b600954604080516341976e0960e01b81526001600160a01b03808d1660048301529151939450611019938c936110149316916341976e09916024808301926020929190829003018186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d6020811015610ffa57600080fd5b5051610bd385670de0b6b3a764000063ffffffff612ff116565b613412565b9998505050505050505050565b600a546001600160a01b03163314611073576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b670de0b6b3a7640000821080156110925750670dbd2fc137a300008210155b6110d1576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b801561112c57670de0b6b3a764000081111561112c576040805162461bcd60e51b8152602060048201526015602482015274496e76616c6964207265736572766520726174696f60581b604482015290519081900360640190fd5b600c91909155600d55565b600d5481565b6008818154811061114a57fe5b6000918252602090912001546001600160a01b0316905081565b60025490565b6001600160a01b03851660009081526006602052604081205460ff1615156001146111c4576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03861660009081526007602052604090205460ff161561121a576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff161515600114611274576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff16156112ca576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038981166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b15801561131b57600080fd5b505afa15801561132f573d6000803e3d6000fd5b505050506040513d602081101561134557600080fd5b505111611386576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b1580156113d757600080fd5b505afa1580156113eb573d6000803e3d6000fd5b505050506040513d602081101561140157600080fd5b505111611442576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b81421115611481576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b8261148b866129ac565b10156114de576040805162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e74206f7574707574206c6971756964697479000000604482015290519081900360640190fd5b6115018686856114f0610c9f8b6129ac565b6114fc610c9f8b6129ac565b611675565b905083811115611543576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788487604051808381526020018281526020019250505060405180910390a46115bb6001600160a01b03871633308463ffffffff61313a16565b6115d56001600160a01b038616338563ffffffff6134b116565b6115df8682613503565b95945050505050565b60006115f5848484613592565b61166b846116016132e4565b61166685604051806060016040528060288152602001614084602891396001600160a01b038a1660009081526001602052604081209061163f6132e4565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6136ee16565b6132e8565b5060019392505050565b600954604080516341976e0960e01b81526001600160a01b0387811660048301529151600093849361171093670de0b6b3a764000093610bd39392909216916341976e0991602480820192602092909190829003018186803b1580156116da57600080fd5b505afa1580156116ee573d6000803e3d6000fd5b505050506040513d602081101561170457600080fd5b5051610f318a8a613093565b90506000611727611720836117a3565b8686613785565b9050600061174c600c54610bd3670de0b6b3a764000085612ff190919063ffffffff16565b600954604080516341976e0960e01b81526001600160a01b03808e1660048301529151939450611019938d936110149316916341976e09916024808301926020929190829003018186803b158015610fd057600080fd5b60008181811215610e90576040805162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b604482015290519081900360640190fd5b60055460ff1690565b6001600160a01b03851660009081526006602052604081205460ff161515600114611849576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03861660009081526007602052604090205460ff161561189f576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff1615156001146118f9576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff161561194f576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038981166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b1580156119a057600080fd5b505afa1580156119b4573d6000803e3d6000fd5b505050506040513d60208110156119ca57600080fd5b505111611a0b576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015611a5c57600080fd5b505afa158015611a70573d6000803e3d6000fd5b505050506040513d6020811015611a8657600080fd5b505111611ac7576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b81421115611b06576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b611b24868686611b18610c9f8b6129ac565b610cb5610c9f8b6129ac565b905080611b30866129ac565b1015611b83576040805162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e74206f7574707574206c6971756964697479000000604482015290519081900360640190fd5b82811015611bc3576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788785604051808381526020018281526020019250505060405180910390a4611c3b6001600160a01b03871633308763ffffffff61313a16565b611c556001600160a01b038616338363ffffffff6134b116565b6115df8685613503565b600a546001600160a01b03163314611cac576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8c611cdb6132e4565b846116668560016000611cec6132e4565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61328a16565b600a546001600160a01b03163314611d6f576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b038116611dc1576040805162461bcd60e51b81526020600482015260146024820152731a5b9d985b1a59081c995cd95c9d99481c1bdbdb60621b604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b600081421115611e33576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff161515600114611e8d576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b60008311611ed0576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81bdd5d1c1d5d60aa1b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b158015611f1b57600080fd5b505afa158015611f2f573d6000803e3d6000fd5b505050506040513d6020811015611f4557600080fd5b505111611f86576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015611fd757600080fd5b505afa158015611feb573d6000803e3d6000fd5b505050506040513d602081101561200157600080fd5b505111612042576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b6120593086856114f0610c9f600f54610bd3611164565b90508381111561209b576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805184815290516001600160a01b0387169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed9181900360200190a36120e533826137b9565b6120ff6001600160a01b038616338563ffffffff6134b116565b612108856129ac565b610dd4576001600160a01b0385166000908152601060205260409020805460ff19169055600f54610dd090600163ffffffff6138b516565b6001600160a01b031660009081526020819052604090205490565b60076020526000908152604090205460ff1681565b60066020526000908152604090205460ff1681565b600a546001600160a01b031633146121d2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615612233576040805162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48185c1c1c9bdd995960821b604482015290519081900360640190fd5b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e6e5780601f10610e4357610100808354040283529160200191610e6e565b600080805b60085481101561234d576123436123366008838154811061231c57fe5b6000918252602090912001546001600160a01b03166129ac565b839063ffffffff61328a16565b91506001016122ff565b50905090565b6000610e8c6123606132e4565b846116668560405180606001604052806025815260200161418b602591396001600061238a6132e4565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6136ee16565b60606008805480602002602001604051908101604052809291908181526020018280548015610e6e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116123fb575050505050905090565b6000610e8c61242f6132e4565b8484613592565b6009546001600160a01b031681565b600a546001600160a01b03163314612492576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314612501576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03841660009081526006602052604081205460ff161515600114612586576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff16156125dc576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b8142111561261b576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b6000831161265e576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81bdd5d1c1d5d60aa1b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b1580156126af57600080fd5b505afa1580156126c3573d6000803e3d6000fd5b505050506040513d60208110156126d957600080fd5b50511161271a576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b15801561276557600080fd5b505afa158015612779573d6000803e3d6000fd5b505050506040513d602081101561278f57600080fd5b5051116127d0576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b6127d8611164565b6128b057600954604080516341976e0960e01b81526001600160a01b038089166004830152915160009361287a938a936110149391909216916341976e09916024808301926020929190829003018186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d602081101561286057600080fd5b5051610bd388670de0b6b3a764000063ffffffff612ff116565b600c549091506128a89061289c83670de0b6b3a764000063ffffffff612ff116565b9063ffffffff6138f716565b9150506128d6565b6128d38530856128c2610c9f8a6129ac565b6114fc610c9f600f54610bd3611164565b90505b83811115612916576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805184815290516001600160a01b0387169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9181900360200190a36129716001600160a01b03861633308463ffffffff61313a16565b610d62338461319a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b604080516370a0823160e01b81523060048201529051600091839183916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156129fa57600080fd5b505afa158015612a0e573d6000803e3d6000fd5b505050506040513d6020811015612a2457600080fd5b5051600954604080516341976e0960e01b81526001600160a01b0386811660048301529151939450600093612ac393670de0b6b3a764000093610bd3939116916341976e0991602480820192602092909190829003018186803b158015612a8a57600080fd5b505afa158015612a9e573d6000803e3d6000fd5b505050506040513d6020811015612ab457600080fd5b5051859063ffffffff612ff116565b90506115df8582613093565b600a546001600160a01b03163314612b1c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b03821660009081526010602052604090205460ff1615612b82576040805162461bcd60e51b815260206004820152601560248201527463616e2774207365697a65206c697175696469747960581b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015612bcc57600080fd5b505afa158015612be0573d6000803e3d6000fd5b505050506040513d6020811015612bf657600080fd5b5051905080821115612c0757600080fd5b600b54612c27906001600160a01b0385811691168463ffffffff6134b116565b505050565b670de0b6b3a764000081565b600a546001600160a01b03163314612c85576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600081118015612c9d5750670de0b6b3a76400008111155b612cda576040805162461bcd60e51b8152602060048201526009602482015268496e76616c6964204160b81b604482015290519081900360640190fd5b600e55565b600081421115612d20576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff161515600114612d7a576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b60008411612dbc576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b158015612e0757600080fd5b505afa158015612e1b573d6000803e3d6000fd5b505050506040513d6020811015612e3157600080fd5b505111612e72576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015612ec357600080fd5b505afa158015612ed7573d6000803e3d6000fd5b505050506040513d6020811015612eed57600080fd5b505111612f2e576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b612f45308686611b18610c9f600f54610bd3611164565b905082811015612f87576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805182815290516001600160a01b0387169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed9181900360200190a3612fd133856137b9565b6120ff6001600160a01b038616338363ffffffff6134b116565b600e5481565b60008261300057506000610e90565b8282028284828161300d57fe5b041461304a5760405162461bcd60e51b81526004018080602001828103825260218152602001806140636021913960400191505060405180910390fd5b9392505050565b600061304a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061392c565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156130cf57600080fd5b505afa1580156130e3573d6000803e3d6000fd5b505050506040513d60208110156130f957600080fd5b505160ff16905060128114156131125782915050610e90565b613132600a82900a610bd385670de0b6b3a764000063ffffffff612ff116565b915050610e90565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613194908590613991565b50505050565b6001600160a01b0382166131f5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254613208908263ffffffff61328a16565b6002556001600160a01b038216600090815260208190526040902054613234908263ffffffff61328a16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101561304a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b03831661332d5760405162461bcd60e51b81526004018080602001828103825260248152602001806141196024913960400191505060405180910390fd5b6001600160a01b0382166133725760405162461bcd60e51b8152600401808060200182810382526022815260200180613fd96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000806133e7848663ffffffff613b4916565b905060006133f6828686613bae565b9050613408848263ffffffff613d5316565b9695505050505050565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561344e57600080fd5b505afa158015613462573d6000803e3d6000fd5b505050506040513d602081101561347857600080fd5b505160ff16905060128114156134915782915050610e90565b613132670de0b6b3a7640000610bd385600a85900a63ffffffff612ff116565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612c27908490613991565b600d541561358e576000613546670de0b6b3a7640000610bd3613539600c54670de0b6b3a76400006138b590919063ffffffff16565b859063ffffffff612ff116565b9050600061356b670de0b6b3a7640000610bd3600d5485612ff190919063ffffffff16565b600b54909150613194906001600160a01b0386811691168363ffffffff6134b116565b5050565b6001600160a01b0383166135d75760405162461bcd60e51b81526004018080602001828103825260258152602001806140f46025913960400191505060405180910390fd5b6001600160a01b03821661361c5760405162461bcd60e51b8152600401808060200182810382526023815260200180613f946023913960400191505060405180910390fd5b61365f81604051806060016040528060268152602001613ffb602691396001600160a01b038616600090815260208190526040902054919063ffffffff6136ee16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613694908263ffffffff61328a16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561377d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561374257818101518382015260200161372a565b50505050905090810190601f16801561376f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080613798838663ffffffff613d5316565b905060006137a7828587613bae565b9050613408818663ffffffff613d5316565b6001600160a01b0382166137fe5760405162461bcd60e51b81526004018080602001828103825260218152602001806140d36021913960400191505060405180910390fd5b61384181604051806060016040528060228152602001613fb7602291396001600160a01b038516600090815260208190526040902054919063ffffffff6136ee16565b6001600160a01b03831660009081526020819052604090205560025461386d908263ffffffff6138b516565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061304a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ee565b600080821161390557600080fd5b600082848161391057fe5b04905082848161391c57fe5b061561304a576001019392505050565b6000818361397b5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561374257818101518382015260200161372a565b50600083858161398757fe5b0495945050505050565b6139a3826001600160a01b0316613db8565b6139f4576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310613a325780518252601f199092019160209182019101613a13565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a94576040519150601f19603f3d011682016040523d82523d6000602084013e613a99565b606091505b509150915081613af0576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561319457808060200190516020811015613b0c57600080fd5b50516131945760405162461bcd60e51b815260040180806020018281038252602a815260200180614161602a913960400191505060405180910390fd5b6000828201818312801590613b5e5750838112155b80613b735750600083128015613b7357508381125b61304a5760405162461bcd60e51b81526004018080602001828103825260218152602001806140216021913960400191505060405180910390fd5b600080600080613bf1613be4670de0b6b3a7640000613bd8600e5489613def90919063ffffffff16565b9063ffffffff613e9816565b879063ffffffff613b4916565b90506000613c19613be4670de0b6b3a7640000613bd8600e548b613def90919063ffffffff16565b9050613c2b828263ffffffff613def16565b9350613c6d613c51600e54613bd8670de0b6b3a764000088613def90919063ffffffff16565b613c618a8063ffffffff613def16565b9063ffffffff613d5316565b925050506000613ca9613c9a600e546ec097ce7bc90715b34b9f1000000000613e9890919063ffffffff16565b600e549063ffffffff613b4916565b90506000613cc9670de0b6b3a7640000613bd88a8563ffffffff613def16565b90506000613cf1613ce185600463ffffffff613def16565b613c61848063ffffffff613def16565b90506000811215613d31576040805162461bcd60e51b8152602060048201526005602482015264085c9bdbdd60da1b604482015290519081900360640190fd5b6110196002613bd8613d4284613f50565b60008690039063ffffffff613b4916565b6000818303818312801590613d685750838113155b80613d7d5750600083128015613d7d57508381135b61304a5760405162461bcd60e51b815260040180806020018281038252602481526020018061413d6024913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610dd45750141592915050565b600082613dfe57506000610e90565b82600019148015613e125750600160ff1b82145b15613e4e5760405162461bcd60e51b81526004018080602001828103825260278152602001806140ac6027913960400191505060405180910390fd5b82820282848281613e5b57fe5b051461304a5760405162461bcd60e51b81526004018080602001828103825260278152602001806140ac6027913960400191505060405180910390fd5b600081613eec576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613f005750600160ff1b83145b15613f3c5760405162461bcd60e51b81526004018080602001828103825260218152602001806140426021913960400191505060405180910390fd5b6000828481613f4757fe5b05949350505050565b600080613f61600284056001613b49565b9050825b8082121561304a5750806002613f84828681613f7d57fe5b0584613b49565b81613f8b57fe5b059150613f6556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f775369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158200b517a6ad6885e0943b08683a627ab15321ff06ac5dc05efbd6ad576bf43730a64736f6c63430005110032000000000000000000000000734279a9059dbb72cd3401983ef7f40f2ac6d3e9000000000000000000000000590bb03b651129c7931d1cc3128f50868178da50

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061025e5760003560e01c806370a0823111610146578063ab033ea9116100c3578063e3d670d711610087578063e3d670d71461083b578063eb9253c014610861578063ec342ad01461088d578063ee919d5014610895578063ef9aa9fc146108b2578063f446c1d0146108ea5761025e565b8063ab033ea914610779578063c22dc7221461079f578063cd55e092146107cd578063dd62ed3e14610805578063ddca3f43146108335761025e565b8063a00251c61161010a578063a00251c6146106b9578063a457c2d7146106c1578063a4ec0620146106ed578063a9059cbb14610745578063a919987b146107715761025e565b806370a082311461061957806376a67a511461063f5780637d0f7a88146106655780639179182d1461068b57806395d89b41146106b15761025e565b80631820b47f116101df5780633397d601116101a35780633397d6011461051f5780633575c19e1461056157806339509351146105875780634f393a07146105b35780635aa6e675146105d95780636015f4ef146105e15761025e565b80631820b47f1461042a57806323b872dd1461046c57806326e2da7b146104a257806329688a80146104e4578063313ce567146105015761025e565b806309866f611161022657806309866f61146103965780630b78f9c0146103d85780630c7d5cd8146103fd57806313560cac1461040557806318160ddd146104225761025e565b80630266f0441461026357806303d938681461028757806306661abd146102d157806306fdde03146102d9578063095ea7b314610356575b600080fd5b61026b6108f2565b604080516001600160a01b039092168252519081900360200190f35b6102bf6004803603608081101561029d57600080fd5b506001600160a01b038135169060208101359060408101359060600135610901565b60408051918252519081900360200190f35b6102bf610ddc565b6102e1610de2565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561031b578181015183820152602001610303565b50505050905090810190601f1680156103485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103826004803603604081101561036c57600080fd5b506001600160a01b038135169060200135610e78565b604080519115158252519081900360200190f35b6102bf600480360360a08110156103ac57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610e96565b6103fb600480360360408110156103ee57600080fd5b5080359060200135611026565b005b6102bf611137565b61026b6004803603602081101561041b57600080fd5b503561113d565b6102bf611164565b6102bf600480360360a081101561044057600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561116a565b6103826004803603606081101561048257600080fd5b506001600160a01b038135811691602081013590911690604001356115e8565b6102bf600480360360a08110156104b857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611675565b6102bf600480360360208110156104fa57600080fd5b50356117a3565b6105096117e6565b6040805160ff9092168252519081900360200190f35b6102bf600480360360a081101561053557600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608001356117ef565b6103fb6004803603602081101561057757600080fd5b50356001600160a01b0316611c5f565b6103826004803603604081101561059d57600080fd5b506001600160a01b038135169060200135611cce565b6103fb600480360360208110156105c957600080fd5b50356001600160a01b0316611d22565b61026b611de3565b6102bf600480360360808110156105f757600080fd5b506001600160a01b038135169060208101359060408101359060600135611df2565b6102bf6004803603602081101561062f57600080fd5b50356001600160a01b0316612140565b6103826004803603602081101561065557600080fd5b50356001600160a01b031661215b565b6103826004803603602081101561067b57600080fd5b50356001600160a01b0316612170565b6103fb600480360360208110156106a157600080fd5b50356001600160a01b0316612185565b6102e1612299565b6102bf6122fa565b610382600480360360408110156106d757600080fd5b506001600160a01b038135169060200135612353565b6106f56123c1565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610731578181015183820152602001610719565b505050509050019250505060405180910390f35b6103826004803603604081101561075b57600080fd5b506001600160a01b038135169060200135612422565b61026b612436565b6103fb6004803603602081101561078f57600080fd5b50356001600160a01b0316612445565b6103fb600480360360408110156107b557600080fd5b506001600160a01b03813516906020013515156124b4565b6102bf600480360360808110156107e357600080fd5b506001600160a01b03813516906020810135906040810135906060013561252c565b6102bf6004803603604081101561081b57600080fd5b506001600160a01b038135811691602001351661297b565b6102bf6129a6565b6102bf6004803603602081101561085157600080fd5b50356001600160a01b03166129ac565b6103fb6004803603604081101561087757600080fd5b506001600160a01b038135169060200135612acf565b6102bf612c2c565b6103fb600480360360208110156108ab57600080fd5b5035612c38565b6102bf600480360360808110156108c857600080fd5b506001600160a01b038135169060208101359060408101359060600135612cdf565b6102bf612feb565b600b546001600160a01b031681565b6001600160a01b03841660009081526006602052604081205460ff16151560011461095b576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff16156109b1576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b814211156109f0576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b60008411610a32576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015610a8357600080fd5b505afa158015610a97573d6000803e3d6000fd5b505050506040513d6020811015610aad57600080fd5b505111610aee576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b158015610b3957600080fd5b505afa158015610b4d573d6000803e3d6000fd5b505050506040513d6020811015610b6357600080fd5b505111610ba4576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b610bac611164565b610c8d576000610bdf670de0b6b3a7640000610bd3600c5488612ff190919063ffffffff16565b9063ffffffff61305116565b600954604080516341976e0960e01b81526001600160a01b03808b1660048301529151939450610c85938a93610c8093670de0b6b3a764000093610bd39391909216916341976e09916024808301926020929190829003018186803b158015610c4757600080fd5b505afa158015610c5b573d6000803e3d6000fd5b505050506040513d6020811015610c7157600080fd5b5051869063ffffffff612ff116565b613093565b915050610cbd565b610cba853086610ca4610c9f8a6129ac565b6117a3565b610cb5610c9f600f54610bd3611164565b610e96565b90505b82811015610cfd576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805182815290516001600160a01b0387169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9181900360200190a3610d586001600160a01b03861633308763ffffffff61313a16565b610d62338261319a565b6001600160a01b03851660009081526010602052604090205460ff16158015610d9357506000610d91866129ac565b115b15610dd4576001600160a01b0385166000908152601060205260409020805460ff19166001908117909155600f54610dd09163ffffffff61328a16565b600f555b949350505050565b600f5481565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e6e5780601f10610e4357610100808354040283529160200191610e6e565b820191906000526020600020905b815481529060010190602001808311610e5157829003601f168201915b5050505050905090565b6000610e8c610e856132e4565b84846132e8565b5060015b92915050565b600954604080516341976e0960e01b81526001600160a01b03888116600483015291516000938493610f3d93670de0b6b3a764000093610bd39392909216916341976e0991602480820192602092909190829003018186803b158015610efb57600080fd5b505afa158015610f0f573d6000803e3d6000fd5b505050506040513d6020811015610f2557600080fd5b5051610f318b8a613093565b9063ffffffff612ff116565b90506000610f62670de0b6b3a7640000610bd3600c5485612ff190919063ffffffff16565b90506000610f79610f72836117a3565b87876133d4565b600954604080516341976e0960e01b81526001600160a01b03808d1660048301529151939450611019938c936110149316916341976e09916024808301926020929190829003018186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d6020811015610ffa57600080fd5b5051610bd385670de0b6b3a764000063ffffffff612ff116565b613412565b9998505050505050505050565b600a546001600160a01b03163314611073576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b670de0b6b3a7640000821080156110925750670dbd2fc137a300008210155b6110d1576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b801561112c57670de0b6b3a764000081111561112c576040805162461bcd60e51b8152602060048201526015602482015274496e76616c6964207265736572766520726174696f60581b604482015290519081900360640190fd5b600c91909155600d55565b600d5481565b6008818154811061114a57fe5b6000918252602090912001546001600160a01b0316905081565b60025490565b6001600160a01b03851660009081526006602052604081205460ff1615156001146111c4576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03861660009081526007602052604090205460ff161561121a576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff161515600114611274576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff16156112ca576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038981166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b15801561131b57600080fd5b505afa15801561132f573d6000803e3d6000fd5b505050506040513d602081101561134557600080fd5b505111611386576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b1580156113d757600080fd5b505afa1580156113eb573d6000803e3d6000fd5b505050506040513d602081101561140157600080fd5b505111611442576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b81421115611481576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b8261148b866129ac565b10156114de576040805162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e74206f7574707574206c6971756964697479000000604482015290519081900360640190fd5b6115018686856114f0610c9f8b6129ac565b6114fc610c9f8b6129ac565b611675565b905083811115611543576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788487604051808381526020018281526020019250505060405180910390a46115bb6001600160a01b03871633308463ffffffff61313a16565b6115d56001600160a01b038616338563ffffffff6134b116565b6115df8682613503565b95945050505050565b60006115f5848484613592565b61166b846116016132e4565b61166685604051806060016040528060288152602001614084602891396001600160a01b038a1660009081526001602052604081209061163f6132e4565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6136ee16565b6132e8565b5060019392505050565b600954604080516341976e0960e01b81526001600160a01b0387811660048301529151600093849361171093670de0b6b3a764000093610bd39392909216916341976e0991602480820192602092909190829003018186803b1580156116da57600080fd5b505afa1580156116ee573d6000803e3d6000fd5b505050506040513d602081101561170457600080fd5b5051610f318a8a613093565b90506000611727611720836117a3565b8686613785565b9050600061174c600c54610bd3670de0b6b3a764000085612ff190919063ffffffff16565b600954604080516341976e0960e01b81526001600160a01b03808e1660048301529151939450611019938d936110149316916341976e09916024808301926020929190829003018186803b158015610fd057600080fd5b60008181811215610e90576040805162461bcd60e51b81526020600482015260086024820152676f766572666c6f7760c01b604482015290519081900360640190fd5b60055460ff1690565b6001600160a01b03851660009081526006602052604081205460ff161515600114611849576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03861660009081526007602052604090205460ff161561189f576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff1615156001146118f9576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff161561194f576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038981166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b1580156119a057600080fd5b505afa1580156119b4573d6000803e3d6000fd5b505050506040513d60208110156119ca57600080fd5b505111611a0b576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015611a5c57600080fd5b505afa158015611a70573d6000803e3d6000fd5b505050506040513d6020811015611a8657600080fd5b505111611ac7576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b81421115611b06576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b611b24868686611b18610c9f8b6129ac565b610cb5610c9f8b6129ac565b905080611b30866129ac565b1015611b83576040805162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e74206f7574707574206c6971756964697479000000604482015290519081900360640190fd5b82811015611bc3576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b846001600160a01b0316866001600160a01b0316336001600160a01b03167f908fb5ee8f16c6bc9bc3690973819f32a4d4b10188134543c88706e0e1d433788785604051808381526020018281526020019250505060405180910390a4611c3b6001600160a01b03871633308763ffffffff61313a16565b611c556001600160a01b038616338363ffffffff6134b116565b6115df8685613503565b600a546001600160a01b03163314611cac576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e8c611cdb6132e4565b846116668560016000611cec6132e4565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff61328a16565b600a546001600160a01b03163314611d6f576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b038116611dc1576040805162461bcd60e51b81526020600482015260146024820152731a5b9d985b1a59081c995cd95c9d99481c1bdbdb60621b604482015290519081900360640190fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b600081421115611e33576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff161515600114611e8d576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b60008311611ed0576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81bdd5d1c1d5d60aa1b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b158015611f1b57600080fd5b505afa158015611f2f573d6000803e3d6000fd5b505050506040513d6020811015611f4557600080fd5b505111611f86576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015611fd757600080fd5b505afa158015611feb573d6000803e3d6000fd5b505050506040513d602081101561200157600080fd5b505111612042576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b6120593086856114f0610c9f600f54610bd3611164565b90508381111561209b576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805184815290516001600160a01b0387169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed9181900360200190a36120e533826137b9565b6120ff6001600160a01b038616338563ffffffff6134b116565b612108856129ac565b610dd4576001600160a01b0385166000908152601060205260409020805460ff19169055600f54610dd090600163ffffffff6138b516565b6001600160a01b031660009081526020819052604090205490565b60076020526000908152604090205460ff1681565b60066020526000908152604090205460ff1681565b600a546001600160a01b031633146121d2576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b03811660009081526006602052604090205460ff1615612233576040805162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48185c1c1c9bdd995960821b604482015290519081900360640190fd5b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e6e5780601f10610e4357610100808354040283529160200191610e6e565b600080805b60085481101561234d576123436123366008838154811061231c57fe5b6000918252602090912001546001600160a01b03166129ac565b839063ffffffff61328a16565b91506001016122ff565b50905090565b6000610e8c6123606132e4565b846116668560405180606001604052806025815260200161418b602591396001600061238a6132e4565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6136ee16565b60606008805480602002602001604051908101604052809291908181526020018280548015610e6e57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116123fb575050505050905090565b6000610e8c61242f6132e4565b8484613592565b6009546001600160a01b031681565b600a546001600160a01b03163314612492576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314612501576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6001600160a01b03841660009081526006602052604081205460ff161515600114612586576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b6001600160a01b03851660009081526007602052604090205460ff16156125dc576040805162461bcd60e51b8152602060048201526005602482015264706175736560d81b604482015290519081900360640190fd5b8142111561261b576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b6000831161265e576040805162461bcd60e51b815260206004820152600b60248201526a1e995c9bc81bdd5d1c1d5d60aa1b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b1580156126af57600080fd5b505afa1580156126c3573d6000803e3d6000fd5b505050506040513d60208110156126d957600080fd5b50511161271a576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b15801561276557600080fd5b505afa158015612779573d6000803e3d6000fd5b505050506040513d602081101561278f57600080fd5b5051116127d0576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b6127d8611164565b6128b057600954604080516341976e0960e01b81526001600160a01b038089166004830152915160009361287a938a936110149391909216916341976e09916024808301926020929190829003018186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d602081101561286057600080fd5b5051610bd388670de0b6b3a764000063ffffffff612ff116565b600c549091506128a89061289c83670de0b6b3a764000063ffffffff612ff116565b9063ffffffff6138f716565b9150506128d6565b6128d38530856128c2610c9f8a6129ac565b6114fc610c9f600f54610bd3611164565b90505b83811115612916576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805184815290516001600160a01b0387169133917f63982df10efd8dfaaaa0fcc7f50b2d93b7cba26ccc48adee2873220d485dc39a9181900360200190a36129716001600160a01b03861633308463ffffffff61313a16565b610d62338461319a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b604080516370a0823160e01b81523060048201529051600091839183916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156129fa57600080fd5b505afa158015612a0e573d6000803e3d6000fd5b505050506040513d6020811015612a2457600080fd5b5051600954604080516341976e0960e01b81526001600160a01b0386811660048301529151939450600093612ac393670de0b6b3a764000093610bd3939116916341976e0991602480820192602092909190829003018186803b158015612a8a57600080fd5b505afa158015612a9e573d6000803e3d6000fd5b505050506040513d6020811015612ab457600080fd5b5051859063ffffffff612ff116565b90506115df8582613093565b600a546001600160a01b03163314612b1c576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b6001600160a01b03821660009081526010602052604090205460ff1615612b82576040805162461bcd60e51b815260206004820152601560248201527463616e2774207365697a65206c697175696469747960581b604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038516916370a0823191602480820192602092909190829003018186803b158015612bcc57600080fd5b505afa158015612be0573d6000803e3d6000fd5b505050506040513d6020811015612bf657600080fd5b5051905080821115612c0757600080fd5b600b54612c27906001600160a01b0385811691168463ffffffff6134b116565b505050565b670de0b6b3a764000081565b600a546001600160a01b03163314612c85576040805162461bcd60e51b815260206004820152600b60248201526a21676f7665726e616e636560a81b604482015290519081900360640190fd5b600081118015612c9d5750670de0b6b3a76400008111155b612cda576040805162461bcd60e51b8152602060048201526009602482015268496e76616c6964204160b81b604482015290519081900360640190fd5b600e55565b600081421115612d20576040805162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015290519081900360640190fd5b6001600160a01b03851660009081526006602052604090205460ff161515600114612d7a576040805162461bcd60e51b815260206004820152600560248201526410b1b7b4b760d91b604482015290519081900360640190fd5b60008411612dbc576040805162461bcd60e51b815260206004820152600a6024820152691e995c9bc81a5b9c1d5d60b21b604482015290519081900360640190fd5b600954604080516341976e0960e01b815230600482015290516000926001600160a01b0316916341976e09916024808301926020929190829003018186803b158015612e0757600080fd5b505afa158015612e1b573d6000803e3d6000fd5b505050506040513d6020811015612e3157600080fd5b505111612e72576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b600954604080516341976e0960e01b81526001600160a01b038881166004830152915160009392909216916341976e0991602480820192602092909190829003018186803b158015612ec357600080fd5b505afa158015612ed7573d6000803e3d6000fd5b505050506040513d6020811015612eed57600080fd5b505111612f2e576040805162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b604482015290519081900360640190fd5b612f45308686611b18610c9f600f54610bd3611164565b905082811015612f87576040805162461bcd60e51b8152602060048201526008602482015267736c69707061676560c01b604482015290519081900360640190fd5b6040805182815290516001600160a01b0387169133917fe74c91552b64c2e2e7bd255639e004e693bd3e1d01cc33e65610b86afcc1ffed9181900360200190a3612fd133856137b9565b6120ff6001600160a01b038616338363ffffffff6134b116565b600e5481565b60008261300057506000610e90565b8282028284828161300d57fe5b041461304a5760405162461bcd60e51b81526004018080602001828103825260218152602001806140636021913960400191505060405180910390fd5b9392505050565b600061304a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061392c565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156130cf57600080fd5b505afa1580156130e3573d6000803e3d6000fd5b505050506040513d60208110156130f957600080fd5b505160ff16905060128114156131125782915050610e90565b613132600a82900a610bd385670de0b6b3a764000063ffffffff612ff116565b915050610e90565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052613194908590613991565b50505050565b6001600160a01b0382166131f5576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254613208908263ffffffff61328a16565b6002556001600160a01b038216600090815260208190526040902054613234908263ffffffff61328a16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101561304a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b03831661332d5760405162461bcd60e51b81526004018080602001828103825260248152602001806141196024913960400191505060405180910390fd5b6001600160a01b0382166133725760405162461bcd60e51b8152600401808060200182810382526022815260200180613fd96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000806133e7848663ffffffff613b4916565b905060006133f6828686613bae565b9050613408848263ffffffff613d5316565b9695505050505050565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561344e57600080fd5b505afa158015613462573d6000803e3d6000fd5b505050506040513d602081101561347857600080fd5b505160ff16905060128114156134915782915050610e90565b613132670de0b6b3a7640000610bd385600a85900a63ffffffff612ff116565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612c27908490613991565b600d541561358e576000613546670de0b6b3a7640000610bd3613539600c54670de0b6b3a76400006138b590919063ffffffff16565b859063ffffffff612ff116565b9050600061356b670de0b6b3a7640000610bd3600d5485612ff190919063ffffffff16565b600b54909150613194906001600160a01b0386811691168363ffffffff6134b116565b5050565b6001600160a01b0383166135d75760405162461bcd60e51b81526004018080602001828103825260258152602001806140f46025913960400191505060405180910390fd5b6001600160a01b03821661361c5760405162461bcd60e51b8152600401808060200182810382526023815260200180613f946023913960400191505060405180910390fd5b61365f81604051806060016040528060268152602001613ffb602691396001600160a01b038616600090815260208190526040902054919063ffffffff6136ee16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054613694908263ffffffff61328a16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561377d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561374257818101518382015260200161372a565b50505050905090810190601f16801561376f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080613798838663ffffffff613d5316565b905060006137a7828587613bae565b9050613408818663ffffffff613d5316565b6001600160a01b0382166137fe5760405162461bcd60e51b81526004018080602001828103825260218152602001806140d36021913960400191505060405180910390fd5b61384181604051806060016040528060228152602001613fb7602291396001600160a01b038516600090815260208190526040902054919063ffffffff6136ee16565b6001600160a01b03831660009081526020819052604090205560025461386d908263ffffffff6138b516565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061304a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506136ee565b600080821161390557600080fd5b600082848161391057fe5b04905082848161391c57fe5b061561304a576001019392505050565b6000818361397b5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561374257818101518382015260200161372a565b50600083858161398757fe5b0495945050505050565b6139a3826001600160a01b0316613db8565b6139f4576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310613a325780518252601f199092019160209182019101613a13565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613a94576040519150601f19603f3d011682016040523d82523d6000602084013e613a99565b606091505b509150915081613af0576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561319457808060200190516020811015613b0c57600080fd5b50516131945760405162461bcd60e51b815260040180806020018281038252602a815260200180614161602a913960400191505060405180910390fd5b6000828201818312801590613b5e5750838112155b80613b735750600083128015613b7357508381125b61304a5760405162461bcd60e51b81526004018080602001828103825260218152602001806140216021913960400191505060405180910390fd5b600080600080613bf1613be4670de0b6b3a7640000613bd8600e5489613def90919063ffffffff16565b9063ffffffff613e9816565b879063ffffffff613b4916565b90506000613c19613be4670de0b6b3a7640000613bd8600e548b613def90919063ffffffff16565b9050613c2b828263ffffffff613def16565b9350613c6d613c51600e54613bd8670de0b6b3a764000088613def90919063ffffffff16565b613c618a8063ffffffff613def16565b9063ffffffff613d5316565b925050506000613ca9613c9a600e546ec097ce7bc90715b34b9f1000000000613e9890919063ffffffff16565b600e549063ffffffff613b4916565b90506000613cc9670de0b6b3a7640000613bd88a8563ffffffff613def16565b90506000613cf1613ce185600463ffffffff613def16565b613c61848063ffffffff613def16565b90506000811215613d31576040805162461bcd60e51b8152602060048201526005602482015264085c9bdbdd60da1b604482015290519081900360640190fd5b6110196002613bd8613d4284613f50565b60008690039063ffffffff613b4916565b6000818303818312801590613d685750838113155b80613d7d5750600083128015613d7d57508381135b61304a5760405162461bcd60e51b815260040180806020018281038252602481526020018061413d6024913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590610dd45750141592915050565b600082613dfe57506000610e90565b82600019148015613e125750600160ff1b82145b15613e4e5760405162461bcd60e51b81526004018080602001828103825260278152602001806140ac6027913960400191505060405180910390fd5b82820282848281613e5b57fe5b051461304a5760405162461bcd60e51b81526004018080602001828103825260278152602001806140ac6027913960400191505060405180910390fd5b600081613eec576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613f005750600160ff1b83145b15613f3c5760405162461bcd60e51b81526004018080602001828103825260218152602001806140426021913960400191505060405180910390fd5b6000828481613f4757fe5b05949350505050565b600080613f61600284056001613b49565b9050825b8082121561304a5750806002613f84828681613f7d57fe5b0584613b49565b81613f8b57fe5b059150613f6556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655369676e6564536166654d6174683a206164646974696f6e206f766572666c6f775369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158200b517a6ad6885e0943b08683a627ab15321ff06ac5dc05efbd6ad576bf43730a64736f6c63430005110032

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

000000000000000000000000734279a9059dbb72cd3401983ef7f40f2ac6d3e9000000000000000000000000590bb03b651129c7931d1cc3128f50868178da50

-----Decoded View---------------
Arg [0] : _normalizer (address): 0x734279A9059dBB72CD3401983EF7F40F2ac6D3e9
Arg [1] : _reservePool (address): 0x590BB03b651129c7931D1cC3128F50868178dA50

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000734279a9059dbb72cd3401983ef7f40f2ac6d3e9
Arg [1] : 000000000000000000000000590bb03b651129c7931d1cc3128f50868178da50


Deployed Bytecode Sourcemap

7727:13379:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7727:13379:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8523:26;;;:::i;:::-;;;;-1:-1:-1;;;;;8523:26:0;;;;;;;;;;;;;;17122:1164;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;17122:1164:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11018:21;;;:::i;4305:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4305:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1645:146;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1645:146:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12880:452;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;12880:452:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9346:402::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9346:402:0;;;;;;;:::i;:::-;;10914:31;;;:::i;8428:24::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8428:24:0;;:::i;1153:86::-;;;:::i;16109:1007::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;16109:1007:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1796:297::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1796:297:0;;;;;;;;;;;;;;;;;:::i;13380:454::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;13380:454:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14935:152::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14935:152:0;;:::i;4481:81::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15093:1010;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;15093:1010:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8945:164::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8945:164:0;-1:-1:-1;;;;;8945:164:0;;:::i;2098:204::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2098:204:0;;;;;;;;:::i;9115:225::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9115:225:0;-1:-1:-1;;;;;9115:225:0;;:::i;8492:25::-;;;:::i;20286:818::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;20286:818:0;;;;;;;;;;;;;;;;;;:::i;1244:105::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1244:105:0;-1:-1:-1;;;;;1244:105:0;;:::i;8385:37::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8385:37:0;-1:-1:-1;;;;;8385:37:0;;:::i;8342:::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8342:37:0;-1:-1:-1;;;;;8342:37:0;;:::i;9754:238::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9754:238:0;-1:-1:-1;;;;;9754:238:0;;:::i;4391:85::-;;;:::i;12120:254::-;;;:::i;2307:255::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2307:255:0;;;;;;;;:::i;11980:93::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11980:93:0;;;;;;;;;;;;;;;;;1354:152;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1354:152:0;;;;;;;;:::i;8458:28::-;;;:::i;8787:152::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8787:152:0;-1:-1:-1;;;;;8787:152:0;;:::i;9998:151::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9998:151:0;;;;;;;;;;:::i;18292:1164::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;18292:1164:0;;;;;;;;;;;;;;;;;;:::i;1511:129::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;1511:129:0;;;;;;;;;;:::i;10880:28::-;;;:::i;14590:305::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14590:305:0;-1:-1:-1;;;;;14590:305:0;;:::i;10557:317::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10557:317:0;;;;;;;;:::i;10951:32::-;;;:::i;10155:396::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10155:396:0;;:::i;19462:818::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;19462:818:0;;;;;;;;;;;;;;;;;;:::i;10990:22::-;;;:::i;8523:26::-;;;-1:-1:-1;;;;;8523:26:0;;:::o;17122:1164::-;-1:-1:-1;;;;;17256:20:0;;17225:11;17256:20;;;:5;:20;;;;;;;;:28;;:20;:28;17248:46;;;;;-1:-1:-1;;;17248:46:0;;;;;;;;;;;;-1:-1:-1;;;17248:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17312:20:0;;;;;;:5;:20;;;;;;;;:29;17304:47;;;;;-1:-1:-1;;;17304:47:0;;;;;;;;;;;;-1:-1:-1;;;17304:47:0;;;;;;;;;;;;;;;17388:8;17369:15;:27;;17361:47;;;;;-1:-1:-1;;;17361:47:0;;;;;;;;;;;;-1:-1:-1;;;17361:47:0;;;;;;;;;;;;;;;17434:1;17426:5;:9;17418:32;;;;;-1:-1:-1;;;17418:32:0;;;;;;;;;;;;-1:-1:-1;;;17418:32:0;;;;;;;;;;;;;;;17468:10;;:34;;;-1:-1:-1;;;17468:34:0;;-1:-1:-1;;;;;17468:34:0;;;;;;;;;17505:1;;17468:10;;;;;:19;;:34;;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;17468:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17468:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17468:34:0;:38;17460:61;;;;;-1:-1:-1;;;17460:61:0;;;;;;;;;;;;-1:-1:-1;;;17460:61:0;;;;;;;;;;;;;;;17539:10;;:34;;;-1:-1:-1;;;17539:34:0;;17567:4;17539:34;;;;;;17576:1;;-1:-1:-1;;;;;17539:10:0;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;17539:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17539:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17539:34:0;:38;17531:61;;;;;-1:-1:-1;;;17531:61:0;;;;;;;;;;;;-1:-1:-1;;;17531:61:0;;;;;;;;;;;;;;;17607:13;:11;:13::i;:::-;17603:320;;17641:18;17662:24;10979:4;17662:14;17672:3;;17662:5;:9;;:14;;;;:::i;:::-;:18;:24;:18;:24;:::i;:::-;17747:10;;:34;;;-1:-1:-1;;;17747:34:0;;-1:-1:-1;;;;;17747:34:0;;;;;;;;;17641:45;;-1:-1:-1;17709:84:0;;17723:4;;17729:63;;17787:4;;17729:53;;17747:10;;;;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;17747:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17747:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17747:34:0;17729:13;;:53;:17;:53;:::i;:63::-;17709:13;:84::i;:::-;17700:93;;17603:320;;;;17833:79;17847:4;17853;17859:5;17866:16;17868:13;17876:4;17868:7;:13::i;:::-;17866:1;:16::i;:::-;17884:27;17886:24;17904:5;;17886:13;:11;:13::i;17884:27::-;17833:13;:79::i;:::-;17824:88;;17603:320;17951:9;17941:6;:19;;17933:40;;;;;-1:-1:-1;;;17933:40:0;;;;;;;;;;;;-1:-1:-1;;;17933:40:0;;;;;;;;;;;;;;;17989:43;;;;;;;;-1:-1:-1;;;;;17989:43:0;;;17998:10;;17989:43;;;;;;;;;18043:55;-1:-1:-1;;;;;18043:21:0;;18065:10;18085:4;18092:5;18043:55;:21;:55;:::i;:::-;18108:25;18114:10;18126:6;18108:5;:25::i;:::-;-1:-1:-1;;;;;18149:21:0;;;;;;:6;:21;;;;;;;;18148:22;:43;;;;;18190:1;18174:13;18182:4;18174:7;:13::i;:::-;:17;18148:43;18144:136;;;-1:-1:-1;;;;;18207:21:0;;;;;;:6;:21;;;;;:28;;-1:-1:-1;;18207:28:0;18231:4;18207:28;;;;;;18257:5;;:12;;;:9;:12;:::i;:::-;18249:5;:20;18144:136;17122:1164;;;;;;:::o;11018:21::-;;;;:::o;4305:81::-;4374:5;4367:12;;;;;;;;-1:-1:-1;;4367:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4342:13;;4367:12;;4374:5;;4367:12;;4374:5;4367:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4305:81;:::o;1645:146::-;1708:4;1724:39;1733:12;:10;:12::i;:::-;1747:7;1756:6;1724:8;:39::i;:::-;-1:-1:-1;1780:4:0;1645:146;;;;;:::o;12880:452::-;13052:10;;:34;;;-1:-1:-1;;;13052:34:0;;-1:-1:-1;;;;;13052:34:0;;;;;;;;;12980:11;;;;13021:76;;13092:4;;13021:66;;13052:10;;;;;:19;;:34;;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;13052:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13052:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13052:34:0;13021:26;13035:4;13041:5;13021:13;:26::i;:::-;:30;:66;:30;:66;:::i;:76::-;13003:94;;13107:23;13133:29;10979:4;13133:19;13148:3;;13133:10;:14;;:19;;;;:::i;:29::-;13107:55;;13173:16;13197:33;13202:21;13204:18;13202:1;:21::i;:::-;13225:1;13228;13197:4;:33::i;:::-;13291:10;;:32;;;-1:-1:-1;;;13291:32:0;;-1:-1:-1;;;;;13291:32:0;;;;;;;;;13173:58;;-1:-1:-1;13251:74:0;;13261:2;;13265:59;;13291:10;;:19;;:32;;;;;;;;;;;;;;:10;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;13291:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13291:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13291:32:0;13265:21;:11;13281:4;13265:21;:15;:21;:::i;:59::-;13251:9;:74::i;:::-;13242:83;12880:452;-1:-1:-1;;;;;;;;;12880:452:0:o;9346:402::-;9435:10;;-1:-1:-1;;;;;9435:10:0;9421;:24;9413:48;;;;;-1:-1:-1;;;9413:48:0;;;;;;;;;;;;-1:-1:-1;;;9413:48:0;;;;;;;;;;;;;;;9486:4;9479;:11;:30;;;;;9502:7;9494:4;:15;;9479:30;9471:54;;;;;-1:-1:-1;;;9471:54:0;;;;;;;;;;;;-1:-1:-1;;;9471:54:0;;;;;;;;;;;;;;;9556:17;;9552:132;;9614:4;9597:13;:21;;9589:55;;;;;-1:-1:-1;;;9589:55:0;;;;;;;;;;;;-1:-1:-1;;;9589:55:0;;;;;;;;;;;;;;;9693:3;:10;;;;9713:12;:28;9346:402::o;10914:31::-;;;;:::o;8428:24::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8428:24:0;;-1:-1:-1;8428:24:0;:::o;1153:86::-;1220:12;;1153:86;:::o;16109:1007::-;-1:-1:-1;;;;;16252:20:0;;16222:10;16252:20;;;:5;:20;;;;;;;;:28;;:20;:28;16244:46;;;;;-1:-1:-1;;;16244:46:0;;;;;;;;;;;;-1:-1:-1;;;16244:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16308:20:0;;;;;;:5;:20;;;;;;;;:29;16300:47;;;;;-1:-1:-1;;;16300:47:0;;;;;;;;;;;;-1:-1:-1;;;16300:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16365:18:0;;;;;;:5;:18;;;;;;;;:26;;:18;:26;16357:44;;;;;-1:-1:-1;;;16357:44:0;;;;;;;;;;;;-1:-1:-1;;;16357:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16419:18:0;;;;;;:5;:18;;;;;;;;:27;16411:45;;;;;-1:-1:-1;;;16411:45:0;;;;;;;;;;;;-1:-1:-1;;;16411:45:0;;;;;;;;;;;;;;;16474:10;;:34;;;-1:-1:-1;;;16474:34:0;;-1:-1:-1;;;;;16474:34:0;;;;;;;;;16511:1;;16474:10;;;;;:19;;:34;;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;16474:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16474:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16474:34:0;:38;16466:61;;;;;-1:-1:-1;;;16466:61:0;;;;;;;;;;;;-1:-1:-1;;;16466:61:0;;;;;;;;;;;;;;;16545:10;;:32;;;-1:-1:-1;;;16545:32:0;;-1:-1:-1;;;;;16545:32:0;;;;;;;;;16580:1;;16545:10;;;;;:19;;:32;;;;;;;;;;;;;;;:10;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;16545:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16545:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16545:32:0;:36;16537:59;;;;;-1:-1:-1;;;16537:59:0;;;;;;;;;;;;-1:-1:-1;;;16537:59:0;;;;;;;;;;;;;;;16634:8;16615:15;:27;;16607:47;;;;;-1:-1:-1;;;16607:47:0;;;;;;;;;;;;-1:-1:-1;;;16607:47:0;;;;;;;;;;;;;;;16687:6;16672:11;16680:2;16672:7;:11::i;:::-;:21;;16664:63;;;;;-1:-1:-1;;;16664:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16746:65;16760:4;16766:2;16770:6;16778:16;16780:13;16788:4;16780:7;:13::i;16778:16::-;16796:14;16798:11;16806:2;16798:7;:11::i;16796:14::-;16746:13;:65::i;:::-;16738:73;;16839:8;16830:5;:17;;16822:38;;;;;-1:-1:-1;;;16822:38:0;;;;;;;;;;;;-1:-1:-1;;;16822:38:0;;;;;;;;;;;;;;;16920:2;-1:-1:-1;;;;;16876:63:0;16905:4;-1:-1:-1;;;;;16876:63:0;16885:10;-1:-1:-1;;;;;16876:63:0;;16925:5;16932:6;16876:63;;;;;;;;;;;;;;;;;;;;;;;;16950:55;-1:-1:-1;;;;;16950:21:0;;16972:10;16992:4;16999:5;16950:55;:21;:55;:::i;:::-;17015:35;-1:-1:-1;;;;;17015:15:0;;17031:10;17043:6;17015:35;:15;:35;:::i;:::-;17060:27;17075:4;17081:5;17060:14;:27::i;:::-;16109:1007;;;;;;;:::o;1796:297::-;1882:4;1898:36;1908:6;1916:9;1927:6;1898:9;:36::i;:::-;1944:121;1953:6;1961:12;:10;:12::i;:::-;1975:89;2013:6;1975:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1975:19:0;;;;;;:11;:19;;;;;;1995:12;:10;:12::i;:::-;-1:-1:-1;;;;;1975:33:0;;;;;;;;;;;;-1:-1:-1;1975:33:0;;;:89;;:37;:89;:::i;:::-;1944:8;:121::i;:::-;-1:-1:-1;2082:4:0;1796:297;;;;;:::o;13380:454::-;13552:10;;:32;;;-1:-1:-1;;;13552:32:0;;-1:-1:-1;;;;;13552:32:0;;;;;;;;;13481:10;;;;13522:73;;13590:4;;13522:63;;13552:10;;;;;:19;;:32;;;;;;;;;;;;;;;:10;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;13552:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13552:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13552:32:0;13522:25;13536:2;13540:6;13522:13;:25::i;:73::-;13503:92;;13606:24;13638:26;13643:14;13645:11;13643:1;:14::i;:::-;13659:1;13662;13638:4;:26::i;:::-;13606:59;;13675:15;13693:38;13727:3;;13693:29;10979:4;13693:19;:23;;:29;;;;:::i;:38::-;13791:10;;:34;;;-1:-1:-1;;;13791:34:0;;-1:-1:-1;;;;;13791:34:0;;;;;;;;;13675:56;;-1:-1:-1;13750:77:0;;13760:4;;13766:60;;13791:10;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;14935:152:0;14975:6;15015:1;15035:10;;;;15027:31;;;;;-1:-1:-1;;;15027:31:0;;;;;;;;;;;;-1:-1:-1;;;15027:31:0;;;;;;;;;;;;;;4481:81;4546:9;;;;4481:81;:::o;15093:1010::-;-1:-1:-1;;;;;15236:20:0;;15205:11;15236:20;;;:5;:20;;;;;;;;:28;;:20;:28;15228:46;;;;;-1:-1:-1;;;15228:46:0;;;;;;;;;;;;-1:-1:-1;;;15228:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15292:20:0;;;;;;:5;:20;;;;;;;;:29;15284:47;;;;;-1:-1:-1;;;15284:47:0;;;;;;;;;;;;-1:-1:-1;;;15284:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15349:18:0;;;;;;:5;:18;;;;;;;;:26;;:18;:26;15341:44;;;;;-1:-1:-1;;;15341:44:0;;;;;;;;;;;;-1:-1:-1;;;15341:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15403:18:0;;;;;;:5;:18;;;;;;;;:27;15395:45;;;;;-1:-1:-1;;;15395:45:0;;;;;;;;;;;;-1:-1:-1;;;15395:45:0;;;;;;;;;;;;;;;15458:10;;:34;;;-1:-1:-1;;;15458:34:0;;-1:-1:-1;;;;;15458:34:0;;;;;;;;;15495:1;;15458:10;;;;;:19;;:34;;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;15458:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15458:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15458:34:0;:38;15450:61;;;;;-1:-1:-1;;;15450:61:0;;;;;;;;;;;;-1:-1:-1;;;15450:61:0;;;;;;;;;;;;;;;15529:10;;:32;;;-1:-1:-1;;;15529:32:0;;-1:-1:-1;;;;;15529:32:0;;;;;;;;;15564:1;;15529:10;;;;;:19;;:32;;;;;;;;;;;;;;;:10;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;15529:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15529:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15529:32:0;:36;15521:59;;;;;-1:-1:-1;;;15521:59:0;;;;;;;;;;;;-1:-1:-1;;;15521:59:0;;;;;;;;;;;;;;;15618:8;15599:15;:27;;15591:47;;;;;-1:-1:-1;;;15591:47:0;;;;;;;;;;;;-1:-1:-1;;;15591:47:0;;;;;;;;;;;;;;;15658:64;15672:4;15678:2;15682:5;15689:16;15691:13;15699:4;15691:7;:13::i;15689:16::-;15707:14;15709:11;15717:2;15709:7;:11::i;15658:64::-;15649:73;;15756:6;15741:11;15749:2;15741:7;:11::i;:::-;:21;;15733:63;;;;;-1:-1:-1;;;15733:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15824:9;15814:6;:19;;15806:40;;;;;-1:-1:-1;;;15806:40:0;;;;;;;;;;;;-1:-1:-1;;;15806:40:0;;;;;;;;;;;;;;;15906:2;-1:-1:-1;;;;;15862:63:0;15891:4;-1:-1:-1;;;;;15862:63:0;15871:10;-1:-1:-1;;;;;15862:63:0;;15911:5;15918:6;15862:63;;;;;;;;;;;;;;;;;;;;;;;;15936:55;-1:-1:-1;;;;;15936:21:0;;15958:10;15978:4;15985:5;15936:55;:21;:55;:::i;:::-;16001:35;-1:-1:-1;;;;;16001:15:0;;16017:10;16029:6;16001:35;:15;:35;:::i;:::-;16046:27;16061:4;16067:5;16046:14;:27::i;8945:164::-;9030:10;;-1:-1:-1;;;;;9030:10:0;9016;:24;9008:48;;;;;-1:-1:-1;;;9008:48:0;;;;;;;;;;;;-1:-1:-1;;;9008:48:0;;;;;;;;;;;;;;;9066:10;:36;;-1:-1:-1;;;;;;9066:36:0;-1:-1:-1;;;;;9066:36:0;;;;;;;;;;8945:164::o;2098:204::-;2175:4;2191:83;2200:12;:10;:12::i;:::-;2214:7;2223:50;2262:10;2223:11;:25;2235:12;:10;:12::i;:::-;-1:-1:-1;;;;;2223:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;2223:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;9115:225::-;9202:10;;-1:-1:-1;;;;;9202:10:0;9188;:24;9180:48;;;;;-1:-1:-1;;;9180:48:0;;;;;;;;;;;;-1:-1:-1;;;9180:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9246:26:0;;9238:59;;;;;-1:-1:-1;;;9238:59:0;;;;;;;;;;;;-1:-1:-1;;;9238:59:0;;;;;;;;;;;;;;;9307:11;:26;;-1:-1:-1;;;;;;9307:26:0;-1:-1:-1;;;;;9307:26:0;;;;;;;;;;9115:225::o;8492:25::-;;;-1:-1:-1;;;;;8492:25:0;;:::o;20286:818::-;20391:10;20440:8;20421:15;:27;;20413:47;;;;;-1:-1:-1;;;20413:47:0;;;;;;;;;;;;-1:-1:-1;;;20413:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20478:18:0;;;;;;:5;:18;;;;;;;;:26;;:18;:26;20470:44;;;;;-1:-1:-1;;;20470:44:0;;;;;;;;;;;;-1:-1:-1;;;20470:44:0;;;;;;;;;;;;;;;20541:1;20532:6;:10;20524:34;;;;;-1:-1:-1;;;20524:34:0;;;;;;;;;;;;-1:-1:-1;;;20524:34:0;;;;;;;;;;;;;;;20576:10;;:34;;;-1:-1:-1;;;20576:34:0;;20604:4;20576:34;;;;;;20613:1;;-1:-1:-1;;;;;20576:10:0;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;20576:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20576:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20576:34:0;:38;20568:61;;;;;-1:-1:-1;;;20568:61:0;;;;;;;;;;;;-1:-1:-1;;;20568:61:0;;;;;;;;;;;;;;;20647:10;;:32;;;-1:-1:-1;;;20647:32:0;;-1:-1:-1;;;;;20647:32:0;;;;;;;;;20682:1;;20647:10;;;;;:19;;:32;;;;;;;;;;;;;;;:10;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;20647:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20647:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20647:32:0;:36;20639:59;;;;;-1:-1:-1;;;20639:59:0;;;;;;;;;;;;-1:-1:-1;;;20639:59:0;;;;;;;;;;;;;;;20717:76;20731:4;20737:2;20741:6;20749:27;20751:24;20769:5;;20751:13;:11;:13::i;20717:76::-;20709:84;;20821:8;20812:5;:17;;20804:38;;;;;-1:-1:-1;;;20804:38:0;;;;;;;;;;;;-1:-1:-1;;;20804:38:0;;;;;;;;;;;;;;;20858:41;;;;;;;;-1:-1:-1;;;;;20858:41:0;;;20867:10;;20858:41;;;;;;;;;20910:24;20916:10;20928:5;20910;:24::i;:::-;20944:35;-1:-1:-1;;;;;20944:15:0;;20960:10;20972:6;20944:35;:15;:35;:::i;:::-;20994:11;21002:2;20994:7;:11::i;:::-;20990:108;;-1:-1:-1;;;;;21026:19:0;;21048:5;21026:19;;;:6;:19;;;;;:27;;-1:-1:-1;;21026:27:0;;;21075:5;;:12;;21026:27;21075:12;:9;:12;:::i;1244:105::-;-1:-1:-1;;;;;1324:18:0;1301:4;1324:18;;;;;;;;;;;;1244:105::o;8385:37::-;;;;;;;;;;;;;;;:::o;8342:::-;;;;;;;;;;;;;;;:::o;9754:238::-;9832:10;;-1:-1:-1;;;;;9832:10:0;9818;:24;9810:48;;;;;-1:-1:-1;;;9810:48:0;;;;;;;;;;;;-1:-1:-1;;;9810:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9876:12:0;;;;;;:5;:12;;;;;;;;:21;9868:50;;;;;-1:-1:-1;;;9868:50:0;;;;;;;;;;;;-1:-1:-1;;;9868:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9928:12:0;;;;;:5;:12;;;;;:19;;-1:-1:-1;;9928:19:0;9943:4;9928:19;;;;;;9957:8;27:10:-1;;23:18;;;45:23;;9957:28:0;;;;;;;-1:-1:-1;;;;;;9957:28:0;;;;;;9754:238::o;4391:85::-;4462:7;4455:14;;;;;;;;-1:-1:-1;;4455:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4430:13;;4455:14;;4462:7;;4455:14;;4462:7;4455:14;;;;;;;;;;;;;;;;;;;;;;;;12120:254;12167:10;;;12224:117;12245:8;:15;12241:19;;12224:117;;;12294:36;12309:20;12317:8;12326:1;12317:11;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12317:11:0;12309:7;:20::i;:::-;12294:10;;:36;:14;:36;:::i;:::-;12281:49;-1:-1:-1;12262:3:0;;12224:117;;;-1:-1:-1;12357:10:0;-1:-1:-1;12120:254:0;:::o;2307:255::-;2389:4;2405:129;2414:12;:10;:12::i;:::-;2428:7;2437:96;2476:15;2437:96;;;;;;;;;;;;;;;;;:11;:25;2449:12;:10;:12::i;:::-;-1:-1:-1;;;;;2437:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;2437:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;11980:93::-;12024:15;12058:8;12051:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12051:15:0;;;;;;;;;;;;;;;;;;;;;;11980:93;:::o;1354:152::-;1420:4;1436:42;1446:12;:10;:12::i;:::-;1460:9;1471:6;1436:9;:42::i;8458:28::-;;;-1:-1:-1;;;;;8458:28:0;;:::o;8787:152::-;8872:10;;-1:-1:-1;;;;;8872:10:0;8858;:24;8850:48;;;;;-1:-1:-1;;;8850:48:0;;;;;;;;;;;;-1:-1:-1;;;8850:48:0;;;;;;;;;;;;;;;8908:10;:24;;-1:-1:-1;;;;;;8908:24:0;-1:-1:-1;;;;;8908:24:0;;;;;;;;;;8787:152::o;9998:151::-;10085:10;;-1:-1:-1;;;;;10085:10:0;10071;:24;10063:48;;;;;-1:-1:-1;;;10063:48:0;;;;;;;;;;;;-1:-1:-1;;;10063:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10121:12:0;;;;;;;;:5;:12;;;;;:21;;-1:-1:-1;;10121:21:0;;;;;;;;;;9998:151::o;18292:1164::-;-1:-1:-1;;;;;18426:20:0;;18396:10;18426:20;;;:5;:20;;;;;;;;:28;;:20;:28;18418:46;;;;;-1:-1:-1;;;18418:46:0;;;;;;;;;;;;-1:-1:-1;;;18418:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18482:20:0;;;;;;:5;:20;;;;;;;;:29;18474:47;;;;;-1:-1:-1;;;18474:47:0;;;;;;;;;;;;-1:-1:-1;;;18474:47:0;;;;;;;;;;;;;;;18558:8;18539:15;:27;;18531:47;;;;;-1:-1:-1;;;18531:47:0;;;;;;;;;;;;-1:-1:-1;;;18531:47:0;;;;;;;;;;;;;;;18605:1;18596:6;:10;18588:34;;;;;-1:-1:-1;;;18588:34:0;;;;;;;;;;;;-1:-1:-1;;;18588:34:0;;;;;;;;;;;;;;;18640:10;;:34;;;-1:-1:-1;;;18640:34:0;;-1:-1:-1;;;;;18640:34:0;;;;;;;;;18677:1;;18640:10;;;;;:19;;:34;;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;18640:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18640:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18640:34:0;:38;18632:61;;;;;-1:-1:-1;;;18632:61:0;;;;;;;;;;;;-1:-1:-1;;;18632:61:0;;;;;;;;;;;;;;;18711:10;;:34;;;-1:-1:-1;;;18711:34:0;;18739:4;18711:34;;;;;;18748:1;;-1:-1:-1;;;;;18711:10:0;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;18711:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18711:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18711:34:0;:38;18703:61;;;;;-1:-1:-1;;;18703:61:0;;;;;;;;;;;;-1:-1:-1;;;18703:61:0;;;;;;;;;;;;;;;18779:13;:11;:13::i;:::-;18775:320;;18871:10;;:34;;;-1:-1:-1;;;18871:34:0;;-1:-1:-1;;;;;18871:34:0;;;;;;;;;18813:18;;18834:73;;18844:4;;18850:56;;18871:10;;;;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;18871:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18871:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18871:34:0;18850:16;:6;18861:4;18850:16;:10;:16;:::i;18834:73::-;18961:3;;18813:94;;-1:-1:-1;18929:36:0;;:23;18813:94;10979:4;18929:23;:17;:23;:::i;:::-;:31;:36;:31;:36;:::i;:::-;18921:44;;18775:320;;;;19004:80;19018:4;19024;19030:6;19038:16;19040:13;19048:4;19040:7;:13::i;19038:16::-;19056:27;19058:24;19076:5;;19058:13;:11;:13::i;19004:80::-;18996:88;;18775:320;19122:8;19113:5;:17;;19105:38;;;;;-1:-1:-1;;;19105:38:0;;;;;;;;;;;;-1:-1:-1;;;19105:38:0;;;;;;;;;;;;;;;19159:43;;;;;;;;-1:-1:-1;;;;;19159:43:0;;;19168:10;;19159:43;;;;;;;;;19213:55;-1:-1:-1;;;;;19213:21:0;;19235:10;19255:4;19262:5;19213:55;:21;:55;:::i;:::-;19278:25;19284:10;19296:6;19278:5;:25::i;1511:129::-;-1:-1:-1;;;;;1606:18:0;;;1583:4;1606:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;1511:129::o;10880:28::-;;;;:::o;14590:305::-;14715:39;;;-1:-1:-1;;;14715:39:0;;14748:4;14715:39;;;;;;14642:4;;14683:5;;14642:4;;-1:-1:-1;;;;;14715:24:0;;;;;:39;;;;;;;;;;;;;;;:24;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14715:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14715:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14715:39:0;14798:10;;:27;;;-1:-1:-1;;;14798:27:0;;-1:-1:-1;;;;;14798:27:0;;;;;;;;;14715:39;;-1:-1:-1;14764:18:0;;14785:51;;14831:4;;14785:41;;14798:10;;;:19;;:27;;;;;14715:39;;14798:27;;;;;;;;:10;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;14798:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14798:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14798:27:0;14785:8;;:41;:12;:41;:::i;:51::-;14764:72;;14853:35;14867:5;14874:13;14853;:35::i;10557:317::-;10640:10;;-1:-1:-1;;;;;10640:10:0;10626;:24;10618:48;;;;;-1:-1:-1;;;10618:48:0;;;;;;;;;;;;-1:-1:-1;;;10618:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;10685:22:0;;;;;;:6;:22;;;;;;;;10684:23;10676:57;;;;;-1:-1:-1;;;10676:57:0;;;;;;;;;;;;-1:-1:-1;;;10676:57:0;;;;;;;;;;;;;;;10755:30;;;-1:-1:-1;;;10755:30:0;;10779:4;10755:30;;;;;;10744:8;;-1:-1:-1;;;;;10755:15:0;;;;;:30;;;;;;;;;;;;;;;:15;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;10755:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10755:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10755:30:0;;-1:-1:-1;10803:13:0;;;;10795:22;;;;;;10847:11;;10828:39;;-1:-1:-1;;;;;10828:18:0;;;;10847:11;10860:6;10828:39;:18;:39;:::i;:::-;10557:317;;;:::o;10951:32::-;10979:4;10951:32;:::o;10155:396::-;10219:10;;-1:-1:-1;;;;;10219:10:0;10205;:24;10197:48;;;;;-1:-1:-1;;;10197:48:0;;;;;;;;;;;;-1:-1:-1;;;10197:48:0;;;;;;;;;;;;;;;10268:1;10263:2;:6;:20;;;;;10279:4;10273:2;:10;;10263:20;10255:42;;;;;-1:-1:-1;;;10255:42:0;;;;;;;;;;;;-1:-1:-1;;;10255:42:0;;;;;;;;;;;;;;;10538:1;:6;10155:396::o;19462:818::-;19566:11;19616:8;19597:15;:27;;19589:47;;;;;-1:-1:-1;;;19589:47:0;;;;;;;;;;;;-1:-1:-1;;;19589:47:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19654:18:0;;;;;;:5;:18;;;;;;;;:26;;:18;:26;19646:44;;;;;-1:-1:-1;;;19646:44:0;;;;;;;;;;;;-1:-1:-1;;;19646:44:0;;;;;;;;;;;;;;;19716:1;19708:5;:9;19700:32;;;;;-1:-1:-1;;;19700:32:0;;;;;;;;;;;;-1:-1:-1;;;19700:32:0;;;;;;;;;;;;;;;19750:10;;:34;;;-1:-1:-1;;;19750:34:0;;19778:4;19750:34;;;;;;19787:1;;-1:-1:-1;;;;;19750:10:0;;:19;;:34;;;;;;;;;;;;;;:10;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;19750:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19750:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19750:34:0;:38;19742:61;;;;;-1:-1:-1;;;19742:61:0;;;;;;;;;;;;-1:-1:-1;;;19742:61:0;;;;;;;;;;;;;;;19821:10;;:32;;;-1:-1:-1;;;19821:32:0;;-1:-1:-1;;;;;19821:32:0;;;;;;;;;19856:1;;19821:10;;;;;:19;;:32;;;;;;;;;;;;;;;:10;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;19821:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19821:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19821:32:0;:36;19813:59;;;;;-1:-1:-1;;;19813:59:0;;;;;;;;;;;;-1:-1:-1;;;19813:59:0;;;;;;;;;;;;;;;19892:75;19906:4;19912:2;19916:5;19923:27;19925:24;19943:5;;19925:13;:11;:13::i;19892:75::-;19883:84;;19996:9;19986:6;:19;;19978:40;;;;;-1:-1:-1;;;19978:40:0;;;;;;;;;;;;-1:-1:-1;;;19978:40:0;;;;;;;;;;;;;;;20034:41;;;;;;;;-1:-1:-1;;;;;20034:41:0;;;20043:10;;20034:41;;;;;;;;;20086:24;20092:10;20104:5;20086;:24::i;:::-;20120:35;-1:-1:-1;;;;;20120:15:0;;20136:10;20148:6;20120:35;:15;:35;:::i;10990:22::-;;;;:::o;527:229:2:-;579:4;599:6;595:45;;-1:-1:-1;628:1:2;621:8;;595:45;659:5;;;663:1;659;:5;:1;682:5;;;;;:10;674:56;;;;-1:-1:-1;;;674:56:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;748:1;527:229;-1:-1:-1;;;527:229:2:o;761:121::-;813:4;836:39;840:1;843;836:39;;;;;;;;;;;;;;;;;:3;:39::i;13870:309:0:-;13944:4;13960:14;13999:5;-1:-1:-1;;;;;13977:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13977:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13977:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13977:40:0;13960:57;;;-1:-1:-1;14049:2:0;14031:21;;14027:146;;;14075:7;14068:14;;;;;14027:146;14120:42;14147:2;14142:19;;;14120:17;:7;14132:4;14120:17;:11;:17;:::i;:42::-;14113:49;;;;;5222:199;5345:68;;;-1:-1:-1;;;;;5345:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5345:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;5319:95:0;;5338:5;;5319:18;:95::i;:::-;5222:199;;;;:::o;3033:299::-;-1:-1:-1;;;;;3105:21:0;;3097:65;;;;;-1:-1:-1;;;3097:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3188:12;;:24;;3205:6;3188:24;:16;:24;:::i;:::-;3173:12;:39;-1:-1:-1;;;;;3243:18:0;;:9;:18;;;;;;;;;;;:30;;3266:6;3243:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;3222:18:0;;:9;:18;;;;;;;;;;;:51;;;;3288:37;;;;;;;3222:18;;:9;;3288:37;;;;;;;;;;3033:299;;:::o;48:164:2:-;100:4;125:5;;;148:6;;;;140:46;;;;;-1:-1:-1;;;140:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;829:96:0;908:10;829:96;:::o;3681:329::-;-1:-1:-1;;;;;3771:19:0;;3763:68;;;;-1:-1:-1;;;3763:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3849:21:0;;3841:68;;;;-1:-1:-1;;;3841:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3920:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;3971:32;;;;;;;;;;;;;;;;;3681:329;;;:::o;12644:188::-;12715:13;;12752:12;:1;12758:5;12752:12;:5;:12;:::i;:::-;12740:24;;12774:9;12786:11;12788:2;12792:1;12795;12786;:11::i;:::-;12774:23;-1:-1:-1;12816:9:0;:1;12774:23;12816:9;:5;:9;:::i;:::-;12807:18;12644:188;-1:-1:-1;;;;;;12644:188:0:o;14228:305::-;14298:4;14314:14;14353:5;-1:-1:-1;;;;;14331:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14331:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14331:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14331:40:0;14314:57;;;-1:-1:-1;14403:2:0;14385:21;;14381:146;;;14429:7;14422:14;;;;;14381:146;14474:42;14511:4;14474:32;:7;14491:2;14486:19;;;14474:32;:11;:32;:::i;5045:171::-;5150:58;;;-1:-1:-1;;;;;5150:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;5150:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;5124:85:0;;5143:5;;5124:18;:85::i;11662:283::-;11734:12;;:16;11730:209;;11766:9;11778:34;10979:4;11778:24;11788:13;11797:3;;10979:4;11788:8;;:13;;;;:::i;:::-;11778:5;;:24;:9;:24;:::i;:34::-;11766:46;;11826:13;11842:32;10979:4;11842:22;11851:12;;11842:4;:8;;:22;;;;:::i;:32::-;11906:11;;11826:48;;-1:-1:-1;11888:40:0;;-1:-1:-1;;;;;11888:17:0;;;;11906:11;11826:48;11888:40;:17;:40;:::i;11730:209::-;11662:283;;:::o;2567:461::-;-1:-1:-1;;;;;2661:20:0;;2653:70;;;;-1:-1:-1;;;2653:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2741:23:0;;2733:71;;;;-1:-1:-1;;;2733:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2835;2857:6;2835:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2835:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;2815:17:0;;;:9;:17;;;;;;;;;;;:91;;;;2939:20;;;;;;;:32;;2964:6;2939:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;2916:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;2986:35;;;;;;;2916:20;;2986:35;;;;;;;;;;;;;2567:461;;;:::o;347:175:2:-;427:4;459:12;451:6;;;;443:29;;;;-1:-1:-1;;;443:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;443:29:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;491:5:2;;;347:175::o;12415:188:0:-;12487:12;;12523:13;:1;12529:6;12523:13;:5;:13;:::i;:::-;12511:25;;12546:9;12558:11;12560:2;12564:1;12567;12558;:11::i;:::-;12546:23;-1:-1:-1;12587:9:0;12546:23;12594:1;12587:9;:6;:9;:::i;3337:339::-;-1:-1:-1;;;;;3409:21:0;;3401:67;;;;-1:-1:-1;;;3401:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3500:68;3523:6;3500:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3500:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;3479:18:0;;:9;:18;;;;;;;;;;:89;3593:12;;:24;;3610:6;3593:24;:16;:24;:::i;:::-;3578:12;:39;3632:37;;;;;;;;3658:1;;-1:-1:-1;;;;;3632:37:0;;;;;;;;;;;;3337:339;;:::o;217:125:2:-;269:4;292:43;296:1;299;292:43;;;;;;;;;;;;;;;;;:3;:43::i;1132:193::-;1194:7;1225:1;1221;:5;1213:14;;;;;;1237:9;1253:1;1249;:5;;;;;;1237:17;;1271:1;1267;:5;;;;;;:10;1264:36;;1299:1;1295:5;;1132:193;-1:-1:-1;;;1132:193:2:o;887:240::-;967:4;1064:12;1057:5;1049:28;;;;-1:-1:-1;;;1049:28:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1049:28:2;;1087:6;1100:1;1096;:5;;;;;;;887:240;-1:-1:-1;;;;;887:240:2:o;5771:587:0:-;5858:27;5866:5;-1:-1:-1;;;;;5858:25:0;;:27::i;:::-;5850:71;;;;;-1:-1:-1;;;5850:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5992:12;6006:23;6041:5;-1:-1:-1;;;;;6033:19:0;6053:4;6033: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;;;6033: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;;5991:67:0;;;;6076:7;6068:52;;;;;-1:-1:-1;;;6068:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6135:17;;:21;6131:221;;6275:10;6264:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6264:30:0;6256:85;;;;-1:-1:-1;;;6256:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7270:210;7326:6;7355:5;;;7379:6;;;;;;:16;;;7394:1;7389;:6;;7379:16;7378:38;;;;7405:1;7401;:5;:14;;;;;7414:1;7410;:5;7401:14;7370:84;;;;-1:-1:-1;;;7370:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11083:573;11148:9;11169:8;11187;11219;11230:33;11236:26;11257:4;11236:16;11249:1;;11236;:5;;:16;;;;:::i;:::-;:20;:26;:20;:26;:::i;:::-;11230:1;;:33;:5;:33;:::i;:::-;11219:44;;11277:8;11288:33;11294:26;11315:4;11294:16;11307:1;;11294;:5;;:16;;;;:::i;11288:33::-;11277:44;-1:-1:-1;11339:8:0;:1;11277:44;11339:8;:5;:8;:::i;:::-;11335:12;;11365:42;11380:26;11403:1;;11380:11;11386:4;11380:1;:5;;:11;;;;:::i;:26::-;11365:10;11372:2;;11365:10;:6;:10;:::i;:::-;:14;:42;:14;:42;:::i;:::-;11361:46;;11083:573;;11428:10;11441:42;11455:27;11479:1;;11462:4;11455:16;;:27;;;;:::i;:::-;11448:1;;;11441:42;:13;:42;:::i;:::-;11428:55;-1:-1:-1;11493:9:0;11505:21;11521:4;11505:11;:2;11428:55;11505:11;:6;:11;:::i;:21::-;11493:33;-1:-1:-1;11537:8:0;11548:24;11563:8;:1;11569;11563:8;:5;:8;:::i;:::-;11548:10;11555:2;;11548:10;:6;:10;:::i;:24::-;11537:35;;11596:1;11591;:6;;11583:24;;;;;-1:-1:-1;;;11583:24:0;;;;;;;;;;;;-1:-1:-1;;;11583:24:0;;;;;;;;;;;;;;;11623:26;11647:1;11623:19;11633:8;:1;:6;:8::i;:::-;11624:3;;;;;11623:19;:9;:19;:::i;7052:213::-;7108:6;7137:5;;;7161:6;;;;;;:16;;;7176:1;7171;:6;;7161:16;7160:38;;;;7187:1;7183;:5;:14;;;;;7196:1;7192;:5;7183:14;7152:87;;;;-1:-1:-1;;;7152:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4588:368;4648:4;4867:20;;4712:66;4906:15;;;;;:42;;-1:-1:-1;4925:23:0;;;4898:51;-1:-1:-1;;4588:368:0:o;6442:336::-;6498:6;6520;6516:45;;-1:-1:-1;6549:1:0;6542:8;;6516:45;6581:1;-1:-1:-1;;6581:7:0;:27;;;;;-1:-1:-1;;;6592:1:0;:16;6581:27;6579:30;6571:82;;;;-1:-1:-1;;;6571:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6675:5;;;6679:1;6675;:5;:1;6698:5;;;;;:10;6690:62;;;;-1:-1:-1;;;6690:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6783:264;6839:6;6865;6857:51;;;;;-1:-1:-1;;;6857:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6928:1;-1:-1:-1;;6928:7:0;:27;;;;;-1:-1:-1;;;6939:1:0;:16;6928:27;6926:30;6918:76;;;;-1:-1:-1;;;6918:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7005:8;7020:1;7016;:5;;;;;;;6783:264;-1:-1:-1;;;;6783:264:0:o;7485:238::-;7532:6;;7561:13;7569:1;7565;:5;7572:1;7561:3;:13::i;:::-;7550:24;-1:-1:-1;7595:1:0;7606:93;7617:1;7613;:5;7606:93;;;-1:-1:-1;7646:1:0;7686;7667:15;7646:1;7672;7646;7672:5;;;;;7680:1;7667:3;:15::i;:::-;7666:21;;;;;;7661:27;;7606:93;

Swarm Source

bzzr://0b517a6ad6885e0943b08683a627ab15321ff06ac5dc05efbd6ad576bf43730a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.