ETH Price: $3,067.06 (+3.23%)
Gas: 9 Gwei

Token

EnTHropy (EnTH)
 

Overview

Max Total Supply

100,000,000,000 EnTH

Holders

144

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ENTHROPY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: UNLICENSED

/**
This is an extremely experimental project. Invest at your own risk.
This is ENTHROPY, an experiment to find order in chaos.
Stealth launch, no social, nada. Feel free to make them, if you wish. After all, it's your duty.
Contract has been audited with Mythx (https://mythx.io/), you can find the audit here https://blockchain.mypinata.cloud/ipfs/QmbrVGDRhkM54PTkr3YcuXdzRgumuDEdCCD7BZkkKuurmp
Taxes are differentiated for buys/transfers and sells.
BUY/TRANSFER: 1% LIQ, 1% DEV, 1% MULTISIGNATURE.
SELL: 1.66% LIQ, 1.66% DEV, 1.66% MULTISIGNATURE.

Total supply 100000000000
Max transaction is 500000000 - 0.5%
Max wallet is 1000000000 - 1%

Take a look at this countdown - https://www.tickcounter.com/countdown/3181804/enthropy-phase-2
When the timer will hit 0:00:00, liq will be taken out from the contract and burned and the multisignature contract (0x4be06AC6f859c54D397B3948127Cd36404eCF698) will be given to the crowd with Auth access.
Every function in the contract (and of course the funds) will be available to the multisignature, except set_owner() and set_dev_share(). Don't worry, I will teach you.
Top 20 holders at that time will be granted an nft to certify their partecipation and a spot in the multisignature wallet. In the subsequent hours you'll be contacted by me via either a transaction on the blockchain or with the Blockscan chat (https://chat.blockscan.com/).
From that point on, everything will be on your hands. You and your team will have freedom to move, freedom to add or remove people from the multisig, freedom to make this fly or kill it.
If you will behave and not fuck each other, I will show myself, be a counselor and, in case you wish, help you build utilities.

You can reach me on Blockscan chat or by sending an empty transaction with a message to the deployer address, in case you wish. I will answer the same way
Occasionally I may send transactions with messages directly to the contract, look out for them. Or not, up to you.
Good luck.
*/

/* mythx-disable SWC-101*/

pragma solidity 0.8.7;


library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

interface ERC20 {
    function totalSupply() external view returns (uint _totalSupply);
    function balanceOf(address _owner) external view returns (uint balance);
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint _value) external returns (bool success);
    function approve(address _spender, uint _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint remaining);
    event Transfer(address indexed _from, address indexed _to, uint _value);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
}

interface IUniswapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapRouter01 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapRouter02 is IUniswapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


interface IUniswapV2Pair {
  event Approval(address indexed owner, address indexed spender, uint value);
  event Transfer(address indexed from, address indexed to, uint value);

  function name() external pure returns (string memory);
  function symbol() external pure returns (string memory);
  function decimals() external pure returns (uint8);
  function totalSupply() external view returns (uint);
  function balanceOf(address owner) external view returns (uint);
  function allowance(address owner, address spender) external view returns (uint);

  function approve(address spender, uint value) external returns (bool);
  function transfer(address to, uint value) external returns (bool);
  function transferFrom(address from, address to, uint value) external returns (bool);

  function DOMAIN_SEPARATOR() external view returns (bytes32);
  function PERMIT_TYPEHASH() external pure returns (bytes32);
  function nonces(address owner) external view returns (uint);

  function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

  event Mint(address indexed sender, uint amount0, uint amount1);
  event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
  event Swap(
      address indexed sender,
      uint amount0In,
      uint amount1In,
      uint amount0Out,
      uint amount1Out,
      address indexed to
  );
  event Sync(uint112 reserve0, uint112 reserve1);

  function MINIMUM_LIQUIDITY() external pure returns (uint);
  function factory() external view returns (address);
  function token0() external view returns (address);
  function token1() external view returns (address);
  function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
  function price0CumulativeLast() external view returns (uint);
  function price1CumulativeLast() external view returns (uint);
  function kLast() external view returns (uint);

  function mint(address to) external returns (uint liquidity);
  function burn(address to) external returns (uint amount0, uint amount1);
  function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
  function skim(address to) external;
  function sync() external;
}

contract smart {
    using SafeMath for uint;

    address public router_address = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IUniswapRouter02 public router = IUniswapRouter02(router_address);

    function create_weth_pair(address token) private returns (address, IUniswapV2Pair) {
       address pair_address = IUniswapFactory(router.factory()).createPair(token, router.WETH());
       return (pair_address, IUniswapV2Pair(pair_address));
    }

    function get_weth_reserve(address pair_address) private  view returns(uint, uint) {
        IUniswapV2Pair pair = IUniswapV2Pair(pair_address);
        uint112 token_reserve;
        uint112 native_reserve;
        uint32 last_timestamp;
        (token_reserve, native_reserve, last_timestamp) = pair.getReserves();
        return (token_reserve, native_reserve);
    }

    function get_weth_price_impact(address token, uint amount, bool sell) private view returns(uint) {
        address pair_address = IUniswapFactory(router.factory()).getPair(token, router.WETH());
        (uint res_token, uint res_weth) = get_weth_reserve(pair_address);
        uint impact;
        if(sell) {
            impact = (amount.mul(100)).div(res_token);
        } else {
            impact = (amount.mul(100)).div(res_weth);
        }
        return impact;
    }
}



contract protected {

    bool public bot_smasher = true;
    bool public trade_enabled = false;

    mapping (address => bool) public is_auth;

    function authorized(address addy) public view returns(bool) {
        return is_auth[addy];
    }

    function set_authorized(address addy, bool booly) public onlyAuth {
        is_auth[addy] = booly;
    }

    modifier onlyAuth() {
        require( is_auth[msg.sender] || msg.sender==owner, "not owner");
        _;
    }

    address public owner;
    address public developer;

    modifier onlyDev {
        require(msg.sender==developer);
        _;
    }

    modifier onlyOwner() {
        require(msg.sender==owner, "not owner");
        _;
    }

    bool public locked;
    modifier safe() {
        require(!locked, "reentrant");
        locked = true;
        _;
        locked = false;
    }

    receive() external payable {}
    fallback() external payable {}
}

