ETH Price: $2,942.87 (+7.89%)
 

Overview

Max Total Supply

7,000,000 KENZOKU

Holders

129

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
30,704.820661651666331237 KENZOKU

Value
$0.00
0xa884c97f941b7f9e9b6bcc70a62475cfffd339da
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
KENZOKU

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-23
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract KENZOKU is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private constant tokenName = "KENZOKU";
    string private constant tokenSymbol = "KENZOKU";
    uint8 private constant tokenDecimal = 18;
    uint256 private constant tokenSupply = 7e6 * 10**tokenDecimal;

    mapping(address => mapping(address => uint256)) private tokenAllowances;
    mapping(address => uint256) private tokenBalance;
    mapping(address => bool) private isContractsExcluded;
    mapping(address => bool) private isMaxWalletExcluded;
    mapping(address => bool) private isTaxExcluded;
    mapping(address => bool) public isSniper;
    mapping(address => bool) public isBot;

    address payable liquidityAddress;
    address payable marketingAddress;
    address payable devAddress;
    address dead = address(0xdead);
    address public uniV2Pair;
    IUniswapV2Router02 public uniV2Router;
    address public uniV3Router;
    
    uint256 private maxWallet;
    uint256 private minTaxSwap;
    uint256 private marketingTokens;
    uint256 private liquidityTokens;
	uint256 private totalBurnedTokens;

    uint256 private marketingTax;
    uint256 private liquidityTax;
    uint256 private divForSplitTax;
    uint256 private taxBuyMarketing;
    uint256 private taxBuyLiquidity;
    uint256 private taxSellMarketing;
    uint256 private taxSellTreasury;
    uint256 private taxSellLiquidity;

    uint256 public activeTradingBlock;
    uint256 public sniperPenaltyEnd;

    bool public limitsOn = false;
    bool public maxWalletOn = false;
    bool public live = false;
    bool public contractBlocker = false;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyStatus = false;
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() payable {
        tokenBalance[address(this)] = tokenSupply;
        maxWallet = tokenSupply.mul(2).div(100);
        minTaxSwap = tokenSupply.mul(5).div(10000);

        marketingAddress = payable(0x29722Cf7F47ba03A704062d0A38C44393b42Aabe);
        devAddress = payable(0x29722Cf7F47ba03A704062d0A38C44393b42Aabe);

        liquidityAddress = payable(owner()); //LEAVE AS OWNER. GETS SET TO DEAD AFTER LP IS CREATED

        taxBuyMarketing = 0;
        taxBuyLiquidity = 0;
        taxSellMarketing = 0;
        taxSellLiquidity = 0;

        isContractsExcluded[address(this)] = true;
        isTaxExcluded[owner()] = true;
        isTaxExcluded[dead] = true;
        isTaxExcluded[address(this)] = true;
        isTaxExcluded[marketingAddress] = true;
        isTaxExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[address(this)] = true;
        isMaxWalletExcluded[owner()] = true;
        isMaxWalletExcluded[marketingAddress] = true;
        isMaxWalletExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[dead] = true;
        isBot[0x41B0320bEb1563A048e2431c8C1cC155A0DFA967] = true;
        isBot[0x91B305F0890Fd0534B66D8d479da6529C35A3eeC] = true;
        isBot[0x7F5622afb5CEfbA39f96CA3b2814eCF0E383AAA4] = true;
        isBot[0xfcf6a3d7eb8c62a5256a020e48f153c6D5Dd6909] = true;
        isBot[0x74BC89a9e831ab5f33b90607Dd9eB5E01452A064] = true;
        isBot[0x1F53592C3aA6b827C64C4a3174523182c52Ece84] = true;
        isBot[0x460545C01c4246194C2e511F166D84bbC8a07608] = true;
        isBot[0x2E5d67a1d15ccCF65152B3A8ec5315E73461fBcd] = true;
        isBot[0xb5aF12B837aAf602298B3385640F61a0fF0F4E0d] = true;
        isBot[0xEd3e444A30Bd440FBab5933dCCC652959DfCB5Ba] = true;
        isBot[0xEC366bbA6266ac8960198075B14FC1D38ea7de88] = true;
        isBot[0x10Bf6836600D7cFE1c06b145A8Ac774F8Ba91FDD] = true;
        isBot[0x44ae54e28d082C98D53eF5593CE54bB231e565E7] = true;
        isBot[0xa3e820006F8553d5AC9F64A2d2B581501eE24FcF] = true;
		isBot[0x2228476AC5242e38d5864068B8c6aB61d6bA2222] = true;
		isBot[0xcC7e3c4a8208172CA4c4aB8E1b8B4AE775Ebd5a8] = true;
		isBot[0x5b3EE79BbBDb5B032eEAA65C689C119748a7192A] = true;
		isBot[0x4ddA45d3E9BF453dc95fcD7c783Fe6ff9192d1BA] = true;
        
        emit Transfer(address(0), address(this), tokenSupply);
    }
    receive() external payable {}
    function name() external pure override returns (string memory) {
        return tokenName;
    }
    function symbol() external pure override returns (string memory) {
        return tokenSymbol;
    }
    function decimals() external pure override returns (uint8) {
        return tokenDecimal;
    }
    function totalSupply() external pure override returns (uint256) {
        return tokenSupply;
    }
    function balanceOf(address account) public view override returns (uint256) {
        return tokenBalance[account];
    }
    function allowance(address owner, address spender) external view override returns (uint256) {
        return tokenAllowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[_msgSender()][spender] = amount;
        emit Approval(_msgSender(), spender, amount);
        return true;
    }
    function internalApprove(address owner,address spender,uint256 amount) internal {
        require(owner != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        internalTransfer(_msgSender(), recipient, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) external override returns (bool) {
        internalTransfer(sender, recipient, amount);
        internalApprove(sender,_msgSender(),
        tokenAllowances[sender][_msgSender()].sub(amount, "ERC20: Can not transfer. Amount exceeds allowance"));
        return true;
    }
    function AirDrop(address[] memory wallets, uint256[] memory percent, uint256 divider) external onlyOwner{
        require(!live, "ERC20: Trades already Live!");
        require(wallets.length < 100, "ERC20: Can only airdrop 100 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = tokenSupply.mul(percent[i]).div(divider);
            require(amount <= maxWallet, "ERC20: Can only drop maximum allowed tokens");
            internalTransfer(address(this), wallet, amount);
        }
    }
    function GoLive() external onlyOwner returns (bool){
        require(!live, "ERC20: Trades already Live!");
        activeTradingBlock = block.number;
        sniperPenaltyEnd = block.timestamp.add(2 days);
        IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniV2Router = _uniV2Router;
        uniV3Router = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
        isContractsExcluded[address(uniV2Router)] = true;
        isContractsExcluded[address(uniV3Router)] = true;
        isMaxWalletExcluded[address(uniV2Router)] = true;
        internalApprove(address(this), address(uniV2Router), tokenSupply);
        uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).createPair(address(this), _uniV2Router.WETH());
        isContractsExcluded[address(uniV2Pair)] = true;
        isMaxWalletExcluded[address(uniV2Pair)] = true;
        require(address(this).balance > 0, "ERC20: Must have ETH on contract to Go Live!");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        launchSetLiquidityAddress(dead);
        maxWalletOn = true;
        swapAndLiquifyStatus = true;
        limitsOn = true;
        live = true;
        return true;
    }
    function internalTransfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: Transfer amount must be greater than zero");
        require(!isBot[from], "ERC20: Can not transfer from BOT");
        if(!live){
            require(isTaxExcluded[from] || isTaxExcluded[to], "ERC20: Trading Is Not Live!");
        }
        if (maxWalletOn == true && ! isMaxWalletExcluded[to]) {
            require(balanceOf(to).add(amount) <= maxWallet, "ERC20: Max amount of tokens for wallet reached");
        }
        if(limitsOn){
            if (from != owner() && to != owner() && to != address(0) && to != dead && to != uniV2Pair) {
                for (uint x = 0; x < 3; x++) {
                    if(block.number == activeTradingBlock.add(x)) {
                        isSniper[to] = true;
                    }
                }
            }
        }
        if(contractBlocker) {
            require(
                !isContract(to) && isContractsExcluded[from] ||
                !isContract(from) && isContractsExcluded[to] || 
                isContract(from) && isContractsExcluded[to] || 
                isContract(to) && isContractsExcluded[from]
                );
        }
        uint256 totalTokensToSwap = liquidityTokens.add(marketingTokens);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minTaxSwap;
        if (!inSwapAndLiquify && swapAndLiquifyStatus && balanceOf(uniV2Pair) > 0 && totalTokensToSwap > 0 && !isTaxExcluded[to] && !isTaxExcluded[from] && to == uniV2Pair && overMinimumTokenBalance) {
            taxTokenSwap();
            }
        if (isTaxExcluded[from] || isTaxExcluded[to]) {
            marketingTax = 0;
            liquidityTax = 0;
            divForSplitTax = marketingTax.add(liquidityTax);
        } else {
            if (from == uniV2Pair) {
                marketingTax = taxBuyMarketing;
                liquidityTax = taxBuyLiquidity;
                divForSplitTax = taxBuyMarketing.add(taxBuyLiquidity);
            }else if (to == uniV2Pair) {
                marketingTax = taxSellMarketing;
                liquidityTax = taxSellLiquidity;
                divForSplitTax = taxSellMarketing.add(taxSellLiquidity);
                if(isSniper[from] && sniperPenaltyEnd >= block.timestamp){
                    marketingTax = 85;
                    liquidityTax = 10;
                    divForSplitTax = marketingTax.add(liquidityTax);
                }
            }else {
                require(!isSniper[from] || sniperPenaltyEnd <= block.timestamp, "ERC20: Snipers can not transfer till penalty time is over");
                marketingTax = 0;
                liquidityTax = 0;
            }
        }
        tokenTransfer(from, to, amount);
    }
    function taxTokenSwap() internal lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = marketingTokens.add(liquidityTokens);
        uint256 swapLiquidityTokens = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(swapLiquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(marketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        marketingTokens = 0;
        liquidityTokens = 0;
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        if(ethForLiquidity != 0 && swapLiquidityTokens != 0) {
            addLiquidity(swapLiquidityTokens, ethForLiquidity);
        }
        if(address(this).balance > 5 * 1e17){
            (success,) = address(devAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityAddress,
            block.timestamp
        );
    }
    function calculateTax(uint256 amount) internal view returns (uint256) {
        return amount.mul(marketingTax.add(liquidityTax)).div(100);
    }
    function splitTaxTokens(uint256 taxTokens) internal {
        marketingTokens += taxTokens.mul(marketingTax).div(divForSplitTax);
        liquidityTokens += taxTokens.mul(liquidityTax).div(divForSplitTax);
    }
    function tokenTransfer(address sender,address recipient,uint256 amount) internal {
        if(divForSplitTax != 0){
            uint256 taxTokens = calculateTax(amount);
            uint256 transferTokens = amount.sub(taxTokens);
            splitTaxTokens(taxTokens);
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += transferTokens;
            tokenBalance[address(this)] += taxTokens;
            emit Transfer(sender, recipient, transferTokens);
        }else{
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += amount;
            emit Transfer(sender, recipient, amount);
        }
    }
    function launchSetLiquidityAddress(address LPAddress) internal {
        liquidityAddress = payable(LPAddress);
        isTaxExcluded[liquidityAddress] = true;
    }
    function isContract(address account) public view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function addRemoveContract(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[account] = trueORfalse;
    }
    function isExcludedContract(address account) public view returns (bool) {
        return isContractsExcluded[account];
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }
    function withdrawTSPStuckTokens(uint256 percent) external onlyOwner {
        internalTransfer(address(this), owner(), tokenSupply*percent/100);
    }
    function withdrawTokensFromCA(uint256 percent) external onlyOwner {
        internalTransfer(address(this), owner(), balanceOf(address(this))*percent/100);
    }
    function manualBurnTokensFromLP(uint256 percent) external onlyOwner returns (bool){
        require(percent <= 10, "ERC20: May not nuke more than 10% of tokens in LP");
        uint256 liquidityPairBalance = this.balanceOf(uniV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10**2);
        if (amountToBurn > 0){
            internalTransfer(uniV2Pair, dead, amountToBurn);
        }
        totalBurnedTokens = balanceOf(dead);
        require(totalBurnedTokens <= tokenSupply * 50 / 10**2, "ERC20: Can not burn more then 50% of supply");
        IUniswapV2Pair pair = IUniswapV2Pair(uniV2Pair);
        pair.sync();
        return true;
    }
    function manualSwapTax() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= tokenSupply.mul(5).div(10000), "ERC20: Can only swap back if more than 0.05% of tokens stuck on contract");
        taxTokenSwap();
    }
    function addBot(address account) external onlyOwner {
        require(!isBot[account], "ERC20: Account already added");
        isBot[account] = true;
    }
    function addMultiBot(address[] memory account) external onlyOwner {
        for(uint256 i = 0; i < account.length; i++){
            address bot = account[i];
            isBot[bot] = true;
        }
    }
	function removeBot(address account) external onlyOwner {
        require(isBot[account], "ERC20: Account is not bot");
        isBot[account] = false;
    }
	function removeSniper(address account) external onlyOwner {
        require(isSniper[account], "ERC20: Account is not sniper");
        isSniper[account] = false;
    }
    function setExcludedContractAccount(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromTax(address account, bool trueORfalse) external onlyOwner {
        isTaxExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromMaxWallet(address account, bool trueORfalse) external onlyOwner {
        isMaxWalletExcluded[address(account)] = trueORfalse;
    }
    function setMaxWalletAmount(uint256 percent, uint256 divider) external onlyOwner {
        maxWallet = tokenSupply.mul(percent).div(divider);
        require(maxWallet <=tokenSupply.mul(4).div(100), "ERC20: Can not set max wallet more than 4%");
    }
    function setStatusLimits(bool trueORfalse) external onlyOwner {
        limitsOn = trueORfalse;
    }
    function setStatusMaxWallet(bool trueORfalse) external onlyOwner {
       maxWalletOn = trueORfalse;
    }
    function setStatusContractBlocker(bool trueORfalse) external onlyOwner {
        contractBlocker = trueORfalse;
    }
    function setSwapAndLiquifyStatus(bool trueORfalse) external onlyOwner {
        swapAndLiquifyStatus = trueORfalse;
    }
    function setTaxes(uint256 buyMarketingTax, uint256 buyLiquidityTax, uint256 sellMarketingTax, uint256 sellLiquidityTax) external onlyOwner {
        taxBuyMarketing = buyMarketingTax;
        taxBuyLiquidity = buyLiquidityTax;
        taxSellMarketing = sellMarketingTax;
        taxSellLiquidity = sellLiquidityTax;
    }
    function viewTaxes() public view returns(uint256 marketingBuy, uint256 liquidityBuy, uint256 marketingSell, uint256 liquiditySell) {
        return(taxBuyMarketing,taxBuyLiquidity,taxSellMarketing,taxSellLiquidity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"percent","type":"uint256[]"},{"internalType":"uint256","name":"divider","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GoLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"}],"name":"addMultiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"addRemoveContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnTokensFromLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedContractAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divider","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusContractBlocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setSwapAndLiquifyStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV3Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTaxes","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"withdrawTSPStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"withdrawTokensFromCA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b80546001600160a01b03191661dead179055601e805465ff00ffffffff191690556000620000313390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000896012600a620006f8565b6200009890626acfc062000709565b306000908152600260208190526040909120919091556200010090606490620000ec90620000c96012600a620006f8565b620000d890626acfc062000709565b620005c060201b62001c131790919060201c565b620005d760201b62001c261790919060201c565b600f556200011e612710620000ec6005620000c96012600a620006f8565b601055600980547329722cf7f47ba03a704062d0a38c44393b42aabe6001600160a01b03199182168117909255600a805490911690911790556200016a6000546001600160a01b031690565b600880546001600160a01b0319166001600160a01b039283161781556000601781905560188190556019819055601b81905530808252600360209081526040808420805460ff199081166001908117909255855488168652600584528286208054821683179055600b80548916875283872080548316841790558587528387208054831684179055600980548a168852848820805484168517905588548a168852848820805484168517905586885260048652848820805484168517905587548a16885284882080548416851790555489168752838720805483168417905596548816865282862080548216831790559554909616845283208054851686179055600790527f5cd4289b3567244ff922f7a4a330e781ad1be970e39daf49f1314d5a83ed48d080548416851790557ff962bbf3a04eac884c74f38f2b0211bb557ec0f7e3d7c01db7d5a20bec63510480548416851790557f84b34bdc63f0a535c1af867c7408ead4b8949bc210e5d70d875564203086049380548416851790557f36462cecd97a430aaa14713c640a0b92fe5568569c60ad7603c37f59afa465db80548416851790557f303033faee06d82a0b7714e5f70d08bca9b0468d0df75acea0c536bb0377106c80548416851790557f0828b059073771c48b427e30e3a5399bae39360caab0feb63c4d9c4c264ba76e80548416851790557f1cd545d0f457abd48289ba6f50b3ce2850dea7e2b2e5adba010ade0955ed7de180548416851790557f0f275b1af10456fcde45af94eee03446d9ecc18381a4c4b614f864622aa83e9680548416851790557febcc6c4f41393670f423c05614e0616ea5889d64c9d9cb0a70b77bf6af14c4a580548416851790557f32cc42f1e752a5de8ec944c029fa7bedc919a38b0f0d99ca06c7897397b873ad80548416851790557fde09ba28df00d5bb2578ce5e5282dd913a2970cad700dac61c9ed33e880a06a080548416851790557fd7f1d4d24924147de39cef3fe8b1a7ca4a89b5d9d81ef357d5d80c14bbab735f80548416851790557f2cd9141ee1a6b0703cb73534e286ff943afe9d131e283f4e5494572932fb037a80548416851790557f1d558a5b683fdcc2f57402ef172c5fbcf119dcc59319cac4b4b6d0fb9e8686b380548416851790557f84e90ad70792848234d91b92bd3a49c3adfa4f1b39683a80565f0f7868f11f8280548416851790557fa653cb0bafdc6313c7ffbc34c8121320c6e71ff151ebfb2dd52e11ee01ee723c80548416851790557fc47cdb4e29178a4e5a24b823165a13f14676057e44f7cc004ab4da55f9e09b3d8054841685179055734dda45d3e9bf453dc95fcd7c783fe6ff9192d1ba82527f856166fd23120b3f61cd4fe1681efa2b8668b9ffe8c76b035cd8646a147ce85d80549093169093179091557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200059a6012600a620006f8565b620005a990626acfc062000709565b60405190815260200160405180910390a36200074e565b6000620005ce828462000709565b90505b92915050565b6000620005ce82846200072b565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200063c578160001904821115620006205762000620620005e5565b808516156200062e57918102915b93841c939080029062000600565b509250929050565b6000826200065557506001620005d1565b816200066457506000620005d1565b81600181146200067d57600281146200068857620006a8565b6001915050620005d1565b60ff8411156200069c576200069c620005e5565b50506001821b620005d1565b5060208310610133831016604e8410600b8410161715620006cd575081810a620005d1565b620006d98383620005fb565b8060001904821115620006f057620006f0620005e5565b029392505050565b6000620005ce60ff84168362000644565b6000816000190483118215151615620007265762000726620005e5565b500290565b6000826200074957634e487b7160e01b600052601260045260246000fd5b500490565b613216806200075e6000396000f3fe60806040526004361061028c5760003560e01c80638bcea9391161015a578063a9059cbb116100c1578063ee2e5a2e1161007a578063ee2e5a2e14610805578063f0c0cf8714610825578063f2fde38b1461083b578063f35900d01461085b578063f5648a4f1461087b578063ffecf5161461089057600080fd5b8063a9059cbb14610749578063c2ed286b14610769578063db26d68814610789578063dd62ed3e146107a9578063e4252ddf1461063a578063ea090d97146107ef57600080fd5b8063958c2e5211610113578063958c2e521461069a57806395d89b411461029857806396c9b442146106ba578063a12a7d61146106db578063a20d9615146106fb578063a73f9b581461073457600080fd5b80638bcea939146105dc5780638c714f80146105fc5780638da5cb5b1461061c57806391c09d1e1461063a57806391fcbb881461065a578063957aa58c1461067a57600080fd5b806333251a0b116101fe57806370a08231116101b757806370a0823114610528578063715018a614610548578063745d032f1461055d57806375d0cc431461057c5780637817be6c1461059c578063794babc4146105bc57600080fd5b806333251a0b1461044b5780633b4e935a1461046b5780633bbac5791461048057806341220104146104b05780635fafa589146104d05780635fecd9261461050857600080fd5b80631627905511610250578063162790551461039257806318160ddd146103b2578063186d260d146103d55780631c42047a146103f557806323b872dd1461040f578063313ce5671461042f57600080fd5b806306fdde0314610298578063095ea7b3146102d75780630e5919a9146103075780630f3a325f1461032957806311abf5371461035957600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b5060408051808201825260078152664b454e5a4f4b5560c81b602082015290516102ce9190612a8c565b60405180910390f35b3480156102e357600080fd5b506102f76102f2366004612af6565b6108b0565b60405190151581526020016102ce565b34801561031357600080fd5b50610327610322366004612c01565b610963565b005b34801561033557600080fd5b506102f7610344366004612c36565b60066020526000908152604090205460ff1681565b34801561036557600080fd5b50601754601854601954601b546040805194855260208501939093529183015260608201526080016102ce565b34801561039e57600080fd5b506102f76103ad366004612c36565b6109f2565b3480156103be57600080fd5b506103c7610a2e565b6040519081526020016102ce565b3480156103e157600080fd5b506103276103f0366004612c63565b610a4e565b34801561040157600080fd5b50601e546102f79060ff1681565b34801561041b57600080fd5b506102f761042a366004612c7e565b610a8b565b34801561043b57600080fd5b50604051601281526020016102ce565b34801561045757600080fd5b50610327610466366004612c36565b610af4565b34801561047757600080fd5b506102f7610ba7565b34801561048c57600080fd5b506102f761049b366004612c36565b60076020526000908152604090205460ff1681565b3480156104bc57600080fd5b506103276104cb366004612cbf565b610fca565b3480156104dc57600080fd5b50600e546104f0906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b34801561051457600080fd5b50610327610523366004612c36565b61101f565b34801561053457600080fd5b506103c7610543366004612c36565b6110d2565b34801561055457600080fd5b506103276110ed565b34801561056957600080fd5b50601e546102f790610100900460ff1681565b34801561058857600080fd5b50610327610597366004612c63565b611161565b3480156105a857600080fd5b506102f76105b7366004612cf4565b6111a9565b3480156105c857600080fd5b506103276105d7366004612cf4565b611417565b3480156105e857600080fd5b50600c546104f0906001600160a01b031681565b34801561060857600080fd5b50610327610617366004612c63565b61147f565b34801561062857600080fd5b506000546001600160a01b03166104f0565b34801561064657600080fd5b50610327610655366004612cbf565b6114c3565b34801561066657600080fd5b50610327610675366004612d0d565b611518565b34801561068657600080fd5b50601e546102f79062010000900460ff1681565b3480156106a657600080fd5b50600d546104f0906001600160a01b031681565b3480156106c657600080fd5b50601e546102f7906301000000900460ff1681565b3480156106e757600080fd5b506103276106f6366004612dd0565b61170e565b34801561070757600080fd5b506102f7610716366004612c36565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561074057600080fd5b5061032761174c565b34801561075557600080fd5b506102f7610764366004612af6565b611828565b34801561077557600080fd5b50610327610784366004612cbf565b61183e565b34801561079557600080fd5b506103276107a4366004612cf4565b611893565b3480156107b557600080fd5b506103c76107c4366004612e02565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107fb57600080fd5b506103c7601c5481565b34801561081157600080fd5b50610327610820366004612c63565b6118ef565b34801561083157600080fd5b506103c7601d5481565b34801561084757600080fd5b50610327610856366004612c36565b61193b565b34801561086757600080fd5b50610327610876366004612e3b565b611a2a565b34801561088757600080fd5b50610327611ae5565b34801561089c57600080fd5b506103276108ab366004612c36565b611b5c565b6000336108d85760405162461bcd60e51b81526004016108cf90612e5d565b60405180910390fd5b6001600160a01b0383166108fe5760405162461bcd60e51b81526004016108cf90612ea5565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b0316331461098d5760405162461bcd60e51b81526004016108cf90612eeb565b60005b81518110156109ee5760008282815181106109ad576109ad612f30565b6020908102919091018101516001600160a01b03166000908152600790915260409020805460ff1916600117905550806109e681612f5c565b915050610990565b5050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610a2657508115155b949350505050565b6000610a3c6012600a61305b565b610a4990626acfc061306a565b905090565b6000546001600160a01b03163314610a785760405162461bcd60e51b81526004016108cf90612eeb565b601e805460ff1916911515919091179055565b6000610a98848484611c32565b610aea8433610ae5856040518060600160405280603181526020016131b0603191396001600160a01b038a16600090815260016020908152604080832033845290915290205491906123a1565b6123cd565b5060019392505050565b6000546001600160a01b03163314610b1e5760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03811660009081526006602052604090205460ff16610b865760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108cf565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610bd25760405162461bcd60e51b81526004016108cf90612eeb565b601e5462010000900460ff1615610c2b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108cf565b43601c55610c3c426202a30061247b565b601d55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610d363082610d296012600a61305b565b610ae590626acfc061306a565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613089565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610def57600080fd5b505afa158015610e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e279190613089565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610e6f57600080fd5b505af1158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190613089565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610f605760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108cf565b610f72610f6c306110d2565b47612487565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601e805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610ff45760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110495760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03811660009081526007602052604090205460ff166110b15760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108cf565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031633146111175760405162461bcd60e51b81526004016108cf90612eeb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461118b5760405162461bcd60e51b81526004016108cf90612eeb565b601e805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b031633146111d45760405162461bcd60e51b81526004016108cf90612eeb565b600a82111561123f5760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108cf565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b15801561128557600080fd5b505afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906130a6565b905060006112d660646112d08487611c13565b90611c26565b905080156112fb57600c54600b546112fb916001600160a01b03908116911683611c32565b600b54611310906001600160a01b03166110d2565b60135560646113216012600a61305b565b61132e90626acfc061306a565b61133990603261306a565b61134391906130bf565b60135411156113a85760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108cf565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156113f257600080fd5b505af1158015611406573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b031633146114415760405162461bcd60e51b81526004016108cf90612eeb565b61147c306114576000546001600160a01b031690565b606484611463306110d2565b61146d919061306a565b61147791906130bf565b611c32565b50565b6000546001600160a01b031633146114a95760405162461bcd60e51b81526004016108cf90612eeb565b601e80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146114ed5760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115425760405162461bcd60e51b81526004016108cf90612eeb565b601e5462010000900460ff161561159b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108cf565b60648351106116125760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2043616e206f6e6c792061697264726f70203130302077616c6c60448201527f657473207065722074786e2064756520746f20676173206c696d69747300000060648201526084016108cf565b60005b835181101561170857600084828151811061163257611632612f30565b602002602001015190506000611680846112d087868151811061165757611657612f30565b60200260200101516012600a61166d919061305b565b61167a90626acfc061306a565b90611c13565b9050600f548111156116e85760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206f6e6c792064726f70206d6178696d756d20616c6c60448201526a6f77656420746f6b656e7360a81b60648201526084016108cf565b6116f3308383611c32565b5050808061170090612f5c565b915050611615565b50505050565b6000546001600160a01b031633146117385760405162461bcd60e51b81526004016108cf90612eeb565b601793909355601891909155601955601b55565b6000546001600160a01b031633146117765760405162461bcd60e51b81526004016108cf90612eeb565b6000611781306110d2565b905061179a6127106112d0600561166d6012600a61305b565b8110156118205760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108cf565b61147c61254a565b6000611835338484611c32565b50600192915050565b6000546001600160a01b031633146118685760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118bd5760405162461bcd60e51b81526004016108cf90612eeb565b61147c306118d36000546001600160a01b031690565b6064846118e26012600a61305b565b61146390626acfc061306a565b6000546001600160a01b031633146119195760405162461bcd60e51b81526004016108cf90612eeb565b601e8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146119655760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b0381166119cf5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108cf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a545760405162461bcd60e51b81526004016108cf90612eeb565b611a68816112d08461166d6012600a61305b565b600f55611a8160646112d0600461166d6012600a61305b565b600f5411156109ee5760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108cf565b6000546001600160a01b03163314611b0f5760405162461bcd60e51b81526004016108cf90612eeb565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114611708576040519150601f19603f3d011682016040523d82523d6000602084013e611708565b6000546001600160a01b03163314611b865760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03811660009081526007602052604090205460ff1615611bef5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108cf565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611c1f828461306a565b9392505050565b6000611c1f82846130bf565b6001600160a01b038316611c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108cf565b6001600160a01b038216611cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108cf565b60008111611d615760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108cf565b6001600160a01b03831660009081526007602052604090205460ff1615611dca5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108cf565b601e5462010000900460ff16611e65576001600160a01b03831660009081526005602052604090205460ff1680611e1957506001600160a01b03821660009081526005602052604090205460ff165b611e655760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108cf565b601e5460ff6101009091041615156001148015611e9b57506001600160a01b03821660009081526004602052604090205460ff16155b15611f1b57600f54611eb682611eb0856110d2565b9061247b565b1115611f1b5760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108cf565b601e5460ff1615611ff7576000546001600160a01b03848116911614801590611f5257506000546001600160a01b03838116911614155b8015611f6657506001600160a01b03821615155b8015611f805750600b546001600160a01b03838116911614155b8015611f9a5750600c546001600160a01b03838116911614155b15611ff75760005b6003811015611ff557601c54611fb8908261247b565b431415611fe3576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611fed81612f5c565b915050611fa2565b505b601e546301000000900460ff16156120da57612012826109f2565b15801561203757506001600160a01b03831660009081526003602052604090205460ff165b8061206b5750612046836109f2565b15801561206b57506001600160a01b03821660009081526003602052604090205460ff165b8061209e575061207a836109f2565b801561209e57506001600160a01b03821660009081526003602052604090205460ff165b806120d157506120ad826109f2565b80156120d157506001600160a01b03831660009081526003602052604090205460ff165b6120da57600080fd5b60006120f360115460125461247b90919063ffffffff16565b90506000612100306110d2565b601054601e5491925082101590640100000000900460ff161580156121305750601e5465010000000000900460ff165b80156121515750600c5460009061214f906001600160a01b03166110d2565b115b801561215d5750600083115b801561218257506001600160a01b03851660009081526005602052604090205460ff16155b80156121a757506001600160a01b03861660009081526005602052604090205460ff16155b80156121c05750600c546001600160a01b038681169116145b80156121c95750805b156121d6576121d661254a565b6001600160a01b03861660009081526005602052604090205460ff168061221557506001600160a01b03851660009081526005602052604090205460ff165b1561223857600060148190556015819055612230908061247b565b60165561238e565b600c546001600160a01b03878116911614156122685760175460148190556018546015819055612230919061247b565b600c546001600160a01b03868116911614156122e7576019546014819055601b546015819055612298919061247b565b6016556001600160a01b03861660009081526006602052604090205460ff1680156122c5575042601d5410155b156122e25760556014819055600a6015819055612230919061247b565b61238e565b6001600160a01b03861660009081526006602052604090205460ff161580612311575042601d5411155b6123835760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108cf565b600060148190556015555b6123998686866126f6565b505050505050565b600081848411156123c55760405162461bcd60e51b81526004016108cf9190612a8c565b505050900390565b6001600160a01b0383166123f35760405162461bcd60e51b81526004016108cf90612e5d565b6001600160a01b0382166124195760405162461bcd60e51b81526004016108cf90612ea5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611c1f82846130e1565b600d5461249f9030906001600160a01b0316846123cd565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561250a57600080fd5b505af115801561251e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061254391906130f9565b5050505050565b601e805464ff000000001916640100000000179055600061256a306110d2565b9050600061258560125460115461247b90919063ffffffff16565b9050600061259f6002601254611c2690919063ffffffff16565b905060006125ad8483612897565b9050476125b9826128a3565b60006125c54783612897565b905060006125e2866112d060115485611c1390919063ffffffff16565b905060006125f08383612897565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d806000811461264d576040519150601f19603f3d011682016040523d82523d6000602084013e612652565b606091505b505090508160001415801561266657508615155b15612675576126758783612487565b6706f05b59d3b200004711156126dd57600a546040516001600160a01b03909116904790600081818185875af1925050503d80600081146126d2576040519150601f19603f3d011682016040523d82523d6000602084013e6126d7565b606091505b50909150505b5050601e805464ff000000001916905550505050505050565b601654156127f657600061270982612a04565b905060006127178383612897565b905061272282612a2c565b6001600160a01b0385166000908152600260205260408120805485929061274a908490613127565b90915550506001600160a01b038416600090815260026020526040812080548392906127779084906130e1565b9091555050306000908152600260205260408120805484929061279b9084906130e1565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127e791815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061281e908490613127565b90915550506001600160a01b0382166000908152600260205260408120805483929061284b9084906130e1565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161246e91815260200190565b6000611c1f8284613127565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128d8576128d8612f30565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561292c57600080fd5b505afa158015612940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129649190613089565b8160018151811061297757612977612f30565b6001600160a01b039283166020918202929092010152600d5461299d91309116846123cd565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906129d690859060009086903090429060040161313e565b600060405180830381600087803b1580156129f057600080fd5b505af1158015612399573d6000803e3d6000fd5b600061095d60646112d0612a2560155460145461247b90919063ffffffff16565b8590611c13565b612a476016546112d060145484611c1390919063ffffffff16565b60116000828254612a5891906130e1565b9091555050601654601554612a7391906112d0908490611c13565b60126000828254612a8491906130e1565b909155505050565b600060208083528351808285015260005b81811015612ab957858101830151858201604001528201612a9d565b81811115612acb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461147c57600080fd5b60008060408385031215612b0957600080fd5b8235612b1481612ae1565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6157612b61612b22565b604052919050565b600067ffffffffffffffff821115612b8357612b83612b22565b5060051b60200190565b600082601f830112612b9e57600080fd5b81356020612bb3612bae83612b69565b612b38565b82815260059290921b84018101918181019086841115612bd257600080fd5b8286015b84811015612bf6578035612be981612ae1565b8352918301918301612bd6565b509695505050505050565b600060208284031215612c1357600080fd5b813567ffffffffffffffff811115612c2a57600080fd5b610a2684828501612b8d565b600060208284031215612c4857600080fd5b8135611c1f81612ae1565b8035801515811461141257600080fd5b600060208284031215612c7557600080fd5b611c1f82612c53565b600080600060608486031215612c9357600080fd5b8335612c9e81612ae1565b92506020840135612cae81612ae1565b929592945050506040919091013590565b60008060408385031215612cd257600080fd5b8235612cdd81612ae1565b9150612ceb60208401612c53565b90509250929050565b600060208284031215612d0657600080fd5b5035919050565b600080600060608486031215612d2257600080fd5b833567ffffffffffffffff80821115612d3a57600080fd5b612d4687838801612b8d565b9450602091508186013581811115612d5d57600080fd5b86019050601f81018713612d7057600080fd5b8035612d7e612bae82612b69565b81815260059190911b82018301908381019089831115612d9d57600080fd5b928401925b82841015612dbb57833582529284019290840190612da2565b96999698505050506040949094013593505050565b60008060008060808587031215612de657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612e1557600080fd5b8235612e2081612ae1565b91506020830135612e3081612ae1565b809150509250929050565b60008060408385031215612e4e57600080fd5b50508035926020909101359150565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612f7057612f70612f46565b5060010190565b600181815b80851115612fb2578160001904821115612f9857612f98612f46565b80851615612fa557918102915b93841c9390800290612f7c565b509250929050565b600082612fc95750600161095d565b81612fd65750600061095d565b8160018114612fec5760028114612ff657613012565b600191505061095d565b60ff84111561300757613007612f46565b50506001821b61095d565b5060208310610133831016604e8410600b8410161715613035575081810a61095d565b61303f8383612f77565b806000190482111561305357613053612f46565b029392505050565b6000611c1f60ff841683612fba565b600081600019048311821515161561308457613084612f46565b500290565b60006020828403121561309b57600080fd5b8151611c1f81612ae1565b6000602082840312156130b857600080fd5b5051919050565b6000826130dc57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156130f4576130f4612f46565b500190565b60008060006060848603121561310e57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561313957613139612f46565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561318e5784516001600160a01b031683529383019391830191600101613169565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c205c5f29cc35150c3bc4418a5d34f505319a1ae9552727ee3b965a8ec37d58864736f6c63430008090033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80638bcea9391161015a578063a9059cbb116100c1578063ee2e5a2e1161007a578063ee2e5a2e14610805578063f0c0cf8714610825578063f2fde38b1461083b578063f35900d01461085b578063f5648a4f1461087b578063ffecf5161461089057600080fd5b8063a9059cbb14610749578063c2ed286b14610769578063db26d68814610789578063dd62ed3e146107a9578063e4252ddf1461063a578063ea090d97146107ef57600080fd5b8063958c2e5211610113578063958c2e521461069a57806395d89b411461029857806396c9b442146106ba578063a12a7d61146106db578063a20d9615146106fb578063a73f9b581461073457600080fd5b80638bcea939146105dc5780638c714f80146105fc5780638da5cb5b1461061c57806391c09d1e1461063a57806391fcbb881461065a578063957aa58c1461067a57600080fd5b806333251a0b116101fe57806370a08231116101b757806370a0823114610528578063715018a614610548578063745d032f1461055d57806375d0cc431461057c5780637817be6c1461059c578063794babc4146105bc57600080fd5b806333251a0b1461044b5780633b4e935a1461046b5780633bbac5791461048057806341220104146104b05780635fafa589146104d05780635fecd9261461050857600080fd5b80631627905511610250578063162790551461039257806318160ddd146103b2578063186d260d146103d55780631c42047a146103f557806323b872dd1461040f578063313ce5671461042f57600080fd5b806306fdde0314610298578063095ea7b3146102d75780630e5919a9146103075780630f3a325f1461032957806311abf5371461035957600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b5060408051808201825260078152664b454e5a4f4b5560c81b602082015290516102ce9190612a8c565b60405180910390f35b3480156102e357600080fd5b506102f76102f2366004612af6565b6108b0565b60405190151581526020016102ce565b34801561031357600080fd5b50610327610322366004612c01565b610963565b005b34801561033557600080fd5b506102f7610344366004612c36565b60066020526000908152604090205460ff1681565b34801561036557600080fd5b50601754601854601954601b546040805194855260208501939093529183015260608201526080016102ce565b34801561039e57600080fd5b506102f76103ad366004612c36565b6109f2565b3480156103be57600080fd5b506103c7610a2e565b6040519081526020016102ce565b3480156103e157600080fd5b506103276103f0366004612c63565b610a4e565b34801561040157600080fd5b50601e546102f79060ff1681565b34801561041b57600080fd5b506102f761042a366004612c7e565b610a8b565b34801561043b57600080fd5b50604051601281526020016102ce565b34801561045757600080fd5b50610327610466366004612c36565b610af4565b34801561047757600080fd5b506102f7610ba7565b34801561048c57600080fd5b506102f761049b366004612c36565b60076020526000908152604090205460ff1681565b3480156104bc57600080fd5b506103276104cb366004612cbf565b610fca565b3480156104dc57600080fd5b50600e546104f0906001600160a01b031681565b6040516001600160a01b0390911681526020016102ce565b34801561051457600080fd5b50610327610523366004612c36565b61101f565b34801561053457600080fd5b506103c7610543366004612c36565b6110d2565b34801561055457600080fd5b506103276110ed565b34801561056957600080fd5b50601e546102f790610100900460ff1681565b34801561058857600080fd5b50610327610597366004612c63565b611161565b3480156105a857600080fd5b506102f76105b7366004612cf4565b6111a9565b3480156105c857600080fd5b506103276105d7366004612cf4565b611417565b3480156105e857600080fd5b50600c546104f0906001600160a01b031681565b34801561060857600080fd5b50610327610617366004612c63565b61147f565b34801561062857600080fd5b506000546001600160a01b03166104f0565b34801561064657600080fd5b50610327610655366004612cbf565b6114c3565b34801561066657600080fd5b50610327610675366004612d0d565b611518565b34801561068657600080fd5b50601e546102f79062010000900460ff1681565b3480156106a657600080fd5b50600d546104f0906001600160a01b031681565b3480156106c657600080fd5b50601e546102f7906301000000900460ff1681565b3480156106e757600080fd5b506103276106f6366004612dd0565b61170e565b34801561070757600080fd5b506102f7610716366004612c36565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561074057600080fd5b5061032761174c565b34801561075557600080fd5b506102f7610764366004612af6565b611828565b34801561077557600080fd5b50610327610784366004612cbf565b61183e565b34801561079557600080fd5b506103276107a4366004612cf4565b611893565b3480156107b557600080fd5b506103c76107c4366004612e02565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107fb57600080fd5b506103c7601c5481565b34801561081157600080fd5b50610327610820366004612c63565b6118ef565b34801561083157600080fd5b506103c7601d5481565b34801561084757600080fd5b50610327610856366004612c36565b61193b565b34801561086757600080fd5b50610327610876366004612e3b565b611a2a565b34801561088757600080fd5b50610327611ae5565b34801561089c57600080fd5b506103276108ab366004612c36565b611b5c565b6000336108d85760405162461bcd60e51b81526004016108cf90612e5d565b60405180910390fd5b6001600160a01b0383166108fe5760405162461bcd60e51b81526004016108cf90612ea5565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000546001600160a01b0316331461098d5760405162461bcd60e51b81526004016108cf90612eeb565b60005b81518110156109ee5760008282815181106109ad576109ad612f30565b6020908102919091018101516001600160a01b03166000908152600790915260409020805460ff1916600117905550806109e681612f5c565b915050610990565b5050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610a2657508115155b949350505050565b6000610a3c6012600a61305b565b610a4990626acfc061306a565b905090565b6000546001600160a01b03163314610a785760405162461bcd60e51b81526004016108cf90612eeb565b601e805460ff1916911515919091179055565b6000610a98848484611c32565b610aea8433610ae5856040518060600160405280603181526020016131b0603191396001600160a01b038a16600090815260016020908152604080832033845290915290205491906123a1565b6123cd565b5060019392505050565b6000546001600160a01b03163314610b1e5760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03811660009081526006602052604090205460ff16610b865760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108cf565b6001600160a01b03166000908152600660205260409020805460ff19169055565b600080546001600160a01b03163314610bd25760405162461bcd60e51b81526004016108cf90612eeb565b601e5462010000900460ff1615610c2b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108cf565b43601c55610c3c426202a30061247b565b601d55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610d363082610d296012600a61305b565b610ae590626acfc061306a565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da79190613089565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610def57600080fd5b505afa158015610e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e279190613089565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610e6f57600080fd5b505af1158015610e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea79190613089565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610f605760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108cf565b610f72610f6c306110d2565b47612487565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601e805465ff0000ffffff191665010000010101179055600190565b6000546001600160a01b03163314610ff45760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110495760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03811660009081526007602052604090205460ff166110b15760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108cf565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031633146111175760405162461bcd60e51b81526004016108cf90612eeb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461118b5760405162461bcd60e51b81526004016108cf90612eeb565b601e805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b031633146111d45760405162461bcd60e51b81526004016108cf90612eeb565b600a82111561123f5760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108cf565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b15801561128557600080fd5b505afa158015611299573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bd91906130a6565b905060006112d660646112d08487611c13565b90611c26565b905080156112fb57600c54600b546112fb916001600160a01b03908116911683611c32565b600b54611310906001600160a01b03166110d2565b60135560646113216012600a61305b565b61132e90626acfc061306a565b61133990603261306a565b61134391906130bf565b60135411156113a85760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108cf565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156113f257600080fd5b505af1158015611406573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b031633146114415760405162461bcd60e51b81526004016108cf90612eeb565b61147c306114576000546001600160a01b031690565b606484611463306110d2565b61146d919061306a565b61147791906130bf565b611c32565b50565b6000546001600160a01b031633146114a95760405162461bcd60e51b81526004016108cf90612eeb565b601e80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146114ed5760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115425760405162461bcd60e51b81526004016108cf90612eeb565b601e5462010000900460ff161561159b5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108cf565b60648351106116125760405162461bcd60e51b815260206004820152603d60248201527f45524332303a2043616e206f6e6c792061697264726f70203130302077616c6c60448201527f657473207065722074786e2064756520746f20676173206c696d69747300000060648201526084016108cf565b60005b835181101561170857600084828151811061163257611632612f30565b602002602001015190506000611680846112d087868151811061165757611657612f30565b60200260200101516012600a61166d919061305b565b61167a90626acfc061306a565b90611c13565b9050600f548111156116e85760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206f6e6c792064726f70206d6178696d756d20616c6c60448201526a6f77656420746f6b656e7360a81b60648201526084016108cf565b6116f3308383611c32565b5050808061170090612f5c565b915050611615565b50505050565b6000546001600160a01b031633146117385760405162461bcd60e51b81526004016108cf90612eeb565b601793909355601891909155601955601b55565b6000546001600160a01b031633146117765760405162461bcd60e51b81526004016108cf90612eeb565b6000611781306110d2565b905061179a6127106112d0600561166d6012600a61305b565b8110156118205760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108cf565b61147c61254a565b6000611835338484611c32565b50600192915050565b6000546001600160a01b031633146118685760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118bd5760405162461bcd60e51b81526004016108cf90612eeb565b61147c306118d36000546001600160a01b031690565b6064846118e26012600a61305b565b61146390626acfc061306a565b6000546001600160a01b031633146119195760405162461bcd60e51b81526004016108cf90612eeb565b601e8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146119655760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b0381166119cf5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108cf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a545760405162461bcd60e51b81526004016108cf90612eeb565b611a68816112d08461166d6012600a61305b565b600f55611a8160646112d0600461166d6012600a61305b565b600f5411156109ee5760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108cf565b6000546001600160a01b03163314611b0f5760405162461bcd60e51b81526004016108cf90612eeb565b600080546040516001600160a01b039091169047908381818185875af1925050503d8060008114611708576040519150601f19603f3d011682016040523d82523d6000602084013e611708565b6000546001600160a01b03163314611b865760405162461bcd60e51b81526004016108cf90612eeb565b6001600160a01b03811660009081526007602052604090205460ff1615611bef5760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108cf565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611c1f828461306a565b9392505050565b6000611c1f82846130bf565b6001600160a01b038316611c965760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108cf565b6001600160a01b038216611cf85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108cf565b60008111611d615760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108cf565b6001600160a01b03831660009081526007602052604090205460ff1615611dca5760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108cf565b601e5462010000900460ff16611e65576001600160a01b03831660009081526005602052604090205460ff1680611e1957506001600160a01b03821660009081526005602052604090205460ff165b611e655760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108cf565b601e5460ff6101009091041615156001148015611e9b57506001600160a01b03821660009081526004602052604090205460ff16155b15611f1b57600f54611eb682611eb0856110d2565b9061247b565b1115611f1b5760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108cf565b601e5460ff1615611ff7576000546001600160a01b03848116911614801590611f5257506000546001600160a01b03838116911614155b8015611f6657506001600160a01b03821615155b8015611f805750600b546001600160a01b03838116911614155b8015611f9a5750600c546001600160a01b03838116911614155b15611ff75760005b6003811015611ff557601c54611fb8908261247b565b431415611fe3576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611fed81612f5c565b915050611fa2565b505b601e546301000000900460ff16156120da57612012826109f2565b15801561203757506001600160a01b03831660009081526003602052604090205460ff165b8061206b5750612046836109f2565b15801561206b57506001600160a01b03821660009081526003602052604090205460ff165b8061209e575061207a836109f2565b801561209e57506001600160a01b03821660009081526003602052604090205460ff165b806120d157506120ad826109f2565b80156120d157506001600160a01b03831660009081526003602052604090205460ff165b6120da57600080fd5b60006120f360115460125461247b90919063ffffffff16565b90506000612100306110d2565b601054601e5491925082101590640100000000900460ff161580156121305750601e5465010000000000900460ff165b80156121515750600c5460009061214f906001600160a01b03166110d2565b115b801561215d5750600083115b801561218257506001600160a01b03851660009081526005602052604090205460ff16155b80156121a757506001600160a01b03861660009081526005602052604090205460ff16155b80156121c05750600c546001600160a01b038681169116145b80156121c95750805b156121d6576121d661254a565b6001600160a01b03861660009081526005602052604090205460ff168061221557506001600160a01b03851660009081526005602052604090205460ff165b1561223857600060148190556015819055612230908061247b565b60165561238e565b600c546001600160a01b03878116911614156122685760175460148190556018546015819055612230919061247b565b600c546001600160a01b03868116911614156122e7576019546014819055601b546015819055612298919061247b565b6016556001600160a01b03861660009081526006602052604090205460ff1680156122c5575042601d5410155b156122e25760556014819055600a6015819055612230919061247b565b61238e565b6001600160a01b03861660009081526006602052604090205460ff161580612311575042601d5411155b6123835760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108cf565b600060148190556015555b6123998686866126f6565b505050505050565b600081848411156123c55760405162461bcd60e51b81526004016108cf9190612a8c565b505050900390565b6001600160a01b0383166123f35760405162461bcd60e51b81526004016108cf90612e5d565b6001600160a01b0382166124195760405162461bcd60e51b81526004016108cf90612ea5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611c1f82846130e1565b600d5461249f9030906001600160a01b0316846123cd565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561250a57600080fd5b505af115801561251e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061254391906130f9565b5050505050565b601e805464ff000000001916640100000000179055600061256a306110d2565b9050600061258560125460115461247b90919063ffffffff16565b9050600061259f6002601254611c2690919063ffffffff16565b905060006125ad8483612897565b9050476125b9826128a3565b60006125c54783612897565b905060006125e2866112d060115485611c1390919063ffffffff16565b905060006125f08383612897565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d806000811461264d576040519150601f19603f3d011682016040523d82523d6000602084013e612652565b606091505b505090508160001415801561266657508615155b15612675576126758783612487565b6706f05b59d3b200004711156126dd57600a546040516001600160a01b03909116904790600081818185875af1925050503d80600081146126d2576040519150601f19603f3d011682016040523d82523d6000602084013e6126d7565b606091505b50909150505b5050601e805464ff000000001916905550505050505050565b601654156127f657600061270982612a04565b905060006127178383612897565b905061272282612a2c565b6001600160a01b0385166000908152600260205260408120805485929061274a908490613127565b90915550506001600160a01b038416600090815260026020526040812080548392906127779084906130e1565b9091555050306000908152600260205260408120805484929061279b9084906130e1565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127e791815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061281e908490613127565b90915550506001600160a01b0382166000908152600260205260408120805483929061284b9084906130e1565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161246e91815260200190565b6000611c1f8284613127565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106128d8576128d8612f30565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561292c57600080fd5b505afa158015612940573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129649190613089565b8160018151811061297757612977612f30565b6001600160a01b039283166020918202929092010152600d5461299d91309116846123cd565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906129d690859060009086903090429060040161313e565b600060405180830381600087803b1580156129f057600080fd5b505af1158015612399573d6000803e3d6000fd5b600061095d60646112d0612a2560155460145461247b90919063ffffffff16565b8590611c13565b612a476016546112d060145484611c1390919063ffffffff16565b60116000828254612a5891906130e1565b9091555050601654601554612a7391906112d0908490611c13565b60126000828254612a8491906130e1565b909155505050565b600060208083528351808285015260005b81811015612ab957858101830151858201604001528201612a9d565b81811115612acb576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461147c57600080fd5b60008060408385031215612b0957600080fd5b8235612b1481612ae1565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6157612b61612b22565b604052919050565b600067ffffffffffffffff821115612b8357612b83612b22565b5060051b60200190565b600082601f830112612b9e57600080fd5b81356020612bb3612bae83612b69565b612b38565b82815260059290921b84018101918181019086841115612bd257600080fd5b8286015b84811015612bf6578035612be981612ae1565b8352918301918301612bd6565b509695505050505050565b600060208284031215612c1357600080fd5b813567ffffffffffffffff811115612c2a57600080fd5b610a2684828501612b8d565b600060208284031215612c4857600080fd5b8135611c1f81612ae1565b8035801515811461141257600080fd5b600060208284031215612c7557600080fd5b611c1f82612c53565b600080600060608486031215612c9357600080fd5b8335612c9e81612ae1565b92506020840135612cae81612ae1565b929592945050506040919091013590565b60008060408385031215612cd257600080fd5b8235612cdd81612ae1565b9150612ceb60208401612c53565b90509250929050565b600060208284031215612d0657600080fd5b5035919050565b600080600060608486031215612d2257600080fd5b833567ffffffffffffffff80821115612d3a57600080fd5b612d4687838801612b8d565b9450602091508186013581811115612d5d57600080fd5b86019050601f81018713612d7057600080fd5b8035612d7e612bae82612b69565b81815260059190911b82018301908381019089831115612d9d57600080fd5b928401925b82841015612dbb57833582529284019290840190612da2565b96999698505050506040949094013593505050565b60008060008060808587031215612de657600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612e1557600080fd5b8235612e2081612ae1565b91506020830135612e3081612ae1565b809150509250929050565b60008060408385031215612e4e57600080fd5b50508035926020909101359150565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415612f7057612f70612f46565b5060010190565b600181815b80851115612fb2578160001904821115612f9857612f98612f46565b80851615612fa557918102915b93841c9390800290612f7c565b509250929050565b600082612fc95750600161095d565b81612fd65750600061095d565b8160018114612fec5760028114612ff657613012565b600191505061095d565b60ff84111561300757613007612f46565b50506001821b61095d565b5060208310610133831016604e8410600b8410161715613035575081810a61095d565b61303f8383612f77565b806000190482111561305357613053612f46565b029392505050565b6000611c1f60ff841683612fba565b600081600019048311821515161561308457613084612f46565b500290565b60006020828403121561309b57600080fd5b8151611c1f81612ae1565b6000602082840312156130b857600080fd5b5051919050565b6000826130dc57634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156130f4576130f4612f46565b500190565b60008060006060848603121561310e57600080fd5b8351925060208401519150604084015190509250925092565b60008282101561313957613139612f46565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561318e5784516001600160a01b031683529383019391830191600101613169565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220c205c5f29cc35150c3bc4418a5d34f505319a1ae9552727ee3b965a8ec37d58864736f6c63430008090033

Deployed Bytecode Sourcemap

18120:18986:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22420:98;;;;;;;;;;-1:-1:-1;22501:9:0;;;;;;;;;;;-1:-1:-1;;;22501:9:0;;;;22420:98;;;;22501:9;22420:98;:::i;:::-;;;;;;;;23125:397;;;;;;;;;;-1:-1:-1;23125:397:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;23125:397:0;1072:187:1;34776:210:0;;;;;;;;;;-1:-1:-1;34776:210:0;;;;;:::i;:::-;;:::i;:::-;;18771:40;;;;;;;;;;-1:-1:-1;18771:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36880:223;;;;;;;;;;-1:-1:-1;37029:15:0;;37045;;37061:16;;37078;;36880:223;;;3442:25:1;;;3498:2;3483:18;;3476:34;;;;3526:18;;;3519:34;3584:2;3569:18;;3562:34;3429:3;3414:19;36880:223:0;3211:391:1;32518:337:0;;;;;;;;;;-1:-1:-1;32518:337:0;;;;;:::i;:::-;;:::i;22735:101::-;;;;;;;;;;;;;:::i;:::-;;;3753:25:1;;;3741:2;3726:18;22735:101:0;3607:177:1;36070:103:0;;;;;;;;;;-1:-1:-1;36070:103:0;;;;;:::i;:::-;;:::i;19687:28::-;;;;;;;;;;-1:-1:-1;19687:28:0;;;;;;;;24069:348;;;;;;;;;;-1:-1:-1;24069:348:0;;;;;:::i;:::-;;:::i;22632:97::-;;;;;;;;;;-1:-1:-1;22632:97:0;;18388:2;4742:36:1;;4730:2;4715:18;22632:97:0;4600:184:1;35151:171:0;;;;;;;;;;-1:-1:-1;35151:171:0;;;;;:::i;:::-;;:::i;25033:1249::-;;;;;;;;;;;;;:::i;18818:37::-;;;;;;;;;;-1:-1:-1;18818:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35646:158;;;;;;;;;;-1:-1:-1;35646:158:0;;;;;:::i;:::-;;:::i;19087:26::-;;;;;;;;;;-1:-1:-1;19087:26:0;;;;-1:-1:-1;;;;;19087:26:0;;;;;;-1:-1:-1;;;;;5273:32:1;;;5255:51;;5243:2;5228:18;19087:26:0;5109:203:1;34989:159:0;;;;;;;;;;-1:-1:-1;34989:159:0;;;;;:::i;:::-;;:::i;22842:122::-;;;;;;;;;;-1:-1:-1;22842:122:0;;;;;:::i;:::-;;:::i;734:148::-;;;;;;;;;;;;;:::i;19722:31::-;;;;;;;;;;-1:-1:-1;19722:31:0;;;;;;;;;;;36293:119;;;;;;;;;;-1:-1:-1;36293:119:0;;;;;:::i;:::-;;:::i;33631:686::-;;;;;;;;;;-1:-1:-1;33631:686:0;;;;;:::i;:::-;;:::i;33462:163::-;;;;;;;;;;-1:-1:-1;33462:163:0;;;;;:::i;:::-;;:::i;19012:24::-;;;;;;;;;;-1:-1:-1;19012:24:0;;;;-1:-1:-1;;;;;19012:24:0;;;36179:108;;;;;;;;;;-1:-1:-1;36179:108:0;;;;;:::i;:::-;;:::i;510:87::-;;;;;;;;;;-1:-1:-1;556:7:0;583:6;-1:-1:-1;;;;;583:6:0;510:87;;35328:160;;;;;;;;;;-1:-1:-1;35328:160:0;;;;;:::i;:::-;;:::i;24423:604::-;;;;;;;;;;-1:-1:-1;24423:604:0;;;;;:::i;:::-;;:::i;19760:24::-;;;;;;;;;;-1:-1:-1;19760:24:0;;;;;;;;;;;19043:37;;;;;;;;;;-1:-1:-1;19043:37:0;;;;-1:-1:-1;;;;;19043:37:0;;;19791:35;;;;;;;;;;-1:-1:-1;19791:35:0;;;;;;;;;;;36547:327;;;;;;;;;;-1:-1:-1;36547:327:0;;;;;:::i;:::-;;:::i;33009:126::-;;;;;;;;;;-1:-1:-1;33009:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;33099:28:0;33075:4;33099:28;;;:19;:28;;;;;;;;;33009:126;34323:282;;;;;;;;;;;;;:::i;23887:176::-;;;;;;;;;;-1:-1:-1;23887:176:0;;;;;:::i;:::-;;:::i;35494:146::-;;;;;;;;;;-1:-1:-1;35494:146:0;;;;;:::i;:::-;;:::i;33304:152::-;;;;;;;;;;-1:-1:-1;33304:152:0;;;;;:::i;:::-;;:::i;22970:149::-;;;;;;;;;;-1:-1:-1;22970:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;23080:22:0;;;23053:7;23080:22;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;22970:149;19607:33;;;;;;;;;;;;;;;;36418:123;;;;;;;;;;-1:-1:-1;36418:123:0;;;;;:::i;:::-;;:::i;19647:31::-;;;;;;;;;;;;;;;;888:249;;;;;;;;;;-1:-1:-1;888:249:0;;;;;:::i;:::-;;:::i;35810:254::-;;;;;;;;;;-1:-1:-1;35810:254:0;;;;;:::i;:::-;;:::i;33141:157::-;;;;;;;;;;;;;:::i;34611:159::-;;;;;;;;;;-1:-1:-1;34611:159:0;;;;;:::i;:::-;;:::i;23125:397::-;23200:4;169:10;23217:79;;;;-1:-1:-1;;;23217:79:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23315:21:0;;23307:72;;;;-1:-1:-1;;;23307:72:0;;;;;;;:::i;:::-;169:10;23390:29;;;;:15;:29;;;;;;;;-1:-1:-1;;;;;23390:38:0;;;;;;;;;;;;:47;;;23453:39;3753:25:1;;;23390:38:0;;169:10;23453:39;;3726:18:1;23453:39:0;;;;;;;-1:-1:-1;23510:4:0;23125:397;;;;;:::o;34776:210::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;34857:9:::1;34853:126;34876:7;:14;34872:1;:18;34853:126;;;34911:11;34925:7;34933:1;34925:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;34950:10:0::1;;::::0;;;:5:::1;:10:::0;;;;;;:17;;-1:-1:-1;;34950:17:0::1;34963:4;34950:17;::::0;;-1:-1:-1;34892:3:0;::::1;::::0;::::1;:::i;:::-;;;;34853:126;;;;34776:210:::0;:::o;32518:337::-;32576:4;32755:20;;32642:66;32804:23;;;;;;:42;;-1:-1:-1;32831:15:0;;;32804:42;32796:51;32518:337;-1:-1:-1;;;;32518:337:0:o;22735:101::-;22790:7;18442:16;18388:2;18442;:16;:::i;:::-;18436:22;;:3;:22;:::i;:::-;22810:18;;22735:101;:::o;36070:103::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;36143:8:::1;:22:::0;;-1:-1:-1;;36143:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36070:103::o;24069:348::-;24167:4;24184:43;24201:6;24209:9;24220:6;24184:16;:43::i;:::-;24238:149;24254:6;169:10;24284:102;24326:6;24284:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24284:23:0;;;;;;:15;:23;;;;;;;;169:10;24284:37;;;;;;;;;;:41;:102::i;:::-;24238:15;:149::i;:::-;-1:-1:-1;24405:4:0;24069:348;;;;;:::o;35151:171::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35228:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;35220:58;;;::::0;-1:-1:-1;;;35220:58:0;;11368:2:1;35220:58:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;11446;11426:18;;;11419:58;11494:18;;35220:58:0::1;11166:352:1::0;35220:58:0::1;-1:-1:-1::0;;;;;35289:17:0::1;35309:5;35289:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;35289:25:0::1;::::0;;35151:171::o;25033:1249::-;25079:4;583:6;;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;25104:4:::1;::::0;;;::::1;;;25103:5;25095:45;;;::::0;-1:-1:-1;;;25095:45:0;;11725:2:1;25095:45:0::1;::::0;::::1;11707:21:1::0;11764:2;11744:18;;;11737:30;11803:29;11783:18;;;11776:57;11850:18;;25095:45:0::1;11523:351:1::0;25095:45:0::1;25172:12;25151:18;:33:::0;25214:27:::1;:15;25234:6;25214:19;:27::i;:::-;25195:16;:46:::0;25359:11:::1;:26:::0;;-1:-1:-1;;;;;;25359:26:0;;::::1;25305:42;25359:26:::0;;::::1;::::0;;;25396:11:::1;:56:::0;;;;::::1;25410:42;25396:56;::::0;;25463:41;:48;;-1:-1:-1;;25463:48:0;;::::1;25359:26:::0;25463:48;;::::1;::::0;;;25522:41;:48;;;::::1;::::0;::::1;::::0;;25252:31:::1;25581:41:::0;;;:19:::1;25463:41;25581::::0;;:48;;;;::::1;::::0;;::::1;::::0;;25640:65:::1;25664:4;25305:42:::0;18442:16:::1;18388:2;18442;:16;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;25640:65::-;25746:12;-1:-1:-1::0;;;;;25746:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25728:52:0::1;;25789:4;25796:12;-1:-1:-1::0;;;;;25796:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25728:88;::::0;-1:-1:-1;;;;;;25728:88:0::1;::::0;;;;;;-1:-1:-1;;;;;12365:15:1;;;25728:88:0::1;::::0;::::1;12347:34:1::0;12417:15;;12397:18;;;12390:43;12282:18;;25728:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25716:9;:100:::0;;-1:-1:-1;;;;;;25716:100:0::1;-1:-1:-1::0;;;;;25716:100:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;25827:39:0;;;:19:::1;:39;::::0;;;;;;;:46;;-1:-1:-1;;25827:46:0;;::::1;-1:-1:-1::0;25827:46:0;;::::1;::::0;;;25912:9;;;;::::1;25884:39:::0;;:19:::1;:39:::0;;;;;:46;;;;::::1;::::0;;::::1;::::0;;25949:21:::1;25941:82;;;::::0;-1:-1:-1;;;25941:82:0;;12646:2:1;25941:82:0::1;::::0;::::1;12628:21:1::0;12685:2;12665:18;;;12658:30;12724:34;12704:18;;;12697:62;-1:-1:-1;;;12775:18:1;;;12768:42;12827:19;;25941:82:0::1;12444:408:1::0;25941:82:0::1;26034:61;26047:24;26065:4;26047:9;:24::i;:::-;26073:21;26034:12;:61::i;:::-;26132:4;::::0;32418:16;:37;;-1:-1:-1;;;;;;32418:37:0;-1:-1:-1;;;;;26132:4:0;;::::1;32418:37:::0;;;;;-1:-1:-1;32466:31:0;;;:13;:31;;;;;:38;;-1:-1:-1;;32466:38:0;-1:-1:-1;32466:38:0;;;-1:-1:-1;;26148:11:0::1;:18:::0;;-1:-1:-1;;26241:11:0;;;;;-1:-1:-1;;25033:1249:0:o;35646:158::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35745:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;35745:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35646:158::o;34989:159::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35063:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;35055:52;;;::::0;-1:-1:-1;;;35055:52:0;;13059:2:1;35055:52:0::1;::::0;::::1;13041:21:1::0;13098:2;13078:18;;;13071:30;13137:27;13117:18;;;13110:55;13182:18;;35055:52:0::1;12857:349:1::0;35055:52:0::1;-1:-1:-1::0;;;;;35118:14:0::1;35135:5;35118:14:::0;;;:5:::1;:14;::::0;;;;:22;;-1:-1:-1;;35118:22:0::1;::::0;;34989:159::o;22842:122::-;-1:-1:-1;;;;;22935:21:0;22908:7;22935:21;;;:12;:21;;;;;;;22842:122::o;734:148::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;841:1:::1;825:6:::0;;804:40:::1;::::0;-1:-1:-1;;;;;825:6:0;;::::1;::::0;804:40:::1;::::0;841:1;;804:40:::1;872:1;855:19:::0;;-1:-1:-1;;;;;;855:19:0::1;::::0;;734:148::o;36293:119::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;36375:15:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36375:29:0;;::::1;::::0;;;::::1;::::0;;36293:119::o;33631:686::-;33708:4;583:6;;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;33743:2:::1;33732:7;:13;;33724:75;;;::::0;-1:-1:-1;;;33724:75:0;;13413:2:1;33724:75:0::1;::::0;::::1;13395:21:1::0;13452:2;13432:18;;;13425:30;13491:34;13471:18;;;13464:62;-1:-1:-1;;;13542:18:1;;;13535:47;13599:19;;33724:75:0::1;13211:413:1::0;33724:75:0::1;33856:9;::::0;33841:25:::1;::::0;-1:-1:-1;;;33841:25:0;;-1:-1:-1;;;;;33856:9:0;;::::1;33841:25;::::0;::::1;5255:51:1::0;33810:28:0::1;::::0;33841:4:::1;::::0;:14:::1;::::0;5228:18:1;;33841:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33810:56:::0;-1:-1:-1;33877:20:0::1;33900:44;33938:5;33900:33;33810:56:::0;33925:7;33900:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;33877:67:::0;-1:-1:-1;33959:16:0;;33955:95:::1;;34008:9;::::0;34019:4:::1;::::0;33991:47:::1;::::0;-1:-1:-1;;;;;34008:9:0;;::::1;::::0;34019:4:::1;34025:12:::0;33991:16:::1;:47::i;:::-;34090:4;::::0;34080:15:::1;::::0;-1:-1:-1;;;;;34090:4:0::1;34080:9;:15::i;:::-;34060:17;:35:::0;34154:5:::1;18442:16;18388:2;18442;:16;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;:::-;34135:16;::::0;34149:2:::1;34135:16;:::i;:::-;:24;;;;:::i;:::-;34114:17;;:45;;34106:101;;;::::0;-1:-1:-1;;;34106:101:0;;14242:2:1;34106:101:0::1;::::0;::::1;14224:21:1::0;14281:2;14261:18;;;14254:30;14320:34;14300:18;;;14293:62;-1:-1:-1;;;14371:18:1;;;14364:41;14422:19;;34106:101:0::1;14040:407:1::0;34106:101:0::1;34255:9;::::0;34276:11:::1;::::0;;-1:-1:-1;;;;;;34276:11:0;;;;-1:-1:-1;;;;;34255:9:0;;::::1;::::0;;;34276::::1;::::0;:11:::1;::::0;;::::1;::::0;34218:19:::1;::::0;34276:11;;;;;;;34218:19;34255:9;34276:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34305:4;34298:11;;;;;719:1;33631:686:::0;;;:::o;33462:163::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;33539:78:::1;33564:4;33571:7;556::::0;583:6;-1:-1:-1;;;;;583:6:0;;510:87;33571:7:::1;33613:3;33605:7;33580:24;33598:4;33580:9;:24::i;:::-;:32;;;;:::i;:::-;:36;;;;:::i;:::-;33539:16;:78::i;:::-;33462:163:::0;:::o;36179:108::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;36254:11:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;36254:25:0;;::::1;::::0;;;::::1;::::0;;36179:108::o;35328:160::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35429:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;35429:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35328:160::o;24423:604::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;24547:4:::1;::::0;;;::::1;;;24546:5;24538:45;;;::::0;-1:-1:-1;;;24538:45:0;;11725:2:1;24538:45:0::1;::::0;::::1;11707:21:1::0;11764:2;11744:18;;;11737:30;11803:29;11783:18;;;11776:57;11850:18;;24538:45:0::1;11523:351:1::0;24538:45:0::1;24619:3;24602:7;:14;:20;24594:94;;;::::0;-1:-1:-1;;;24594:94:0;;14654:2:1;24594:94:0::1;::::0;::::1;14636:21:1::0;14693:2;14673:18;;;14666:30;14732:34;14712:18;;;14705:62;14803:31;14783:18;;;14776:59;14852:19;;24594:94:0::1;14452:425:1::0;24594:94:0::1;24703:9;24699:321;24722:7;:14;24718:1;:18;24699:321;;;24757:14;24774:7;24782:1;24774:10;;;;;;;;:::i;:::-;;;;;;;24757:27;;24799:14;24816:40;24848:7;24816:27;24832:7;24840:1;24832:10;;;;;;;;:::i;:::-;;;;;;;18388:2;18442;:16;;;;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;:::-;24816:15:::0;::::1;:27::i;:40::-;24799:57;;24889:9;;24879:6;:19;;24871:75;;;::::0;-1:-1:-1;;;24871:75:0;;15084:2:1;24871:75:0::1;::::0;::::1;15066:21:1::0;15123:2;15103:18;;;15096:30;15162:34;15142:18;;;15135:62;-1:-1:-1;;;15213:18:1;;;15206:41;15264:19;;24871:75:0::1;14882:407:1::0;24871:75:0::1;24961:47;24986:4;24993:6;25001;24961:16;:47::i;:::-;24742:278;;24738:3;;;;;:::i;:::-;;;;24699:321;;;;24423:604:::0;;;:::o;36547:327::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;36697:15:::1;:33:::0;;;;36741:15:::1;:33:::0;;;;36785:16:::1;:35:::0;36831:16:::1;:35:::0;36547:327::o;34323:282::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;34378:23:::1;34404:24;34422:4;34404:9;:24::i;:::-;34378:50:::0;-1:-1:-1;34466:29:0::1;34489:5;34466:18;34482:1;18442:16;18388:2;18442;:16;:::i;34466:29::-;34447:15;:48;;34439:133;;;::::0;-1:-1:-1;;;34439:133:0;;15496:2:1;34439:133:0::1;::::0;::::1;15478:21:1::0;15535:2;15515:18;;;15508:30;15574:34;15554:18;;;15547:62;15645:34;15625:18;;;15618:62;-1:-1:-1;;;15696:19:1;;;15689:39;15745:19;;34439:133:0::1;15294:476:1::0;34439:133:0::1;34583:14;:12;:14::i;23887:176::-:0;23967:4;23984:49;169:10;24015:9;24026:6;23984:16;:49::i;:::-;-1:-1:-1;24051:4:0;23887:176;;;;:::o;35494:146::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35587:31:0;;;::::1;;::::0;;;:13:::1;:31;::::0;;;;:45;;-1:-1:-1;;35587:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35494:146::o;33304:152::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;33383:65:::1;33408:4;33415:7;556::::0;583:6;-1:-1:-1;;;;;583:6:0;;510:87;33415:7:::1;33444:3;33436:7:::0;18442:16:::1;18388:2;18442;:16;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;36418:123::-:0;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;36499:20:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36499:34:0;;::::1;::::0;;;::::1;::::0;;36418:123::o;888:249::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;977:22:0;::::1;969:78;;;::::0;-1:-1:-1;;;969:78:0;;15977:2:1;969:78:0::1;::::0;::::1;15959:21:1::0;16016:2;15996:18;;;15989:30;16055:34;16035:18;;;16028:62;-1:-1:-1;;;16106:18:1;;;16099:41;16157:19;;969:78:0::1;15775:407:1::0;969:78:0::1;1084:6;::::0;;1063:38:::1;::::0;-1:-1:-1;;;;;1063:38:0;;::::1;::::0;1084:6;::::1;::::0;1063:38:::1;::::0;::::1;1112:6;:17:::0;;-1:-1:-1;;;;;;1112:17:0::1;-1:-1:-1::0;;;;;1112:17:0;;;::::1;::::0;;;::::1;::::0;;888:249::o;35810:254::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;35914:37:::1;35943:7:::0;35914:24:::1;35930:7:::0;18442:16:::1;18388:2;18442;:16;:::i;35914:37::-;35902:9;:49:::0;35982:27:::1;36005:3;35982:18;35998:1;18442:16;18388:2;18442;:16;:::i;35982:27::-;35970:9;;:39;;35962:94;;;::::0;-1:-1:-1;;;35962:94:0;;16389:2:1;35962:94:0::1;::::0;::::1;16371:21:1::0;16428:2;16408:18;;;16401:30;16467:34;16447:18;;;16440:62;-1:-1:-1;;;16518:18:1;;;16511:40;16568:19;;35962:94:0::1;16187:406:1::0;33141:157:0;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;33199:12:::1;583:6:::0;;33235:55:::1;::::0;-1:-1:-1;;;;;583:6:0;;;;33264:21:::1;::::0;33199:12;33235:55;33199:12;33235:55;33264:21;583:6;33235:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34611:159:::0;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34683:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;34682:15;34674:56;;;::::0;-1:-1:-1;;;34674:56:0;;17010:2:1;34674:56:0::1;::::0;::::1;16992:21:1::0;17049:2;17029:18;;;17022:30;17088;17068:18;;;17061:58;17136:18;;34674:56:0::1;16808:352:1::0;34674:56:0::1;-1:-1:-1::0;;;;;34741:14:0::1;;::::0;;;:5:::1;:14;::::0;;;;:21;;-1:-1:-1;;34741:21:0::1;34758:4;34741:21;::::0;;34611:159::o;2713:98::-;2771:7;2798:5;2802:1;2798;:5;:::i;:::-;2791:12;2713:98;-1:-1:-1;;;2713:98:0:o;2817:::-;2875:7;2902:5;2906:1;2902;:5;:::i;26288:3038::-;-1:-1:-1;;;;;26384:18:0;;26376:68;;;;-1:-1:-1;;;26376:68:0;;17367:2:1;26376:68:0;;;17349:21:1;17406:2;17386:18;;;17379:30;17445:34;17425:18;;;17418:62;-1:-1:-1;;;17496:18:1;;;17489:35;17541:19;;26376:68:0;17165:401:1;26376:68:0;-1:-1:-1;;;;;26463:16:0;;26455:64;;;;-1:-1:-1;;;26455:64:0;;17773:2:1;26455:64:0;;;17755:21:1;17812:2;17792:18;;;17785:30;17851:34;17831:18;;;17824:62;-1:-1:-1;;;17902:18:1;;;17895:33;17945:19;;26455:64:0;17571:399:1;26455:64:0;26547:1;26538:6;:10;26530:71;;;;-1:-1:-1;;;26530:71:0;;18177:2:1;26530:71:0;;;18159:21:1;18216:2;18196:18;;;18189:30;18255:34;18235:18;;;18228:62;-1:-1:-1;;;18306:18:1;;;18299:46;18362:19;;26530:71:0;17975:412:1;26530:71:0;-1:-1:-1;;;;;26621:11:0;;;;;;:5;:11;;;;;;;;26620:12;26612:57;;;;-1:-1:-1;;;26612:57:0;;18594:2:1;26612:57:0;;;18576:21:1;;;18613:18;;;18606:30;18672:34;18652:18;;;18645:62;18724:18;;26612:57:0;18392:356:1;26612:57:0;26684:4;;;;;;;26680:116;;-1:-1:-1;;;;;26712:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;26735:17:0;;;;;;:13;:17;;;;;;;;26712:40;26704:80;;;;-1:-1:-1;;;26704:80:0;;18955:2:1;26704:80:0;;;18937:21:1;18994:2;18974:18;;;18967:30;19033:29;19013:18;;;19006:57;19080:18;;26704:80:0;18753:351:1;26704:80:0;26810:11;;;;;;;;:19;;:11;:19;:48;;;;-1:-1:-1;;;;;;26835:23:0;;;;;;:19;:23;;;;;;;;26833:25;26810:48;26806:178;;;26912:9;;26883:25;26901:6;26883:13;26893:2;26883:9;:13::i;:::-;:17;;:25::i;:::-;:38;;26875:97;;;;-1:-1:-1;;;26875:97:0;;19311:2:1;26875:97:0;;;19293:21:1;19350:2;19330:18;;;19323:30;19389:34;19369:18;;;19362:62;-1:-1:-1;;;19440:18:1;;;19433:44;19494:19;;26875:97:0;19109:410:1;26875:97:0;26997:8;;;;26994:350;;;556:7;583:6;-1:-1:-1;;;;;27025:15:0;;;583:6;;27025:15;;;;:32;;-1:-1:-1;556:7:0;583:6;-1:-1:-1;;;;;27044:13:0;;;583:6;;27044:13;;27025:32;:52;;;;-1:-1:-1;;;;;;27061:16:0;;;;27025:52;:66;;;;-1:-1:-1;27087:4:0;;-1:-1:-1;;;;;27081:10:0;;;27087:4;;27081:10;;27025:66;:85;;;;-1:-1:-1;27101:9:0;;-1:-1:-1;;;;;27095:15:0;;;27101:9;;27095:15;;27025:85;27021:312;;;27136:6;27131:187;27152:1;27148;:5;27131:187;;;27202:18;;:25;;27225:1;27202:22;:25::i;:::-;27186:12;:41;27183:116;;;-1:-1:-1;;;;;27256:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;27256:19:0;27271:4;27256:19;;;27183:116;27155:3;;;;:::i;:::-;;;;27131:187;;;;27021:312;27357:15;;;;;;;27354:331;;;27416:14;27427:2;27416:10;:14::i;:::-;27415:15;:44;;;;-1:-1:-1;;;;;;27434:25:0;;;;;;:19;:25;;;;;;;;27415:44;:109;;;;27481:16;27492:4;27481:10;:16::i;:::-;27480:17;:44;;;;-1:-1:-1;;;;;;27501:23:0;;;;;;:19;:23;;;;;;;;27480:44;27415:174;;;;27546:16;27557:4;27546:10;:16::i;:::-;:43;;;;-1:-1:-1;;;;;;27566:23:0;;;;;;:19;:23;;;;;;;;27546:43;27415:239;;;;27611:14;27622:2;27611:10;:14::i;:::-;:43;;;;-1:-1:-1;;;;;;27629:25:0;;;;;;:19;:25;;;;;;;;27611:43;27389:284;;;;;;27695:25;27723:36;27743:15;;27723;;:19;;:36;;;;:::i;:::-;27695:64;;27770:28;27801:24;27819:4;27801:9;:24::i;:::-;27891:10;;27917:16;;27770:55;;-1:-1:-1;27867:34:0;;;;27917:16;;;;;27916:17;:41;;;;-1:-1:-1;27937:20:0;;;;;;;27916:41;:69;;;;-1:-1:-1;27971:9:0;;27984:1;;27961:20;;-1:-1:-1;;;;;27971:9:0;27961;:20::i;:::-;:24;27916:69;:94;;;;;28009:1;27989:17;:21;27916:94;:116;;;;-1:-1:-1;;;;;;28015:17:0;;;;;;:13;:17;;;;;;;;28014:18;27916:116;:140;;;;-1:-1:-1;;;;;;28037:19:0;;;;;;:13;:19;;;;;;;;28036:20;27916:140;:159;;;;-1:-1:-1;28066:9:0;;-1:-1:-1;;;;;28060:15:0;;;28066:9;;28060:15;27916:159;:186;;;;;28079:23;27916:186;27912:237;;;28119:14;:12;:14::i;:::-;-1:-1:-1;;;;;28163:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;28186:17:0;;;;;;:13;:17;;;;;;;;28163:40;28159:1118;;;28235:1;28220:12;:16;;;28251:12;:16;;;28299:30;;28235:1;28299:16;:30::i;:::-;28282:14;:47;28159:1118;;;28374:9;;-1:-1:-1;;;;;28366:17:0;;;28374:9;;28366:17;28362:904;;;28419:15;;28404:12;:30;;;28468:15;;28453:12;:30;;;28519:36;;28419:15;28519:19;:36::i;28362:904::-;28586:9;;-1:-1:-1;;;;;28580:15:0;;;28586:9;;28580:15;28576:690;;;28631:16;;28616:12;:31;;;28681:16;;28666:12;:31;;;28733:38;;28631:16;28733:20;:38::i;:::-;28716:14;:55;-1:-1:-1;;;;;28793:14:0;;;;;;:8;:14;;;;;;;;:53;;;;;28831:15;28811:16;;:35;;28793:53;28790:227;;;28885:2;28870:12;:17;;;28925:2;28910:12;:17;;;28967:30;;28885:2;28967:16;:30::i;28790:227::-;28576:690;;;-1:-1:-1;;;;;29065:14:0;;;;;;:8;:14;;;;;;;;29064:15;;:54;;;29103:15;29083:16;;:35;;29064:54;29056:124;;;;-1:-1:-1;;;29056:124:0;;19726:2:1;29056:124:0;;;19708:21:1;19765:2;19745:18;;;19738:30;19804:34;19784:18;;;19777:62;19875:27;19855:18;;;19848:55;19920:19;;29056:124:0;19524:421:1;29056:124:0;29214:1;29199:12;:16;;;29234:12;:16;28576:690;29287:31;29301:4;29307:2;29311:6;29287:13;:31::i;:::-;26365:2961;;;26288:3038;;;:::o;3025:206::-;3111:7;3172:12;3164:6;;;;3156:29;;;;-1:-1:-1;;;3156:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3207:5:0;;;3025:206::o;23528:353::-;-1:-1:-1;;;;;23627:19:0;;23619:72;;;;-1:-1:-1;;;23619:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23710:21:0;;23702:72;;;;-1:-1:-1;;;23702:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23785:22:0;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;:40;;;23841:32;;3753:25:1;;;23841:32:0;;3726:18:1;23841:32:0;;;;;;;;23528:353;;;:::o;2505:98::-;2563:7;2590:5;2594:1;2590;:5;:::i;30917:369::-;31038:11;;30999:65;;31023:4;;-1:-1:-1;;;;;31038:11:0;31052;30999:15;:65::i;:::-;31075:11;;31221:16;;31075:203;;-1:-1:-1;;;31075:203:0;;31143:4;31075:203;;;20432:34:1;20482:18;;;20475:34;;;31075:11:0;20525:18:1;;;20518:34;;;20568:18;;;20561:34;-1:-1:-1;;;;;31221:16:0;;;20611:19:1;;;20604:44;31252:15:0;20664:19:1;;;20657:35;31075:11:0;;;:27;;31110:9;;20366:19:1;;31075:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30917:369;;:::o;29332:1106::-;19943:16;:23;;-1:-1:-1;;19943:23:0;;;;;;29414:24:::1;29432:4;29414:9;:24::i;:::-;29388:50;;29449:25;29477:36;29497:15;;29477;;:19;;:36;;;;:::i;:::-;29449:64;;29524:27;29554:22;29574:1;29554:15;;:19;;:22;;;;:::i;:::-;29524:52:::0;-1:-1:-1;29587:26:0::1;29616:40;:15:::0;29524:52;29616:19:::1;:40::i;:::-;29587:69:::0;-1:-1:-1;29695:21:0::1;29727:36;29587:69:::0;29727:16:::1;:36::i;:::-;29775:18;29796:44;:21;29822:17:::0;29796:25:::1;:44::i;:::-;29775:65;;29851:23;29877:54;29913:17;29877:31;29892:15;;29877:10;:14;;:31;;;;:::i;:54::-;29851:80:::0;-1:-1:-1;29942:23:0::1;29968:31;:10:::0;29851:80;29968:14:::1;:31::i;:::-;30028:1;30010:15;:19:::0;;;30040:15:::1;:19:::0;;;30096:16:::1;::::0;30088:58:::1;::::0;29942:57;;-1:-1:-1;30028:1:0;;-1:-1:-1;;;;;30096:16:0;;::::1;::::0;30126:15;;30028:1;30088:58;30028:1;30088:58;30126:15;30096:16;30088:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30070:76;;;30160:15;30179:1;30160:20;;:48;;;;-1:-1:-1::0;30184:24:0;;::::1;30160:48;30157:130;;;30225:50;30238:19;30259:15;30225:12;:50::i;:::-;30324:8;30300:21;:32;30297:134;;;30369:10;::::0;30361:58:::1;::::0;-1:-1:-1;;;;;30369:10:0;;::::1;::::0;30393:21:::1;::::0;30361:58:::1;::::0;;;30393:21;30369:10;30361:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;30348:71:0;;-1:-1:-1;;30297:134:0::1;-1:-1:-1::0;;19989:16:0;:24;;-1:-1:-1;;19989:24:0;;;-1:-1:-1;;;;;;;29332:1106:0:o;31665:673::-;31760:14;;:19;31757:574;;31795:17;31815:20;31828:6;31815:12;:20::i;:::-;31795:40;-1:-1:-1;31850:22:0;31875:21;:6;31795:40;31875:10;:21::i;:::-;31850:46;;31911:25;31926:9;31911:14;:25::i;:::-;-1:-1:-1;;;;;31951:20:0;;;;;;:12;:20;;;;;:30;;31975:6;;31951:20;:30;;31975:6;;31951:30;:::i;:::-;;;;-1:-1:-1;;;;;;;31996:23:0;;;;;;:12;:23;;;;;:41;;32023:14;;31996:23;:41;;32023:14;;31996:41;:::i;:::-;;;;-1:-1:-1;;32073:4:0;32052:27;;;;:12;:27;;;;;:40;;32083:9;;32052:27;:40;;32083:9;;32052:40;:::i;:::-;;;;;;;;32129:9;-1:-1:-1;;;;;32112:43:0;32121:6;-1:-1:-1;;;;;32112:43:0;;32140:14;32112:43;;;;3753:25:1;;3741:2;3726:18;;3607:177;32112:43:0;;;;;;;;31780:387;;31665:673;;;:::o;31757:574::-;-1:-1:-1;;;;;32186:20:0;;;;;;:12;:20;;;;;:30;;32210:6;;32186:20;:30;;32210:6;;32186:30;:::i;:::-;;;;-1:-1:-1;;;;;;;32231:23:0;;;;;;:12;:23;;;;;:33;;32258:6;;32231:23;:33;;32258:6;;32231:33;:::i;:::-;;;;;;;;32301:9;-1:-1:-1;;;;;32284:35:0;32293:6;-1:-1:-1;;;;;32284:35:0;;32312:6;32284:35;;;;3753:25:1;;3741:2;3726:18;;3607:177;2609:98:0;2667:7;2694:5;2698:1;2694;:5;:::i;30444:467::-;30535:16;;;30549:1;30535:16;;;;;;;;30511:21;;30535:16;;;;;;;;;;-1:-1:-1;30535:16:0;30511:40;;30580:4;30562;30567:1;30562:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30562:23:0;;;:7;;;;;;;;;;:23;;;;30606:11;;:18;;;-1:-1:-1;;;30606:18:0;;;;:11;;;;;:16;;:18;;;;;30562:7;;30606:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30596:4;30601:1;30596:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30596:28:0;;;:7;;;;;;;;;:28;30674:11;;30635:65;;30659:4;;30674:11;30688;30635:15;:65::i;:::-;30711:11;;:192;;-1:-1:-1;;;30711:192:0;;-1:-1:-1;;;;;30711:11:0;;;;:62;;:192;;30788:11;;30711;;30830:4;;30857;;30877:15;;30711:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31292:147;31353:7;31380:51;31427:3;31380:42;31391:30;31408:12;;31391;;:16;;:30;;;;:::i;:::-;31380:6;;:10;:42::i;31445:214::-;31527:47;31559:14;;31527:27;31541:12;;31527:9;:13;;:27;;;;:::i;:47::-;31508:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;31636:14:0;;31618:12;;31604:47;;31636:14;31604:27;;:9;;:13;:27::i;:47::-;31585:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;31445:214:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1264:127::-;1325:10;1320:3;1316:20;1313:1;1306:31;1356:4;1353:1;1346:15;1380:4;1377:1;1370:15;1396:275;1467:2;1461:9;1532:2;1513:13;;-1:-1:-1;;1509:27:1;1497:40;;1567:18;1552:34;;1588:22;;;1549:62;1546:88;;;1614:18;;:::i;:::-;1650:2;1643:22;1396:275;;-1:-1:-1;1396:275:1:o;1676:183::-;1736:4;1769:18;1761:6;1758:30;1755:56;;;1791:18;;:::i;:::-;-1:-1:-1;1836:1:1;1832:14;1848:4;1828:25;;1676:183::o;1864:737::-;1918:5;1971:3;1964:4;1956:6;1952:17;1948:27;1938:55;;1989:1;1986;1979:12;1938:55;2025:6;2012:20;2051:4;2075:60;2091:43;2131:2;2091:43;:::i;:::-;2075:60;:::i;:::-;2169:15;;;2255:1;2251:10;;;;2239:23;;2235:32;;;2200:12;;;;2279:15;;;2276:35;;;2307:1;2304;2297:12;2276:35;2343:2;2335:6;2331:15;2355:217;2371:6;2366:3;2363:15;2355:217;;;2451:3;2438:17;2468:31;2493:5;2468:31;:::i;:::-;2512:18;;2550:12;;;;2388;;2355:217;;;-1:-1:-1;2590:5:1;1864:737;-1:-1:-1;;;;;;1864:737:1:o;2606:348::-;2690:6;2743:2;2731:9;2722:7;2718:23;2714:32;2711:52;;;2759:1;2756;2749:12;2711:52;2799:9;2786:23;2832:18;2824:6;2821:30;2818:50;;;2864:1;2861;2854:12;2818:50;2887:61;2940:7;2931:6;2920:9;2916:22;2887:61;:::i;2959:247::-;3018:6;3071:2;3059:9;3050:7;3046:23;3042:32;3039:52;;;3087:1;3084;3077:12;3039:52;3126:9;3113:23;3145:31;3170:5;3145:31;:::i;3789:160::-;3854:20;;3910:13;;3903:21;3893:32;;3883:60;;3939:1;3936;3929:12;3954:180;4010:6;4063:2;4051:9;4042:7;4038:23;4034:32;4031:52;;;4079:1;4076;4069:12;4031:52;4102:26;4118:9;4102:26;:::i;4139:456::-;4216:6;4224;4232;4285:2;4273:9;4264:7;4260:23;4256:32;4253:52;;;4301:1;4298;4291:12;4253:52;4340:9;4327:23;4359:31;4384:5;4359:31;:::i;:::-;4409:5;-1:-1:-1;4466:2:1;4451:18;;4438:32;4479:33;4438:32;4479:33;:::i;:::-;4139:456;;4531:7;;-1:-1:-1;;;4585:2:1;4570:18;;;;4557:32;;4139:456::o;4789:315::-;4854:6;4862;4915:2;4903:9;4894:7;4890:23;4886:32;4883:52;;;4931:1;4928;4921:12;4883:52;4970:9;4957:23;4989:31;5014:5;4989:31;:::i;:::-;5039:5;-1:-1:-1;5063:35:1;5094:2;5079:18;;5063:35;:::i;:::-;5053:45;;4789:315;;;;;:::o;5317:180::-;5376:6;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;-1:-1:-1;5468:23:1;;5317:180;-1:-1:-1;5317:180:1:o;5502:1206::-;5629:6;5637;5645;5698:2;5686:9;5677:7;5673:23;5669:32;5666:52;;;5714:1;5711;5704:12;5666:52;5754:9;5741:23;5783:18;5824:2;5816:6;5813:14;5810:34;;;5840:1;5837;5830:12;5810:34;5863:61;5916:7;5907:6;5896:9;5892:22;5863:61;:::i;:::-;5853:71;;5943:2;5933:12;;5998:2;5987:9;5983:18;5970:32;6027:2;6017:8;6014:16;6011:36;;;6043:1;6040;6033:12;6011:36;6066:24;;;-1:-1:-1;6121:4:1;6113:13;;6109:27;-1:-1:-1;6099:55:1;;6150:1;6147;6140:12;6099:55;6186:2;6173:16;6209:60;6225:43;6265:2;6225:43;:::i;6209:60::-;6303:15;;;6385:1;6381:10;;;;6373:19;;6369:28;;;6334:12;;;;6409:19;;;6406:39;;;6441:1;6438;6431:12;6406:39;6465:11;;;;6485:142;6501:6;6496:3;6493:15;6485:142;;;6567:17;;6555:30;;6518:12;;;;6605;;;;6485:142;;;5502:1206;;6646:5;;-1:-1:-1;;;;6698:2:1;6683:18;;;;6670:32;;-1:-1:-1;;;5502:1206:1:o;6948:385::-;7034:6;7042;7050;7058;7111:3;7099:9;7090:7;7086:23;7082:33;7079:53;;;7128:1;7125;7118:12;7079:53;-1:-1:-1;;7151:23:1;;;7221:2;7206:18;;7193:32;;-1:-1:-1;7272:2:1;7257:18;;7244:32;;7323:2;7308:18;7295:32;;-1:-1:-1;6948:385:1;-1:-1:-1;6948:385:1:o;7338:388::-;7406:6;7414;7467:2;7455:9;7446:7;7442:23;7438:32;7435:52;;;7483:1;7480;7473:12;7435:52;7522:9;7509:23;7541:31;7566:5;7541:31;:::i;:::-;7591:5;-1:-1:-1;7648:2:1;7633:18;;7620:32;7661:33;7620:32;7661:33;:::i;:::-;7713:7;7703:17;;;7338:388;;;;;:::o;7731:248::-;7799:6;7807;7860:2;7848:9;7839:7;7835:23;7831:32;7828:52;;;7876:1;7873;7866:12;7828:52;-1:-1:-1;;7899:23:1;;;7969:2;7954:18;;;7941:32;;-1:-1:-1;7731:248:1:o;7984:404::-;8186:2;8168:21;;;8225:2;8205:18;;;8198:30;8264:34;8259:2;8244:18;;8237:62;-1:-1:-1;;;8330:2:1;8315:18;;8308:38;8378:3;8363:19;;7984:404::o;8393:402::-;8595:2;8577:21;;;8634:2;8614:18;;;8607:30;8673:34;8668:2;8653:18;;8646:62;-1:-1:-1;;;8739:2:1;8724:18;;8717:36;8785:3;8770:19;;8393:402::o;8800:401::-;9002:2;8984:21;;;9041:2;9021:18;;;9014:30;9080:34;9075:2;9060:18;;9053:62;-1:-1:-1;;;9146:2:1;9131:18;;9124:35;9191:3;9176:19;;8800:401::o;9206:127::-;9267:10;9262:3;9258:20;9255:1;9248:31;9298:4;9295:1;9288:15;9322:4;9319:1;9312:15;9338:127;9399:10;9394:3;9390:20;9387:1;9380:31;9430:4;9427:1;9420:15;9454:4;9451:1;9444:15;9470:135;9509:3;-1:-1:-1;;9530:17:1;;9527:43;;;9550:18;;:::i;:::-;-1:-1:-1;9597:1:1;9586:13;;9470:135::o;9610:422::-;9699:1;9742:5;9699:1;9756:270;9777:7;9767:8;9764:21;9756:270;;;9836:4;9832:1;9828:6;9824:17;9818:4;9815:27;9812:53;;;9845:18;;:::i;:::-;9895:7;9885:8;9881:22;9878:55;;;9915:16;;;;9878:55;9994:22;;;;9954:15;;;;9756:270;;;9760:3;9610:422;;;;;:::o;10037:806::-;10086:5;10116:8;10106:80;;-1:-1:-1;10157:1:1;10171:5;;10106:80;10205:4;10195:76;;-1:-1:-1;10242:1:1;10256:5;;10195:76;10287:4;10305:1;10300:59;;;;10373:1;10368:130;;;;10280:218;;10300:59;10330:1;10321:10;;10344:5;;;10368:130;10405:3;10395:8;10392:17;10389:43;;;10412:18;;:::i;:::-;-1:-1:-1;;10468:1:1;10454:16;;10483:5;;10280:218;;10582:2;10572:8;10569:16;10563:3;10557:4;10554:13;10550:36;10544:2;10534:8;10531:16;10526:2;10520:4;10517:12;10513:35;10510:77;10507:159;;;-1:-1:-1;10619:19:1;;;10651:5;;10507:159;10698:34;10723:8;10717:4;10698:34;:::i;:::-;10768:6;10764:1;10760:6;10756:19;10747:7;10744:32;10741:58;;;10779:18;;:::i;:::-;10817:20;;10037:806;-1:-1:-1;;;10037:806:1:o;10848:140::-;10906:5;10935:47;10976:4;10966:8;10962:19;10956:4;10935:47;:::i;10993:168::-;11033:7;11099:1;11095;11091:6;11087:14;11084:1;11081:21;11076:1;11069:9;11062:17;11058:45;11055:71;;;11106:18;;:::i;:::-;-1:-1:-1;11146:9:1;;10993:168::o;11879:251::-;11949:6;12002:2;11990:9;11981:7;11977:23;11973:32;11970:52;;;12018:1;12015;12008:12;11970:52;12050:9;12044:16;12069:31;12094:5;12069:31;:::i;13629:184::-;13699:6;13752:2;13740:9;13731:7;13727:23;13723:32;13720:52;;;13768:1;13765;13758:12;13720:52;-1:-1:-1;13791:16:1;;13629:184;-1:-1:-1;13629:184:1:o;13818:217::-;13858:1;13884;13874:132;;13928:10;13923:3;13919:20;13916:1;13909:31;13963:4;13960:1;13953:15;13991:4;13988:1;13981:15;13874:132;-1:-1:-1;14020:9:1;;13818:217::o;19950:128::-;19990:3;20021:1;20017:6;20014:1;20011:13;20008:39;;;20027:18;;:::i;:::-;-1:-1:-1;20063:9:1;;19950:128::o;20703:306::-;20791:6;20799;20807;20860:2;20848:9;20839:7;20835:23;20831:32;20828:52;;;20876:1;20873;20866:12;20828:52;20905:9;20899:16;20889:26;;20955:2;20944:9;20940:18;20934:25;20924:35;;20999:2;20988:9;20984:18;20978:25;20968:35;;20703:306;;;;;:::o;21014:125::-;21054:4;21082:1;21079;21076:8;21073:34;;;21087:18;;:::i;:::-;-1:-1:-1;21124:9:1;;21014:125::o;21144:980::-;21406:4;21454:3;21443:9;21439:19;21485:6;21474:9;21467:25;21511:2;21549:6;21544:2;21533:9;21529:18;21522:34;21592:3;21587:2;21576:9;21572:18;21565:31;21616:6;21651;21645:13;21682:6;21674;21667:22;21720:3;21709:9;21705:19;21698:26;;21759:2;21751:6;21747:15;21733:29;;21780:1;21790:195;21804:6;21801:1;21798:13;21790:195;;;21869:13;;-1:-1:-1;;;;;21865:39:1;21853:52;;21960:15;;;;21925:12;;;;21901:1;21819:9;21790:195;;;-1:-1:-1;;;;;;;22041:32:1;;;;22036:2;22021:18;;22014:60;-1:-1:-1;;;22105:3:1;22090:19;22083:35;22002:3;21144:980;-1:-1:-1;;;21144:980:1:o

Swarm Source

ipfs://c205c5f29cc35150c3bc4418a5d34f505319a1ae9552727ee3b965a8ec37d588
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.