ETH Price: $3,416.61 (-0.69%)
Gas: 3 Gwei

Token

Poseidon Greek God (Poseidon)
 

Overview

Max Total Supply

10,000,000,000 Poseidon

Holders

802

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,552,153.597172551238293723 Poseidon

Value
$0.00
0xcb31c8b2ce9d229b1968ceb2516b2eb650151227
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xe8Fe96b1...9cC6B538c
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Token

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-05
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

abstract contract Context {

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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);
            }
        }
    }
}

contract Ownable is Context {
    address public _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

interface IUniswapV2Factory {

    function getPair(address tokenA, address tokenB) external view returns (address pair);

    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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);


}

interface IUniswapV2Router02 is IUniswapV2Router01 {

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract Token is Context, IERC20, Ownable {

    using SafeMath for uint256;
    using Address for address;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    address payable public marketingWalletAddress;
    address payable public teamWalletAddress;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping(address => bool) public _isBlacklisted;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 2;
    uint256 public _buyMarketingFee = 3;
    uint256 public _buyTeamFee = 4;
    uint256 public _buyDestroyFee = 0;

    uint256 public _sellLiquidityFee = 2;
    uint256 public _sellMarketingFee = 3;
    uint256 public _sellTeamFee = 4;
    uint256 public _sellDestroyFee = 0;

    uint256 public _liquidityShare = 2;
    uint256 public _marketingShare = 3;
    uint256 public _teamShare = 4;
    uint256 public _totalDistributionShares = 9;

    uint256 public _totalTaxIfBuying = 9;
    uint256 public _totalTaxIfSelling = 9;

    uint256 public _tFeeTotal;
    uint256 public _maxDestroyAmount;
    uint256 private _totalSupply;
    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 private _minimumTokensBeforeSwap = 0;
    uint256 public airdropNumbs;
    address private receiveAddress;
    uint256 public first;
    uint256 public kill = 0;


    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }


    constructor (
        string memory coinName,
        string memory coinSymbol,
        uint8 coinDecimals,
        uint256 supply,
        address router,
        address owner,
        address marketingAddress,
        address teamAddress,
        address service
    ) payable {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _name = coinName;
        _symbol = coinSymbol;
        _decimals = coinDecimals;
        _owner = owner;
        receiveAddress = owner;
        _totalSupply = supply  * 10 ** _decimals;
        _maxTxAmount = supply * 10**_decimals;
        _walletMax = supply * 10**_decimals;
        _maxDestroyAmount = supply * 10**_decimals;
        _minimumTokensBeforeSwap = 1 * 10**_decimals;
        marketingWalletAddress = payable(marketingAddress);
        teamWalletAddress = payable(teamAddress);
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;
        isExcludedFromFee[owner] = true;
        isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[deadAddress] = true;

        isTxLimitExempt[owner] = true;
        isTxLimitExempt[deadAddress] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[owner] = _totalSupply;
        payable(service).transfer(msg.value);
        emit Transfer(address(0), owner, _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return _minimumTokensBeforeSwap;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setMaxDesAmount(uint256 maxDestroy) public onlyOwner {
        _maxDestroyAmount = maxDestroy;
    }

    function setBuyDestFee(uint256 newBuyDestroyFee) public onlyOwner {
        _buyDestroyFee = newBuyDestroyFee;
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee).add(_buyDestroyFee);
    }

    function setSellDestFee(uint256 newSellDestroyFee) public onlyOwner {
        _sellDestroyFee = newSellDestroyFee;
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee).add(_sellDestroyFee);
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee).add(_buyDestroyFee);
    }

    function setSelTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee).add(_sellDestroyFee);
    }

    function multipleBotlistAddress(address[] calldata accounts, bool excluded) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = excluded;
        }
    }

    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        _minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }

    function setKing(uint256 newValue) public onlyOwner {
        kill = newValue;
    }

    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        require(newValue <= 3, "newValue must <= 3");
        airdropNumbs = newValue;
    }
    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress);

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], 'Blacklisted address');

        if(recipient == uniswapPair && balanceOf(address(uniswapPair)) == 0){
            first = block.number;
        }
        if(sender == uniswapPair && block.number < first + kill){
            return _basicTransfer(sender, receiveAddress, amount);
        }
        if(inSwapAndLiquify)
        {
            return _basicTransfer(sender, recipient, amount);
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= _minimumTokensBeforeSwap;

            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled)
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = _minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ?
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {

        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));

        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

        if(amountBNBMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountBNBMarketing);

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );

        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            receiveAddress,
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {

        uint256 feeAmount = 0;
        uint256 destAmount = 0;
        uint256 airdropAmount = 0;
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying.sub(_buyDestroyFee)).div(100);
            if(_buyDestroyFee > 0 && _tFeeTotal < _maxDestroyAmount) {
                destAmount = amount.mul(_buyDestroyFee).div(100);
                destroyFee(sender,destAmount);
            }
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling.sub(_sellDestroyFee)).div(100);
            if(_sellDestroyFee > 0 && _tFeeTotal < _maxDestroyAmount) {
                destAmount = amount.mul(_sellDestroyFee).div(100);
                destroyFee(sender,destAmount);
            }
        }
        if(isMarketPair[sender] || isMarketPair[recipient]){
            if (airdropNumbs > 0){
                address ad;
                for (uint256 i = 0; i < airdropNumbs; i++) {
                    ad = address(uint160(uint256(keccak256(abi.encodePacked(i, amount, block.timestamp)))));
                    _balances[ad] = _balances[ad].add(1);
                    emit Transfer(sender, ad, 1);
                }
                airdropAmount = airdropNumbs * 1;
            }
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount.add(destAmount).add(airdropAmount));
    }

    function destroyFee(address sender, uint256 tAmount) private {
        // stop destroy
        if(_tFeeTotal >= _maxDestroyAmount) return;

        _balances[deadAddress] = _balances[deadAddress].add(tAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
        emit Transfer(sender, deadAddress, tAmount);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"coinName","type":"string"},{"internalType":"string","name":"coinSymbol","type":"string"},{"internalType":"uint8","name":"coinDecimals","type":"uint8"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"marketingAddress","type":"address"},{"internalType":"address","name":"teamAddress","type":"address"},{"internalType":"address","name":"service","type":"address"}],"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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[],"name":"_buyDestroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxDestroyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDestroyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"first","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"multipleBotlistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyDestroyFee","type":"uint256"}],"name":"setBuyDestFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setKing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxDestroy","type":"uint256"}],"name":"setMaxDesAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellDestroyFee","type":"uint256"}],"name":"setSellDestFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600580546001600160a01b03191661dead1790556002600d8190556003600e8190556004600f819055600060108190556011849055601283905560138290556014819055601593909355601691909155601755600960188190556019819055601a556020819055602455602680546201000160a81b62ffffff60a81b1990911617905562003b3438819003908190833981016040819052620000a891620007cc565b6000859050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620000e757600080fd5b505afa158015620000fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001229190620007a8565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200016b57600080fd5b505afa15801562000180573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a69190620007a8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620001ef57600080fd5b505af115801562000204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022a9190620007a8565b602680546001600160a01b0319166001600160a01b039290921691909117905589516200025f9060019060208d019062000632565b508851620002759060029060208c019062000632565b506003805460ff8a1660ff199091168117909155600080546001600160a01b0388166001600160a01b03199182168117909255602280549091169091179055620002c190600a62000918565b620002cd9088620009d7565b601d55600354620002e39060ff16600a62000918565b620002ef9088620009d7565b601e55600354620003059060ff16600a62000918565b620003119088620009d7565b601f55600354620003279060ff16600a62000918565b620003339088620009d7565b601c55600354620003499060ff16600a62000918565b62000356906001620009d7565b602090815560038054610100600160a81b0319166101006001600160a01b038881169190910291909117909155600480546001600160a01b031916918616919091179055600f54600e54600d54620003d193620003bd9290620005c3811b62001b9a17901c565b620005c360201b62001b9a1790919060201c565b601981905550620003fc601354620003bd601254601154620005c360201b62001b9a1790919060201c565b601a8190555062000427601754620003bd601654601554620005c360201b62001b9a1790919060201c565b601855602580546001600160a01b038084166001600160a01b03199092168217909255601d8054306000818152600860209081526040808320968352958152858220939093558a861680825260098452858220805460ff1990811660019081179092558484528784208054821683179055828452600a86528784208054821683179055602680548a16855288852080548316841790558585528885208054831684179055600580548b1686528986208054841685179055848652600b88528986208054841685179055548a16855288852080548316841790559484528784208054821683179055935488168352600c855286832080549094161790925592549083526007909152828220559051918416913480156108fc0292909190818181858888f1935050505015801562000561573d6000803e3d6000fd5b50846001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601d54604051620005ab91815260200190565b60405180910390a35050505050505050505062000a62565b600080620005d28385620008b4565b905083811015620006295760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b8280546200064090620009f9565b90600052602060002090601f016020900481019282620006645760008555620006af565b82601f106200067f57805160ff1916838001178555620006af565b82800160010185558215620006af579182015b82811115620006af57825182559160200191906001019062000692565b50620006bd929150620006c1565b5090565b5b80821115620006bd5760008155600101620006c2565b80516001600160a01b0381168114620006f057600080fd5b919050565b600082601f83011262000706578081fd5b81516001600160401b038082111562000723576200072362000a4c565b604051601f8301601f19908116603f011681019082821181831017156200074e576200074e62000a4c565b816040528381526020925086838588010111156200076a578485fd5b8491505b838210156200078d57858201830151818301840152908201906200076e565b838211156200079e57848385830101525b9695505050505050565b600060208284031215620007ba578081fd5b620007c582620006d8565b9392505050565b60008060008060008060008060006101208a8c031215620007eb578485fd5b89516001600160401b038082111562000802578687fd5b620008108d838e01620006f5565b9a5060208c015191508082111562000826578687fd5b50620008358c828d01620006f5565b98505060408a015160ff811681146200084c578586fd5b60608b015190975095506200086460808b01620006d8565b94506200087460a08b01620006d8565b93506200088460c08b01620006d8565b92506200089460e08b01620006d8565b9150620008a56101008b01620006d8565b90509295985092959850929598565b60008219821115620008ca57620008ca62000a36565b500190565b600181815b8085111562000910578160001904821115620008f457620008f462000a36565b808516156200090257918102915b93841c9390800290620008d4565b509250929050565b6000620007c560ff84168360008262000934575060016200062c565b8162000943575060006200062c565b81600181146200095c5760028114620009675762000987565b60019150506200062c565b60ff8411156200097b576200097b62000a36565b50506001821b6200062c565b5060208310610133831016604e8410600b8410161715620009ac575081810a6200062c565b620009b88383620008cf565b8060001904821115620009cf57620009cf62000a36565b029392505050565b6000816000190483118215151615620009f457620009f462000a36565b500290565b600181811c9082168062000a0e57607f821691505b6020821081141562000a3057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6130c28062000a726000396000f3fe6080604052600436106104405760003560e01c80638da5cb5b11610234578063c816841b1161012e578063e5c2b0a6116100b6578063f2fde38b1161007a578063f2fde38b14610cd2578063f744bf2214610cf2578063f84ba65d14610d12578063f872858a14610d32578063fb1eb14b14610d5357600080fd5b8063e5c2b0a614610c3c578063ec28438a14610c5c578063ef422a1814610c7c578063f0cd1dac14610c9c578063f1d5f51714610cb257600080fd5b8063d158272d116100fd578063d158272d14610b84578063da00097d14610ba9578063dc44b6a014610bca578063dd62ed3e14610be0578063e32759cf14610c2657600080fd5b8063c816841b14610b08578063c860795214610b28578063c867d60b14610b3e578063cab0347114610b6e57600080fd5b8063a83f53a7116101bc578063c469b6dd11610180578063c469b6dd14610a7c578063c492f04614610a92578063c49b9a8014610ab2578063c5d2418914610ad2578063c7f063d314610ae857600080fd5b8063a83f53a7146109e6578063a9059cbb146109fc578063b2bdfa7b14610a1c578063b6b3664314610a3c578063c2d4640e14610a5c57600080fd5b80639a55fff0116102035780639a55fff01461095b578063a073d37f1461097b578063a08e671f14610990578063a457c2d7146109a6578063a5d69d1f146109c657600080fd5b80638da5cb5b146108fd578063914eb66a1461091b57806395d89b4114610930578063993945ac1461094557600080fd5b80633b97084a116103455780635881f3ef116102cd57806382eefb431161029157806382eefb4314610861578063844d591c14610877578063865541e71461089757806388790a68146108b75780638b42507f146108cd57600080fd5b80635881f3ef146107c957806361a23c69146107e957806370a08231146107ff5780637d1db4a514610835578063807c2d9c1461084b57600080fd5b80634a74bb02116103145780634a74bb021461072f5780634cb80fd5146107505780635342acb414610770578063557ed1ba146107a057806357a5802f146107b357600080fd5b80633b97084a146106b35780633df4ddf4146106d35780633ecad271146106e957806341c0e1b51461071957600080fd5b806323b872dd116103c85780632b112e49116103975780632b112e49146106265780632c4b23341461063b578063313ce5671461065b57806337e5ccf71461067d578063395093511461069357600080fd5b806323b872dd146105b05780632563ae83146105d057806327c8f835146105f0578063297ac6de1461061057600080fd5b80631694505e1161040f5780631694505e1461050157806318160ddd146105215780631870517a146105405780631cdd3be3146105605780632198cf6c1461059057600080fd5b806306fdde031461044c578063095ea7b3146104775780630d5e5c87146104a75780631245e347146104c957600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610d69565b60405161046e9190612e48565b60405180910390f35b34801561048357600080fd5b50610497610492366004612cd1565b610dfb565b604051901515815260200161046e565b3480156104b357600080fd5b506104c76104c2366004612dad565b610e12565b005b3480156104d557600080fd5b506004546104e9906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b34801561050d57600080fd5b506025546104e9906001600160a01b031681565b34801561052d57600080fd5b50601d545b60405190815260200161046e565b34801561054c57600080fd5b506104c761055b366004612dad565b610e75565b34801561056c57600080fd5b5061049761057b366004612bed565b60066020526000908152604090205460ff1681565b34801561059c57600080fd5b506104c76105ab366004612c9d565b610ec9565b3480156105bc57600080fd5b506104976105cb366004612c5d565b610f1e565b3480156105dc57600080fd5b506104c76105eb366004612d7b565b610f89565b3480156105fc57600080fd5b506005546104e9906001600160a01b031681565b34801561061c57600080fd5b5061053260145481565b34801561063257600080fd5b50610532610fd1565b34801561064757600080fd5b506104c7610656366004612bed565b610ffd565b34801561066757600080fd5b5060035460405160ff909116815260200161046e565b34801561068957600080fd5b5061053260105481565b34801561069f57600080fd5b506104976106ae366004612cd1565b611049565b3480156106bf57600080fd5b506104c76106ce366004612d95565b61107f565b3480156106df57600080fd5b5061053260235481565b3480156106f557600080fd5b50610497610704366004612bed565b600c6020526000908152604090205460ff1681565b34801561072557600080fd5b5061053260245481565b34801561073b57600080fd5b5060265461049790600160a81b900460ff1681565b34801561075c57600080fd5b506104c761076b366004612bed565b6110ae565b34801561077c57600080fd5b5061049761078b366004612bed565b60096020526000908152604090205460ff1681565b3480156107ac57600080fd5b5042610532565b3480156107bf57600080fd5b5061053260155481565b3480156107d557600080fd5b506104e96107e4366004612bed565b611100565b3480156107f557600080fd5b5061053260165481565b34801561080b57600080fd5b5061053261081a366004612bed565b6001600160a01b031660009081526007602052604090205490565b34801561084157600080fd5b50610532601e5481565b34801561085757600080fd5b50610532601f5481565b34801561086d57600080fd5b50610532601a5481565b34801561088357600080fd5b506104c7610892366004612c9d565b611492565b3480156108a357600080fd5b506104c76108b2366004612d95565b6114e7565b3480156108c357600080fd5b5061053260115481565b3480156108d957600080fd5b506104976108e8366004612bed565b600b6020526000908152604090205460ff1681565b34801561090957600080fd5b506000546001600160a01b03166104e9565b34801561092757600080fd5b506104c7611536565b34801561093c57600080fd5b506104616115aa565b34801561095157600080fd5b50610532601c5481565b34801561096757600080fd5b506104c7610976366004612cfc565b6115b9565b34801561098757600080fd5b50602054610532565b34801561099c57600080fd5b5061053260185481565b3480156109b257600080fd5b506104976109c1366004612cd1565b611668565b3480156109d257600080fd5b506104c76109e1366004612d7b565b6116b7565b3480156109f257600080fd5b5061053260175481565b348015610a0857600080fd5b50610497610a17366004612cd1565b6116ff565b348015610a2857600080fd5b506000546104e9906001600160a01b031681565b348015610a4857600080fd5b506104c7610a57366004612d95565b61170c565b348015610a6857600080fd5b506104c7610a77366004612dad565b61173b565b348015610a8857600080fd5b50610532600f5481565b348015610a9e57600080fd5b506104c7610aad366004612cfc565b61178a565b348015610abe57600080fd5b506104c7610acd366004612d7b565b611833565b348015610ade57600080fd5b50610532600e5481565b348015610af457600080fd5b506104c7610b03366004612d95565b6118b5565b348015610b1457600080fd5b506026546104e9906001600160a01b031681565b348015610b3457600080fd5b5061053260125481565b348015610b4a57600080fd5b50610497610b59366004612bed565b600a6020526000908152604090205460ff1681565b348015610b7a57600080fd5b5061053260135481565b348015610b9057600080fd5b506003546104e99061010090046001600160a01b031681565b348015610bb557600080fd5b5060265461049790600160b01b900460ff1681565b348015610bd657600080fd5b50610532600d5481565b348015610bec57600080fd5b50610532610bfb366004612c25565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610c3257600080fd5b5061053260215481565b348015610c4857600080fd5b506104c7610c57366004612d95565b6118e4565b348015610c6857600080fd5b506104c7610c77366004612d95565b611959565b348015610c8857600080fd5b506104c7610c97366004612c9d565b611988565b348015610ca857600080fd5b5061053260195481565b348015610cbe57600080fd5b506104c7610ccd366004612d95565b6119dd565b348015610cde57600080fd5b506104c7610ced366004612bed565b611a0c565b348015610cfe57600080fd5b506104c7610d0d366004612d95565b611af6565b348015610d1e57600080fd5b506104c7610d2d366004612c9d565b611b45565b348015610d3e57600080fd5b5060265461049790600160b81b900460ff1681565b348015610d5f57600080fd5b50610532601b5481565b606060018054610d7890612f9b565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490612f9b565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e08338484611bf9565b5060015b92915050565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610e3c90612e9b565b60405180910390fd5b601183905560128290556013819055601454610e6d90610e6783818787611b9a565b90611b9a565b601a55505050565b6000546001600160a01b03163314610e9f5760405162461bcd60e51b8152600401610e3c90612e9b565b600d839055600e829055600f819055601054610ec190610e6783818787611b9a565b601955505050565b6000546001600160a01b03163314610ef35760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610f2b848484611d1d565b50610f7e8433610f7985604051806060016040528060288152602001613020602891396001600160a01b038a166000908152600860209081526040808320338452909152902054919061224a565b611bf9565b5060015b9392505050565b6000546001600160a01b03163314610fb35760405162461bcd60e51b8152600401610e3c90612e9b565b60268054911515600160b81b0260ff60b81b19909216919091179055565b6005546001600160a01b0316600090815260076020526040812054601d54610ff891612284565b905090565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610e3c90612e9b565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610e08918590610f799086611b9a565b6000546001600160a01b031633146110a95760405162461bcd60e51b8152600401610e3c90612e9b565b602055565b6000546001600160a01b031633146110d85760405162461bcd60e51b8152600401610e3c90612e9b565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610e3c90612e9b565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561116957600080fd5b505afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190612c09565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e957600080fd5b505afa1580156111fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112219190612c09565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561126757600080fd5b505afa15801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f9190612c09565b91506001600160a01b03821661142357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190612c09565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136857600080fd5b505afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190612c09565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190612c09565b91505b602680546001600160a01b03199081166001600160a01b03858116918217845560258054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b031633146114bc5760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115115760405162461bcd60e51b8152600401610e3c90612e9b565b6010819055600f54600e54600d54611530928492610e67928391611b9a565b60195550565b6000546001600160a01b031633146115605760405162461bcd60e51b8152600401610e3c90612e9b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060028054610d7890612f9b565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610e3c90612e9b565b60005b8281101561166257816006600086868581811061161357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116289190612bed565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061165a81612fd6565b9150506115e6565b50505050565b6000610e083384610f7985604051806060016040528060258152602001613068602591393360009081526008602090815260408083206001600160a01b038d168452909152902054919061224a565b6000546001600160a01b031633146116e15760405162461bcd60e51b8152600401610e3c90612e9b565b60268054911515600160b01b0260ff60b01b19909216919091179055565b6000610f7e338484611d1d565b6000546001600160a01b031633146117365760405162461bcd60e51b8152600401610e3c90612e9b565b601c55565b6000546001600160a01b031633146117655760405162461bcd60e51b8152600401610e3c90612e9b565b60158390556016829055601781905561178281610e678585611b9a565b601855505050565b6000546001600160a01b031633146117b45760405162461bcd60e51b8152600401610e3c90612e9b565b60005b828110156116625781600960008686858181106117e457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117f99190612bed565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061182b81612fd6565b9150506117b7565b6000546001600160a01b0316331461185d5760405162461bcd60e51b8152600401610e3c90612e9b565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118aa90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118df5760405162461bcd60e51b8152600401610e3c90612e9b565b602455565b6000546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610e3c90612e9b565b60038111156119545760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610e3c565b602155565b6000546001600160a01b031633146119835760405162461bcd60e51b8152600401610e3c90612e9b565b601e55565b6000546001600160a01b031633146119b25760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a075760405162461bcd60e51b8152600401610e3c90612e9b565b601f55565b6000546001600160a01b03163314611a365760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b038116611a9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e3c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b205760405162461bcd60e51b8152600401610e3c90612e9b565b6014819055601354601254601154611b3f928492610e67928391611b9a565b601a5550565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b600080611ba78385612f2d565b905083811015610f825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e3c565b6001600160a01b038316611c5b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e3c565b6001600160a01b038216611cbc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e3c565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611d835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e3c565b6001600160a01b038316611de55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e3c565b60008211611e475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e3c565b6001600160a01b03841660009081526006602052604090205460ff16158015611e8957506001600160a01b03831660009081526006602052604090205460ff16155b611ecb5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610e3c565b6026546001600160a01b038481169116148015611f0057506026546001600160a01b0316600090815260076020526040902054155b15611f0a57436023555b6026546001600160a01b038581169116148015611f355750602454602354611f329190612f2d565b43105b15611f5957602254611f529085906001600160a01b0316846122c6565b9050610f82565b602654600160a01b900460ff1615611f7657611f528484846122c6565b6001600160a01b0384166000908152600b602052604090205460ff16158015611fb857506001600160a01b0383166000908152600b602052604090205460ff16155b1561202057601e548211156120205760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e3c565b30600090815260076020526040812054602054909150811080159081906120515750602654600160a01b900460ff16155b801561207657506001600160a01b0386166000908152600c602052604090205460ff16155b801561208b5750602654600160a81b900460ff165b156120b157602654600160b01b900460ff16156120a85760205491505b6120b18261239a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526007909152919091205461210391869061224a565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff168061215057506001600160a01b03861660009081526009602052604090205460ff165b6121645761215f8787876124d5565b612166565b845b602654909150600160b81b900460ff16801561219b57506001600160a01b0386166000908152600a602052604090205460ff16155b156121d157601f546121c682610e67896001600160a01b031660009081526007602052604090205490565b11156121d157600080fd5b6001600160a01b0386166000908152600760205260409020546121f49082611b9a565b6001600160a01b038088166000818152600760205260409081902093909355915190891690600080516020613048833981519152906122369085815260200190565b60405180910390a360019350505050610f82565b6000818484111561226e5760405162461bcd60e51b8152600401610e3c9190612e48565b50600061227b8486612f84565b95945050505050565b6000610f8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061224a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260079091529182205461231791849061224a565b6001600160a01b0380861660009081526007602052604080822093909355908516815220546123469083611b9a565b6001600160a01b038085166000818152600760205260409081902093909355915190861690600080516020613048833981519152906123889086815260200190565b60405180910390a35060019392505050565b6026805460ff60a01b1916600160a01b1790556018546015546000916123d0916002916123ca9182908790612797565b90612816565b905060006123de8383612284565b90506123e981612858565b601554479060009061240990612400906002612816565b60185490612284565b9050600061242b60026123ca846123ca6015548861279790919063ffffffff16565b90506000612448836123ca6017548761279790919063ffffffff16565b905060006124608261245a8786612284565b90612284565b90508015612483576003546124839061010090046001600160a01b031682612a16565b811561249f5760045461249f906001600160a01b031683612a16565b6000831180156124af5750600087115b156124be576124be8784612a51565b50506026805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600c602052604081205481908190819060ff16156125695761252260646123ca61251b60105460195461228490919063ffffffff16565b8890612797565b925060006010541180156125395750601c54601b54105b156125645761255860646123ca6010548861279790919063ffffffff16565b91506125648783612b14565b6125eb565b6001600160a01b0386166000908152600c602052604090205460ff16156125eb576125a960646123ca61251b601454601a5461228490919063ffffffff16565b925060006014541180156125c05750601c54601b54105b156125eb576125df60646123ca6014548861279790919063ffffffff16565b91506125eb8783612b14565b6001600160a01b0387166000908152600c602052604090205460ff168061262a57506001600160a01b0386166000908152600c602052604090205460ff165b1561270c576021541561270c576000805b6021548110156126f957604080516020810183905290810188905242606082015260800160408051601f1981840301815291815281516020928301206001600160a01b0381166000908152600790935291205490925061269c906001611b9a565b6001600160a01b0380841660008181526007602052604090819020939093559151908b1690600080516020613048833981519152906126df906001815260200190565b60405180910390a3806126f181612fd6565b91505061263b565b50602154612708906001612f65565b9150505b8215612774573060009081526007602052604090205461272c9084611b9a565b30600081815260076020526040908190209290925590516001600160a01b038916906000805160206130488339815191529061276b9087815260200190565b60405180910390a35b61278c61278582610e678686611b9a565b8690612284565b979650505050505050565b6000826127a657506000610e0c565b60006127b28385612f65565b9050826127bf8583612f45565b14610f825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e3c565b6000610f8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612baa565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061289b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128ef57600080fd5b505afa158015612903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129279190612c09565b8160018151811061294857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255461296e9130911684611bf9565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac947906129a7908590600090869030904290600401612ef1565b600060405180830381600087803b1580156129c157600080fd5b505af11580156129d5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612a0a929190612ed0565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612a4c573d6000803e3d6000fd5b505050565b602554612a699030906001600160a01b031684611bf9565b60255460225460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612ad457600080fd5b505af1158015612ae8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b0d9190612dd8565b5050505050565b601c54601b5410612b23575050565b6005546001600160a01b0316600090815260076020526040902054612b489082611b9a565b6005546001600160a01b0316600090815260076020526040902055601b54612b709082611b9a565b601b556005546040518281526001600160a01b03918216918416906000805160206130488339815191529060200160405180910390a35050565b60008183612bcb5760405162461bcd60e51b8152600401610e3c9190612e48565b50600061227b8486612f45565b80358015158114612be857600080fd5b919050565b600060208284031215612bfe578081fd5b8135610f8281613007565b600060208284031215612c1a578081fd5b8151610f8281613007565b60008060408385031215612c37578081fd5b8235612c4281613007565b91506020830135612c5281613007565b809150509250929050565b600080600060608486031215612c71578081fd5b8335612c7c81613007565b92506020840135612c8c81613007565b929592945050506040919091013590565b60008060408385031215612caf578182fd5b8235612cba81613007565b9150612cc860208401612bd8565b90509250929050565b60008060408385031215612ce3578182fd5b8235612cee81613007565b946020939093013593505050565b600080600060408486031215612d10578283fd5b833567ffffffffffffffff80821115612d27578485fd5b818601915086601f830112612d3a578485fd5b813581811115612d48578586fd5b8760208260051b8501011115612d5c578586fd5b602092830195509350612d729186019050612bd8565b90509250925092565b600060208284031215612d8c578081fd5b610f8282612bd8565b600060208284031215612da6578081fd5b5035919050565b600080600060608486031215612dc1578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612dec578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612e3d5781516001600160a01b031687529582019590820190600101612e18565b509495945050505050565b6000602080835283518082850152825b81811015612e7457858101830151858201604001528201612e58565b81811115612e855783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612ee96040830184612e05565b949350505050565b85815284602082015260a060408201526000612f1060a0830186612e05565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612f4057612f40612ff1565b500190565b600082612f6057634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7f57612f7f612ff1565b500290565b600082821015612f9657612f96612ff1565b500390565b600181811c90821680612faf57607f821691505b60208210811415612fd057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fea57612fea612ff1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209207df0d67b08022a98729c671c23b6430125bf5c48d5e10b18f28fabc7b5e4864736f6c63430008040033000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000012d88e6ec6c0cd920efb0b0a115c0ad153b587d100000000000000000000000012d88e6ec6c0cd920efb0b0a115c0ad153b587d100000000000000000000000012d88e6ec6c0cd920efb0b0a115c0ad153b587d10000000000000000000000009bb69e4ddda0a1865fec3ba828787e6f886750f7000000000000000000000000000000000000000000000000000000000000000a474f425a20544f4b454e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004474f425a00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106104405760003560e01c80638da5cb5b11610234578063c816841b1161012e578063e5c2b0a6116100b6578063f2fde38b1161007a578063f2fde38b14610cd2578063f744bf2214610cf2578063f84ba65d14610d12578063f872858a14610d32578063fb1eb14b14610d5357600080fd5b8063e5c2b0a614610c3c578063ec28438a14610c5c578063ef422a1814610c7c578063f0cd1dac14610c9c578063f1d5f51714610cb257600080fd5b8063d158272d116100fd578063d158272d14610b84578063da00097d14610ba9578063dc44b6a014610bca578063dd62ed3e14610be0578063e32759cf14610c2657600080fd5b8063c816841b14610b08578063c860795214610b28578063c867d60b14610b3e578063cab0347114610b6e57600080fd5b8063a83f53a7116101bc578063c469b6dd11610180578063c469b6dd14610a7c578063c492f04614610a92578063c49b9a8014610ab2578063c5d2418914610ad2578063c7f063d314610ae857600080fd5b8063a83f53a7146109e6578063a9059cbb146109fc578063b2bdfa7b14610a1c578063b6b3664314610a3c578063c2d4640e14610a5c57600080fd5b80639a55fff0116102035780639a55fff01461095b578063a073d37f1461097b578063a08e671f14610990578063a457c2d7146109a6578063a5d69d1f146109c657600080fd5b80638da5cb5b146108fd578063914eb66a1461091b57806395d89b4114610930578063993945ac1461094557600080fd5b80633b97084a116103455780635881f3ef116102cd57806382eefb431161029157806382eefb4314610861578063844d591c14610877578063865541e71461089757806388790a68146108b75780638b42507f146108cd57600080fd5b80635881f3ef146107c957806361a23c69146107e957806370a08231146107ff5780637d1db4a514610835578063807c2d9c1461084b57600080fd5b80634a74bb02116103145780634a74bb021461072f5780634cb80fd5146107505780635342acb414610770578063557ed1ba146107a057806357a5802f146107b357600080fd5b80633b97084a146106b35780633df4ddf4146106d35780633ecad271146106e957806341c0e1b51461071957600080fd5b806323b872dd116103c85780632b112e49116103975780632b112e49146106265780632c4b23341461063b578063313ce5671461065b57806337e5ccf71461067d578063395093511461069357600080fd5b806323b872dd146105b05780632563ae83146105d057806327c8f835146105f0578063297ac6de1461061057600080fd5b80631694505e1161040f5780631694505e1461050157806318160ddd146105215780631870517a146105405780631cdd3be3146105605780632198cf6c1461059057600080fd5b806306fdde031461044c578063095ea7b3146104775780630d5e5c87146104a75780631245e347146104c957600080fd5b3661044757005b600080fd5b34801561045857600080fd5b50610461610d69565b60405161046e9190612e48565b60405180910390f35b34801561048357600080fd5b50610497610492366004612cd1565b610dfb565b604051901515815260200161046e565b3480156104b357600080fd5b506104c76104c2366004612dad565b610e12565b005b3480156104d557600080fd5b506004546104e9906001600160a01b031681565b6040516001600160a01b03909116815260200161046e565b34801561050d57600080fd5b506025546104e9906001600160a01b031681565b34801561052d57600080fd5b50601d545b60405190815260200161046e565b34801561054c57600080fd5b506104c761055b366004612dad565b610e75565b34801561056c57600080fd5b5061049761057b366004612bed565b60066020526000908152604090205460ff1681565b34801561059c57600080fd5b506104c76105ab366004612c9d565b610ec9565b3480156105bc57600080fd5b506104976105cb366004612c5d565b610f1e565b3480156105dc57600080fd5b506104c76105eb366004612d7b565b610f89565b3480156105fc57600080fd5b506005546104e9906001600160a01b031681565b34801561061c57600080fd5b5061053260145481565b34801561063257600080fd5b50610532610fd1565b34801561064757600080fd5b506104c7610656366004612bed565b610ffd565b34801561066757600080fd5b5060035460405160ff909116815260200161046e565b34801561068957600080fd5b5061053260105481565b34801561069f57600080fd5b506104976106ae366004612cd1565b611049565b3480156106bf57600080fd5b506104c76106ce366004612d95565b61107f565b3480156106df57600080fd5b5061053260235481565b3480156106f557600080fd5b50610497610704366004612bed565b600c6020526000908152604090205460ff1681565b34801561072557600080fd5b5061053260245481565b34801561073b57600080fd5b5060265461049790600160a81b900460ff1681565b34801561075c57600080fd5b506104c761076b366004612bed565b6110ae565b34801561077c57600080fd5b5061049761078b366004612bed565b60096020526000908152604090205460ff1681565b3480156107ac57600080fd5b5042610532565b3480156107bf57600080fd5b5061053260155481565b3480156107d557600080fd5b506104e96107e4366004612bed565b611100565b3480156107f557600080fd5b5061053260165481565b34801561080b57600080fd5b5061053261081a366004612bed565b6001600160a01b031660009081526007602052604090205490565b34801561084157600080fd5b50610532601e5481565b34801561085757600080fd5b50610532601f5481565b34801561086d57600080fd5b50610532601a5481565b34801561088357600080fd5b506104c7610892366004612c9d565b611492565b3480156108a357600080fd5b506104c76108b2366004612d95565b6114e7565b3480156108c357600080fd5b5061053260115481565b3480156108d957600080fd5b506104976108e8366004612bed565b600b6020526000908152604090205460ff1681565b34801561090957600080fd5b506000546001600160a01b03166104e9565b34801561092757600080fd5b506104c7611536565b34801561093c57600080fd5b506104616115aa565b34801561095157600080fd5b50610532601c5481565b34801561096757600080fd5b506104c7610976366004612cfc565b6115b9565b34801561098757600080fd5b50602054610532565b34801561099c57600080fd5b5061053260185481565b3480156109b257600080fd5b506104976109c1366004612cd1565b611668565b3480156109d257600080fd5b506104c76109e1366004612d7b565b6116b7565b3480156109f257600080fd5b5061053260175481565b348015610a0857600080fd5b50610497610a17366004612cd1565b6116ff565b348015610a2857600080fd5b506000546104e9906001600160a01b031681565b348015610a4857600080fd5b506104c7610a57366004612d95565b61170c565b348015610a6857600080fd5b506104c7610a77366004612dad565b61173b565b348015610a8857600080fd5b50610532600f5481565b348015610a9e57600080fd5b506104c7610aad366004612cfc565b61178a565b348015610abe57600080fd5b506104c7610acd366004612d7b565b611833565b348015610ade57600080fd5b50610532600e5481565b348015610af457600080fd5b506104c7610b03366004612d95565b6118b5565b348015610b1457600080fd5b506026546104e9906001600160a01b031681565b348015610b3457600080fd5b5061053260125481565b348015610b4a57600080fd5b50610497610b59366004612bed565b600a6020526000908152604090205460ff1681565b348015610b7a57600080fd5b5061053260135481565b348015610b9057600080fd5b506003546104e99061010090046001600160a01b031681565b348015610bb557600080fd5b5060265461049790600160b01b900460ff1681565b348015610bd657600080fd5b50610532600d5481565b348015610bec57600080fd5b50610532610bfb366004612c25565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610c3257600080fd5b5061053260215481565b348015610c4857600080fd5b506104c7610c57366004612d95565b6118e4565b348015610c6857600080fd5b506104c7610c77366004612d95565b611959565b348015610c8857600080fd5b506104c7610c97366004612c9d565b611988565b348015610ca857600080fd5b5061053260195481565b348015610cbe57600080fd5b506104c7610ccd366004612d95565b6119dd565b348015610cde57600080fd5b506104c7610ced366004612bed565b611a0c565b348015610cfe57600080fd5b506104c7610d0d366004612d95565b611af6565b348015610d1e57600080fd5b506104c7610d2d366004612c9d565b611b45565b348015610d3e57600080fd5b5060265461049790600160b81b900460ff1681565b348015610d5f57600080fd5b50610532601b5481565b606060018054610d7890612f9b565b80601f0160208091040260200160405190810160405280929190818152602001828054610da490612f9b565b8015610df15780601f10610dc657610100808354040283529160200191610df1565b820191906000526020600020905b815481529060010190602001808311610dd457829003601f168201915b5050505050905090565b6000610e08338484611bf9565b5060015b92915050565b6000546001600160a01b03163314610e455760405162461bcd60e51b8152600401610e3c90612e9b565b60405180910390fd5b601183905560128290556013819055601454610e6d90610e6783818787611b9a565b90611b9a565b601a55505050565b6000546001600160a01b03163314610e9f5760405162461bcd60e51b8152600401610e3c90612e9b565b600d839055600e829055600f819055601054610ec190610e6783818787611b9a565b601955505050565b6000546001600160a01b03163314610ef35760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610f2b848484611d1d565b50610f7e8433610f7985604051806060016040528060288152602001613020602891396001600160a01b038a166000908152600860209081526040808320338452909152902054919061224a565b611bf9565b5060015b9392505050565b6000546001600160a01b03163314610fb35760405162461bcd60e51b8152600401610e3c90612e9b565b60268054911515600160b81b0260ff60b81b19909216919091179055565b6005546001600160a01b0316600090815260076020526040812054601d54610ff891612284565b905090565b6000546001600160a01b031633146110275760405162461bcd60e51b8152600401610e3c90612e9b565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610e08918590610f799086611b9a565b6000546001600160a01b031633146110a95760405162461bcd60e51b8152600401610e3c90612e9b565b602055565b6000546001600160a01b031633146110d85760405162461bcd60e51b8152600401610e3c90612e9b565b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610e3c90612e9b565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561116957600080fd5b505afa15801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190612c09565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e957600080fd5b505afa1580156111fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112219190612c09565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561126757600080fd5b505afa15801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f9190612c09565b91506001600160a01b03821661142357806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190612c09565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561136857600080fd5b505afa15801561137c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a09190612c09565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156113e857600080fd5b505af11580156113fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114209190612c09565b91505b602680546001600160a01b03199081166001600160a01b03858116918217845560258054909316948116949094179091556000908152600a60209081526040808320805460ff19908116600190811790925594549095168352600c909152902080549091169091179055919050565b6000546001600160a01b031633146114bc5760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115115760405162461bcd60e51b8152600401610e3c90612e9b565b6010819055600f54600e54600d54611530928492610e67928391611b9a565b60195550565b6000546001600160a01b031633146115605760405162461bcd60e51b8152600401610e3c90612e9b565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b606060028054610d7890612f9b565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610e3c90612e9b565b60005b8281101561166257816006600086868581811061161357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906116289190612bed565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061165a81612fd6565b9150506115e6565b50505050565b6000610e083384610f7985604051806060016040528060258152602001613068602591393360009081526008602090815260408083206001600160a01b038d168452909152902054919061224a565b6000546001600160a01b031633146116e15760405162461bcd60e51b8152600401610e3c90612e9b565b60268054911515600160b01b0260ff60b01b19909216919091179055565b6000610f7e338484611d1d565b6000546001600160a01b031633146117365760405162461bcd60e51b8152600401610e3c90612e9b565b601c55565b6000546001600160a01b031633146117655760405162461bcd60e51b8152600401610e3c90612e9b565b60158390556016829055601781905561178281610e678585611b9a565b601855505050565b6000546001600160a01b031633146117b45760405162461bcd60e51b8152600401610e3c90612e9b565b60005b828110156116625781600960008686858181106117e457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906117f99190612bed565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061182b81612fd6565b9150506117b7565b6000546001600160a01b0316331461185d5760405162461bcd60e51b8152600401610e3c90612e9b565b60268054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118aa90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118df5760405162461bcd60e51b8152600401610e3c90612e9b565b602455565b6000546001600160a01b0316331461190e5760405162461bcd60e51b8152600401610e3c90612e9b565b60038111156119545760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610e3c565b602155565b6000546001600160a01b031633146119835760405162461bcd60e51b8152600401610e3c90612e9b565b601e55565b6000546001600160a01b031633146119b25760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a075760405162461bcd60e51b8152600401610e3c90612e9b565b601f55565b6000546001600160a01b03163314611a365760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b038116611a9b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e3c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611b205760405162461bcd60e51b8152600401610e3c90612e9b565b6014819055601354601254601154611b3f928492610e67928391611b9a565b601a5550565b6000546001600160a01b03163314611b6f5760405162461bcd60e51b8152600401610e3c90612e9b565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b600080611ba78385612f2d565b905083811015610f825760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610e3c565b6001600160a01b038316611c5b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e3c565b6001600160a01b038216611cbc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e3c565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611d835760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e3c565b6001600160a01b038316611de55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e3c565b60008211611e475760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e3c565b6001600160a01b03841660009081526006602052604090205460ff16158015611e8957506001600160a01b03831660009081526006602052604090205460ff16155b611ecb5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610e3c565b6026546001600160a01b038481169116148015611f0057506026546001600160a01b0316600090815260076020526040902054155b15611f0a57436023555b6026546001600160a01b038581169116148015611f355750602454602354611f329190612f2d565b43105b15611f5957602254611f529085906001600160a01b0316846122c6565b9050610f82565b602654600160a01b900460ff1615611f7657611f528484846122c6565b6001600160a01b0384166000908152600b602052604090205460ff16158015611fb857506001600160a01b0383166000908152600b602052604090205460ff16155b1561202057601e548211156120205760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e3c565b30600090815260076020526040812054602054909150811080159081906120515750602654600160a01b900460ff16155b801561207657506001600160a01b0386166000908152600c602052604090205460ff16155b801561208b5750602654600160a81b900460ff165b156120b157602654600160b01b900460ff16156120a85760205491505b6120b18261239a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526007909152919091205461210391869061224a565b6001600160a01b038716600090815260076020908152604080832093909355600990529081205460ff168061215057506001600160a01b03861660009081526009602052604090205460ff165b6121645761215f8787876124d5565b612166565b845b602654909150600160b81b900460ff16801561219b57506001600160a01b0386166000908152600a602052604090205460ff16155b156121d157601f546121c682610e67896001600160a01b031660009081526007602052604090205490565b11156121d157600080fd5b6001600160a01b0386166000908152600760205260409020546121f49082611b9a565b6001600160a01b038088166000818152600760205260409081902093909355915190891690600080516020613048833981519152906122369085815260200190565b60405180910390a360019350505050610f82565b6000818484111561226e5760405162461bcd60e51b8152600401610e3c9190612e48565b50600061227b8486612f84565b95945050505050565b6000610f8283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061224a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260079091529182205461231791849061224a565b6001600160a01b0380861660009081526007602052604080822093909355908516815220546123469083611b9a565b6001600160a01b038085166000818152600760205260409081902093909355915190861690600080516020613048833981519152906123889086815260200190565b60405180910390a35060019392505050565b6026805460ff60a01b1916600160a01b1790556018546015546000916123d0916002916123ca9182908790612797565b90612816565b905060006123de8383612284565b90506123e981612858565b601554479060009061240990612400906002612816565b60185490612284565b9050600061242b60026123ca846123ca6015548861279790919063ffffffff16565b90506000612448836123ca6017548761279790919063ffffffff16565b905060006124608261245a8786612284565b90612284565b90508015612483576003546124839061010090046001600160a01b031682612a16565b811561249f5760045461249f906001600160a01b031683612a16565b6000831180156124af5750600087115b156124be576124be8784612a51565b50506026805460ff60a01b19169055505050505050565b6001600160a01b0383166000908152600c602052604081205481908190819060ff16156125695761252260646123ca61251b60105460195461228490919063ffffffff16565b8890612797565b925060006010541180156125395750601c54601b54105b156125645761255860646123ca6010548861279790919063ffffffff16565b91506125648783612b14565b6125eb565b6001600160a01b0386166000908152600c602052604090205460ff16156125eb576125a960646123ca61251b601454601a5461228490919063ffffffff16565b925060006014541180156125c05750601c54601b54105b156125eb576125df60646123ca6014548861279790919063ffffffff16565b91506125eb8783612b14565b6001600160a01b0387166000908152600c602052604090205460ff168061262a57506001600160a01b0386166000908152600c602052604090205460ff165b1561270c576021541561270c576000805b6021548110156126f957604080516020810183905290810188905242606082015260800160408051601f1981840301815291815281516020928301206001600160a01b0381166000908152600790935291205490925061269c906001611b9a565b6001600160a01b0380841660008181526007602052604090819020939093559151908b1690600080516020613048833981519152906126df906001815260200190565b60405180910390a3806126f181612fd6565b91505061263b565b50602154612708906001612f65565b9150505b8215612774573060009081526007602052604090205461272c9084611b9a565b30600081815260076020526040908190209290925590516001600160a01b038916906000805160206130488339815191529061276b9087815260200190565b60405180910390a35b61278c61278582610e678686611b9a565b8690612284565b979650505050505050565b6000826127a657506000610e0c565b60006127b28385612f65565b9050826127bf8583612f45565b14610f825760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610e3c565b6000610f8283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612baa565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061289b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602554604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156128ef57600080fd5b505afa158015612903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129279190612c09565b8160018151811061294857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260255461296e9130911684611bf9565b60255460405163791ac94760e01b81526001600160a01b039091169063791ac947906129a7908590600090869030904290600401612ef1565b600060405180830381600087803b1580156129c157600080fd5b505af11580156129d5573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612a0a929190612ed0565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612a4c573d6000803e3d6000fd5b505050565b602554612a699030906001600160a01b031684611bf9565b60255460225460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612ad457600080fd5b505af1158015612ae8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b0d9190612dd8565b5050505050565b601c54601b5410612b23575050565b6005546001600160a01b0316600090815260076020526040902054612b489082611b9a565b6005546001600160a01b0316600090815260076020526040902055601b54612b709082611b9a565b601b556005546040518281526001600160a01b03918216918416906000805160206130488339815191529060200160405180910390a35050565b60008183612bcb5760405162461bcd60e51b8152600401610e3c9190612e48565b50600061227b8486612f45565b80358015158114612be857600080fd5b919050565b600060208284031215612bfe578081fd5b8135610f8281613007565b600060208284031215612c1a578081fd5b8151610f8281613007565b60008060408385031215612c37578081fd5b8235612c4281613007565b91506020830135612c5281613007565b809150509250929050565b600080600060608486031215612c71578081fd5b8335612c7c81613007565b92506020840135612c8c81613007565b929592945050506040919091013590565b60008060408385031215612caf578182fd5b8235612cba81613007565b9150612cc860208401612bd8565b90509250929050565b60008060408385031215612ce3578182fd5b8235612cee81613007565b946020939093013593505050565b600080600060408486031215612d10578283fd5b833567ffffffffffffffff80821115612d27578485fd5b818601915086601f830112612d3a578485fd5b813581811115612d48578586fd5b8760208260051b8501011115612d5c578586fd5b602092830195509350612d729186019050612bd8565b90509250925092565b600060208284031215612d8c578081fd5b610f8282612bd8565b600060208284031215612da6578081fd5b5035919050565b600080600060608486031215612dc1578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612dec578283fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015612e3d5781516001600160a01b031687529582019590820190600101612e18565b509495945050505050565b6000602080835283518082850152825b81811015612e7457858101830151858201604001528201612e58565b81811115612e855783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b828152604060208201526000612ee96040830184612e05565b949350505050565b85815284602082015260a060408201526000612f1060a0830186612e05565b6001600160a01b0394909416606083015250608001529392505050565b60008219821115612f4057612f40612ff1565b500190565b600082612f6057634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612f7f57612f7f612ff1565b500290565b600082821015612f9657612f96612ff1565b500390565b600181811c90821680612faf57607f821691505b60208210811415612fd057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612fea57612fea612ff1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461301c57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209207df0d67b08022a98729c671c23b6430125bf5c48d5e10b18f28fabc7b5e4864736f6c63430008040033