contract ENTHROPY is smart, protected, ERC20 {

    using SafeMath for uint;
    using SafeMath for uint8;

    mapping(address => bool) public tax_free;
    mapping(address => bool) public lock_free;
    mapping(address => bool) public is_black;
    mapping(address => bool) public is_free_from_max_tx;
    mapping(address => bool) public is_free_from_max_wallet;


    string public constant _name = 'EnTHropy';
    string public constant _symbol = 'EnTH';
    uint8 public constant _decimals = 18;
    uint256 public constant InitialSupply= 100 * (10**9) * (10**_decimals);
    uint256 public constant _circulatingSupply= InitialSupply;
    address public constant UniswapRouter=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;
    address public multisignature = 0x4be06AC6f859c54D397B3948127Cd36404eCF698;

    mapping(address => uint) public last_tx;

    bool public pegged = true;
    bool public manual_swap = false;

    uint public dev_balance;
    uint public multisig_balance;

    uint8 public buy_tax = 3;
    uint8 public sell_tax = 5;
    uint8 public transfer_tax = 3;

    uint8 public max_wallet = 1;
    uint8 public max_perK = 5;

    uint8 devShare = 33;
    uint8 liquidityShare = 34;
    uint8 multisigShare = 33;

    uint public swap_treshold = (_circulatingSupply.div(300));

    mapping (address => uint256) public _balances;
    mapping (address => mapping (address => uint256)) public _allowances;

    address public pair_address;
    IUniswapV2Pair public pair;

    constructor() {
        owner = msg.sender;
        developer = msg.sender;
        is_auth[owner] = true;
        pair_address = IUniswapFactory(router.factory()).createPair(address(this), router.WETH());
        pair = IUniswapV2Pair(pair_address);
        tax_free[msg.sender] = true;
        tax_free[multisignature] = true;
        is_free_from_max_wallet[pair_address] = true;
        _balances[developer] = totalSupply();
        emit Transfer(Dead, address(this), totalSupply());
        _approve(address(this), address(router), _circulatingSupply);
        _approve(address(owner), address(router), _circulatingSupply);
    }

    function _transfer(address sender, address recipient, uint amount) public {

        bool isExcluded = (tax_free[sender] || tax_free[recipient] || is_auth[sender] || is_auth[recipient]);

        bool isContractTransfer=(sender==address(this) || recipient==address(this));

        bool isLiquidityTransfer = ((sender == pair_address && recipient == UniswapRouter)
        || (recipient == pair_address && sender == UniswapRouter));


        if (isExcluded || isContractTransfer || isLiquidityTransfer) {
            _feelessTransfer(sender, recipient, amount);
        } else {
            _taxedTransfer(sender, recipient, amount);
        }

    }

    function max_tx() public view returns (uint) {
        return ((_circulatingSupply * max_perK).div(1000));
    }

    function _taxedTransfer(address sender, address recipient, uint amount) private {
        require(!is_black[sender] && !is_black[recipient], "Blacklisted");

        if(!bot_smasher) {
            require(trade_enabled, "STOP");
        } else {
            if(!trade_enabled) {
                emit Transfer(sender, recipient, 0);
                return;
            }
        }

        if(!is_free_from_max_tx[sender]) {
            require(amount <= max_tx());
        }

        if(!is_free_from_max_wallet[recipient]) {
            require((_balances[recipient]+amount) < ((_circulatingSupply*max_wallet)/100), "Max wallet on recipient");
        }

        bool isSell=recipient== pair_address|| recipient == router_address;

        (uint taxedAmount, uint taxes) = calculateFees(amount, isSell);

        if((_balances[address(this)] > swap_treshold) && !manual_swap && !locked) {
            if(isSell && !manual_swap) {
                swap_taxes(amount);
            }
        }

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(taxedAmount);
        _balances[address(this)] = _balances[address(this)].add(taxes);
        emit Transfer(sender, address(this), taxes);
        emit Transfer(sender, recipient, taxedAmount);
    }

    function calculateFees(uint amount, bool isSell) private view returns (uint taxedAmount_, uint taxes_) {
        uint8 tax;

        if(isSell) {
            tax = sell_tax;
        } else {
            tax = buy_tax;
        }

        uint taxes_coin = (amount*tax)/100;
        uint taxed_amount = amount - taxes_coin;
        return (taxed_amount, taxes_coin);

    }

    function swap_taxes(uint256 tx_amount) private safe{
        uint256 contractBalance = _balances[address(this)];
        uint16 totalTax = liquidityShare + multisigShare + devShare;
        uint256 amount_to_swap = (swap_treshold.mul(75)).div(100);

        if(amount_to_swap > tx_amount) {
            if(pegged) {
                amount_to_swap = tx_amount;
            }
        }
        if(contractBalance<amount_to_swap){
            return;
        }

        uint256 tokenForLiquidity=(amount_to_swap*liquidityShare)/totalTax;
        uint256 tokenForMarketing= (amount_to_swap * multisigShare)/totalTax;
        uint256 tokenFordev= (amount_to_swap * devShare)/totalTax;

        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqETHToken=tokenForLiquidity-liqToken;

        uint256 swapToken=liqETHToken+tokenForMarketing+tokenFordev;
        uint256 initialETHBalance = address(this).balance;
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapToken,
            0,
            path,
            address(this),
            block.timestamp
            );
        uint256 newETH=(address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH*liqETHToken)/swapToken;
        router.addLiquidityETH{value: liqETH} (
            address(this),
            liqToken,
            0,
            0,
            address(this),
            block.timestamp);

        uint256 generatedETH=(address(this).balance - initialETHBalance);
        uint256 multisigSplit = (generatedETH * multisigShare)/100;
        uint256 devSplit = (generatedETH * devShare)/100;
        multisig_balance += multisigSplit;
        dev_balance += devSplit;
    }


    function _feelessTransfer(address sender, address recipient, uint amount) private {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }

    function ready_set_launch() public onlyDev {
        require(trade_enabled == false);
        bot_smasher = false;
        trade_enabled = true;
    }

    function withdraw_dev() public onlyDev {
        uint256 amount=dev_balance;
        dev_balance=0;
        (bool sent, ) = developer.call{value: (amount)}("");
        require(sent, "Error");
    }

    function withdraw_multisig() public onlyAuth {
        uint256 amount=multisig_balance;
        multisig_balance=0;
        (bool sent, ) = multisignature.call{value: (amount)}("");
        require(sent, "Error");
    }

    function emergency_withdraw() public onlyAuth {

        uint256 amount = (((address(this).balance)*95)/100);
        uint256 amount_dev = amount.mul(devShare.div(devShare + multisigShare));
        uint256 amount_multisig = amount.mul(multisigShare.div(devShare + multisigShare));
        dev_balance=0;
        multisig_balance=0;
        (bool sentdev, ) = developer.call{value: (amount_dev)}("");
        (bool sentmulti, ) = multisignature.call{value: (amount_multisig)}("");
        require(sentdev, "Error");
        require(sentmulti, "Error");
    }

    function set_dev_share(uint8 dev) public onlyDev {
        require(dev <= 33, "33 max");
        devShare = dev;
    }

    function set_shares(uint8 liq, uint8 multisig) public onlyAuth {
        liquidityShare = liq;
        multisigShare = multisig;
        require((liq+multisig)<=66, "Need to be 66 max");
        uint totalShares = liquidityShare.add(multisigShare).add(devShare);
        if (totalShares < 100) {
            devShare.add(100-totalShares);
        }
    }

    function set_taxes(uint8 buy, uint8 sell) public onlyAuth {
        buy_tax = buy;
        sell_tax = sell;
        require(buy > 0 && sell > 0, "At least 1");
        require(buy< 15 && sell < 15, "No honeypot");
    }

    function set_manual_swap(bool booly) public onlyAuth {
        manual_swap = booly;
    }

    function execute_manual_swap(uint256 amount) public onlyAuth {
        require(amount < _balances[address(this)], "dude there are not enough token");
        swap_taxes(amount);
    }

    function rescue_tokens(address tknAddress) public onlyAuth {
        ERC20 token = ERC20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance>0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }

    function set_max_tx(uint8 maxtx) public onlyAuth {
        max_perK = maxtx;
        require(maxtx >= 5, "At least 5, remember that it's /1000, so 5 = 0.5%");
    }

    function set_max_wallet(uint8 maxwallet) public onlyAuth {
        max_wallet = maxwallet;
        require(maxwallet >= 1, "At least 1, remember that it's /100, so 1 = 1%");
    }

    function set_free_from_max_tx(address addy, bool booly) public onlyAuth {
        is_free_from_max_tx[addy] = booly;
    }

    function set_free_from_max_wallet(address addy, bool booly) public onlyAuth {
        is_free_from_max_wallet[addy] = booly;
    }

    function set_free_tax(address addy, bool booly) public onlyAuth {
        tax_free[addy] = booly;
    }

    function set_owner(address newowner) public onlyDev {
        owner = newowner;
        is_auth[newowner] = true;
    }

    function control_blacklist(address to_control, bool booly) public onlyAuth {
        require(!(to_control==developer));
        is_black[to_control] = booly;
    }

    function set_pegged_swap(bool booly) public onlyAuth {
        pegged = booly;
    }

    function getOwner() external view returns (address) {
        return owner;
    }

    function name() external pure returns (string memory) {
        return _name;
    }

    function symbol() external pure returns (string memory) {
        return _symbol;
    }

    function decimals() external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() pure public override returns (uint256) {
        return _circulatingSupply;
    }

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function _approve(address _owner, address spender, uint256 amount) private {
        require(_owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

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

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }


    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

 /* mythx-enable SWC-101*/

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bot_smasher","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy_tax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_control","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"control_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"dev_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergency_withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"execute_manual_swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"is_auth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"is_black","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"is_free_from_max_tx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"is_free_from_max_wallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"last_tx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lock_free","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manual_swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_perK","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_tx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_wallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisig_balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisignature","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pegged","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ready_set_launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"rescue_tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sell_tax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_authorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"dev","type":"uint8"}],"name":"set_dev_share","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_free_from_max_tx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_free_from_max_wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_free_tax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_manual_swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxtx","type":"uint8"}],"name":"set_max_tx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"maxwallet","type":"uint8"}],"name":"set_max_wallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newowner","type":"address"}],"name":"set_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"booly","type":"bool"}],"name":"set_pegged_swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"liq","type":"uint8"},{"internalType":"uint8","name":"multisig","type":"uint8"}],"name":"set_shares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"}],"name":"set_taxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swap_treshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tax_free","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"trade_enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transfer_tax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw_dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw_multisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600080546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17909155600180546001600160b01b03191674017a250d5630b4cf539739df2c5dacb4c659f2488d178155600a8054909216734be06ac6f859c54d397b3948127cd36404ecf698178255600c805461ffff19169091179055600f80546721222105010305036001600160401b0319909116179055620000d99061012c90620000b490601290620005d3565b620000c59064174876e80062000692565b620003fd60201b62001dd81790919060201c565b601055348015620000e957600080fd5b5060038054336001600160a01b031991821681179092556004805490911682178155600091825260026020908152604092839020805460ff1916600190811790915554835163c45a015560e01b815293516001600160a01b039091169363c45a015593818101939291829003018186803b1580156200016757600080fd5b505afa1580156200017c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a2919062000535565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020057600080fd5b505afa15801562000215573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023b919062000535565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028457600080fd5b505af115801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000535565b601380546001600160a01b039283166001600160a01b03199182168117835560148054909216179055336000908152600560209081526040808320805460ff199081166001908117909255600a548716855282852080548216831790559454909516835260099091529020805490911690911790556200033e62000414565b6004546001600160a01b03166000908152601160205260409020553061dead7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200038862000414565b60405190815260200160405180910390a3600154620003d19030906001600160a01b0316620003ba6012600a620005d3565b620003cb9064174876e80062000692565b6200043a565b600354600154620003f7916001600160a01b039081169116620003ba6012600a620005d3565b620006ca565b60006200040b828462000567565b90505b92915050565b6000620004246012600a620005d3565b620004359064174876e80062000692565b905090565b6001600160a01b0383166200048a5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b60448201526064015b60405180910390fd5b6001600160a01b038216620004d45760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b604482015260640162000481565b6001600160a01b0383811660008181526012602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000602082840312156200054857600080fd5b81516001600160a01b03811681146200056057600080fd5b9392505050565b6000826200058557634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005cb578160001904821115620005af57620005af620006b4565b80851615620005bd57918102915b93841c93908002906200058f565b509250929050565b60006200040b60ff841683600082620005ef575060016200040e565b81620005fe575060006200040e565b8160018114620006175760028114620006225762000642565b60019150506200040e565b60ff841115620006365762000636620006b4565b50506001821b6200040e565b5060208310610133831016604e8410600b841016171562000667575081810a6200040e565b6200067383836200058a565b80600019048211156200068a576200068a620006b4565b029392505050565b6000816000190483118215151615620006af57620006af620006b4565b500290565b634e487b7160e01b600052601160045260246000fd5b612d6b80620006da6000396000f3fe6080604052600436106103d95760003560e01c806382c4767b116101fb578063b918161111610117578063cf309012116100a5578063e717fc3011610077578063e717fc3014610cbe578063f4ea55ab14610cdf578063f887ea4014610d0f578063fab2e05414610d2f578063fafab66514610d4f57005b8063cf30901214610c03578063d28d885214610c24578063d46f2f6614610c58578063dd62ed3e14610c7857005b8063c78dc6fd116100e9578063c78dc6fd14610b6e578063ca4b208b14610b8d578063cbc1cfd214610bad578063cbe7003014610bc2578063ce79429414610be357005b8063b918161114610acc578063c01bb48b14610b05578063c664c31d14610b26578063c7639d8014610b4657005b8063a253c06e11610194578063ad95fc8f11610166578063ad95fc8f14610a0a578063af1bb5c014610a3a578063b09f126614610a5a578063b0ef593714610a8a578063b544d2e614610aaa57005b8063a253c06e1461050c578063a457c2d7146109aa578063a8aa1b31146109ca578063a9059cbb146109ea57005b806393505052116101cd5780639350505214610919578063952eb8a71461093857806395d89b411461096857806396e5686a1461099557005b806382c4767b146108a5578063893d20e8146108bb5780638da5cb5b146108d957806391e96a30146108f957005b806339509351116102f55780636ebcf60711610283578063734fbf6311610255578063734fbf63146108095780637b1608631461081f5780637cb97b2b1461083f5780637f04f97e1461085f578063826c89bd1461087557005b80636ebcf6071461077157806370a082311461079e57806370bfcf40146107d457806370fbc712146107f457005b80634147c6a7116102c75780634147c6a7146106d25780634edebbba146106ec57806357d8ae821461070c5780635bd263e71461073c578063658ce7f81461075c57005b806339509351146106455780633a32fea8146106655780633f27cc48146106855780633fe7e33c146106a557005b806323b872dd1161037257806330e0789e1161034457806330e0789e146105a1578063313ce567146105c1578063320fac17146105e357806332424aa3146105f857806334184e261461060d57005b806323b872dd1461052157806323c66e761461054157806326e76613146105615780632bfe87421461058157005b806313f27383116103ab57806313f27383146104b157806317668f1b146104c757806318160ddd146104f75780631eb25d131461050c57005b8063024c2ddd146103e257806306fdde031461042d5780630907861314610467578063095ea7b31461049157005b366103e057005b005b3480156103ee57600080fd5b5061041a6103fd36600461287f565b601260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561043957600080fd5b50604080518082019091526008815267456e5448726f707960c01b60208201525b6040516104249190612a3b565b34801561047357600080fd5b50600c546104819060ff1681565b6040519015158152602001610424565b34801561049d57600080fd5b506104816104ac366004612927565b610d6f565b3480156104bd57600080fd5b5061041a60105481565b3480156104d357600080fd5b506104816104e2366004612845565b60056020526000908152604090205460ff1681565b34801561050357600080fd5b5061041a610d86565b34801561051857600080fd5b5061041a610da8565b34801561052d57600080fd5b5061048161053c3660046128b8565b610dc6565b34801561054d57600080fd5b506103e061055c3660046129ed565b610e62565b34801561056d57600080fd5b506103e061057c366004612a08565b610ed8565b34801561058d57600080fd5b506103e061059c3660046128f9565b611011565b3480156105ad57600080fd5b506103e06105bc3660046128b8565b611080565b3480156105cd57600080fd5b5060125b60405160ff9091168152602001610424565b3480156105ef57600080fd5b506103e06111e1565b34801561060457600080fd5b506105d1601281565b34801561061957600080fd5b5060135461062d906001600160a01b031681565b6040516001600160a01b039091168152602001610424565b34801561065157600080fd5b50610481610660366004612927565b611225565b34801561067157600080fd5b506103e06106803660046128f9565b61125c565b34801561069157600080fd5b506103e06106a03660046128f9565b6112cb565b3480156106b157600080fd5b5061041a6106c0366004612845565b600b6020526000908152604090205481565b3480156106de57600080fd5b50600f546105d19060ff1681565b3480156106f857600080fd5b506103e0610707366004612953565b61133a565b34801561071857600080fd5b50610481610727366004612845565b60096020526000908152604090205460ff1681565b34801561074857600080fd5b506103e06107573660046128f9565b611391565b34801561076857600080fd5b506103e061141b565b34801561077d57600080fd5b5061041a61078c366004612845565b60116020526000908152604090205481565b3480156107aa57600080fd5b5061041a6107b9366004612845565b6001600160a01b031660009081526011602052604090205490565b3480156107e057600080fd5b506103e06107ef366004612953565b6114bb565b34801561080057600080fd5b5061041a611519565b34801561081557600080fd5b5061041a600d5481565b34801561082b57600080fd5b506103e061083a3660046129ed565b61155d565b34801561084b57600080fd5b506103e061085a366004612845565b61162e565b34801561086b57600080fd5b5061041a600e5481565b34801561088157600080fd5b50610481610890366004612845565b60076020526000908152604090205460ff1681565b3480156108b157600080fd5b5061062d61dead81565b3480156108c757600080fd5b506003546001600160a01b031661062d565b3480156108e557600080fd5b5060035461062d906001600160a01b031681565b34801561090557600080fd5b506103e06109143660046129ed565b61167f565b34801561092557600080fd5b50600f546105d190610100900460ff1681565b34801561094457600080fd5b50610481610953366004612845565b60086020526000908152604090205460ff1681565b34801561097457600080fd5b5060408051808201909152600481526308adca8960e31b602082015261045a565b3480156109a157600080fd5b506103e0611748565b3480156109b657600080fd5b506104816109c5366004612927565b6117b2565b3480156109d657600080fd5b5060145461062d906001600160a01b031681565b3480156109f657600080fd5b50610481610a05366004612927565b61182e565b348015610a1657600080fd5b50610481610a25366004612845565b60066020526000908152604090205460ff1681565b348015610a4657600080fd5b506103e0610a55366004612845565b61183b565b348015610a6657600080fd5b5061045a6040518060400160405280600481526020016308adca8960e31b81525081565b348015610a9657600080fd5b506103e0610aa5366004612a08565b6119cd565b348015610ab657600080fd5b50600f546105d190640100000000900460ff1681565b348015610ad857600080fd5b50610481610ae7366004612845565b6001600160a01b031660009081526002602052604090205460ff1690565b348015610b1157600080fd5b5060015461048190600160a81b900460ff1681565b348015610b3257600080fd5b50600f546105d19062010000900460ff1681565b348015610b5257600080fd5b5061062d737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610b7a57600080fd5b50600c5461048190610100900460ff1681565b348015610b9957600080fd5b5060045461062d906001600160a01b031681565b348015610bb957600080fd5b506103e0611acb565b348015610bce57600080fd5b5060015461048190600160a01b900460ff1681565b348015610bef57600080fd5b50600a5461062d906001600160a01b031681565b348015610c0f57600080fd5b5060045461048190600160a01b900460ff1681565b348015610c3057600080fd5b5061045a60405180604001604052806008815260200167456e5448726f707960c01b81525081565b348015610c6457600080fd5b5060005461062d906001600160a01b031681565b348015610c8457600080fd5b5061041a610c9336600461287f565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b348015610cca57600080fd5b50600f546105d1906301000000900460ff1681565b348015610ceb57600080fd5b50610481610cfa366004612845565b60026020526000908152604090205460ff1681565b348015610d1b57600080fd5b5060015461062d906001600160a01b031681565b348015610d3b57600080fd5b506103e0610d4a36600461298d565b611cbe565b348015610d5b57600080fd5b506103e0610d6a3660046128f9565b611d69565b6000610d7c338484611deb565b5060015b92915050565b6000610d946012600a612be5565b610da39064174876e800612c90565b905090565b610db46012600a612be5565b610dc39064174876e800612c90565b81565b6000610dd3848484611080565b6001600160a01b038416600090815260126020908152604080832033845290915290205482811015610e435760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064015b60405180910390fd5b610e578533610e528685612caf565b611deb565b506001949350505050565b6004546001600160a01b03163314610e7957600080fd5b60218160ff161115610eb65760405162461bcd60e51b81526020600482015260066024820152650666640dac2f60d31b6044820152606401610e3a565b600f805460ff909216600160281b0265ff000000000019909216919091179055565b3360009081526002602052604090205460ff1680610f0057506003546001600160a01b031633145b610f1c5760405162461bcd60e51b8152600401610e3a90612aaf565b600f805460ff838116600160381b0267ff0000000000000019918616600160301b029190911667ffff00000000000019909216919091171790556042610f628284612b5b565b60ff161115610fa75760405162461bcd60e51b815260206004820152601160248201527009ccacac840e8de40c4ca406c6c40dac2f607b1b6044820152606401610e3a565b600f54600090610fde9060ff600160281b8204811691610fd891600160301b8204811691600160381b900416611edf565b90611edf565b9050606481101561100c5761100a610ff7826064612caf565b600f54600160281b900460ff1690611edf565b505b505050565b3360009081526002602052604090205460ff168061103957506003546001600160a01b031633145b6110555760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b6001600160a01b03831660009081526005602052604081205460ff16806110bf57506001600160a01b03831660009081526005602052604090205460ff165b806110e257506001600160a01b03841660009081526002602052604090205460ff165b8061110557506001600160a01b03831660009081526002602052604090205460ff165b905060006001600160a01b03851630148061112857506001600160a01b03841630145b6013549091506000906001600160a01b03878116911614801561116757506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b806111a657506013546001600160a01b0386811691161480156111a657506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b905082806111b15750815b806111b95750805b156111ce576111c9868686611eeb565b6111d9565b6111d9868686611f7a565b505050505050565b6004546001600160a01b031633146111f857600080fd5b600154600160a81b900460ff161561120f57600080fd5b6001805461ffff60a01b1916600160a81b179055565b3360008181526012602090815260408083206001600160a01b03871684529091528120549091610d7c918590610e52908690612b43565b3360009081526002602052604090205460ff168061128457506003546001600160a01b031633145b6112a05760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360009081526002602052604090205460ff16806112f357506003546001600160a01b031633145b61130f5760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360009081526002602052604090205460ff168061136257506003546001600160a01b031633145b61137e5760405162461bcd60e51b8152600401610e3a90612aaf565b600c805460ff1916911515919091179055565b3360009081526002602052604090205460ff16806113b957506003546001600160a01b031633145b6113d55760405162461bcd60e51b8152600401610e3a90612aaf565b6004546001600160a01b03838116911614156113f057600080fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6004546001600160a01b0316331461143257600080fd5b600d80546000918290556004546040519192916001600160a01b039091169083905b60006040518083038185875af1925050503d8060008114611491576040519150601f19603f3d011682016040523d82523d6000602084013e611496565b606091505b50509050806114b75760405162461bcd60e51b8152600401610e3a90612a90565b5050565b3360009081526002602052604090205460ff16806114e357506003546001600160a01b031633145b6114ff5760405162461bcd60e51b8152600401610e3a90612aaf565b600c80549115156101000261ff0019909216919091179055565b600f54600090610da3906103e890640100000000900460ff1661153e6012600a612be5565b61154d9064174876e800612c90565b6115579190612c90565b90611dd8565b3360009081526002602052604090205460ff168061158557506003546001600160a01b031633145b6115a15760405162461bcd60e51b8152600401610e3a90612aaf565b600f805464ff00000000191664010000000060ff8416908102919091179091556005111561162b5760405162461bcd60e51b815260206004820152603160248201527f4174206c6561737420352c2072656d656d62657220746861742069742773202f604482015270313030302c20736f2035203d20302e352560781b6064820152608401610e3a565b50565b6004546001600160a01b0316331461164557600080fd5b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600260205260409020805460ff19166001179055565b3360009081526002602052604090205460ff16806116a757506003546001600160a01b031633145b6116c35760405162461bcd60e51b8152600401610e3a90612aaf565b600f805463ff0000001916630100000060ff8416908102919091179091556001111561162b5760405162461bcd60e51b815260206004820152602e60248201527f4174206c6561737420312c2072656d656d62657220746861742069742773202f60448201526d3130302c20736f2031203d20312560901b6064820152608401610e3a565b3360009081526002602052604090205460ff168061177057506003546001600160a01b031633145b61178c5760405162461bcd60e51b8152600401610e3a90612aaf565b600e8054600091829055600a546040519192916001600160a01b03909116908390611454565b3360009081526012602090815260408083206001600160a01b0386168452909152812054828110156118155760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e3a565b6118243385610e528685612caf565b5060019392505050565b6000610d7c338484611080565b3360009081526002602052604090205460ff168061186357506003546001600160a01b031633145b61187f5760405162461bcd60e51b8152600401610e3a90612aaf565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156118c357600080fd5b505afa1580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb91906129a6565b90506000811161194d5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e3a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561199557600080fd5b505af11580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a9190612970565b3360009081526002602052604090205460ff16806119f557506003546001600160a01b031633145b611a115760405162461bcd60e51b8152600401610e3a90612aaf565b600f805460ff84811661ffff199092168217610100918516919091021790915515801590611a42575060008160ff16115b611a7b5760405162461bcd60e51b815260206004820152600a6024820152694174206c65617374203160b01b6044820152606401610e3a565b600f8260ff16108015611a915750600f8160ff16105b6114b75760405162461bcd60e51b815260206004820152600b60248201526a139bc81a1bdb995e5c1bdd60aa1b6044820152606401610e3a565b3360009081526002602052604090205460ff1680611af357506003546001600160a01b031633145b611b0f5760405162461bcd60e51b8152600401610e3a90612aaf565b60006064611b1e47605f612c90565b611b289190612b80565b600f54909150600090611b7390611b6c90611b569060ff600160381b8204811691600160281b900416612b5b565b600f54600160281b900460ff9081169116611dd8565b8390612346565b600f54909150600090611bbe90611bb790611ba19060ff600160381b8204811691600160281b900416612b5b565b600f54600160381b900460ff9081169116611dd8565b8490612346565b6000600d819055600e81905560045460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611c1b576040519150601f19603f3d011682016040523d82523d6000602084013e611c20565b606091505b5050600a546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114611c74576040519150601f19603f3d011682016040523d82523d6000602084013e611c79565b606091505b5050905081611c9a5760405162461bcd60e51b8152600401610e3a90612a90565b80611cb75760405162461bcd60e51b8152600401610e3a90612a90565b5050505050565b3360009081526002602052604090205460ff1680611ce657506003546001600160a01b031633145b611d025760405162461bcd60e51b8152600401610e3a90612aaf565b306000908152601160205260409020548110611d605760405162461bcd60e51b815260206004820152601f60248201527f6475646520746865726520617265206e6f7420656e6f75676820746f6b656e006044820152606401610e3a565b61162b81612352565b3360009081526002602052604090205460ff1680611d9157506003546001600160a01b031633145b611dad5760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000611de48284612b80565b9392505050565b6001600160a01b038316611e355760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e3a565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e3a565b6001600160a01b0383811660008181526012602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611de48284612b43565b6001600160a01b03831660009081526011602052604081208054839290611f13908490612caf565b90915550506001600160a01b03821660009081526011602052604081208054839290611f40908490612b43565b92505081905550816001600160a01b0316836001600160a01b0316600080516020612d1683398151915283604051611ed291815260200190565b6001600160a01b03831660009081526007602052604090205460ff16158015611fbc57506001600160a01b03821660009081526007602052604090205460ff16155b611ff65760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610e3a565b600154600160a01b900460ff1661204e57600154600160a81b900460ff166120495760405162461bcd60e51b8152600401610e3a90602080825260049082015263053544f560e41b604082015260600190565b612093565b600154600160a81b900460ff1661209357816001600160a01b0316836001600160a01b0316600080516020612d168339815191526000604051611ed291815260200190565b6001600160a01b03831660009081526008602052604090205460ff166120c7576120bb611519565b8111156120c757600080fd5b6001600160a01b03821660009081526009602052604090205460ff1661219757600f546064906301000000900460ff166121036012600a612be5565b6121129064174876e800612c90565b61211c9190612c90565b6121269190612b80565b6001600160a01b03831660009081526011602052604090205461214a908390612b43565b106121975760405162461bcd60e51b815260206004820152601760248201527f4d61782077616c6c6574206f6e20726563697069656e740000000000000000006044820152606401610e3a565b6013546000906001600160a01b03848116911614806121c357506000546001600160a01b038481169116145b90506000806121d284846127c9565b601054306000908152601160205260409020549294509092501080156122005750600c54610100900460ff16155b80156122165750600454600160a01b900460ff16155b1561223e578280156122305750600c54610100900460ff16155b1561223e5761223e84612352565b6001600160a01b0386166000908152601160205260409020546122619085612823565b6001600160a01b0380881660009081526011602052604080822093909355908716815220546122909083611edf565b6001600160a01b0386166000908152601160205260408082209290925530815220546122bc9082611edf565b30600081815260116020526040908190209290925590516001600160a01b03881690600080516020612d16833981519152906122fb9085815260200190565b60405180910390a3846001600160a01b0316866001600160a01b0316600080516020612d168339815191528460405161233691815260200190565b60405180910390a3505050505050565b6000611de48284612c90565b600454600160a01b900460ff16156123985760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610e3a565b6004805460ff60a01b1916600160a01b17905530600090815260116020526040812054600f54909190600160281b810460ff908116916123e991600160381b8204811691600160301b900416612b5b565b6123f39190612b5b565b60ff16905060006124156064611557604b60105461234690919063ffffffff16565b90508381111561242d57600c5460ff161561242d5750825b8083101561243d575050506127b9565b600f5460009061ffff84169061245d90600160301b900460ff1684612c90565b6124679190612b80565b600f5490915060009061ffff85169061248a90600160381b900460ff1685612c90565b6124949190612b80565b600f5490915060009061ffff8616906124b790600160281b900460ff1686612c90565b6124c19190612b80565b905060006124d0600285612b80565b905060006124de8286612caf565b90506000836124ed8684612b43565b6124f79190612b43565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061253157612531612cdc565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561258557600080fd5b505afa158015612599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bd9190612862565b816001815181106125d0576125d0612cdc565b6001600160a01b03928316602091820292909201015260015460405163791ac94760e01b815291169063791ac94790612616908690600090869030904290600401612ad2565b600060405180830381600087803b15801561263057600080fd5b505af1158015612644573d6000803e3d6000fd5b50505050600082476126569190612caf565b90506000846126658784612c90565b61266f9190612b80565b60015460405163f305d71960e01b81523060048201819052602482018b9052600060448301819052606483015260848201524260a48201529192506001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156126d857600080fd5b505af11580156126ec573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061271191906129bf565b505050600084476127229190612caf565b600f5490915060009060649061274290600160381b900460ff1684612c90565b61274c9190612b80565b600f5490915060009060649061276c90600160281b900460ff1685612c90565b6127769190612b80565b905081600e600082825461278a9190612b43565b9250508190555080600d60008282546127a39190612b43565b9091555050505050505050505050505050505050505b506004805460ff60a01b19169055565b600080600083156127e55750600f54610100900460ff166127ed565b50600f5460ff165b600060646127fe60ff841688612c90565b6128089190612b80565b905060006128168288612caf565b9791965090945050505050565b6000611de48284612caf565b803560ff8116811461284057600080fd5b919050565b60006020828403121561285757600080fd5b8135611de481612cf2565b60006020828403121561287457600080fd5b8151611de481612cf2565b6000806040838503121561289257600080fd5b823561289d81612cf2565b915060208301356128ad81612cf2565b809150509250929050565b6000806000606084860312156128cd57600080fd5b83356128d881612cf2565b925060208401356128e881612cf2565b929592945050506040919091013590565b6000806040838503121561290c57600080fd5b823561291781612cf2565b915060208301356128ad81612d07565b6000806040838503121561293a57600080fd5b823561294581612cf2565b946020939093013593505050565b60006020828403121561296557600080fd5b8135611de481612d07565b60006020828403121561298257600080fd5b8151611de481612d07565b60006020828403121561299f57600080fd5b5035919050565b6000602082840312156129b857600080fd5b5051919050565b6000806000606084860312156129d457600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129ff57600080fd5b611de48261282f565b60008060408385031215612a1b57600080fd5b612a248361282f565b9150612a326020840161282f565b90509250929050565b600060208083528351808285015260005b81811015612a6857858101830151858201604001528201612a4c565b81811115612a7a576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526005908201526422b93937b960d91b604082015260600190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b225784516001600160a01b031683529383019391830191600101612afd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612b5657612b56612cc6565b500190565b600060ff821660ff84168060ff03821115612b7857612b78612cc6565b019392505050565b600082612b9d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612bdd578160001904821115612bc357612bc3612cc6565b80851615612bd057918102915b93841c9390800290612ba7565b509250929050565b6000611de460ff841683600082612bfe57506001610d80565b81612c0b57506000610d80565b8160018114612c215760028114612c2b57612c47565b6001915050610d80565b60ff841115612c3c57612c3c612cc6565b50506001821b610d80565b5060208310610133831016604e8410600b8410161715612c6a575081810a610d80565b612c748383612ba2565b8060001904821115612c8857612c88612cc6565b029392505050565b6000816000190483118215151615612caa57612caa612cc6565b500290565b600082821015612cc157612cc1612cc6565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461162b57600080fd5b801515811461162b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203014980cfc17f9367f72ec63f81939cbf0798d3c38bef46a270269c38ea3204964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103d95760003560e01c806382c4767b116101fb578063b918161111610117578063cf309012116100a5578063e717fc3011610077578063e717fc3014610cbe578063f4ea55ab14610cdf578063f887ea4014610d0f578063fab2e05414610d2f578063fafab66514610d4f57005b8063cf30901214610c03578063d28d885214610c24578063d46f2f6614610c58578063dd62ed3e14610c7857005b8063c78dc6fd116100e9578063c78dc6fd14610b6e578063ca4b208b14610b8d578063cbc1cfd214610bad578063cbe7003014610bc2578063ce79429414610be357005b8063b918161114610acc578063c01bb48b14610b05578063c664c31d14610b26578063c7639d8014610b4657005b8063a253c06e11610194578063ad95fc8f11610166578063ad95fc8f14610a0a578063af1bb5c014610a3a578063b09f126614610a5a578063b0ef593714610a8a578063b544d2e614610aaa57005b8063a253c06e1461050c578063a457c2d7146109aa578063a8aa1b31146109ca578063a9059cbb146109ea57005b806393505052116101cd5780639350505214610919578063952eb8a71461093857806395d89b411461096857806396e5686a1461099557005b806382c4767b146108a5578063893d20e8146108bb5780638da5cb5b146108d957806391e96a30146108f957005b806339509351116102f55780636ebcf60711610283578063734fbf6311610255578063734fbf63146108095780637b1608631461081f5780637cb97b2b1461083f5780637f04f97e1461085f578063826c89bd1461087557005b80636ebcf6071461077157806370a082311461079e57806370bfcf40146107d457806370fbc712146107f457005b80634147c6a7116102c75780634147c6a7146106d25780634edebbba146106ec57806357d8ae821461070c5780635bd263e71461073c578063658ce7f81461075c57005b806339509351146106455780633a32fea8146106655780633f27cc48146106855780633fe7e33c146106a557005b806323b872dd1161037257806330e0789e1161034457806330e0789e146105a1578063313ce567146105c1578063320fac17146105e357806332424aa3146105f857806334184e261461060d57005b806323b872dd1461052157806323c66e761461054157806326e76613146105615780632bfe87421461058157005b806313f27383116103ab57806313f27383146104b157806317668f1b146104c757806318160ddd146104f75780631eb25d131461050c57005b8063024c2ddd146103e257806306fdde031461042d5780630907861314610467578063095ea7b31461049157005b366103e057005b005b3480156103ee57600080fd5b5061041a6103fd36600461287f565b601260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561043957600080fd5b50604080518082019091526008815267456e5448726f707960c01b60208201525b6040516104249190612a3b565b34801561047357600080fd5b50600c546104819060ff1681565b6040519015158152602001610424565b34801561049d57600080fd5b506104816104ac366004612927565b610d6f565b3480156104bd57600080fd5b5061041a60105481565b3480156104d357600080fd5b506104816104e2366004612845565b60056020526000908152604090205460ff1681565b34801561050357600080fd5b5061041a610d86565b34801561051857600080fd5b5061041a610da8565b34801561052d57600080fd5b5061048161053c3660046128b8565b610dc6565b34801561054d57600080fd5b506103e061055c3660046129ed565b610e62565b34801561056d57600080fd5b506103e061057c366004612a08565b610ed8565b34801561058d57600080fd5b506103e061059c3660046128f9565b611011565b3480156105ad57600080fd5b506103e06105bc3660046128b8565b611080565b3480156105cd57600080fd5b5060125b60405160ff9091168152602001610424565b3480156105ef57600080fd5b506103e06111e1565b34801561060457600080fd5b506105d1601281565b34801561061957600080fd5b5060135461062d906001600160a01b031681565b6040516001600160a01b039091168152602001610424565b34801561065157600080fd5b50610481610660366004612927565b611225565b34801561067157600080fd5b506103e06106803660046128f9565b61125c565b34801561069157600080fd5b506103e06106a03660046128f9565b6112cb565b3480156106b157600080fd5b5061041a6106c0366004612845565b600b6020526000908152604090205481565b3480156106de57600080fd5b50600f546105d19060ff1681565b3480156106f857600080fd5b506103e0610707366004612953565b61133a565b34801561071857600080fd5b50610481610727366004612845565b60096020526000908152604090205460ff1681565b34801561074857600080fd5b506103e06107573660046128f9565b611391565b34801561076857600080fd5b506103e061141b565b34801561077d57600080fd5b5061041a61078c366004612845565b60116020526000908152604090205481565b3480156107aa57600080fd5b5061041a6107b9366004612845565b6001600160a01b031660009081526011602052604090205490565b3480156107e057600080fd5b506103e06107ef366004612953565b6114bb565b34801561080057600080fd5b5061041a611519565b34801561081557600080fd5b5061041a600d5481565b34801561082b57600080fd5b506103e061083a3660046129ed565b61155d565b34801561084b57600080fd5b506103e061085a366004612845565b61162e565b34801561086b57600080fd5b5061041a600e5481565b34801561088157600080fd5b50610481610890366004612845565b60076020526000908152604090205460ff1681565b3480156108b157600080fd5b5061062d61dead81565b3480156108c757600080fd5b506003546001600160a01b031661062d565b3480156108e557600080fd5b5060035461062d906001600160a01b031681565b34801561090557600080fd5b506103e06109143660046129ed565b61167f565b34801561092557600080fd5b50600f546105d190610100900460ff1681565b34801561094457600080fd5b50610481610953366004612845565b60086020526000908152604090205460ff1681565b34801561097457600080fd5b5060408051808201909152600481526308adca8960e31b602082015261045a565b3480156109a157600080fd5b506103e0611748565b3480156109b657600080fd5b506104816109c5366004612927565b6117b2565b3480156109d657600080fd5b5060145461062d906001600160a01b031681565b3480156109f657600080fd5b50610481610a05366004612927565b61182e565b348015610a1657600080fd5b50610481610a25366004612845565b60066020526000908152604090205460ff1681565b348015610a4657600080fd5b506103e0610a55366004612845565b61183b565b348015610a6657600080fd5b5061045a6040518060400160405280600481526020016308adca8960e31b81525081565b348015610a9657600080fd5b506103e0610aa5366004612a08565b6119cd565b348015610ab657600080fd5b50600f546105d190640100000000900460ff1681565b348015610ad857600080fd5b50610481610ae7366004612845565b6001600160a01b031660009081526002602052604090205460ff1690565b348015610b1157600080fd5b5060015461048190600160a81b900460ff1681565b348015610b3257600080fd5b50600f546105d19062010000900460ff1681565b348015610b5257600080fd5b5061062d737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610b7a57600080fd5b50600c5461048190610100900460ff1681565b348015610b9957600080fd5b5060045461062d906001600160a01b031681565b348015610bb957600080fd5b506103e0611acb565b348015610bce57600080fd5b5060015461048190600160a01b900460ff1681565b348015610bef57600080fd5b50600a5461062d906001600160a01b031681565b348015610c0f57600080fd5b5060045461048190600160a01b900460ff1681565b348015610c3057600080fd5b5061045a60405180604001604052806008815260200167456e5448726f707960c01b81525081565b348015610c6457600080fd5b5060005461062d906001600160a01b031681565b348015610c8457600080fd5b5061041a610c9336600461287f565b6001600160a01b03918216600090815260126020908152604080832093909416825291909152205490565b348015610cca57600080fd5b50600f546105d1906301000000900460ff1681565b348015610ceb57600080fd5b50610481610cfa366004612845565b60026020526000908152604090205460ff1681565b348015610d1b57600080fd5b5060015461062d906001600160a01b031681565b348015610d3b57600080fd5b506103e0610d4a36600461298d565b611cbe565b348015610d5b57600080fd5b506103e0610d6a3660046128f9565b611d69565b6000610d7c338484611deb565b5060015b92915050565b6000610d946012600a612be5565b610da39064174876e800612c90565b905090565b610db46012600a612be5565b610dc39064174876e800612c90565b81565b6000610dd3848484611080565b6001600160a01b038416600090815260126020908152604080832033845290915290205482811015610e435760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b60448201526064015b60405180910390fd5b610e578533610e528685612caf565b611deb565b506001949350505050565b6004546001600160a01b03163314610e7957600080fd5b60218160ff161115610eb65760405162461bcd60e51b81526020600482015260066024820152650666640dac2f60d31b6044820152606401610e3a565b600f805460ff909216600160281b0265ff000000000019909216919091179055565b3360009081526002602052604090205460ff1680610f0057506003546001600160a01b031633145b610f1c5760405162461bcd60e51b8152600401610e3a90612aaf565b600f805460ff838116600160381b0267ff0000000000000019918616600160301b029190911667ffff00000000000019909216919091171790556042610f628284612b5b565b60ff161115610fa75760405162461bcd60e51b815260206004820152601160248201527009ccacac840e8de40c4ca406c6c40dac2f607b1b6044820152606401610e3a565b600f54600090610fde9060ff600160281b8204811691610fd891600160301b8204811691600160381b900416611edf565b90611edf565b9050606481101561100c5761100a610ff7826064612caf565b600f54600160281b900460ff1690611edf565b505b505050565b3360009081526002602052604090205460ff168061103957506003546001600160a01b031633145b6110555760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600260205260409020805460ff1916911515919091179055565b6001600160a01b03831660009081526005602052604081205460ff16806110bf57506001600160a01b03831660009081526005602052604090205460ff165b806110e257506001600160a01b03841660009081526002602052604090205460ff165b8061110557506001600160a01b03831660009081526002602052604090205460ff165b905060006001600160a01b03851630148061112857506001600160a01b03841630145b6013549091506000906001600160a01b03878116911614801561116757506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b806111a657506013546001600160a01b0386811691161480156111a657506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b905082806111b15750815b806111b95750805b156111ce576111c9868686611eeb565b6111d9565b6111d9868686611f7a565b505050505050565b6004546001600160a01b031633146111f857600080fd5b600154600160a81b900460ff161561120f57600080fd5b6001805461ffff60a01b1916600160a81b179055565b3360008181526012602090815260408083206001600160a01b03871684529091528120549091610d7c918590610e52908690612b43565b3360009081526002602052604090205460ff168061128457506003546001600160a01b031633145b6112a05760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b3360009081526002602052604090205460ff16806112f357506003546001600160a01b031633145b61130f5760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b3360009081526002602052604090205460ff168061136257506003546001600160a01b031633145b61137e5760405162461bcd60e51b8152600401610e3a90612aaf565b600c805460ff1916911515919091179055565b3360009081526002602052604090205460ff16806113b957506003546001600160a01b031633145b6113d55760405162461bcd60e51b8152600401610e3a90612aaf565b6004546001600160a01b03838116911614156113f057600080fd5b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6004546001600160a01b0316331461143257600080fd5b600d80546000918290556004546040519192916001600160a01b039091169083905b60006040518083038185875af1925050503d8060008114611491576040519150601f19603f3d011682016040523d82523d6000602084013e611496565b606091505b50509050806114b75760405162461bcd60e51b8152600401610e3a90612a90565b5050565b3360009081526002602052604090205460ff16806114e357506003546001600160a01b031633145b6114ff5760405162461bcd60e51b8152600401610e3a90612aaf565b600c80549115156101000261ff0019909216919091179055565b600f54600090610da3906103e890640100000000900460ff1661153e6012600a612be5565b61154d9064174876e800612c90565b6115579190612c90565b90611dd8565b3360009081526002602052604090205460ff168061158557506003546001600160a01b031633145b6115a15760405162461bcd60e51b8152600401610e3a90612aaf565b600f805464ff00000000191664010000000060ff8416908102919091179091556005111561162b5760405162461bcd60e51b815260206004820152603160248201527f4174206c6561737420352c2072656d656d62657220746861742069742773202f604482015270313030302c20736f2035203d20302e352560781b6064820152608401610e3a565b50565b6004546001600160a01b0316331461164557600080fd5b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600260205260409020805460ff19166001179055565b3360009081526002602052604090205460ff16806116a757506003546001600160a01b031633145b6116c35760405162461bcd60e51b8152600401610e3a90612aaf565b600f805463ff0000001916630100000060ff8416908102919091179091556001111561162b5760405162461bcd60e51b815260206004820152602e60248201527f4174206c6561737420312c2072656d656d62657220746861742069742773202f60448201526d3130302c20736f2031203d20312560901b6064820152608401610e3a565b3360009081526002602052604090205460ff168061177057506003546001600160a01b031633145b61178c5760405162461bcd60e51b8152600401610e3a90612aaf565b600e8054600091829055600a546040519192916001600160a01b03909116908390611454565b3360009081526012602090815260408083206001600160a01b0386168452909152812054828110156118155760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610e3a565b6118243385610e528685612caf565b5060019392505050565b6000610d7c338484611080565b3360009081526002602052604090205460ff168061186357506003546001600160a01b031633145b61187f5760405162461bcd60e51b8152600401610e3a90612aaf565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a082319060240160206040518083038186803b1580156118c357600080fd5b505afa1580156118d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fb91906129a6565b90506000811161194d5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610e3a565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb90604401602060405180830381600087803b15801561199557600080fd5b505af11580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a9190612970565b3360009081526002602052604090205460ff16806119f557506003546001600160a01b031633145b611a115760405162461bcd60e51b8152600401610e3a90612aaf565b600f805460ff84811661ffff199092168217610100918516919091021790915515801590611a42575060008160ff16115b611a7b5760405162461bcd60e51b815260206004820152600a6024820152694174206c65617374203160b01b6044820152606401610e3a565b600f8260ff16108015611a915750600f8160ff16105b6114b75760405162461bcd60e51b815260206004820152600b60248201526a139bc81a1bdb995e5c1bdd60aa1b6044820152606401610e3a565b3360009081526002602052604090205460ff1680611af357506003546001600160a01b031633145b611b0f5760405162461bcd60e51b8152600401610e3a90612aaf565b60006064611b1e47605f612c90565b611b289190612b80565b600f54909150600090611b7390611b6c90611b569060ff600160381b8204811691600160281b900416612b5b565b600f54600160281b900460ff9081169116611dd8565b8390612346565b600f54909150600090611bbe90611bb790611ba19060ff600160381b8204811691600160281b900416612b5b565b600f54600160381b900460ff9081169116611dd8565b8490612346565b6000600d819055600e81905560045460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114611c1b576040519150601f19603f3d011682016040523d82523d6000602084013e611c20565b606091505b5050600a546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114611c74576040519150601f19603f3d011682016040523d82523d6000602084013e611c79565b606091505b5050905081611c9a5760405162461bcd60e51b8152600401610e3a90612a90565b80611cb75760405162461bcd60e51b8152600401610e3a90612a90565b5050505050565b3360009081526002602052604090205460ff1680611ce657506003546001600160a01b031633145b611d025760405162461bcd60e51b8152600401610e3a90612aaf565b306000908152601160205260409020548110611d605760405162461bcd60e51b815260206004820152601f60248201527f6475646520746865726520617265206e6f7420656e6f75676820746f6b656e006044820152606401610e3a565b61162b81612352565b3360009081526002602052604090205460ff1680611d9157506003546001600160a01b031633145b611dad5760405162461bcd60e51b8152600401610e3a90612aaf565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000611de48284612b80565b9392505050565b6001600160a01b038316611e355760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610e3a565b6001600160a01b038216611e7d5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610e3a565b6001600160a01b0383811660008181526012602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000611de48284612b43565b6001600160a01b03831660009081526011602052604081208054839290611f13908490612caf565b90915550506001600160a01b03821660009081526011602052604081208054839290611f40908490612b43565b92505081905550816001600160a01b0316836001600160a01b0316600080516020612d1683398151915283604051611ed291815260200190565b6001600160a01b03831660009081526007602052604090205460ff16158015611fbc57506001600160a01b03821660009081526007602052604090205460ff16155b611ff65760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610e3a565b600154600160a01b900460ff1661204e57600154600160a81b900460ff166120495760405162461bcd60e51b8152600401610e3a90602080825260049082015263053544f560e41b604082015260600190565b612093565b600154600160a81b900460ff1661209357816001600160a01b0316836001600160a01b0316600080516020612d168339815191526000604051611ed291815260200190565b6001600160a01b03831660009081526008602052604090205460ff166120c7576120bb611519565b8111156120c757600080fd5b6001600160a01b03821660009081526009602052604090205460ff1661219757600f546064906301000000900460ff166121036012600a612be5565b6121129064174876e800612c90565b61211c9190612c90565b6121269190612b80565b6001600160a01b03831660009081526011602052604090205461214a908390612b43565b106121975760405162461bcd60e51b815260206004820152601760248201527f4d61782077616c6c6574206f6e20726563697069656e740000000000000000006044820152606401610e3a565b6013546000906001600160a01b03848116911614806121c357506000546001600160a01b038481169116145b90506000806121d284846127c9565b601054306000908152601160205260409020549294509092501080156122005750600c54610100900460ff16155b80156122165750600454600160a01b900460ff16155b1561223e578280156122305750600c54610100900460ff16155b1561223e5761223e84612352565b6001600160a01b0386166000908152601160205260409020546122619085612823565b6001600160a01b0380881660009081526011602052604080822093909355908716815220546122909083611edf565b6001600160a01b0386166000908152601160205260408082209290925530815220546122bc9082611edf565b30600081815260116020526040908190209290925590516001600160a01b03881690600080516020612d16833981519152906122fb9085815260200190565b60405180910390a3846001600160a01b0316866001600160a01b0316600080516020612d168339815191528460405161233691815260200190565b60405180910390a3505050505050565b6000611de48284612c90565b600454600160a01b900460ff16156123985760405162461bcd60e51b81526020600482015260096024820152681c99595b9d1c985b9d60ba1b6044820152606401610e3a565b6004805460ff60a01b1916600160a01b17905530600090815260116020526040812054600f54909190600160281b810460ff908116916123e991600160381b8204811691600160301b900416612b5b565b6123f39190612b5b565b60ff16905060006124156064611557604b60105461234690919063ffffffff16565b90508381111561242d57600c5460ff161561242d5750825b8083101561243d575050506127b9565b600f5460009061ffff84169061245d90600160301b900460ff1684612c90565b6124679190612b80565b600f5490915060009061ffff85169061248a90600160381b900460ff1685612c90565b6124949190612b80565b600f5490915060009061ffff8616906124b790600160281b900460ff1686612c90565b6124c19190612b80565b905060006124d0600285612b80565b905060006124de8286612caf565b90506000836124ed8684612b43565b6124f79190612b43565b6040805160028082526060820183529293504792600092602083019080368337019050509050308160008151811061253157612531612cdc565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561258557600080fd5b505afa158015612599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bd9190612862565b816001815181106125d0576125d0612cdc565b6001600160a01b03928316602091820292909201015260015460405163791ac94760e01b815291169063791ac94790612616908690600090869030904290600401612ad2565b600060405180830381600087803b15801561263057600080fd5b505af1158015612644573d6000803e3d6000fd5b50505050600082476126569190612caf565b90506000846126658784612c90565b61266f9190612b80565b60015460405163f305d71960e01b81523060048201819052602482018b9052600060448301819052606483015260848201524260a48201529192506001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156126d857600080fd5b505af11580156126ec573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061271191906129bf565b505050600084476127229190612caf565b600f5490915060009060649061274290600160381b900460ff1684612c90565b61274c9190612b80565b600f5490915060009060649061276c90600160281b900460ff1685612c90565b6127769190612b80565b905081600e600082825461278a9190612b43565b9250508190555080600d60008282546127a39190612b43565b9091555050505050505050505050505050505050505b506004805460ff60a01b19169055565b600080600083156127e55750600f54610100900460ff166127ed565b50600f5460ff165b600060646127fe60ff841688612c90565b6128089190612b80565b905060006128168288612caf565b9791965090945050505050565b6000611de48284612caf565b803560ff8116811461284057600080fd5b919050565b60006020828403121561285757600080fd5b8135611de481612cf2565b60006020828403121561287457600080fd5b8151611de481612cf2565b6000806040838503121561289257600080fd5b823561289d81612cf2565b915060208301356128ad81612cf2565b809150509250929050565b6000806000606084860312156128cd57600080fd5b83356128d881612cf2565b925060208401356128e881612cf2565b929592945050506040919091013590565b6000806040838503121561290c57600080fd5b823561291781612cf2565b915060208301356128ad81612d07565b6000806040838503121561293a57600080fd5b823561294581612cf2565b946020939093013593505050565b60006020828403121561296557600080fd5b8135611de481612d07565b60006020828403121561298257600080fd5b8151611de481612d07565b60006020828403121561299f57600080fd5b5035919050565b6000602082840312156129b857600080fd5b5051919050565b6000806000606084860312156129d457600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129ff57600080fd5b611de48261282f565b60008060408385031215612a1b57600080fd5b612a248361282f565b9150612a326020840161282f565b90509250929050565b600060208083528351808285015260005b81811015612a6857858101830151858201604001528201612a4c565b81811115612a7a576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526005908201526422b93937b960d91b604082015260600190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b225784516001600160a01b031683529383019391830191600101612afd565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612b5657612b56612cc6565b500190565b600060ff821660ff84168060ff03821115612b7857612b78612cc6565b019392505050565b600082612b9d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612bdd578160001904821115612bc357612bc3612cc6565b80851615612bd057918102915b93841c9390800290612ba7565b509250929050565b6000611de460ff841683600082612bfe57506001610d80565b81612c0b57506000610d80565b8160018114612c215760028114612c2b57612c47565b6001915050610d80565b60ff841115612c3c57612c3c612cc6565b50506001821b610d80565b5060208310610133831016604e8410600b8410161715612c6a575081810a610d80565b612c748383612ba2565b8060001904821115612c8857612c88612cc6565b029392505050565b6000816000190483118215151615612caa57612caa612cc6565b500290565b600082821015612cc157612cc1612cc6565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461162b57600080fd5b801515811461162b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212203014980cfc17f9367f72ec63f81939cbf0798d3c38bef46a270269c38ea3204964736f6c63430008070033