Deployed Bytecode Sourcemap

8034:18756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12569:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13864:161;;;;;;;;;;-1:-1:-1;13864:161:0;;;;;:::i;:::-;;:::i;:::-;;;6330:14:1;;6323:22;6305:41;;6293:2;6278:18;13864:161:0;6260:92:1;15746:361:0;;;;;;;;;;-1:-1:-1;15746:361:0;;;;;:::i;:::-;;:::i;:::-;;8291:40;;;;;;;;;;-1:-1:-1;8291:40:0;;;;-1:-1:-1;;;;;8291:40:0;;;;;;-1:-1:-1;;;;;4976:32:1;;;4958:51;;4946:2;4931:18;8291:40:0;4913:102:1;9761:41:0;;;;;;;;;;-1:-1:-1;9761:41:0;;;;-1:-1:-1;;;;;9761:41:0;;;12846:100;;;;;;;;;;-1:-1:-1;12926:12:0;;12846:100;;;6745:25:1;;;6733:2;6718:18;12846:100:0;6700:76:1;15385:353:0;;;;;;;;;;-1:-1:-1;15385:353:0;;;;;:::i;:::-;;:::i;8416:46::-;;;;;;;;;;-1:-1:-1;8416:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16951:135;;;;;;;;;;-1:-1:-1;16951:135:0;;;;;:::i;:::-;;:::i;19784:313::-;;;;;;;;;;-1:-1:-1;19784:313:0;;;;;:::i;:::-;;:::i;16830:113::-;;;;;;;;;;-1:-1:-1;16830:113:0;;;;;:::i;:::-;;:::i;8338:71::-;;;;;;;;;;-1:-1:-1;8338:71:0;;;;-1:-1:-1;;;;;8338:71:0;;;9104:34;;;;;;;;;;;;;;;;18431:128;;;;;;;;;;;;;:::i;17484:129::-;;;;;;;;;;-1:-1:-1;17484:129:0;;;;;:::i;:::-;;:::i;12755:83::-;;;;;;;;;;-1:-1:-1;12821:9:0;;12755:83;;12821:9;;;;13295:36:1;;13283:2;13268:18;12755:83:0;13250:87:1;8938:33:0;;;;;;;;;;;;;;;;13232:218;;;;;;;;;;-1:-1:-1;13232:218:0;;;;;:::i;:::-;;:::i;17204:125::-;;;;;;;;;;-1:-1:-1;17204:125:0;;;;;:::i;:::-;;:::i;9700:20::-;;;;;;;;;;;;;;;;8763:45;;;;;;;;;;-1:-1:-1;8763:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9727:23;;;;;;;;;;;;;;;;9872:40;;;;;;;;;;-1:-1:-1;9872:40:0;;;;-1:-1:-1;;;9872:40:0;;;;;;17337:139;;;;;;;;;;-1:-1:-1;17337:139:0;;;;;:::i;:::-;;:::i;8592:50::-;;;;;;;;;;-1:-1:-1;8592:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6197:90;;;;;;;;;;-1:-1:-1;6264:15:0;6197:90;;9147:34;;;;;;;;;;;;;;;;18701:806;;;;;;;;;;-1:-1:-1;18701:806:0;;;;;:::i;:::-;;:::i;9188:34::-;;;;;;;;;;;;;;;;12954:119;;;;;;;;;;-1:-1:-1;12954:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13047:18:0;13020:7;13047:18;;;:9;:18;;;;;;;12954:119;9512:27;;;;;;;;;;;;;;;;9546:25;;;;;;;;;;;;;;;;9360:37;;;;;;;;;;;;;;;;14378:129;;;;;;;;;;-1:-1:-1;14378:129:0;;;;;:::i;:::-;;:::i;14912:224::-;;;;;;;;;;-1:-1:-1;14912:224:0;;;;;:::i;:::-;;:::i;8980:36::-;;;;;;;;;;;;;;;;8708:48;;;;;;;;;;-1:-1:-1;8708:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5578:79;;;;;;;;;;-1:-1:-1;5616:7:0;5643:6;-1:-1:-1;;;;;5643:6:0;5578:79;;5792:145;;;;;;;;;;;;;:::i;12660:87::-;;;;;;;;;;;;;:::i;9438:32::-;;;;;;;;;;;;;;;;16115:222;;;;;;;;;;-1:-1:-1;16115:222:0;;;;;:::i;:::-;;:::i;13735:121::-;;;;;;;;;;-1:-1:-1;13824:24:0;;13735:121;;9265:43;;;;;;;;;;;;;;;;13458:269;;;;;;;;;;-1:-1:-1;13458:269:0;;;;;:::i;:::-;;:::i;17800:125::-;;;;;;;;;;-1:-1:-1;17800:125:0;;;;;:::i;:::-;;:::i;9229:29::-;;;;;;;;;;;;;;;;19609:167;;;;;;;;;;-1:-1:-1;19609:167:0;;;;;:::i;:::-;;:::i;5454:21::-;;;;;;;;;;-1:-1:-1;5454:21:0;;;;-1:-1:-1;;;;;5454:21:0;;;14793:111;;;;;;;;;;-1:-1:-1;14793:111:0;;;;;:::i;:::-;;:::i;16345:358::-;;;;;;;;;;-1:-1:-1;16345:358:0;;;;;:::i;:::-;;:::i;8901:30::-;;;;;;;;;;;;;;;;18190:233;;;;;;;;;;-1:-1:-1;18190:233:0;;;;;:::i;:::-;;:::i;17621:171::-;;;;;;;;;;-1:-1:-1;17621:171:0;;;;;:::i;:::-;;:::i;8859:35::-;;;;;;;;;;;;;;;;17933:86;;;;;;;;;;-1:-1:-1;17933:86:0;;;;;:::i;:::-;;:::i;9809:26::-;;;;;;;;;;-1:-1:-1;9809:26:0;;;;-1:-1:-1;;;;;9809:26:0;;;9023:36;;;;;;;;;;;;;;;;8649:52;;;;;;;;;;-1:-1:-1;8649:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9066:31;;;;;;;;;;;;;;;;8239:45;;;;;;;;;;-1:-1:-1;8239:45:0;;;;;;;-1:-1:-1;;;;;8239:45:0;;;9919;;;;;;;;;;-1:-1:-1;9919:45:0;;;;-1:-1:-1;;;9919:45:0;;;;;;8817:35;;;;;;;;;;;;;;;;13081:143;;;;;;;;;;-1:-1:-1;13081:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;13189:18:0;;;13162:7;13189:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13081:143;9629:27;;;;;;;;;;;;;;;;18027:157;;;;;;;;;;-1:-1:-1;18027:157:0;;;;;:::i;:::-;;:::i;16711:111::-;;;;;;;;;;-1:-1:-1;16711:111:0;;;;;:::i;:::-;;:::i;14650:135::-;;;;;;;;;;-1:-1:-1;14650:135:0;;;;;:::i;:::-;;:::i;9317:36::-;;;;;;;;;;;;;;;;17094:102;;;;;;;;;;-1:-1:-1;17094:102:0;;;;;:::i;:::-;;:::i;5945:244::-;;;;;;;;;;-1:-1:-1;5945:244:0;;;;;:::i;:::-;;:::i;15144:233::-;;;;;;;;;;-1:-1:-1;15144:233:0;;;;;:::i;:::-;;:::i;14515:127::-;;;;;;;;;;-1:-1:-1;14515:127:0;;;;;:::i;:::-;;:::i;9971:35::-;;;;;;;;;;-1:-1:-1;9971:35:0;;;;-1:-1:-1;;;9971:35:0;;;;;;9406:25;;;;;;;;;;;;;;;;12569:83;12606:13;12639:5;12632:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12569:83;:::o;13864:161::-;13939:4;13956:39;198:10;13979:7;13988:6;13956:8;:39::i;:::-;-1:-1:-1;14013:4:0;13864:161;;;;;:::o;15746:361::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;;;;;;;;;15869:17:::1;:35:::0;;;15915:17:::1;:35:::0;;;15961:12:::1;:25:::0;;;16083:15:::1;::::0;16020:79:::1;::::0;:58:::1;15976:10:::0;16020:58;15889:15;15935;16020:21:::1;:40::i;:::-;:44:::0;::::1;:58::i;:79::-;15999:18;:100:::0;-1:-1:-1;;;15746:361:0:o;15385:353::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;15508:16:::1;:34:::0;;;15553:16:::1;:34:::0;;;15598:11:::1;:24:::0;;;15715:14:::1;::::0;15655:75:::1;::::0;:55:::1;15612:10:::0;15655:55;15527:15;15572;15655:20:::1;:38::i;:75::-;15635:17;:95:::0;-1:-1:-1;;;15385:353:0:o;16951:135::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17042:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;17042:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16951:135::o;19784:313::-;19882:4;19899:36;19909:6;19917:9;19928:6;19899:9;:36::i;:::-;-1:-1:-1;19946:121:0;19955:6;198:10;19977:89;20015:6;19977:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19977:19:0;;;;;;:11;:19;;;;;;;;198:10;19977:33;;;;;;;;;;:37;:89::i;:::-;19946:8;:121::i;:::-;-1:-1:-1;20085:4:0;19784:313;;;;;;:::o;16830:113::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;16908:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;16908:27:0::1;-1:-1:-1::0;;;;16908:27:0;;::::1;::::0;;;::::1;::::0;;16830:113::o;18431:128::-;18538:11;;-1:-1:-1;;;;;18538:11:0;18484:7;13047:18;;;:9;:18;;;;;;18511:12;;:40;;:16;:40::i;:::-;18504:47;;18431:128;:::o;17484:129::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17566:17:::1;:39:::0;;-1:-1:-1;;;;;;17566:39:0::1;-1:-1:-1::0;;;;;17566:39:0;;;::::1;::::0;;;::::1;::::0;;17484:129::o;13232:218::-;198:10;13320:4;13369:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13369:34:0;;;;;;;;;;13320:4;;13337:83;;13360:7;;13369:50;;13408:10;13369:38;:50::i;17204:125::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17286:24:::1;:35:::0;17204:125::o;17337:139::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17424:22:::1;:44:::0;;-1:-1:-1;;;;;17424:44:0;;::::1;;;-1:-1:-1::0;;;;;;17424:44:0;;::::1;::::0;;;::::1;::::0;;17337:139::o;18701:806::-;18781:22;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18818:35:::1;18875:16;18818:74;;18940:16;-1:-1:-1::0;;;;;18940:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18922:53:0::1;;18984:4;18991:16;-1:-1:-1::0;;;;;18991:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18922:93;::::0;-1:-1:-1;;;;;;18922:93:0::1;::::0;;;;;;-1:-1:-1;;;;;5474:15:1;;;18922:93:0::1;::::0;::::1;5456:34:1::0;5526:15;;5506:18;;;5499:43;5391:18;;18922:93:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18905:110:::0;-1:-1:-1;;;;;;19031:28:0;::::1;19028:225;;19145:16;-1:-1:-1::0;;;;;19145:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19127:74:0::1;;19210:4;19217:16;-1:-1:-1::0;;;;;19217:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19127:114;::::0;-1:-1:-1;;;;;;19127:114:0::1;::::0;;;;;;-1:-1:-1;;;;;5474:15:1;;;19127:114:0::1;::::0;::::1;5456:34:1::0;5526:15;;5506:18;;;5499:43;5391:18;;19127:114:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19110:131;;19028:225;19265:11;:28:::0;;-1:-1:-1;;;;;;19265:28:0;;::::1;-1:-1:-1::0;;;;;19265:28:0;;::::1;::::0;;::::1;::::0;;19327:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;19399:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;19399:48:0;;::::1;-1:-1:-1::0;19399:48:0;;::::1;::::0;;;19479:11;;;;::::1;19458:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;19265:28;19279:14;-1:-1:-1;18701:806:0:o;14378:129::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14467:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;14467:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14378:129::o;14912:224::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;14989:14:::1;:33:::0;;;15096:11:::1;::::0;15074:16:::1;::::0;15053::::1;::::0;:75:::1;::::0;15006:16;;15053:55:::1;::::0;;;:20:::1;:38::i;:75::-;15033:17;:95:::0;-1:-1:-1;14912:224:0:o;5792:145::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;5896:1:::1;5880:6:::0;;5859:40:::1;::::0;-1:-1:-1;;;;;5880:6:0;;::::1;::::0;5859:40:::1;::::0;5896:1;;5859:40:::1;5927:1;5910:19:::0;;-1:-1:-1;;;;;;5910:19:0::1;::::0;;5792:145::o;12660:87::-;12699:13;12732:7;12725:14;;;;;:::i;16115:222::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;16224:9:::1;16219:111;16239:19:::0;;::::1;16219:111;;;16310:8;16280:14;:27;16295:8;;16304:1;16295:11;;;;;-1:-1:-1::0;;;16295:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16280:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16280:27:0;:38;;-1:-1:-1;;16280:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16260:3;::::1;::::0;::::1;:::i;:::-;;;;16219:111;;;;16115:222:::0;;;:::o;13458:269::-;13551:4;13568:129;198:10;13591:7;13600:96;13639:15;13600:96;;;;;;;;;;;;;;;;;198:10;13600:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13600:34:0;;;;;;;;;;;;:38;:96::i;17800:125::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17881:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;17881:36:0::1;-1:-1:-1::0;;;;17881:36:0;;::::1;::::0;;;::::1;::::0;;17800:125::o;19609:167::-;19687:4;19704:42;198:10;19728:9;19739:6;19704:9;:42::i;14793:111::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;14866:17:::1;:30:::0;14793:111::o;16345:358::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;16486:15:::1;:35:::0;;;16532:15:::1;:35:::0;;;16578:10:::1;:25:::0;;;16643:52:::1;16591:12:::0;16643:36:::1;16504:17:::0;16550;16643:19:::1;:36::i;:52::-;16616:24;:79:::0;-1:-1:-1;;;16345:358:0:o;18190:233::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18307:9:::1;18303:113;18322:19:::0;;::::1;18303:113;;;18396:8;18363:17;:30;18381:8;;18390:1;18381:11;;;;;-1:-1:-1::0;;;18381:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18363:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18363:30:0;:41;;-1:-1:-1;;18363:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18343:3;::::1;::::0;::::1;:::i;:::-;;;;18303:113;;17621:171:::0;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17698:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;17698:32:0::1;-1:-1:-1::0;;;;17698:32:0;;::::1;;::::0;;17746:38:::1;::::0;::::1;::::0;::::1;::::0;17722:8;6330:14:1;6323:22;6305:41;;6293:2;6278:18;;6260:92;17746:38:0::1;;;;;;;;17621:171:::0;:::o;17933:86::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17996:4:::1;:15:::0;17933:86::o;18027:157::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;18118:1:::1;18106:8;:13;;18098:44;;;::::0;-1:-1:-1;;;18098:44:0;;11497:2:1;18098:44:0::1;::::0;::::1;11479:21:1::0;11536:2;11516:18;;;11509:30;-1:-1:-1;;;11555:18:1;;;11548:48;11613:18;;18098:44:0::1;11469:168:1::0;18098:44:0::1;18153:12;:23:::0;18027:157::o;16711:111::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;16788:12:::1;:26:::0;16711:111::o;14650:135::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14740:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;14740:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14650:135::o;17094:102::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;17166:10:::1;:22:::0;17094:102::o;5945:244::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6034:22:0;::::1;6026:73;;;::::0;-1:-1:-1;;;6026:73:0;;7995:2:1;6026:73:0::1;::::0;::::1;7977:21:1::0;8034:2;8014:18;;;8007:30;8073:34;8053:18;;;8046:62;-1:-1:-1;;;8124:18:1;;;8117:36;8170:19;;6026:73:0::1;7967:228:1::0;6026:73:0::1;6136:6;::::0;;6115:38:::1;::::0;-1:-1:-1;;;;;6115:38:0;;::::1;::::0;6136:6;::::1;::::0;6115:38:::1;::::0;::::1;6164:6;:17:::0;;-1:-1:-1;;;;;;6164:17:0::1;-1:-1:-1::0;;;;;6164:17:0;;;::::1;::::0;;;::::1;::::0;;5945:244::o;15144:233::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;15223:15:::1;:35:::0;;;15335:12:::1;::::0;15312:17:::1;::::0;15290::::1;::::0;:79:::1;::::0;15241:17;;15290:58:::1;::::0;;;:21:::1;:40::i;:79::-;15269:18;:100:::0;-1:-1:-1;15144:233:0:o;14515:127::-;5705:6;;-1:-1:-1;;;;;5705:6:0;198:10;5705:22;5697:67;;;;-1:-1:-1;;;5697:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14602:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;14602:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14515:127::o;1191:181::-;1249:7;;1281:5;1285:1;1281;:5;:::i;:::-;1269:17;;1310:1;1305;:6;;1297:46;;;;-1:-1:-1;;;1297:46:0;;8805:2:1;1297:46:0;;;8787:21:1;8844:2;8824:18;;;8817:30;8883:29;8863:18;;;8856:57;8930:18;;1297:46:0;8777:177:1;14033:337:0;-1:-1:-1;;;;;14126:19:0;;14118:68;;;;-1:-1:-1;;;14118:68:0;;11844:2:1;14118:68:0;;;11826:21:1;11883:2;11863:18;;;11856:30;11922:34;11902:18;;;11895:62;-1:-1:-1;;;11973:18:1;;;11966:34;12017:19;;14118:68:0;11816:226:1;14118:68:0;-1:-1:-1;;;;;14205:21:0;;14197:68;;;;-1:-1:-1;;;14197:68:0;;8402:2:1;14197:68:0;;;8384:21:1;8441:2;8421:18;;;8414:30;8480:34;8460:18;;;8453:62;-1:-1:-1;;;8531:18:1;;;8524:32;8573:19;;14197:68:0;8374:224:1;14197:68:0;-1:-1:-1;;;;;14278:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14330:32;;6745:25:1;;;14330:32:0;;6718:18:1;14330:32:0;;;;;;;14033:337;;;:::o;20105:2119::-;20192:4;-1:-1:-1;;;;;20219:20:0;;20211:70;;;;-1:-1:-1;;;20211:70:0;;11091:2:1;20211:70:0;;;11073:21:1;11130:2;11110:18;;;11103:30;11169:34;11149:18;;;11142:62;-1:-1:-1;;;11220:18:1;;;11213:35;11265:19;;20211:70:0;11063:227:1;20211:70:0;-1:-1:-1;;;;;20300:23:0;;20292:71;;;;-1:-1:-1;;;20292:71:0;;7591:2:1;20292:71:0;;;7573:21:1;7630:2;7610:18;;;7603:30;7669:34;7649:18;;;7642:62;-1:-1:-1;;;7720:18:1;;;7713:33;7763:19;;20292:71:0;7563:225:1;20292:71:0;20391:1;20382:6;:10;20374:64;;;;-1:-1:-1;;;20374:64:0;;10681:2:1;20374:64:0;;;10663:21:1;10720:2;10700:18;;;10693:30;10759:34;10739:18;;;10732:62;-1:-1:-1;;;10810:18:1;;;10803:39;10859:19;;20374:64:0;10653:231:1;20374:64:0;-1:-1:-1;;;;;20458:22:0;;;;;;:14;:22;;;;;;;;20457:23;:53;;;;-1:-1:-1;;;;;;20485:25:0;;;;;;:14;:25;;;;;;;;20484:26;20457:53;20449:85;;;;-1:-1:-1;;;20449:85:0;;9161:2:1;20449:85:0;;;9143:21:1;9200:2;9180:18;;;9173:30;-1:-1:-1;;;9219:18:1;;;9212:49;9278:18;;20449:85:0;9133:169:1;20449:85:0;20563:11;;-1:-1:-1;;;;;20550:24:0;;;20563:11;;20550:24;:64;;;;-1:-1:-1;20596:11:0;;-1:-1:-1;;;;;20596:11:0;13020:7;13047:18;;;:9;:18;;;;;;20578:36;20550:64;20547:115;;;20638:12;20630:5;:20;20547:115;20685:11;;-1:-1:-1;;;;;20675:21:0;;;20685:11;;20675:21;:52;;;;;20723:4;;20715:5;;:12;;;;:::i;:::-;20700;:27;20675:52;20672:136;;;20773:14;;20750:46;;20765:6;;-1:-1:-1;;;;;20773:14:0;20789:6;20750:14;:46::i;:::-;20743:53;;;;20672:136;20821:16;;-1:-1:-1;;;20821:16:0;;;;20818:1399;;;20870:41;20885:6;20893:9;20904:6;20870:14;:41::i;20818:1399::-;-1:-1:-1;;;;;20966:23:0;;;;;;:15;:23;;;;;;;;20965:24;:55;;;;-1:-1:-1;;;;;;20994:26:0;;;;;;:15;:26;;;;;;;;20993:27;20965:55;20962:170;;;21059:12;;21049:6;:22;;21041:75;;;;-1:-1:-1;;;21041:75:0;;9509:2:1;21041:75:0;;;9491:21:1;9548:2;9528:18;;;9521:30;9587:34;9567:18;;;9560:62;-1:-1:-1;;;9638:18:1;;;9631:38;9686:19;;21041:75:0;9481:230:1;21041:75:0;21197:4;21148:28;13047:18;;;:9;:18;;;;;;21273:24;;21148:55;;-1:-1:-1;21249:48:0;;;;;;;21318:44;;-1:-1:-1;21346:16:0;;-1:-1:-1;;;21346:16:0;;;;21345:17;21318:44;:69;;;;-1:-1:-1;;;;;;21367:20:0;;;;;;:12;:20;;;;;;;;21366:21;21318:69;:94;;;;-1:-1:-1;21391:21:0;;-1:-1:-1;;;21391:21:0;;;;21318:94;21314:301;;;21449:25;;-1:-1:-1;;;21449:25:0;;;;21446:98;;;21520:24;;21497:47;;21446:98;21563:36;21578:20;21563:14;:36::i;:::-;21651:53;;;;;;;;;;;-1:-1:-1;;;21651:53:0;;;;;;;;-1:-1:-1;;;;;21651:17:0;;-1:-1:-1;21651:17:0;;;:9;:17;;;;;;;;:53;;21673:6;;21651:21;:53::i;:::-;-1:-1:-1;;;;;21631:17:0;;;;;;:9;:17;;;;;;;;:73;;;;21744:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;21773:28:0;;;;;;:17;:28;;;;;;;;21744:57;21743:147;;21856:34;21864:6;21872:9;21883:6;21856:7;:34::i;:::-;21743:147;;;21847:6;21743:147;21910:16;;21721:169;;-1:-1:-1;;;;21910:16:0;;;;:51;;;;-1:-1:-1;;;;;;21931:30:0;;;;;;:19;:30;;;;;;;;21930:31;21910:51;21907:133;;;22029:10;;21988:37;22013:11;21988:20;21998:9;-1:-1:-1;;;;;13047:18:0;13020:7;13047:18;;;:9;:18;;;;;;;12954:119;21988:37;:51;;21980:60;;;;;;-1:-1:-1;;;;;22080:20:0;;;;;;:9;:20;;;;;;:37;;22105:11;22080:24;:37::i;:::-;-1:-1:-1;;;;;22057:20:0;;;;;;;:9;:20;;;;;;;:60;;;;22139:40;;;;;;-1:-1:-1;;;;;;;;;;;22139:40:0;;;22167:11;6745:25:1;;6733:2;6718:18;;6700:76;22139:40:0;;;;;;;;22201:4;22194:11;;;;;;;1524:192;1610:7;1646:12;1638:6;;;;1630:29;;;;-1:-1:-1;;;1630:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1670:9:0;1682:5;1686:1;1682;:5;:::i;:::-;1670:17;1524:192;-1:-1:-1;;;;;1524:192:0:o;1380:136::-;1438:7;1465:43;1469:1;1472;1465:43;;;;;;;;;;;;;;;;;:3;:43::i;22232:330::-;22362:53;;;;;;;;;;;-1:-1:-1;;;22362:53:0;;;;;;;;-1:-1:-1;;;;;22362:17:0;;22325:4;22362:17;;;:9;:17;;;;;;;:53;;22384:6;;22362:21;:53::i;:::-;-1:-1:-1;;;;;22342:17:0;;;;;;;:9;:17;;;;;;:73;;;;22449:20;;;;;;;:32;;22474:6;22449:24;:32::i;:::-;-1:-1:-1;;;;;22426:20:0;;;;;;;:9;:20;;;;;;;:55;;;;22497:35;;;;;;-1:-1:-1;;;;;;;;;;;22497:35:0;;;22525:6;6745:25:1;;6733:2;6718:18;;6700:76;22497:35:0;;;;;;;;-1:-1:-1;22550:4:0;22232:330;;;;;:::o;22570:1032::-;10417:16;:23;;-1:-1:-1;;;;10417:23:0;-1:-1:-1;;;10417:23:0;;;22699:24:::1;::::0;22678:15:::1;::::0;10417:23;;22666:65:::1;::::0;22729:1:::1;::::0;22666:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;22644:87:::0;-1:-1:-1;22742:21:0::1;22766:24;:7:::0;22644:87;22766:11:::1;:24::i;:::-;22742:48;;22803:31;22820:13;22803:16;:31::i;:::-;22955:15;::::0;22870:21:::1;::::0;22845:22:::1;::::0;22926:52:::1;::::0;22955:22:::1;::::0;22975:1:::1;22955:19;:22::i;:::-;22926:24;::::0;;:28:::1;:52::i;:::-;22904:74;;22991:26;23020:59;23077:1;23020:52;23060:11;23020:35;23039:15;;23020:14;:18;;:35;;;;:::i;:59::-;22991:88;;23090:21;23114:47;23149:11;23114:30;23133:10;;23114:14;:18;;:30;;;;:::i;:47::-;23090:71:::0;-1:-1:-1;23172:26:0::1;23201:57;23090:71:::0;23201:38:::1;:14:::0;23220:18;23201::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;23172:86:::0;-1:-1:-1;23274:22:0;;23271:104:::1;;23332:22;::::0;23311:64:::1;::::0;23332:22:::1;::::0;::::1;-1:-1:-1::0;;;;;23332:22:0::1;23356:18:::0;23311:20:::1;:64::i;:::-;23391:17:::0;;23388:89:::1;;23444:17;::::0;23423:54:::1;::::0;-1:-1:-1;;;;;23444:17:0::1;23463:13:::0;23423:20:::1;:54::i;:::-;23514:1;23493:18;:22;:41;;;;;23533:1;23519:11;:15;23493:41;23490:104;;;23549:45;23562:11;23575:18;23549:12;:45::i;:::-;-1:-1:-1::0;;10463:16:0;:24;;-1:-1:-1;;;;10463:24:0;;;-1:-1:-1;;;;;;22570:1032:0:o;24804:1652::-;-1:-1:-1;;;;;25016:20:0;;24890:7;25016:20;;;:12;:20;;;;;;24890:7;;;;;;25016:20;;25013:670;;;25065:58;25119:3;25065:49;25076:37;25098:14;;25076:17;;:21;;:37;;;;:::i;:::-;25065:6;;:10;:49::i;:58::-;25053:70;;25158:1;25141:14;;:18;:52;;;;;25176:17;;25163:10;;:30;25141:52;25138:188;;;25227:35;25258:3;25227:26;25238:14;;25227:6;:10;;:26;;;;:::i;:35::-;25214:48;;25281:29;25292:6;25299:10;25281;:29::i;:::-;25013:670;;;-1:-1:-1;;;;;25355:23:0;;;;;;:12;:23;;;;;;;;25352:331;;;25407:60;25463:3;25407:51;25418:39;25441:15;;25418:18;;:22;;:39;;;;:::i;25407:60::-;25395:72;;25503:1;25485:15;;:19;:53;;;;;25521:17;;25508:10;;:30;25485:53;25482:190;;;25572:36;25604:3;25572:27;25583:15;;25572:6;:10;;:27;;;;:::i;:36::-;25559:49;;25627:29;25638:6;25645:10;25627;:29::i;:::-;-1:-1:-1;;;;;25696:20:0;;;;;;:12;:20;;;;;;;;;:47;;-1:-1:-1;;;;;;25720:23:0;;;;;;:12;:23;;;;;;;;25696:47;25693:495;;;25763:12;;:16;25759:418;;25799:10;;25828:283;25852:12;;25848:1;:16;25828:283;;;25933:44;;;;;;4680:19:1;;;4715:12;;;4708:28;;;25961:15:0;4752:12:1;;;4745:28;4789:12;;25933:44:0;;;-1:-1:-1;;25933:44:0;;;;;;;;;25923:55;;25933:44;25923:55;;;;-1:-1:-1;;;;;26020:13:0;;25915:64;26020:13;;;:9;:13;;;;;;25923:55;;-1:-1:-1;26020:20:0;;26038:1;26020:17;:20::i;:::-;-1:-1:-1;;;;;26004:13:0;;;;;;;:9;:13;;;;;;;:36;;;;26068:23;;;;;;-1:-1:-1;;;;;;;;;;;26068:23:0;;;26089:1;6745:25:1;;6733:2;6718:18;;6700:76;26068:23:0;;;;;;;;25866:3;;;;:::i;:::-;;;;25828:283;;;-1:-1:-1;26145:12:0;;:16;;26160:1;26145:16;:::i;:::-;26129:32;;25759:418;;26203:13;;26200:173;;26278:4;26260:24;;;;:9;:24;;;;;;:39;;26289:9;26260:28;:39::i;:::-;26251:4;26233:24;;;;:9;:24;;;;;;;:66;;;;26319:42;;-1:-1:-1;;;;;26319:42:0;;;-1:-1:-1;;;;;;;;;;;26319:42:0;;;26351:9;6745:25:1;;6733:2;6718:18;;6700:76;26319:42:0;;;;;;;;26200:173;26392:56;26403:44;26433:13;26403:25;:9;26417:10;26403:13;:25::i;:44::-;26392:6;;:10;:56::i;:::-;26385:63;24804:1652;-1:-1:-1;;;;;;;24804:1652:0:o;1724:250::-;1782:7;1806:6;1802:47;;-1:-1:-1;1836:1:0;1829:8;;1802:47;1861:9;1873:5;1877:1;1873;:5;:::i;:::-;1861:17;-1:-1:-1;1906:1:0;1897:5;1901:1;1861:17;1897:5;:::i;:::-;:10;1889:56;;;;-1:-1:-1;;;1889:56:0;;9918:2:1;1889:56:0;;;9900:21:1;9957:2;9937:18;;;9930:30;9996:34;9976:18;;;9969:62;-1:-1:-1;;;10047:18:1;;;10040:31;10088:19;;1889:56:0;9890:223:1;1982:132:0;2040:7;2067:39;2071:1;2074;2067:39;;;;;;;;;;;;;;;;;:3;:39::i;23610:658::-;23760:16;;;23774:1;23760:16;;;;;;;;23736:21;;23760:16;;;;;;;;;;-1:-1:-1;23760:16:0;23736:40;;23805:4;23787;23792:1;23787:7;;;;;;-1:-1:-1;;;23787:7:0;;;;;;;;;-1:-1:-1;;;;;23787:23:0;;;:7;;;;;;;;;;:23;;;;23831:15;;:22;;;-1:-1:-1;;;23831:22:0;;;;:15;;;;;:20;;:22;;;;;23787:7;;23831:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23821:4;23826:1;23821:7;;;;;;-1:-1:-1;;;23821:7:0;;;;;;;;;-1:-1:-1;;;;;23821:32:0;;;:7;;;;;;;;;:32;23898:15;;23866:62;;23883:4;;23898:15;23916:11;23866:8;:62::i;:::-;23967:15;;:240;;-1:-1:-1;;;23967:240:0;;-1:-1:-1;;;;;23967:15:0;;;;:66;;:240;;24048:11;;23967:15;;24118:4;;24145;;24181:15;;23967:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24225:35;24242:11;24255:4;24225:35;;;;;;;:::i;:::-;;;;;;;;23610:658;;:::o;18567:126::-;18659:26;;-1:-1:-1;;;;;18659:18:0;;;:26;;;;;18678:6;;18659:26;;;;18678:6;18659:18;:26;;;;;;;;;;;;;;;;;;;;;18567:126;;:::o;24276:520::-;24456:15;;24424:62;;24441:4;;-1:-1:-1;;;;;24456:15:0;24474:11;24424:8;:62::i;:::-;24529:15;;24733:14;;24529:259;;-1:-1:-1;;;24529:259:0;;24601:4;24529:259;;;5894:34:1;5944:18;;;5937:34;;;24529:15:0;5987:18:1;;;5980:34;;;6030:18;;;6023:34;-1:-1:-1;;;;;24733:14:0;;;6073:19:1;;;6066:44;24762:15:0;6126:19:1;;;6119:35;24529:15:0;;;:31;;24568:9;;5828:19:1;;24529:259:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24276:520;;:::o;26464:321::-;26578:17;;26564:10;;:31;26561:43;;26464:321;;:::o;26561:43::-;26651:11;;-1:-1:-1;;;;;26651:11:0;26641:22;;;;:9;:22;;;;;;:35;;26668:7;26641:26;:35::i;:::-;26626:11;;-1:-1:-1;;;;;26626:11:0;26616:22;;;;:9;:22;;;;;:60;26700:10;;:23;;26715:7;26700:14;:23::i;:::-;26687:10;:36;26756:11;;26739:38;;6745:25:1;;;-1:-1:-1;;;;;26756:11:0;;;;26739:38;;;-1:-1:-1;;;;;;;;;;;26739:38:0;6733:2:1;6718:18;26739:38:0;;;;;;;26464:321;;:::o;2122:278::-;2208:7;2243:12;2236:5;2228:28;;;;-1:-1:-1;;;2228:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2267:9:0;2279:5;2283:1;2279;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1646:6;1654;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1772:9;1759:23;1791:31;1816:5;1791:31;:::i;:::-;1841:5;-1:-1:-1;1865:35:1;1896:2;1881:18;;1865:35;:::i;:::-;1855:45;;1665:241;;;;;:::o;1911:325::-;1979:6;1987;2040:2;2028:9;2019:7;2015:23;2011:32;2008:2;;;2061:6;2053;2046:22;2008:2;2105:9;2092:23;2124:31;2149:5;2124:31;:::i;:::-;2174:5;2226:2;2211:18;;;;2198:32;;-1:-1:-1;;;1998:238:1:o;2241:739::-;2333:6;2341;2349;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2423:6;2415;2408:22;2370:2;2468:9;2455:23;2497:18;2538:2;2530:6;2527:14;2524:2;;;2559:6;2551;2544:22;2524:2;2602:6;2591:9;2587:22;2577:32;;2647:7;2640:4;2636:2;2632:13;2628:27;2618:2;;2674:6;2666;2659:22;2618:2;2719;2706:16;2745:2;2737:6;2734:14;2731:2;;;2766:6;2758;2751:22;2731:2;2826:7;2819:4;2809:6;2806:1;2802:14;2798:2;2794:23;2790:34;2787:47;2784:2;;;2852:6;2844;2837:22;2784:2;2888:4;2880:13;;;;-1:-1:-1;2912:6:1;-1:-1:-1;2937:37:1;;2953:20;;;-1:-1:-1;2937:37:1;:::i;:::-;2927:47;;2360:620;;;;;:::o;2985:190::-;3041:6;3094:2;3082:9;3073:7;3069:23;3065:32;3062:2;;;3115:6;3107;3100:22;3062:2;3143:26;3159:9;3143:26;:::i;3180:190::-;3239:6;3292:2;3280:9;3271:7;3267:23;3263:32;3260:2;;;3313:6;3305;3298:22;3260:2;-1:-1:-1;3341:23:1;;3250:120;-1:-1:-1;3250:120:1:o;3375:326::-;3452:6;3460;3468;3521:2;3509:9;3500:7;3496:23;3492:32;3489:2;;;3542:6;3534;3527:22;3489:2;-1:-1:-1;;3570:23:1;;;3640:2;3625:18;;3612:32;;-1:-1:-1;3691:2:1;3676:18;;;3663:32;;3479:222;-1:-1:-1;3479:222:1:o;3706:316::-;3794:6;3802;3810;3863:2;3851:9;3842:7;3838:23;3834:32;3831:2;;;3884:6;3876;3869:22;3831:2;3918:9;3912:16;3902:26;;3968:2;3957:9;3953:18;3947:25;3937:35;;4012:2;4001:9;3997:18;3991:25;3981:35;;3821:201;;;;;:::o;4027:463::-;4080:3;4118:5;4112:12;4145:6;4140:3;4133:19;4171:4;4200:2;4195:3;4191:12;4184:19;;4237:2;4230:5;4226:14;4258:3;4270:195;4284:6;4281:1;4278:13;4270:195;;;4349:13;;-1:-1:-1;;;;;4345:39:1;4333:52;;4405:12;;;;4440:15;;;;4381:1;4299:9;4270:195;;;-1:-1:-1;4481:3:1;;4088:402;-1:-1:-1;;;;;4088:402:1:o;6781:603::-;6893:4;6922:2;6951;6940:9;6933:21;6983:6;6977:13;7026:6;7021:2;7010:9;7006:18;6999:34;7051:4;7064:140;7078:6;7075:1;7072:13;7064:140;;;7173:14;;;7169:23;;7163:30;7139:17;;;7158:2;7135:26;7128:66;7093:10;;7064:140;;;7222:6;7219:1;7216:13;7213:2;;;7292:4;7287:2;7278:6;7267:9;7263:22;7259:31;7252:45;7213:2;-1:-1:-1;7368:2:1;7347:15;-1:-1:-1;;7343:29:1;7328:45;;;;7375:2;7324:54;;6902:482;-1:-1:-1;;;6902:482:1:o;10118:356::-;10320:2;10302:21;;;10339:18;;;10332:30;10398:34;10393:2;10378:18;;10371:62;10465:2;10450:18;;10292:182::o;12229:332::-;12436:6;12425:9;12418:25;12479:2;12474;12463:9;12459:18;12452:30;12399:4;12499:56;12551:2;12540:9;12536:18;12528:6;12499:56;:::i;:::-;12491:64;12408:153;-1:-1:-1;;;;12408:153:1:o;12566:582::-;12865:6;12854:9;12847:25;12908:6;12903:2;12892:9;12888:18;12881:34;12951:3;12946:2;12935:9;12931:18;12924:31;12828:4;12972:57;13024:3;13013:9;13009:19;13001:6;12972:57;:::i;:::-;-1:-1:-1;;;;;13065:32:1;;;;13060:2;13045:18;;13038:60;-1:-1:-1;13129:3:1;13114:19;13107:35;12964:65;12837:311;-1:-1:-1;;;12837:311:1:o;13342:128::-;13382:3;13413:1;13409:6;13406:1;13403:13;13400:2;;;13419:18;;:::i;:::-;-1:-1:-1;13455:9:1;;13390:80::o;13475:217::-;13515:1;13541;13531:2;;-1:-1:-1;;;13566:31:1;;13620:4;13617:1;13610:15;13648:4;13573:1;13638:15;13531:2;-1:-1:-1;13677:9:1;;13521:171::o;13697:168::-;13737:7;13803:1;13799;13795:6;13791:14;13788:1;13785:21;13780:1;13773:9;13766:17;13762:45;13759:2;;;13810:18;;:::i;:::-;-1:-1:-1;13850:9:1;;13749:116::o;13870:125::-;13910:4;13938:1;13935;13932:8;13929:2;;;13943:18;;:::i;:::-;-1:-1:-1;13980:9:1;;13919:76::o;14000:380::-;14079:1;14075:12;;;;14122;;;14143:2;;14197:4;14189:6;14185:17;14175:27;;14143:2;14250;14242:6;14239:14;14219:18;14216:38;14213:2;;;14296:10;14291:3;14287:20;14284:1;14277:31;14331:4;14328:1;14321:15;14359:4;14356:1;14349:15;14213:2;;14055:325;;;:::o;14385:135::-;14424:3;-1:-1:-1;;14445:17:1;;14442:2;;;14465:18;;:::i;:::-;-1:-1:-1;14512:1:1;14501:13;;14432:88::o;14525:127::-;14586:10;14581:3;14577:20;14574:1;14567:31;14617:4;14614:1;14607:15;14641:4;14638:1;14631:15;14657:131;-1:-1:-1;;;;;14732:31:1;;14722:42;;14712:2;;14778:1;14775;14768:12;14712:2;14702:86;:::o

Swarm Source

ipfs://9207df0d67b08022a98729c671c23b6430125bf5c48d5e10b18f28fabc7b5e48
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.