Deployed Bytecode Sourcemap

15323:12942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16799:68;;;;;;;;;;-1:-1:-1;16799:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5987:25:1;;;5975:2;5960:18;16799:68:0;;;;;;;;25969:85;;;;;;;;;;-1:-1:-1;26041:5:0;;;;;;;;;;;;-1:-1:-1;;;26041:5:0;;;;25969:85;;;;;;;:::i;16282:25::-;;;;;;;;;;-1:-1:-1;16282:25:0;;;;;;;;;;;5343:14:1;;5336:22;5318:41;;5306:2;5291:18;16282:25:0;5178:187:1;26825:161:0;;;;;;;;;;-1:-1:-1;26825:161:0;;;;;:::i;:::-;;:::i;16681:57::-;;;;;;;;;;;;;;;;15440:40;;;;;;;;;;-1:-1:-1;15440:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26252:106;;;;;;;;;;;;;:::i;15843:70::-;;;;;;;;;;;;;:::i;27303:392::-;;;;;;;;;;-1:-1:-1;27303:392:0;;;;;:::i;:::-;;:::i;23418:121::-;;;;;;;;;;-1:-1:-1;23418:121:0;;;;;:::i;:::-;;:::i;23547:362::-;;;;;;;;;;-1:-1:-1;23547:362:0;;;;;:::i;:::-;;:::i;14612:106::-;;;;;;;;;;-1:-1:-1;14612:106:0;;;;;:::i;:::-;;:::i;17600:667::-;;;;;;;;;;-1:-1:-1;17600:667:0;;;;;:::i;:::-;;:::i;26159:85::-;;;;;;;;;;-1:-1:-1;15834:2:0;26159:85;;;14280:4:1;14268:17;;;14250:36;;14238:2;14223:18;26159:85:0;14108:184:1;22236:154:0;;;;;;;;;;;;;:::i;15800:36::-;;;;;;;;;;;;15834:2;15800:36;;16876:27;;;;;;;;;;-1:-1:-1;16876:27:0;;;;-1:-1:-1;;;;;16876:27:0;;;;;;-1:-1:-1;;;;;4243:32:1;;;4225:51;;4213:2;4198:18;16876:27:0;4079:203:1;27705:205:0;;;;;;;;;;-1:-1:-1;27705:205:0;;;;;:::i;:::-;;:::i;25227:132::-;;;;;;;;;;-1:-1:-1;25227:132:0;;;;;:::i;:::-;;:::i;25095:124::-;;;;;;;;;;-1:-1:-1;25095:124:0;;;;;:::i;:::-;;:::i;16234:39::-;;;;;;;;;;-1:-1:-1;16234:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;16421:24;;;;;;;;;;-1:-1:-1;16421:24:0;;;;;;;;25784:86;;;;;;;;;;-1:-1:-1;25784:86:0;;;;;:::i;:::-;;:::i;15640:55::-;;;;;;;;;;-1:-1:-1;15640:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25610:166;;;;;;;;;;-1:-1:-1;25610:166:0;;;;;:::i;:::-;;:::i;22398:203::-;;;;;;;;;;;;;:::i;16747:45::-;;;;;;;;;;-1:-1:-1;16747:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;26366:121;;;;;;;;;;-1:-1:-1;26366:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;26461:18:0;26434:7;26461:18;;;:9;:18;;;;;;;26366:121;24149:91;;;;;;;;;;-1:-1:-1;24149:91:0;;;;;:::i;:::-;;:::i;18275:114::-;;;;;;;;;;;;;:::i;16354:23::-;;;;;;;;;;;;;;;;24730:167;;;;;;;;;;-1:-1:-1;24730:167:0;;;;;:::i;:::-;;:::i;25480:122::-;;;;;;;;;;-1:-1:-1;25480:122:0;;;;;:::i;:::-;;:::i;16384:28::-;;;;;;;;;;;;;;;;15535:40;;;;;;;;;;-1:-1:-1;15535:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16071:73;;;;;;;;;;;;16102:42;16071:73;;25878:83;;;;;;;;;;-1:-1:-1;25948:5:0;;-1:-1:-1;;;;;25948:5:0;25878:83;;14848:20;;;;;;;;;;-1:-1:-1;14848:20:0;;;;-1:-1:-1;;;;;14848:20:0;;;24905:182;;;;;;;;;;-1:-1:-1;24905:182:0;;;;;:::i;:::-;;:::i;16452:25::-;;;;;;;;;;-1:-1:-1;16452:25:0;;;;;;;;;;;15582:51;;;;;;;;;;-1:-1:-1;15582:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26062:89;;;;;;;;;;-1:-1:-1;26136:7:0;;;;;;;;;;;;-1:-1:-1;;;26136:7:0;;;;26062:89;;22609:224;;;;;;;;;;;;;:::i;27918:342::-;;;;;;;;;;-1:-1:-1;27918:342:0;;;;;:::i;:::-;;:::i;16910:26::-;;;;;;;;;;-1:-1:-1;16910:26:0;;;;-1:-1:-1;;;;;16910:26:0;;;26495:167;;;;;;;;;;-1:-1:-1;26495:167:0;;;;;:::i;:::-;;:::i;15487:41::-;;;;;;;;;;-1:-1:-1;15487:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24442:280;;;;;;;;;;-1:-1:-1;24442:280:0;;;;;:::i;:::-;;:::i;15754:39::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15754:39:0;;;;;23917:224;;;;;;;;;;-1:-1:-1;23917:224:0;;;;;:::i;:::-;;:::i;16556:25::-;;;;;;;;;;-1:-1:-1;16556:25:0;;;;;;;;;;;14505:99;;;;;;;;;;-1:-1:-1;14505:99:0;;;;;:::i;:::-;-1:-1:-1;;;;;14583:13:0;14559:4;14583:13;;;:7;:13;;;;;;;;;14505:99;14414:33;;;;;;;;;;-1:-1:-1;14414:33:0;;;;-1:-1:-1;;;14414:33:0;;;;;;16484:29;;;;;;;;;;-1:-1:-1;16484:29:0;;;;;;;;;;;15984:80;;;;;;;;;;;;16022:42;15984:80;;16314:31;;;;;;;;;;-1:-1:-1;16314:31:0;;;;;;;;;;;14875:24;;;;;;;;;;-1:-1:-1;14875:24:0;;;;-1:-1:-1;;;;;14875:24:0;;;22841:569;;;;;;;;;;;;;:::i;14377:30::-;;;;;;;;;;-1:-1:-1;14377:30:0;;;;-1:-1:-1;;;14377:30:0;;;;;;16151:74;;;;;;;;;;-1:-1:-1;16151:74:0;;;;-1:-1:-1;;;;;16151:74:0;;;15093:18;;;;;;;;;;-1:-1:-1;15093:18:0;;;;-1:-1:-1;;;15093:18:0;;;;;;15706:41;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15706:41:0;;;;;13057:74;;;;;;;;;;-1:-1:-1;13057:74:0;;;;-1:-1:-1;;;;;13057:74:0;;;26670:147;;;;;;;;;;-1:-1:-1;26670:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;26781:19:0;;;26754:7;26781:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;26670:147;16522:27;;;;;;;;;;-1:-1:-1;16522:27:0;;;;;;;;;;;14456:40;;;;;;;;;;-1:-1:-1;14456:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13138:65;;;;;;;;;;-1:-1:-1;13138:65:0;;;;-1:-1:-1;;;;;13138:65:0;;;24248:186;;;;;;;;;;-1:-1:-1;24248:186:0;;;;;:::i;:::-;;:::i;25367:105::-;;;;;;;;;;-1:-1:-1;25367:105:0;;;;;:::i;:::-;;:::i;26825:161::-;26902:4;26919:37;26928:10;26940:7;26949:6;26919:8;:37::i;:::-;-1:-1:-1;26974:4:0;26825:161;;;;;:::o;26252:106::-;26305:7;15899:13;15834:2;15899;:13;:::i;:::-;15882:31;;:13;:31;:::i;:::-;26325:25;;26252:106;:::o;15843:70::-;15899:13;15834:2;15899;:13;:::i;:::-;15882:31;;:13;:31;:::i;:::-;15843:70;:::o;27303:392::-;27403:4;27420:36;27430:6;27438:9;27449:6;27420:9;:36::i;:::-;-1:-1:-1;;;;;27496:19:0;;27469:24;27496:19;;;:11;:19;;;;;;;;27516:10;27496:31;;;;;;;;27546:26;;;;27538:59;;;;-1:-1:-1;;;27538:59:0;;8297:2:1;27538:59:0;;;8279:21:1;8336:2;8316:18;;;8309:30;-1:-1:-1;;;8355:18:1;;;8348:50;8415:18;;27538:59:0;;;;;;;;;27610:55;27619:6;27627:10;27639:25;27658:6;27639:16;:25;:::i;:::-;27610:8;:55::i;:::-;-1:-1:-1;27683:4:0;;27303:392;-1:-1:-1;;;;27303:392:0:o;23418:121::-;14956:9;;-1:-1:-1;;;;;14956:9:0;14944:10;:21;14936:30;;;;;;23493:2:::1;23486:3;:9;;;;23478:28;;;::::0;-1:-1:-1;;;23478:28:0;;10447:2:1;23478:28:0::1;::::0;::::1;10429:21:1::0;10486:1;10466:18;;;10459:29;-1:-1:-1;;;10504:18:1;;;10497:36;10550:18;;23478:28:0::1;10245:329:1::0;23478:28:0::1;23517:8;:14:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;23517:14:0::1;-1:-1:-1::0;;23517:14:0;;::::1;::::0;;;::::1;::::0;;23418:121::o;23547:362::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;23621:14:::1;:20:::0;;::::1;23652:24:::0;;::::1;-1:-1:-1::0;;;23652:24:0::1;-1:-1:-1::0;;23621:20:0;;::::1;-1:-1:-1::0;;;23621:20:0::1;23652:24:::0;;;;-1:-1:-1;;23652:24:0;;;;;;;::::1;::::0;;23711:2:::1;23696:12;23668:8:::0;23638:3;23696:12:::1;:::i;:::-;23695:18;;;;23687:48;;;::::0;-1:-1:-1;;;23687:48:0;;7245:2:1;23687:48:0::1;::::0;::::1;7227:21:1::0;7284:2;7264:18;;;7257:30;-1:-1:-1;;;7303:18:1;;;7296:47;7360:18;;23687:48:0::1;7043:341:1::0;23687:48:0::1;23803:8;::::0;23746:16:::1;::::0;23765:47:::1;::::0;23803:8:::1;-1:-1:-1::0;;;23803:8:0;::::1;::::0;::::1;::::0;23765:33:::1;::::0;-1:-1:-1;;;23765:14:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;23784:13:0;::::1;;23765:18;:33::i;:::-;:37:::0;::::1;:47::i;:::-;23746:66;;23841:3;23827:11;:17;23823:79;;;23861:29;23874:15;23878:11:::0;23874:3:::1;:15;:::i;:::-;23861:8;::::0;-1:-1:-1;;;23861:8:0;::::1;;;::::0;:12:::1;:29::i;:::-;;23823:79;23610:299;23547:362:::0;;:::o;14612:106::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14689:13:0;;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;14689:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;14612:106::o;17600:667::-;-1:-1:-1;;;;;17706:16:0;;17687:15;17706:16;;;:8;:16;;;;;;;;;:39;;-1:-1:-1;;;;;;17726:19:0;;;;;;:8;:19;;;;;;;;17706:39;:58;;;-1:-1:-1;;;;;;17749:15:0;;;;;;:7;:15;;;;;;;;17706:58;:80;;;-1:-1:-1;;;;;;17768:18:0;;;;;;:7;:18;;;;;;;;17706:80;17687:100;-1:-1:-1;17800:23:0;-1:-1:-1;;;;;17825:21:0;;17841:4;17825:21;;:49;;-1:-1:-1;;;;;;17850:24:0;;17869:4;17850:24;17825:49;17927:12;;17800:75;;-1:-1:-1;17888:24:0;;-1:-1:-1;;;;;17917:22:0;;;17927:12;;17917:22;:52;;;;-1:-1:-1;;;;;;17943:26:0;;16022:42;17943:26;17917:52;17916:121;;;-1:-1:-1;17997:12:0;;-1:-1:-1;;;;;17984:25:0;;;17997:12;;17984:25;:52;;;;-1:-1:-1;;;;;;18013:23:0;;16022:42;18013:23;17984:52;17888:150;;18057:10;:32;;;;18071:18;18057:32;:55;;;;18093:19;18057:55;18053:205;;;18129:43;18146:6;18154:9;18165:6;18129:16;:43::i;:::-;18053:205;;;18205:41;18220:6;18228:9;18239:6;18205:14;:41::i;:::-;17674:593;;;17600:667;;;:::o;22236:154::-;14956:9;;-1:-1:-1;;;;;14956:9:0;14944:10;:21;14936:30;;;;;;22298:13:::1;::::0;-1:-1:-1;;;22298:13:0;::::1;;;:22;22290:31;;;::::0;::::1;;22332:11;:19:::0;;-1:-1:-1;;;;22362:20:0;-1:-1:-1;;;22362:20:0::1;::::0;;22236:154::o;27705:205::-;27813:10;27787:4;27834:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27834:32:0;;;;;;;;;;27787:4;;27804:76;;27825:7;;27834:45;;27869:10;;27834:45;:::i;25227:132::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25314:29:0;;;::::1;;::::0;;;:23:::1;:29;::::0;;;;:37;;-1:-1:-1;;25314:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25227:132::o;25095:124::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25178:25:0;;;::::1;;::::0;;;:19:::1;:25;::::0;;;;:33;;-1:-1:-1;;25178:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25095:124::o;25784:86::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;25848:6:::1;:14:::0;;-1:-1:-1;;25848:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25784:86::o;25610:166::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;25718:9:::1;::::0;-1:-1:-1;;;;;25706:21:0;;::::1;25718:9:::0;::::1;25706:21;25704:24;25696:33;;;::::0;::::1;;-1:-1:-1::0;;;;;25740:20:0;;;::::1;;::::0;;;:8:::1;:20;::::0;;;;:28;;-1:-1:-1;;25740:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25610:166::o;22398:203::-;14956:9;;-1:-1:-1;;;;;14956:9:0;14944:10;:21;14936:30;;;;;;22463:11:::1;::::0;;22448:14:::1;22485:13:::0;;;;22525:9:::1;::::0;:35:::1;::::0;22463:11;;22448:14;-1:-1:-1;;;;;22525:9:0;;::::1;::::0;22463:11;;22525:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22509:51;;;22579:4;22571:22;;;;-1:-1:-1::0;;;22571:22:0::1;;;;;;;:::i;:::-;22437:164;;22398:203::o:0;24149:91::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;24213:11:::1;:19:::0;;;::::1;;;;-1:-1:-1::0;;24213:19:0;;::::1;::::0;;;::::1;::::0;;24149:91::o;18275:114::-;18361:8;;18314:4;;18339:41;;18375:4;;18361:8;;;;;15899:13;15834:2;15899;:13;:::i;:::-;15882:31;;:13;:31;:::i;:::-;18340:29;;;;:::i;:::-;18339:35;;:41::i;24730:167::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;24790:8:::1;:16:::0;;-1:-1:-1;;24790:16:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;24834:1:::1;-1:-1:-1::0;24825:10:0::1;24817:72;;;::::0;-1:-1:-1;;;24817:72:0;;6827:2:1;24817:72:0::1;::::0;::::1;6809:21:1::0;6866:2;6846:18;;;6839:30;6905:34;6885:18;;;6878:62;-1:-1:-1;;;6956:18:1;;;6949:47;7013:19;;24817:72:0::1;6625:413:1::0;24817:72:0::1;24730:167:::0;:::o;25480:122::-;14956:9;;-1:-1:-1;;;;;14956:9:0;14944:10;:21;14936:30;;;;;;25543:5:::1;:16:::0;;-1:-1:-1;;;;;25543:16:0;;::::1;-1:-1:-1::0;;;;;;25543:16:0;;::::1;::::0;::::1;::::0;;:5:::1;25570:17:::0;;;:7:::1;:17;::::0;;;;:24;;-1:-1:-1;;25570:24:0::1;25543:16:::0;25570:24:::1;::::0;;25480:122::o;24905:182::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;24973:10:::1;:22:::0;;-1:-1:-1;;24973:22:0::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;25014:14:0::1;25006:73;;;::::0;-1:-1:-1;;;25006:73:0;;8983:2:1;25006:73:0::1;::::0;::::1;8965:21:1::0;9022:2;9002:18;;;8995:30;9061:34;9041:18;;;9034:62;-1:-1:-1;;;9112:18:1;;;9105:44;9166:19;;25006:73:0::1;8781:410:1::0;22609:224:0;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;22680:16:::1;::::0;;22665:14:::1;22707:18:::0;;;;22752:14:::1;::::0;:40:::1;::::0;22680:16;;22665:14;-1:-1:-1;;;;;22752:14:0;;::::1;::::0;22680:16;;22752:40:::1;3869:205:1::0;27918:342:0;28061:10;28005:4;28049:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28049:32:0;;;;;;;;;;28100:35;;;;28092:60;;;;-1:-1:-1;;;28092:60:0;;12462:2:1;28092:60:0;;;12444:21:1;12501:2;12481:18;;;12474:30;-1:-1:-1;;;12520:18:1;;;12513:42;12572:18;;28092:60:0;12260:336:1;28092:60:0;28165:65;28174:10;28186:7;28195:34;28214:15;28195:16;:34;:::i;28165:65::-;-1:-1:-1;28248:4:0;;27918:342;-1:-1:-1;;;27918:342:0:o;26495:167::-;26575:4;26592:40;26602:10;26614:9;26625:6;26592:9;:40::i;24442:280::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;24575:30:::1;::::0;-1:-1:-1;;;24575:30:0;;24599:4:::1;24575:30;::::0;::::1;4225:51:1::0;24532:10:0;;24512:11:::1;::::0;-1:-1:-1;;;;;24575:15:0;::::1;::::0;::::1;::::0;4198:18:1;;24575:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24554:51;;24635:1;24624:10;:12;24616:49;;;::::0;-1:-1:-1;;;24616:49:0;;9742:2:1;24616:49:0::1;::::0;::::1;9724:21:1::0;9781:2;9761:18;;;9754:30;9820:26;9800:18;;;9793:54;9864:18;;24616:49:0::1;9540:348:1::0;24616:49:0::1;24676:38;::::0;-1:-1:-1;;;24676:38:0;;24691:10:::1;24676:38;::::0;::::1;4461:51:1::0;4528:18;;;4521:34;;;-1:-1:-1;;;;;24676:14:0;::::1;::::0;::::1;::::0;4434:18:1;;24676:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23917:224::-:0;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;23986:7:::1;:13:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;24010:15:0;;;;;23986:13:::1;24010:15:::0;;::::1;::::0;;;::::1;;::::0;;;24044:7;;;;:19:::1;;;24062:1;24055:4;:8;;;24044:19;24036:42;;;::::0;-1:-1:-1;;;24036:42:0;;11121:2:1;24036:42:0::1;::::0;::::1;11103:21:1::0;11160:2;11140:18;;;11133:30;-1:-1:-1;;;11179:18:1;;;11172:40;11229:18;;24036:42:0::1;10919:334:1::0;24036:42:0::1;24102:2;24097:3;:7;;;:20;;;;;24115:2;24108:4;:9;;;24097:20;24089:44;;;::::0;-1:-1:-1;;;24089:44:0;;10781:2:1;24089:44:0::1;::::0;::::1;10763:21:1::0;10820:2;10800:18;;;10793:30;-1:-1:-1;;;10839:18:1;;;10832:41;10890:18;;24089:44:0::1;10579:335:1::0;22841:569:0;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;22900:14:::1;22947:3;22919:26;22920:21;22943:2;22919:26;:::i;:::-;22918:32;;;;:::i;:::-;23018:13;::::0;22900:51;;-1:-1:-1;22962:18:0::1;::::0;22983:50:::1;::::0;22994:38:::1;::::0;23007:24:::1;::::0;23018:13:::1;-1:-1:-1::0;;;23018:13:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;23007:8:0;::::1;;:24;:::i;:::-;22994:8;::::0;-1:-1:-1;;;22994:8:0;::::1;:38;:8:::0;;::::1;::::0;:38:::1;:12;:38::i;:::-;22983:6:::0;;:10:::1;:50::i;:::-;23110:13;::::0;22962:71;;-1:-1:-1;23044:23:0::1;::::0;23070:55:::1;::::0;23081:43:::1;::::0;23099:24:::1;::::0;23110:13:::1;-1:-1:-1::0;;;23110:13:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;23099:8:0;::::1;;:24;:::i;:::-;23081:13;::::0;-1:-1:-1;;;23081:13:0;::::1;:43;:13:::0;;::::1;::::0;:43:::1;:17;:43::i;:::-;23070:6:::0;;:10:::1;:55::i;:::-;23148:1;23136:11;:13:::0;;;23160:16:::1;:18:::0;;;23208:9:::1;::::0;:39:::1;::::0;23044:81;;-1:-1:-1;23148:1:0;;-1:-1:-1;;;;;23208:9:0;;::::1;::::0;23231:10;;23148:1;23208:39;23148:1;23208:39;23231:10;23208:9;:39:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;23279:14:0::1;::::0;:49:::1;::::0;23189:58;;-1:-1:-1;23259:14:0::1;::::0;-1:-1:-1;;;;;23279:14:0;;::::1;::::0;23307:15;;23259:14;23279:49;23259:14;23279:49;23307:15;23279:14;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23258:70;;;23347:7;23339:25;;;;-1:-1:-1::0;;;23339:25:0::1;;;;;;;:::i;:::-;23383:9;23375:27;;;;-1:-1:-1::0;;;23375:27:0::1;;;;;;;:::i;:::-;22887:523;;;;;22841:569::o:0;24248:186::-;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;24355:4:::1;24337:24;::::0;;;:9:::1;:24;::::0;;;;;24328:33;::::1;24320:77;;;::::0;-1:-1:-1;;;24320:77:0;;7591:2:1;24320:77:0::1;::::0;::::1;7573:21:1::0;7630:2;7610:18;;;7603:30;7669:33;7649:18;;;7642:61;7720:18;;24320:77:0::1;7389:355:1::0;24320:77:0::1;24408:18;24419:6;24408:10;:18::i;25367:105::-:0;14774:10;14766:19;;;;:7;:19;;;;;;;;;:40;;-1:-1:-1;14801:5:0;;-1:-1:-1;;;;;14801:5:0;14789:10;:17;14766:40;14757:63;;;;-1:-1:-1;;;14757:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25442:14:0;;;::::1;;::::0;;;:8:::1;:14;::::0;;;;:22;;-1:-1:-1;;25442:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25367:105::o;3574:98::-;3632:7;3659:5;3663:1;3659;:5;:::i;:::-;3652:12;3574:98;-1:-1:-1;;;3574:98:0:o;26992:303::-;-1:-1:-1;;;;;27086:20:0;;27078:50;;;;-1:-1:-1;;;27078:50:0;;7951:2:1;27078:50:0;;;7933:21:1;7990:2;7970:18;;;7963:30;-1:-1:-1;;;8009:18:1;;;8002:47;8066:18;;27078:50:0;7749:341:1;27078:50:0;-1:-1:-1;;;;;27147:21:0;;27139:49;;;;-1:-1:-1;;;27139:49:0;;9398:2:1;27139:49:0;;;9380:21:1;9437:2;9417:18;;;9410:30;-1:-1:-1;;;9456:18:1;;;9449:45;9511:18;;27139:49:0;9196:339:1;27139:49:0;-1:-1:-1;;;;;27201:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;27254:33;;5987:25:1;;;27254:33:0;;5960:18:1;27254:33:0;;;;;;;;26992:303;;;:::o;3256:98::-;3314:7;3341:5;3345:1;3341;:5;:::i;22008:220::-;-1:-1:-1;;;;;22101:17:0;;;;;;:9;:17;;;;;:27;;22122:6;;22101:17;:27;;22122:6;;22101:27;:::i;:::-;;;;-1:-1:-1;;;;;;;22139:20:0;;;;;;:9;:20;;;;;:30;;22163:6;;22139:20;:30;;22163:6;;22139:30;:::i;:::-;;;;;;;;22202:9;-1:-1:-1;;;;;22185:35:0;22194:6;-1:-1:-1;;;;;22185:35:0;-1:-1:-1;;;;;;;;;;;22213:6:0;22185:35;;;;5987:25:1;;5975:2;5960:18;;5833:185;18397:1341:0;-1:-1:-1;;;;;18497:16:0;;;;;;:8;:16;;;;;;;;18496:17;:41;;;;-1:-1:-1;;;;;;18518:19:0;;;;;;:8;:19;;;;;;;;18517:20;18496:41;18488:65;;;;-1:-1:-1;;;18488:65:0;;12803:2:1;18488:65:0;;;12785:21:1;12842:2;12822:18;;;12815:30;-1:-1:-1;;;12861:18:1;;;12854:41;12912:18;;18488:65:0;12601:335:1;18488:65:0;18570:11;;-1:-1:-1;;;18570:11:0;;;;18566:220;;18606:13;;-1:-1:-1;;;18606:13:0;;;;18598:30;;;;-1:-1:-1;;;18598:30:0;;;;;;11460:2:1;11442:21;;;11499:1;11479:18;;;11472:29;-1:-1:-1;;;11532:2:1;11517:18;;11510:34;11576:2;11561:18;;11258:327;18598:30:0;18566:220;;;18665:13;;-1:-1:-1;;;18665:13:0;;;;18661:114;;18721:9;-1:-1:-1;;;;;18704:30:0;18713:6;-1:-1:-1;;;;;18704:30:0;-1:-1:-1;;;;;;;;;;;18732:1:0;18704:30;;;;5987:25:1;;5975:2;5960:18;;5833:185;18661:114:0;-1:-1:-1;;;;;18802:27:0;;;;;;:19;:27;;;;;;;;18798:87;;18864:8;:6;:8::i;:::-;18854:6;:18;;18846:27;;;;;;-1:-1:-1;;;;;18901:34:0;;;;;;:23;:34;;;;;;;;18897:172;;19013:10;;19025:3;;19013:10;;;;;15899:13;15834:2;15899;:13;:::i;:::-;15882:31;;:13;:31;:::i;:::-;18994:29;;;;:::i;:::-;18993:35;;;;:::i;:::-;-1:-1:-1;;;;;18961:20:0;;;;;;:9;:20;;;;;;:27;;18982:6;;18961:27;:::i;:::-;18960:69;18952:105;;;;-1:-1:-1;;;18952:105:0;;10095:2:1;18952:105:0;;;10077:21:1;10134:2;10114:18;;;10107:30;10173:25;10153:18;;;10146:53;10216:18;;18952:105:0;9893:347:1;18952:105:0;19105:12;;19081:11;;-1:-1:-1;;;;;19093:24:0;;;19105:12;;19093:24;;:54;;-1:-1:-1;19133:14:0;;-1:-1:-1;;;;;19120:27:0;;;19133:14;;19120:27;19093:54;19081:66;;19161:16;19179:10;19193:29;19207:6;19215;19193:13;:29::i;:::-;19266:13;;19257:4;19239:24;;;;:9;:24;;;;;;19160:62;;-1:-1:-1;19160:62:0;;-1:-1:-1;;19238:58:0;;;;-1:-1:-1;19285:11:0;;;;;;;19284:12;19238:58;:69;;;;-1:-1:-1;19301:6:0;;-1:-1:-1;;;19301:6:0;;;;19300:7;19238:69;19235:180;;;19327:6;:22;;;;-1:-1:-1;19338:11:0;;;;;;;19337:12;19327:22;19324:80;;;19370:18;19381:6;19370:10;:18::i;:::-;-1:-1:-1;;;;;19447:17:0;;;;;;:9;:17;;;;;;:29;;19469:6;19447:21;:29::i;:::-;-1:-1:-1;;;;;19427:17:0;;;;;;;:9;:17;;;;;;:49;;;;19510:20;;;;;;;:37;;19535:11;19510:24;:37::i;:::-;-1:-1:-1;;;;;19487:20:0;;;;;;:9;:20;;;;;;:60;;;;19603:4;19585:24;;;;:35;;19614:5;19585:28;:35::i;:::-;19576:4;19558:24;;;;:9;:24;;;;;;;:62;;;;19636:38;;-1:-1:-1;;;;;19636:38:0;;;-1:-1:-1;;;;;;;;;;;19636:38:0;;;19668:5;5987:25:1;;5975:2;5960:18;;5833:185;19636:38:0;;;;;;;;19707:9;-1:-1:-1;;;;;19690:40:0;19699:6;-1:-1:-1;;;;;19690:40:0;-1:-1:-1;;;;;;;;;;;19718:11:0;19690:40;;;;5987:25:1;;5975:2;5960:18;;5833:185;19690:40:0;;;;;;;;18477:1261;;;18397:1341;;;:::o;3468:98::-;3526:7;3553:5;3557:1;3553;:5;:::i;20138:1860::-;15154:6;;-1:-1:-1;;;15154:6:0;;;;15153:7;15145:29;;;;-1:-1:-1;;;15145:29:0;;8646:2:1;15145:29:0;;;8628:21:1;8685:1;8665:18;;;8658:29;-1:-1:-1;;;8703:18:1;;;8696:39;8752:18;;15145:29:0;8444:332:1;15145:29:0;15185:6;:13;;-1:-1:-1;;;;15185:13:0;-1:-1:-1;;;15185:13:0;;;20244:4:::1;15185:13:::0;20226:24;;;:9:::1;:24;::::0;;;;;20312:8:::1;::::0;20226:24;;15185:13;-1:-1:-1;;;20312:8:0;::::1;15185:13:::0;20312:8;;::::1;::::0;20279:30:::1;::::0;-1:-1:-1;;;20296:13:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;20279:14:0;::::1;;:30;:::i;:::-;:41;;;;:::i;:::-;20261:59;;;;20331:22;20356:32;20384:3;20357:21;20375:2;20357:13;;:17;;:21;;;;:::i;20356:32::-;20331:57;;20421:9;20404:14;:26;20401:129;;;20450:6;::::0;::::1;;20447:72;;;-1:-1:-1::0;20494:9:0;20447:72:::1;20559:14;20543:15;:30;20540:67;;;20589:7;;;;;20540:67;20661:14;::::0;20619:25:::1;::::0;20645:40:::1;::::0;::::1;::::0;20646:29:::1;::::0;-1:-1:-1;;;20661:14:0;::::1;;;20646::::0;:29:::1;:::i;:::-;20645:40;;;;:::i;:::-;20741:13;::::0;20619:66;;-1:-1:-1;20696:25:0::1;::::0;20723:41:::1;::::0;::::1;::::0;20724:30:::1;::::0;-1:-1:-1;;;20741:13:0;::::1;;;20724:14:::0;:30:::1;:::i;:::-;20723:41;;;;:::i;:::-;20814:8;::::0;20696:68;;-1:-1:-1;20775:19:0::1;::::0;20796:36:::1;::::0;::::1;::::0;20797:25:::1;::::0;-1:-1:-1;;;20814:8:0;::::1;;;20797:14:::0;:25:::1;:::i;:::-;20796:36;;;;:::i;:::-;20775:57:::0;-1:-1:-1;20845:16:0::1;20862:19;20880:1;20862:17:::0;:19:::1;:::i;:::-;20845:36:::0;-1:-1:-1;20892:19:0::1;20912:26;20845:36:::0;20912:17;:26:::1;:::i;:::-;20892:46:::0;-1:-1:-1;20951:17:0::1;20999:11:::0;20969:29:::1;20981:17:::0;20892:46;20969:29:::1;:::i;:::-;:41;;;;:::i;:::-;21105:16;::::0;;21119:1:::1;21105:16:::0;;;;;::::1;::::0;;20951:59;;-1:-1:-1;21049:21:0::1;::::0;21021:25:::1;::::0;21105:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21105:16:0::1;21081:40;;21150:4;21132;21137:1;21132:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21132:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21176:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;21176:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;21132:7;;21176:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21166:4;21171:1;21166:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21166:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;21200:6:::1;::::0;:189:::1;::::0;-1:-1:-1;;;21200:189:0;;:6;::::1;::::0;:57:::1;::::0;:189:::1;::::0;21272:9;;21200:6:::1;::::0;21312:4;;21339::::1;::::0;21359:15:::1;::::0;21200:189:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21400:14;21440:17;21416:21;:41;;;;:::i;:::-;21400:58:::0;-1:-1:-1;21469:14:0::1;21507:9:::0;21487:18:::1;21494:11:::0;21400:58;21487:18:::1;:::i;:::-;21486:30;;;;:::i;:::-;21527:6;::::0;:180:::1;::::0;-1:-1:-1;;;21527:180:0;;21588:4:::1;21527:180;::::0;::::1;4907:34:1::0;;;4957:18;;;4950:34;;;21527:6:0::1;5000:18:1::0;;;4993:34;;;5043:18;;;5036:34;5086:19;;;5079:44;21691:15:0::1;5139:19:1::0;;;5132:35;21469:47:0;;-1:-1:-1;;;;;;21527:6:0::1;::::0;:22:::1;::::0;21469:47;;4841:19:1;;21527:180:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21720:20;21766:17;21742:21;:41;;;;:::i;:::-;21835:13;::::0;21720:64;;-1:-1:-1;21795:21:0::1;::::0;21850:3:::1;::::0;21820:28:::1;::::0;-1:-1:-1;;;21835:13:0;::::1;;;21720:64:::0;21820:28:::1;:::i;:::-;21819:34;;;;:::i;:::-;21899:8;::::0;21795:58;;-1:-1:-1;21864:16:0::1;::::0;21909:3:::1;::::0;21884:23:::1;::::0;-1:-1:-1;;;21899:8:0;::::1;;;21884:12:::0;:23:::1;:::i;:::-;21883:29;;;;:::i;:::-;21864:48;;21943:13;21923:16;;:33;;;;;;;:::i;:::-;;;;;;;;21982:8;21967:11;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;;;;;;;;;;;;15209:1:0::1;-1:-1:-1::0;15221:6:0;:14;;-1:-1:-1;;;;15221:14:0;;;20138:1860::o;19746:384::-;19817:17;19836:11;19860:9;19885:6;19882:98;;;-1:-1:-1;19914:8:0;;;;;;;19882:98;;;-1:-1:-1;19961:7:0;;;;19882:98;19992:15;20023:3;20011:10;;;;:6;:10;:::i;:::-;20010:16;;;;:::i;:::-;19992:34;-1:-1:-1;20037:17:0;20057:19;19992:34;20057:6;:19;:::i;:::-;20037:39;20109:10;;-1:-1:-1;19746:384:0;;-1:-1:-1;;;;;19746:384:0:o;3362:98::-;3420:7;3447:5;3451:1;3447;:5;:::i;14:156:1:-;80:20;;140:4;129:16;;119:27;;109:55;;160:1;157;150:12;109:55;14:156;;;:::o;175:247::-;234:6;287:2;275:9;266:7;262:23;258:32;255:52;;;303:1;300;293:12;255:52;342:9;329:23;361:31;386:5;361:31;:::i;427:251::-;497:6;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;598:9;592:16;617:31;642:5;617:31;:::i;683:388::-;751:6;759;812:2;800:9;791:7;787:23;783:32;780:52;;;828:1;825;818:12;780:52;867:9;854:23;886:31;911:5;886:31;:::i;:::-;936:5;-1:-1:-1;993:2:1;978:18;;965:32;1006:33;965:32;1006:33;:::i;:::-;1058:7;1048:17;;;683:388;;;;;:::o;1076:456::-;1153:6;1161;1169;1222:2;1210:9;1201:7;1197:23;1193:32;1190:52;;;1238:1;1235;1228:12;1190:52;1277:9;1264:23;1296:31;1321:5;1296:31;:::i;:::-;1346:5;-1:-1:-1;1403:2:1;1388:18;;1375:32;1416:33;1375:32;1416:33;:::i;:::-;1076:456;;1468:7;;-1:-1:-1;;;1522:2:1;1507:18;;;;1494:32;;1076:456::o;1537:382::-;1602:6;1610;1663:2;1651:9;1642:7;1638:23;1634:32;1631:52;;;1679:1;1676;1669:12;1631:52;1718:9;1705:23;1737:31;1762:5;1737:31;:::i;:::-;1787:5;-1:-1:-1;1844:2:1;1829:18;;1816:32;1857:30;1816:32;1857:30;:::i;1924:315::-;1992:6;2000;2053:2;2041:9;2032:7;2028:23;2024:32;2021:52;;;2069:1;2066;2059:12;2021:52;2108:9;2095:23;2127:31;2152:5;2127:31;:::i;:::-;2177:5;2229:2;2214:18;;;;2201:32;;-1:-1:-1;;;1924:315:1:o;2244:241::-;2300:6;2353:2;2341:9;2332:7;2328:23;2324:32;2321:52;;;2369:1;2366;2359:12;2321:52;2408:9;2395:23;2427:28;2449:5;2427:28;:::i;2490:245::-;2557:6;2610:2;2598:9;2589:7;2585:23;2581:32;2578:52;;;2626:1;2623;2616:12;2578:52;2658:9;2652:16;2677:28;2699:5;2677:28;:::i;2740:180::-;2799:6;2852:2;2840:9;2831:7;2827:23;2823:32;2820:52;;;2868:1;2865;2858:12;2820:52;-1:-1:-1;2891:23:1;;2740:180;-1:-1:-1;2740:180:1:o;2925:184::-;2995:6;3048:2;3036:9;3027:7;3023:23;3019:32;3016:52;;;3064:1;3061;3054:12;3016:52;-1:-1:-1;3087:16:1;;2925:184;-1:-1:-1;2925:184:1:o;3114:306::-;3202:6;3210;3218;3271:2;3259:9;3250:7;3246:23;3242:32;3239:52;;;3287:1;3284;3277:12;3239:52;3316:9;3310:16;3300:26;;3366:2;3355:9;3351:18;3345:25;3335:35;;3410:2;3399:9;3395:18;3389:25;3379:35;;3114:306;;;;;:::o;3425:182::-;3482:6;3535:2;3523:9;3514:7;3510:23;3506:32;3503:52;;;3551:1;3548;3541:12;3503:52;3574:27;3591:9;3574:27;:::i;3612:252::-;3676:6;3684;3737:2;3725:9;3716:7;3712:23;3708:32;3705:52;;;3753:1;3750;3743:12;3705:52;3776:27;3793:9;3776:27;:::i;:::-;3766:37;;3822:36;3854:2;3843:9;3839:18;3822:36;:::i;:::-;3812:46;;3612:252;;;;;:::o;6023:597::-;6135:4;6164:2;6193;6182:9;6175:21;6225:6;6219:13;6268:6;6263:2;6252:9;6248:18;6241:34;6293:1;6303:140;6317:6;6314:1;6311:13;6303:140;;;6412:14;;;6408:23;;6402:30;6378:17;;;6397:2;6374:26;6367:66;6332:10;;6303:140;;;6461:6;6458:1;6455:13;6452:91;;;6531:1;6526:2;6517:6;6506:9;6502:22;6498:31;6491:42;6452:91;-1:-1:-1;6604:2:1;6583:15;-1:-1:-1;;6579:29:1;6564:45;;;;6611:2;6560:54;;6023:597;-1:-1:-1;;;6023:597:1:o;11590:328::-;11792:2;11774:21;;;11831:1;11811:18;;;11804:29;-1:-1:-1;;;11864:2:1;11849:18;;11842:35;11909:2;11894:18;;11590:328::o;11923:332::-;12125:2;12107:21;;;12164:1;12144:18;;;12137:29;-1:-1:-1;;;12197:2:1;12182:18;;12175:39;12246:2;12231:18;;11923:332::o;13123:980::-;13385:4;13433:3;13422:9;13418:19;13464:6;13453:9;13446:25;13490:2;13528:6;13523:2;13512:9;13508:18;13501:34;13571:3;13566:2;13555:9;13551:18;13544:31;13595:6;13630;13624:13;13661:6;13653;13646:22;13699:3;13688:9;13684:19;13677:26;;13738:2;13730:6;13726:15;13712:29;;13759:1;13769:195;13783:6;13780:1;13777:13;13769:195;;;13848:13;;-1:-1:-1;;;;;13844:39:1;13832:52;;13939:15;;;;13904:12;;;;13880:1;13798:9;13769:195;;;-1:-1:-1;;;;;;;14020:32:1;;;;14015:2;14000:18;;13993:60;-1:-1:-1;;;14084:3:1;14069:19;14062:35;13981:3;13123:980;-1:-1:-1;;;13123:980:1:o;14297:128::-;14337:3;14368:1;14364:6;14361:1;14358:13;14355:39;;;14374:18;;:::i;:::-;-1:-1:-1;14410:9:1;;14297:128::o;14430:204::-;14468:3;14504:4;14501:1;14497:12;14536:4;14533:1;14529:12;14571:3;14565:4;14561:14;14556:3;14553:23;14550:49;;;14579:18;;:::i;:::-;14615:13;;14430:204;-1:-1:-1;;;14430:204:1:o;14639:217::-;14679:1;14705;14695:132;;14749:10;14744:3;14740:20;14737:1;14730:31;14784:4;14781:1;14774:15;14812:4;14809:1;14802:15;14695:132;-1:-1:-1;14841:9:1;;14639:217::o;14861:422::-;14950:1;14993:5;14950:1;15007:270;15028:7;15018:8;15015:21;15007:270;;;15087:4;15083:1;15079:6;15075:17;15069:4;15066:27;15063:53;;;15096:18;;:::i;:::-;15146:7;15136:8;15132:22;15129:55;;;15166:16;;;;15129:55;15245:22;;;;15205:15;;;;15007:270;;;15011:3;14861:422;;;;;:::o;15288:140::-;15346:5;15375:47;15416:4;15406:8;15402:19;15396:4;15482:5;15512:8;15502:80;;-1:-1:-1;15553:1:1;15567:5;;15502:80;15601:4;15591:76;;-1:-1:-1;15638:1:1;15652:5;;15591:76;15683:4;15701:1;15696:59;;;;15769:1;15764:130;;;;15676:218;;15696:59;15726:1;15717:10;;15740:5;;;15764:130;15801:3;15791:8;15788:17;15785:43;;;15808:18;;:::i;:::-;-1:-1:-1;;15864:1:1;15850:16;;15879:5;;15676:218;;15978:2;15968:8;15965:16;15959:3;15953:4;15950:13;15946:36;15940:2;15930:8;15927:16;15922:2;15916:4;15913:12;15909:35;15906:77;15903:159;;;-1:-1:-1;16015:19:1;;;16047:5;;15903:159;16094:34;16119:8;16113:4;16094:34;:::i;:::-;16164:6;16160:1;16156:6;16152:19;16143:7;16140:32;16137:58;;;16175:18;;:::i;:::-;16213:20;;15433:806;-1:-1:-1;;;15433:806:1:o;16244:168::-;16284:7;16350:1;16346;16342:6;16338:14;16335:1;16332:21;16327:1;16320:9;16313:17;16309:45;16306:71;;;16357:18;;:::i;:::-;-1:-1:-1;16397:9:1;;16244:168::o;16417:125::-;16457:4;16485:1;16482;16479:8;16476:34;;;16490:18;;:::i;:::-;-1:-1:-1;16527:9:1;;16417:125::o;16547:127::-;16608:10;16603:3;16599:20;16596:1;16589:31;16639:4;16636:1;16629:15;16663:4;16660:1;16653:15;16679:127;16740:10;16735:3;16731:20;16728:1;16721:31;16771:4;16768:1;16761:15;16795:4;16792:1;16785:15;16943:131;-1:-1:-1;;;;;17018:31:1;;17008:42;;16998:70;;17064:1;17061;17054:12;17079:118;17165:5;17158:13;17151:21;17144:5;17141:32;17131:60;;17187:1;17184;17177:12

Swarm Source

ipfs://3014980cfc17f9367f72ec63f81939cbf0798d3c38bef46a270269c38ea32049
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.