ETH Price: $3,419.01 (+1.01%)
Gas: 3 Gwei

Token

ERC20 ***
 

Overview

Max Total Supply

100,000,000 ERC20 ***

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 ERC20 ***

Value
$0.00
0x5a3de6b799f5543b78d3b6fe47d1a9b2c59c35b8
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:
DigitalAi

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-09
*/

/**

Website     : https://digitalaierc.com
Telegram    : https://t.me/Digitalaierc

*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    uint256 private _lockTime;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract DigitalAi is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "Digital Ai";
    string private _symbol = "DAI";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress =
        payable(0x6F47ff5A2B1bA56C576e447b19b7af7Ef2462007);
    address payable public DeployerWalletAddress =
        payable(0x6F47ff5A2B1bA56C576e447b19b7af7Ef2462007);
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;

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

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

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 25;
    uint256 public _buyDeployerFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 25;
    uint256 public _sellDeployerFee = 0;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 10;
    uint256 public _deployerShare = 0;

    uint256 public _totalTaxIfBuying = 25;
    uint256 public _totalTaxIfSelling = 25;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply    = 100000000* 10**_decimals;
    uint256 public _maxTxAmount     = 1000000 * 10**_decimals;
    uint256 public _walletMax       = 1000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 300000 * 10**_decimals;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

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

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

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

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

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

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyDeployerFee
        );
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _deployerShare
        );

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

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

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function SetFee(
        uint256 newBuyLiquidityTax,
        uint256 newBuyMarketingTax,
        uint256 newBuyDeployerTax,

        uint256 newSellLiquidityTax,
        uint256 newSellMarketingTax,
        uint256 newSellDeployerTax
    ) external onlyOwner {
        _buyLiquidityFee = newBuyLiquidityTax;
        _buyMarketingFee = newBuyMarketingTax;
        _buyDeployerFee = newBuyDeployerTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyDeployerFee
        );

        _sellLiquidityFee = newSellLiquidityTax;
        _sellMarketingFee = newSellMarketingTax;
        _sellDeployerFee = newSellDeployerTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
    }

    function setDistributionSettings(
        uint256 newLiquidityShare,
        uint256 newMarketingShare,
        uint256 newDeployerShare
    ) external onlyOwner {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _deployerShare = newDeployerShare;

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

    function SetMax(uint256 maxTxAmount, uint256 MaxLimit) external onlyOwner {
        _maxTxAmount = maxTxAmount;
        _walletMax = MaxLimit;
    }

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

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

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

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

    function DeployerWallet(address newAddress) external onlyOwner {
        DeployerWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function TransferTokenBalance(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){
        if(_value == 0) {
            _value = IERC20(_token).balanceOf(address(this));
        } else {
            _sent = IERC20(_token).transfer(_to, _value);
        }
    }
    function SwapBalance() external onlyOwner {
        uint balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

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

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

    function changeRouterVersion(address newRouterAddress)
        public
        onlyOwner
        returns (address newPairAddress)
    {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            newRouterAddress
        );

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

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

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

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

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

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

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        } else {
            if (!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
            }

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

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

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

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

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

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

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

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 tokensForLP = tAmount
            .mul(_liquidityShare)
            .div(_totalDistributionShares)
            .div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

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

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

        uint256 amountETHLiquidity = amountReceived
            .mul(_liquidityShare)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHOwner = amountReceived.mul(_deployerShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(
            amountETHOwner
        );

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

        if (amountETHOwner > 0)
            transferToAddressETH(DeployerWalletAddress, amountETHOwner);

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

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        } else if (isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

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

        return amount.sub(feeAmount);
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"DeployerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DeployerWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"ExcludeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"ExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"ExludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"MarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newBuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newBuyDeployerTax","type":"uint256"},{"internalType":"uint256","name":"newSellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newSellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newSellDeployerTax","type":"uint256"}],"name":"SetFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxLimit","type":"uint256"}],"name":"SetMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"TransferTokenBalance","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_buyDeployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deployerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDeployerShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600a60a0908152694469676974616c20416960b01b60c0526002906200002b9082620006ae565b506040805180820190915260038082526244414960e81b602083015290620000549082620006ae565b5060048054746f47ff5a2b1ba56c576e447b19b7af7ef2462007096001600160a81b0319909116179055600580546001600160a01b031916736f47ff5a2b1ba56c576e447b19b7af7ef246200717905561dead6080525f600c8190556019600d819055600e829055600f829055601081905560118290556012829055600a601381905560149290925560158190556016556017819055620000f89060099062000883565b62000108906305f5e1006200089a565b6018556004546200011e9060ff16600a62000883565b6200012d90620f42406200089a565b601955600454620001439060ff16600a62000883565b6200015290620f42406200089a565b601a55600454620001689060ff16600a62000883565b6200017790620493e06200089a565b601b55601d805462ffffff60a81b19166201000160a81b1790553480156200019d575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000233573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002599190620008b4565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002cb9190620008b4565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000316573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200033c9190620008b4565b601d80546001600160a01b039283166001600160a01b031991821617909155601c80549284169290911682179055601854305f90815260076020908152604080832094835293905291822055600190600890620003a05f546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081015f908120805494151560ff199586161790553081526008909252902080549091166001179055600e54600d54600c54620004019291620003fa9190620005a0565b90620005a0565b601555601154601054600f546200041f9291620003fa9190620005a0565b6016556014546013546012546200043d9291620003fa9190620005a0565b601755600160095f620004575f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055601d549091168152600990925280822080548416600190811790915530835290822080549093168117909255600a90620004c55f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff19968716179055308152600a8452828120805486166001908117909155601d549092168152600b90935290822080549093161790915560185490600690620005303390565b6001600160a01b0316815260208101919091526040015f2055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6018546040516200059191815260200190565b60405180910390a350620008f2565b5f80620005ae8385620008dc565b905083811015620006055760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200063757607f821691505b6020821081036200065657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006a9575f81815260208120601f850160051c81016020861015620006845750805b601f850160051c820191505b81811015620006a55782815560010162000690565b5050505b505050565b81516001600160401b03811115620006ca57620006ca6200060e565b620006e281620006db845462000622565b846200065c565b602080601f83116001811462000718575f8415620007005750858301515b5f19600386901b1c1916600185901b178555620006a5565b5f85815260208120601f198616915b82811015620007485788860151825594840194600190910190840162000727565b50858210156200076657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620007ca57815f1904821115620007ae57620007ae62000776565b80851615620007bc57918102915b93841c93908002906200078f565b509250929050565b5f82620007e25750600162000608565b81620007f057505f62000608565b8160018114620008095760028114620008145762000834565b600191505062000608565b60ff84111562000828576200082862000776565b50506001821b62000608565b5060208310610133831016604e8410600b841016171562000859575081810a62000608565b6200086583836200078a565b805f19048211156200087b576200087b62000776565b029392505050565b5f6200089360ff841683620007d2565b9392505050565b808202811582820484141762000608576200060862000776565b5f60208284031215620008c5575f80fd5b81516001600160a01b038116811462000605575f80fd5b8082018082111562000608576200060862000776565b60805161271b620009125f395f81816104d00152610d22015261271b5ff3fe608060405260043610610374575f3560e01c806388790a68116101c8578063c816841b116100fd578063dc44b6a01161009d578063f0cd1dac1161006d578063f0cd1dac14610a1c578063f2fde38b14610a31578063f872858a14610a50578063fd05e4df14610a70575f80fd5b8063dc44b6a014610985578063dd62ed3e1461099a578063f00a16ad146109de578063f0b5f3cf146109fd575f80fd5b8063cb5f6d05116100d8578063cb5f6d051461090d578063d01edad014610922578063d158272d14610941578063da00097d14610965575f80fd5b8063c816841b146108ab578063c8607952146108ca578063c867d60b146108df575f80fd5b8063a457c2d711610168578063bf343b7411610143578063bf343b7414610839578063c2d4640e14610858578063c49b9a8014610877578063c5d2418914610896575f80fd5b8063a457c2d7146107dc578063a5d69d1f146107fb578063a9059cbb1461081a575f80fd5b806395d89b41116101a357806395d89b4114610780578063986a1a0414610794578063a073d37f146107b3578063a08e671f146107c7575f80fd5b806388790a68146107215780638b42507f146107365780638da5cb5b14610764575f80fd5b806339509351116102a95780635881f3ef116102495780637d1db4a5116102195780637d1db4a5146106c3578063807c2d9c146106d857806382eefb43146106ed578063844d591c14610702575f80fd5b80635881f3ef1461064657806361a23c691461066557806363b52db41461067a57806370a082311461068f575f80fd5b80634a74bb02116102845780634a74bb02146105d15780635342acb4146105f1578063557ed1ba1461061f57806357a5802f14610631575f80fd5b806339509351146105655780633b97084a146105845780633ecad271146105a3575f80fd5b806323b872dd116103145780632b112e49116102ef5780632b112e49146104f25780632d43abd814610506578063313ce5671461052557806332d22f6a14610546575f80fd5b806323b872dd146104815780632563ae83146104a057806327c8f835146104bf575f80fd5b80630bc992b51161034f5780630bc992b5146103ee5780631694505e1461040d57806318160ddd1461044457806322515a0914610462575f80fd5b806301afba2c1461037f57806306fdde0314610395578063095ea7b3146103bf575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b50610393610a85565b005b3480156103a0575f80fd5b506103a9610b02565b6040516103b6919061228b565b60405180910390f35b3480156103ca575f80fd5b506103de6103d93660046122ed565b610b92565b60405190151581526020016103b6565b3480156103f9575f80fd5b50610393610408366004612317565b610ba8565b348015610418575f80fd5b50601c5461042c906001600160a01b031681565b6040516001600160a01b0390911681526020016103b6565b34801561044f575f80fd5b506018545b6040519081526020016103b6565b34801561046d575f80fd5b5061039361047c366004612356565b610c1f565b34801561048c575f80fd5b506103de61049b366004612371565b610c70565b3480156104ab575f80fd5b506103936104ba3660046123bc565b610cd9565b3480156104ca575f80fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104fd575f80fd5b50610454610d20565b348015610511575f80fd5b506103936105203660046123d7565b610d69565b348015610530575f80fd5b5060045460405160ff90911681526020016103b6565b348015610551575f80fd5b5061039361056036600461240e565b610dbc565b348015610570575f80fd5b506103de61057f3660046122ed565b610df0565b34801561058f575f80fd5b5061039361059e36600461242e565b610e25565b3480156105ae575f80fd5b506103de6105bd366004612356565b600b6020525f908152604090205460ff1681565b3480156105dc575f80fd5b50601d546103de90600160a81b900460ff1681565b3480156105fc575f80fd5b506103de61060b366004612356565b60086020525f908152604090205460ff1681565b34801561062a575f80fd5b5042610454565b34801561063c575f80fd5b5061045460125481565b348015610651575f80fd5b5061042c610660366004612356565b610e53565b348015610670575f80fd5b5061045460135481565b348015610685575f80fd5b5061045460145481565b34801561069a575f80fd5b506104546106a9366004612356565b6001600160a01b03165f9081526006602052604090205490565b3480156106ce575f80fd5b5061045460195481565b3480156106e3575f80fd5b50610454601a5481565b3480156106f8575f80fd5b5061045460165481565b34801561070d575f80fd5b5061039361071c3660046123d7565b61117b565b34801561072c575f80fd5b50610454600f5481565b348015610741575f80fd5b506103de610750366004612356565b600a6020525f908152604090205460ff1681565b34801561076f575f80fd5b505f546001600160a01b031661042c565b34801561078b575f80fd5b506103a96111ce565b34801561079f575f80fd5b506103936107ae3660046123d7565b6111dd565b3480156107be575f80fd5b50601b54610454565b3480156107d2575f80fd5b5061045460175481565b3480156107e7575f80fd5b506103de6107f63660046122ed565b611230565b348015610806575f80fd5b506103936108153660046123bc565b61127d565b348015610825575f80fd5b506103de6108343660046122ed565b6112c4565b348015610844575f80fd5b506103de610853366004612371565b6112d0565b348015610863575f80fd5b50610393610872366004612445565b6113e6565b348015610882575f80fd5b506103936108913660046123bc565b611434565b3480156108a1575f80fd5b50610454600d5481565b3480156108b6575f80fd5b50601d5461042c906001600160a01b031681565b3480156108d5575f80fd5b5061045460105481565b3480156108ea575f80fd5b506103de6108f9366004612356565b60096020525f908152604090205460ff1681565b348015610918575f80fd5b5061045460115481565b34801561092d575f80fd5b5060055461042c906001600160a01b031681565b34801561094c575f80fd5b5060045461042c9061010090046001600160a01b031681565b348015610970575f80fd5b50601d546103de90600160b01b900460ff1681565b348015610990575f80fd5b50610454600c5481565b3480156109a5575f80fd5b506104546109b436600461246e565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b3480156109e9575f80fd5b506103936109f83660046123d7565b6114b5565b348015610a08575f80fd5b50610393610a17366004612356565b611508565b348015610a27575f80fd5b5061045460155481565b348015610a3c575f80fd5b50610393610a4b366004612356565b611553565b348015610a5b575f80fd5b50601d546103de90600160b81b900460ff1681565b348015610a7b575f80fd5b50610454600e5481565b5f546001600160a01b03163314610ab75760405162461bcd60e51b8152600401610aae9061249a565b60405180910390fd5b47610ac95f546001600160a01b031690565b6001600160a01b03166108fc8290811502906040515f60405180830381858888f19350505050158015610afe573d5f803e3d5ffd5b5050565b606060028054610b11906124cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3d906124cf565b8015610b885780601f10610b5f57610100808354040283529160200191610b88565b820191905f5260205f20905b815481529060010190602001808311610b6b57829003601f168201915b5050505050905090565b5f610b9e33848461163a565b5060015b92915050565b5f546001600160a01b03163314610bd15760405162461bcd60e51b8152600401610aae9061249a565b600c869055600d859055600e849055610bf484610bee888861175d565b9061175d565b601555600f83905560108290556011819055610c1481610bee858561175d565b601655505050505050565b5f546001600160a01b03163314610c485760405162461bcd60e51b8152600401610aae9061249a565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b5f610c7c8484846117bb565b50610cce8433610cc985604051806060016040528060288152602001612699602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190611b7d565b61163a565b5060015b9392505050565b5f546001600160a01b03163314610d025760405162461bcd60e51b8152600401610aae9061249a565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f90815260066020526040812054601854610d6491611bb5565b905090565b5f546001600160a01b03163314610d925760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610de55760405162461bcd60e51b8152600401610aae9061249a565b601991909155601a55565b335f8181526007602090815260408083206001600160a01b03871684529091528120549091610b9e918590610cc9908661175d565b5f546001600160a01b03163314610e4e5760405162461bcd60e51b8152600401610aae9061249a565b601b55565b5f80546001600160a01b03163314610e7d5760405162461bcd60e51b8152600401610aae9061249a565b5f829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee19190612507565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f509190612507565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbd9190612507565b91506001600160a01b03821661110d57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611009573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102d9190612507565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109c9190612507565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156110e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110a9190612507565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091555f908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b5f546001600160a01b031633146111a45760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b606060038054610b11906124cf565b5f546001600160a01b031633146112065760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f610b9e3384610cc9856040518060600160405280602581526020016126c160259139335f9081526007602090815260408083206001600160a01b038d1684529091529020549190611b7d565b5f546001600160a01b031633146112a65760405162461bcd60e51b8152600401610aae9061249a565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b5f610cce3384846117bb565b5f80546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610aae9061249a565b815f0361136e576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015611343573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113679190612522565b9150610cd2565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af11580156113ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190612539565b949350505050565b5f546001600160a01b0316331461140f5760405162461bcd60e51b8152600401610aae9061249a565b60128390556013829055601481905561142c81610bee858561175d565b601755505050565b5f546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610aae9061249a565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114aa90831515815260200190565b60405180910390a150565b5f546001600160a01b031633146114de5760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146115315760405162461bcd60e51b8152600401610aae9061249a565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461157c5760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b0381166115e15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aae565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661169c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aae565b6001600160a01b0382166116fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aae565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f806117698385612568565b905083811015610cd25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aae565b5f6001600160a01b0384166118205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aae565b6001600160a01b0383166118825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aae565b601d54600160a01b900460ff16156118a65761189f848484611bf6565b9050610cd2565b6001600160a01b0384165f908152600a602052604090205460ff161580156118e657506001600160a01b0383165f908152600a602052604090205460ff16155b1561194e5760195482111561194e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610aae565b305f90815260066020526040902054601b548110801590819061197b5750601d54600160a01b900460ff16155b801561199f57506001600160a01b0386165f908152600b602052604090205460ff16155b80156119b45750601d54600160a81b900460ff165b156119da57601d54600160b01b900460ff16156119d157601b5491505b6119da82611cd9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f90815260069091529190912054611a2b918690611b7d565b6001600160a01b0387165f90815260066020908152604080832093909355600890529081205460ff1680611a7657506001600160a01b0386165f9081526008602052604090205460ff165b611a8a57611a85878787611e0c565b611a8c565b845b601d54909150600160b81b900460ff168015611ac057506001600160a01b0386165f9081526009602052604090205460ff16155b15611af457601a54611aea82610bee896001600160a01b03165f9081526006602052604090205490565b1115611af4575f80fd5b6001600160a01b0386165f90815260066020526040902054611b16908261175d565b6001600160a01b038088165f8181526006602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b699085815260200190565b60405180910390a360019350505050610cd2565b5f8184841115611ba05760405162461bcd60e51b8152600401610aae919061228b565b505f611bac848661257b565b95945050505050565b5f610cd283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b7d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600690915291822054611c46918490611b7d565b6001600160a01b038086165f908152600660205260408082209390935590851681522054611c74908361175d565b6001600160a01b038085165f8181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cc79086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b1790556017546012545f91611d0e91600291611d089182908790611f0e565b90611f8c565b90505f611d1b8383611bb5565b9050611d2681611fcd565b60125447905f90611d4590611d3c906002611f8c565b60175490611bb5565b90505f611d666002611d0884611d0860125488611f0e90919063ffffffff16565b90505f611d8283611d0860145487611f0e90919063ffffffff16565b90505f611d9982611d938786611bb5565b90611bb5565b90508015611dbc57600454611dbc9061010090046001600160a01b031682612156565b8115611dd857600554611dd8906001600160a01b031683612156565b5f83118015611de657505f87115b15611df557611df5878461218e565b5050601d805460ff60a01b19169055505050505050565b6001600160a01b0383165f908152600b6020526040812054819060ff1615611e4f57611e486064611d0860155486611f0e90919063ffffffff16565b9050611e8c565b6001600160a01b0384165f908152600b602052604090205460ff1615611e8c57611e896064611d0860165486611f0e90919063ffffffff16565b90505b8015611f0457305f90815260066020526040902054611eab908261175d565b305f81815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611efb9085815260200190565b60405180910390a35b611bac8382611bb5565b5f825f03611f1d57505f610ba2565b5f611f28838561258e565b905082611f3585836125a5565b14610cd25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aae565b5f610cd283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061225f565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612000576120006125c4565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612057573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207b9190612507565b8160018151811061208e5761208e6125c4565b6001600160a01b039283166020918202929092010152601c546120b4913091168461163a565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906120ec9085905f9086903090429060040161261a565b5f604051808303815f87803b158015612103575f80fd5b505af1158015612115573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161214a929190612655565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015612189573d5f803e3d5ffd5b505050565b601c546121a69030906001600160a01b03168461163a565b601c546001600160a01b031663f305d7198230855f806121cd5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612233573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612258919061266d565b5050505050565b5f818361227f5760405162461bcd60e51b8152600401610aae919061228b565b505f611bac84866125a5565b5f6020808352835180828501525f5b818110156122b65785810183015185820160400152820161229a565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146122ea575f80fd5b50565b5f80604083850312156122fe575f80fd5b8235612309816122d6565b946020939093013593505050565b5f805f805f8060c0878903121561232c575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215612366575f80fd5b8135610cd2816122d6565b5f805f60608486031215612383575f80fd5b833561238e816122d6565b9250602084013561239e816122d6565b929592945050506040919091013590565b80151581146122ea575f80fd5b5f602082840312156123cc575f80fd5b8135610cd2816123af565b5f80604083850312156123e8575f80fd5b82356123f3816122d6565b91506020830135612403816123af565b809150509250929050565b5f806040838503121561241f575f80fd5b50508035926020909101359150565b5f6020828403121561243e575f80fd5b5035919050565b5f805f60608486031215612457575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561247f575f80fd5b823561248a816122d6565b91506020830135612403816122d6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124e357607f821691505b60208210810361250157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612517575f80fd5b8151610cd2816122d6565b5f60208284031215612532575f80fd5b5051919050565b5f60208284031215612549575f80fd5b8151610cd2816123af565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ba257610ba2612554565b81810381811115610ba257610ba2612554565b8082028115828204841417610ba257610ba2612554565b5f826125bf57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b8381101561260f5781516001600160a01b0316875295820195908201906001016125ea565b509495945050505050565b85815284602082015260a060408201525f61263860a08301866125d8565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6113de60408301846125d8565b5f805f6060848603121561267f575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220536fdfd5a6e0b5407a9f475a6ad4e3fcd9e53c721f81864f5a447aa4b90e390764736f6c63430008140033

Deployed Bytecode

0x608060405260043610610374575f3560e01c806388790a68116101c8578063c816841b116100fd578063dc44b6a01161009d578063f0cd1dac1161006d578063f0cd1dac14610a1c578063f2fde38b14610a31578063f872858a14610a50578063fd05e4df14610a70575f80fd5b8063dc44b6a014610985578063dd62ed3e1461099a578063f00a16ad146109de578063f0b5f3cf146109fd575f80fd5b8063cb5f6d05116100d8578063cb5f6d051461090d578063d01edad014610922578063d158272d14610941578063da00097d14610965575f80fd5b8063c816841b146108ab578063c8607952146108ca578063c867d60b146108df575f80fd5b8063a457c2d711610168578063bf343b7411610143578063bf343b7414610839578063c2d4640e14610858578063c49b9a8014610877578063c5d2418914610896575f80fd5b8063a457c2d7146107dc578063a5d69d1f146107fb578063a9059cbb1461081a575f80fd5b806395d89b41116101a357806395d89b4114610780578063986a1a0414610794578063a073d37f146107b3578063a08e671f146107c7575f80fd5b806388790a68146107215780638b42507f146107365780638da5cb5b14610764575f80fd5b806339509351116102a95780635881f3ef116102495780637d1db4a5116102195780637d1db4a5146106c3578063807c2d9c146106d857806382eefb43146106ed578063844d591c14610702575f80fd5b80635881f3ef1461064657806361a23c691461066557806363b52db41461067a57806370a082311461068f575f80fd5b80634a74bb02116102845780634a74bb02146105d15780635342acb4146105f1578063557ed1ba1461061f57806357a5802f14610631575f80fd5b806339509351146105655780633b97084a146105845780633ecad271146105a3575f80fd5b806323b872dd116103145780632b112e49116102ef5780632b112e49146104f25780632d43abd814610506578063313ce5671461052557806332d22f6a14610546575f80fd5b806323b872dd146104815780632563ae83146104a057806327c8f835146104bf575f80fd5b80630bc992b51161034f5780630bc992b5146103ee5780631694505e1461040d57806318160ddd1461044457806322515a0914610462575f80fd5b806301afba2c1461037f57806306fdde0314610395578063095ea7b3146103bf575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b50610393610a85565b005b3480156103a0575f80fd5b506103a9610b02565b6040516103b6919061228b565b60405180910390f35b3480156103ca575f80fd5b506103de6103d93660046122ed565b610b92565b60405190151581526020016103b6565b3480156103f9575f80fd5b50610393610408366004612317565b610ba8565b348015610418575f80fd5b50601c5461042c906001600160a01b031681565b6040516001600160a01b0390911681526020016103b6565b34801561044f575f80fd5b506018545b6040519081526020016103b6565b34801561046d575f80fd5b5061039361047c366004612356565b610c1f565b34801561048c575f80fd5b506103de61049b366004612371565b610c70565b3480156104ab575f80fd5b506103936104ba3660046123bc565b610cd9565b3480156104ca575f80fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000dead81565b3480156104fd575f80fd5b50610454610d20565b348015610511575f80fd5b506103936105203660046123d7565b610d69565b348015610530575f80fd5b5060045460405160ff90911681526020016103b6565b348015610551575f80fd5b5061039361056036600461240e565b610dbc565b348015610570575f80fd5b506103de61057f3660046122ed565b610df0565b34801561058f575f80fd5b5061039361059e36600461242e565b610e25565b3480156105ae575f80fd5b506103de6105bd366004612356565b600b6020525f908152604090205460ff1681565b3480156105dc575f80fd5b50601d546103de90600160a81b900460ff1681565b3480156105fc575f80fd5b506103de61060b366004612356565b60086020525f908152604090205460ff1681565b34801561062a575f80fd5b5042610454565b34801561063c575f80fd5b5061045460125481565b348015610651575f80fd5b5061042c610660366004612356565b610e53565b348015610670575f80fd5b5061045460135481565b348015610685575f80fd5b5061045460145481565b34801561069a575f80fd5b506104546106a9366004612356565b6001600160a01b03165f9081526006602052604090205490565b3480156106ce575f80fd5b5061045460195481565b3480156106e3575f80fd5b50610454601a5481565b3480156106f8575f80fd5b5061045460165481565b34801561070d575f80fd5b5061039361071c3660046123d7565b61117b565b34801561072c575f80fd5b50610454600f5481565b348015610741575f80fd5b506103de610750366004612356565b600a6020525f908152604090205460ff1681565b34801561076f575f80fd5b505f546001600160a01b031661042c565b34801561078b575f80fd5b506103a96111ce565b34801561079f575f80fd5b506103936107ae3660046123d7565b6111dd565b3480156107be575f80fd5b50601b54610454565b3480156107d2575f80fd5b5061045460175481565b3480156107e7575f80fd5b506103de6107f63660046122ed565b611230565b348015610806575f80fd5b506103936108153660046123bc565b61127d565b348015610825575f80fd5b506103de6108343660046122ed565b6112c4565b348015610844575f80fd5b506103de610853366004612371565b6112d0565b348015610863575f80fd5b50610393610872366004612445565b6113e6565b348015610882575f80fd5b506103936108913660046123bc565b611434565b3480156108a1575f80fd5b50610454600d5481565b3480156108b6575f80fd5b50601d5461042c906001600160a01b031681565b3480156108d5575f80fd5b5061045460105481565b3480156108ea575f80fd5b506103de6108f9366004612356565b60096020525f908152604090205460ff1681565b348015610918575f80fd5b5061045460115481565b34801561092d575f80fd5b5060055461042c906001600160a01b031681565b34801561094c575f80fd5b5060045461042c9061010090046001600160a01b031681565b348015610970575f80fd5b50601d546103de90600160b01b900460ff1681565b348015610990575f80fd5b50610454600c5481565b3480156109a5575f80fd5b506104546109b436600461246e565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b3480156109e9575f80fd5b506103936109f83660046123d7565b6114b5565b348015610a08575f80fd5b50610393610a17366004612356565b611508565b348015610a27575f80fd5b5061045460155481565b348015610a3c575f80fd5b50610393610a4b366004612356565b611553565b348015610a5b575f80fd5b50601d546103de90600160b81b900460ff1681565b348015610a7b575f80fd5b50610454600e5481565b5f546001600160a01b03163314610ab75760405162461bcd60e51b8152600401610aae9061249a565b60405180910390fd5b47610ac95f546001600160a01b031690565b6001600160a01b03166108fc8290811502906040515f60405180830381858888f19350505050158015610afe573d5f803e3d5ffd5b5050565b606060028054610b11906124cf565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3d906124cf565b8015610b885780601f10610b5f57610100808354040283529160200191610b88565b820191905f5260205f20905b815481529060010190602001808311610b6b57829003601f168201915b5050505050905090565b5f610b9e33848461163a565b5060015b92915050565b5f546001600160a01b03163314610bd15760405162461bcd60e51b8152600401610aae9061249a565b600c869055600d859055600e849055610bf484610bee888861175d565b9061175d565b601555600f83905560108290556011819055610c1481610bee858561175d565b601655505050505050565b5f546001600160a01b03163314610c485760405162461bcd60e51b8152600401610aae9061249a565b600480546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b5f610c7c8484846117bb565b50610cce8433610cc985604051806060016040528060288152602001612699602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190611b7d565b61163a565b5060015b9392505050565b5f546001600160a01b03163314610d025760405162461bcd60e51b8152600401610aae9061249a565b601d8054911515600160b81b0260ff60b81b19909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b03165f90815260066020526040812054601854610d6491611bb5565b905090565b5f546001600160a01b03163314610d925760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610de55760405162461bcd60e51b8152600401610aae9061249a565b601991909155601a55565b335f8181526007602090815260408083206001600160a01b03871684529091528120549091610b9e918590610cc9908661175d565b5f546001600160a01b03163314610e4e5760405162461bcd60e51b8152600401610aae9061249a565b601b55565b5f80546001600160a01b03163314610e7d5760405162461bcd60e51b8152600401610aae9061249a565b5f829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ebd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee19190612507565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f509190612507565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015610f99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbd9190612507565b91506001600160a01b03821661110d57806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611009573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102d9190612507565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611078573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109c9190612507565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156110e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110a9190612507565b91505b601d80546001600160a01b03199081166001600160a01b038581169182178455601c8054909316948116949094179091555f908152600960209081526040808320805460ff19908116600190811790925594549095168352600b909152902080549091169091179055919050565b5f546001600160a01b031633146111a45760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b606060038054610b11906124cf565b5f546001600160a01b031633146112065760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600960205260409020805460ff1916911515919091179055565b5f610b9e3384610cc9856040518060600160405280602581526020016126c160259139335f9081526007602090815260408083206001600160a01b038d1684529091529020549190611b7d565b5f546001600160a01b031633146112a65760405162461bcd60e51b8152600401610aae9061249a565b601d8054911515600160b01b0260ff60b01b19909216919091179055565b5f610cce3384846117bb565b5f80546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610aae9061249a565b815f0361136e576040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015611343573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113679190612522565b9150610cd2565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303815f875af11580156113ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113de9190612539565b949350505050565b5f546001600160a01b0316331461140f5760405162461bcd60e51b8152600401610aae9061249a565b60128390556013829055601481905561142c81610bee858561175d565b601755505050565b5f546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610aae9061249a565b601d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906114aa90831515815260200190565b60405180910390a150565b5f546001600160a01b031633146114de5760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146115315760405162461bcd60e51b8152600401610aae9061249a565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b0316331461157c5760405162461bcd60e51b8152600401610aae9061249a565b6001600160a01b0381166115e15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aae565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661169c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aae565b6001600160a01b0382166116fd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aae565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f806117698385612568565b905083811015610cd25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610aae565b5f6001600160a01b0384166118205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610aae565b6001600160a01b0383166118825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610aae565b601d54600160a01b900460ff16156118a65761189f848484611bf6565b9050610cd2565b6001600160a01b0384165f908152600a602052604090205460ff161580156118e657506001600160a01b0383165f908152600a602052604090205460ff16155b1561194e5760195482111561194e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610aae565b305f90815260066020526040902054601b548110801590819061197b5750601d54600160a01b900460ff16155b801561199f57506001600160a01b0386165f908152600b602052604090205460ff16155b80156119b45750601d54600160a81b900460ff165b156119da57601d54600160b01b900460ff16156119d157601b5491505b6119da82611cd9565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389165f90815260069091529190912054611a2b918690611b7d565b6001600160a01b0387165f90815260066020908152604080832093909355600890529081205460ff1680611a7657506001600160a01b0386165f9081526008602052604090205460ff165b611a8a57611a85878787611e0c565b611a8c565b845b601d54909150600160b81b900460ff168015611ac057506001600160a01b0386165f9081526009602052604090205460ff16155b15611af457601a54611aea82610bee896001600160a01b03165f9081526006602052604090205490565b1115611af4575f80fd5b6001600160a01b0386165f90815260066020526040902054611b16908261175d565b6001600160a01b038088165f8181526006602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611b699085815260200190565b60405180910390a360019350505050610cd2565b5f8184841115611ba05760405162461bcd60e51b8152600401610aae919061228b565b505f611bac848661257b565b95945050505050565b5f610cd283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b7d565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600690915291822054611c46918490611b7d565b6001600160a01b038086165f908152600660205260408082209390935590851681522054611c74908361175d565b6001600160a01b038085165f8181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cc79086815260200190565b60405180910390a35060019392505050565b601d805460ff60a01b1916600160a01b1790556017546012545f91611d0e91600291611d089182908790611f0e565b90611f8c565b90505f611d1b8383611bb5565b9050611d2681611fcd565b60125447905f90611d4590611d3c906002611f8c565b60175490611bb5565b90505f611d666002611d0884611d0860125488611f0e90919063ffffffff16565b90505f611d8283611d0860145487611f0e90919063ffffffff16565b90505f611d9982611d938786611bb5565b90611bb5565b90508015611dbc57600454611dbc9061010090046001600160a01b031682612156565b8115611dd857600554611dd8906001600160a01b031683612156565b5f83118015611de657505f87115b15611df557611df5878461218e565b5050601d805460ff60a01b19169055505050505050565b6001600160a01b0383165f908152600b6020526040812054819060ff1615611e4f57611e486064611d0860155486611f0e90919063ffffffff16565b9050611e8c565b6001600160a01b0384165f908152600b602052604090205460ff1615611e8c57611e896064611d0860165486611f0e90919063ffffffff16565b90505b8015611f0457305f90815260066020526040902054611eab908261175d565b305f81815260066020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611efb9085815260200190565b60405180910390a35b611bac8382611bb5565b5f825f03611f1d57505f610ba2565b5f611f28838561258e565b905082611f3585836125a5565b14610cd25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610aae565b5f610cd283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061225f565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110612000576120006125c4565b6001600160a01b03928316602091820292909201810191909152601c54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612057573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207b9190612507565b8160018151811061208e5761208e6125c4565b6001600160a01b039283166020918202929092010152601c546120b4913091168461163a565b601c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906120ec9085905f9086903090429060040161261a565b5f604051808303815f87803b158015612103575f80fd5b505af1158015612115573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161214a929190612655565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015612189573d5f803e3d5ffd5b505050565b601c546121a69030906001600160a01b03168461163a565b601c546001600160a01b031663f305d7198230855f806121cd5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612233573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612258919061266d565b5050505050565b5f818361227f5760405162461bcd60e51b8152600401610aae919061228b565b505f611bac84866125a5565b5f6020808352835180828501525f5b818110156122b65785810183015185820160400152820161229a565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146122ea575f80fd5b50565b5f80604083850312156122fe575f80fd5b8235612309816122d6565b946020939093013593505050565b5f805f805f8060c0878903121561232c575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f60208284031215612366575f80fd5b8135610cd2816122d6565b5f805f60608486031215612383575f80fd5b833561238e816122d6565b9250602084013561239e816122d6565b929592945050506040919091013590565b80151581146122ea575f80fd5b5f602082840312156123cc575f80fd5b8135610cd2816123af565b5f80604083850312156123e8575f80fd5b82356123f3816122d6565b91506020830135612403816123af565b809150509250929050565b5f806040838503121561241f575f80fd5b50508035926020909101359150565b5f6020828403121561243e575f80fd5b5035919050565b5f805f60608486031215612457575f80fd5b505081359360208301359350604090920135919050565b5f806040838503121561247f575f80fd5b823561248a816122d6565b91506020830135612403816122d6565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124e357607f821691505b60208210810361250157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612517575f80fd5b8151610cd2816122d6565b5f60208284031215612532575f80fd5b5051919050565b5f60208284031215612549575f80fd5b8151610cd2816123af565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ba257610ba2612554565b81810381811115610ba257610ba2612554565b8082028115828204841417610ba257610ba2612554565b5f826125bf57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b8381101561260f5781516001600160a01b0316875295820195908201906001016125ea565b509495945050505050565b85815284602082015260a060408201525f61263860a08301866125d8565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201525f6113de60408301846125d8565b5f805f6060848603121561267f575f80fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220536fdfd5a6e0b5407a9f475a6ad4e3fcd9e53c721f81864f5a447aa4b90e390764736f6c63430008140033

Deployed Bytecode Sourcemap

16025:16390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25014:142;;;;;;;;;;;;;:::i;:::-;;19708:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21256:193;;;;;;;;;;-1:-1:-1;21256:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;21256:193:0;1023:187:1;22309:803:0;;;;;;;;;;-1:-1:-1;22309:803:0;;;;;:::i;:::-;;:::i;17722:41::-;;;;;;;;;;-1:-1:-1;17722:41:0;;;;-1:-1:-1;;;;;17722:41:0;;;;;;-1:-1:-1;;;;;1934:32:1;;;1916:51;;1904:2;1889:18;17722:41:0;1743:230:1;19985:100:0;;;;;;;;;;-1:-1:-1;20065:12:0;;19985:100;;;2124:25:1;;;2112:2;2097:18;19985:100:0;1978:177:1;24128:127:0;;;;;;;;;;-1:-1:-1;24128:127:0;;;;;:::i;:::-;;:::i;26655:446::-;;;;;;;;;;-1:-1:-1;26655:446:0;;;;;:::i;:::-;;:::i;23717:114::-;;;;;;;;;;-1:-1:-1;23717:114:0;;;;;:::i;:::-;;:::i;16490:90::-;;;;;;;;;;;;;;;25164:128;;;;;;;;;;;;;:::i;22148:153::-;;;;;;;;;;-1:-1:-1;22148:153:0;;;;;:::i;:::-;;:::i;19894:83::-;;;;;;;;;;-1:-1:-1;19960:9:0;;19894:83;;19960:9;;;;3979:36:1;;3967:2;3952:18;19894:83:0;3837:184:1;23558:151:0;;;;;;;;;;-1:-1:-1;23558:151:0;;;;;:::i;:::-;;:::i;20412:300::-;;;;;;;;;;-1:-1:-1;20412:300:0;;;;;:::i;:::-;;:::i;23998:122::-;;;;;;;;;;-1:-1:-1;23998:122:0;;;;;:::i;:::-;;:::i;16877:44::-;;;;;;;;;;-1:-1:-1;16877:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17833:40;;;;;;;;;;-1:-1:-1;17833:40:0;;;;-1:-1:-1;;;17833:40:0;;;;;;16709:49;;;;;;;;;;-1:-1:-1;16709:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6731:90;;;;;;;;;;-1:-1:-1;6798:15:0;6731:90;;17189:34;;;;;;;;;;;;;;;;25448:899;;;;;;;;;;-1:-1:-1;25448:899:0;;;;;:::i;:::-;;:::i;17230:35::-;;;;;;;;;;;;;;;;17272:33;;;;;;;;;;;;;;;;20093:119;;;;;;;;;;-1:-1:-1;20093:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;20186:18:0;20159:7;20186:18;;;:9;:18;;;;;;;20093:119;17521:57;;;;;;;;;;;;;;;;17585;;;;;;;;;;;;;;;;17358:38;;;;;;;;;;;;;;;;21836:152;;;;;;;;;;-1:-1:-1;21836:152:0;;;;;:::i;:::-;;:::i;17058:36::-;;;;;;;;;;;;;;;;16823:47;;;;;;;;;;-1:-1:-1;16823:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6228:79;;;;;;;;;;-1:-1:-1;6266:7:0;6293:6;-1:-1:-1;;;;;6293:6:0;6228:79;;19799:87;;;;;;;;;;;;;:::i;23839:151::-;;;;;;;;;;-1:-1:-1;23839:151:0;;;;;:::i;:::-;;:::i;21128:120::-;;;;;;;;;;-1:-1:-1;21217:23:0;;21128:120;;17403:44;;;;;;;;;;;;;;;;20720:400;;;;;;;;;;-1:-1:-1;20720:400:0;;;;;:::i;:::-;;:::i;24575:125::-;;;;;;;;;;-1:-1:-1;24575:125:0;;;;;:::i;:::-;;:::i;26448:199::-;;;;;;;;;;-1:-1:-1;26448:199:0;;;;;:::i;:::-;;:::i;24712:296::-;;;;;;;;;;-1:-1:-1;24712:296:0;;;;;:::i;:::-;;:::i;23120:430::-;;;;;;;;;;-1:-1:-1;23120:430:0;;;;;:::i;:::-;;:::i;24396:171::-;;;;;;;;;;-1:-1:-1;24396:171:0;;;;;:::i;:::-;;:::i;16972:36::-;;;;;;;;;;;;;;;;17770:26;;;;;;;;;;-1:-1:-1;17770:26:0;;;;-1:-1:-1;;;;;17770:26:0;;;17101:37;;;;;;;;;;;;;;;;16765:51;;;;;;;;;;-1:-1:-1;16765:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17145:35;;;;;;;;;;;;;;;;16376:107;;;;;;;;;;-1:-1:-1;16376:107:0;;;;-1:-1:-1;;;;;16376:107:0;;;16261:108;;;;;;;;;;-1:-1:-1;16261:108:0;;;;;;;-1:-1:-1;;;;;16261:108:0;;;17880:45;;;;;;;;;;-1:-1:-1;17880:45:0;;;;-1:-1:-1;;;17880:45:0;;;;;;16930:35;;;;;;;;;;;;;;;;20220:184;;;;;;;;;;-1:-1:-1;20220:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;20369:18:0;;;20337:7;20369:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20220:184;21996:144;;;;;;;;;;-1:-1:-1;21996:144:0;;;;;:::i;:::-;;:::i;24263:125::-;;;;;;;;;;-1:-1:-1;24263:125:0;;;;;:::i;:::-;;:::i;17314:37::-;;;;;;;;;;;;;;;;6442:281;;;;;;;;;;-1:-1:-1;6442:281:0;;;;;:::i;:::-;;:::i;17932:35::-;;;;;;;;;;-1:-1:-1;17932:35:0;;;;-1:-1:-1;;;17932:35:0;;;;;;17015:34;;;;;;;;;;;;;;;;25014:142;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;;;;;;;;;25082:21:::1;25122:7;6266::::0;6293:6;-1:-1:-1;;;;;6293:6:0;;6228:79;25122:7:::1;-1:-1:-1::0;;;;;25114:25:0::1;:34;25140:7;25114:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25056:100;25014:142::o:0;19708:83::-;19745:13;19778:5;19771:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19708:83;:::o;21256:193::-;21358:4;21380:39;286:10;21403:7;21412:6;21380:8;:39::i;:::-;-1:-1:-1;21437:4:0;21256:193;;;;;:::o;22309:803::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;22587:16:::1;:37:::0;;;22635:16:::1;:37:::0;;;22683:15:::1;:35:::0;;;22751:83:::1;22701:17:::0;22751:38:::1;22606:18:::0;22654;22751:20:::1;:38::i;:::-;:42:::0;::::1;:83::i;:::-;22731:17;:103:::0;22847:17:::1;:39:::0;;;22897:17:::1;:39:::0;;;22947:16:::1;:37:::0;;;23018:86:::1;22966:18:::0;23018:40:::1;22867:19:::0;22917;23018:21:::1;:40::i;:86::-;22997:18;:107:::0;-1:-1:-1;;;;;;22309:803:0:o;24128:127::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;24203:22:::1;:44:::0;;-1:-1:-1;;;;;24203:44:0;;::::1;;;-1:-1:-1::0;;;;;;24203:44:0;;::::1;::::0;;;::::1;::::0;;24128:127::o;26655:446::-;26787:4;26804:36;26814:6;26822:9;26833:6;26804:9;:36::i;:::-;-1:-1:-1;26851:220:0;26874:6;286:10;26922:138;26978:6;26922:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26922:19:0;;;;;;:11;:19;;;;;;;;286:10;26922:33;;;;;;;;;;:37;:138::i;:::-;26851:8;:220::i;:::-;-1:-1:-1;27089:4:0;26655:446;;;;;;:::o;23717:114::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;23796:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;23796:27:0::1;-1:-1:-1::0;;;;23796:27:0;;::::1;::::0;;;::::1;::::0;;23717:114::o;25164:128::-;25271:11;-1:-1:-1;;;;;20186:18:0;25217:7;20186:18;;;:9;:18;;;;;;25244:12;;:40;;:16;:40::i;:::-;25237:47;;25164:128;:::o;22148:153::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22256:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;22256:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22148:153::o;23558:151::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;23643:12:::1;:26:::0;;;;23680:10:::1;:21:::0;23558:151::o;20412:300::-;286:10;20527:4;20621:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20621:34:0;;;;;;;;;;20527:4;;20549:133;;20599:7;;20621:50;;20660:10;20621:38;:50::i;23998:122::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;24078:23:::1;:34:::0;23998:122::o;25448:899::-;25556:22;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;25596:35:::1;25667:16;25596:98;;25742:16;-1:-1:-1::0;;;;;25742:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25724:53:0::1;;25800:4;25820:16;-1:-1:-1::0;;;;;25820:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25724:130;::::0;-1:-1:-1;;;;;;25724:130:0::1;::::0;;;;;;-1:-1:-1;;;;;6634:15:1;;;25724:130:0::1;::::0;::::1;6616:34:1::0;6686:15;;6666:18;;;6659:43;6551:18;;25724:130:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25707:147:::0;-1:-1:-1;;;;;;25871:28:0;::::1;25867:226;;25985:16;-1:-1:-1::0;;;;;25985:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25967:74:0::1;;26050:4;26057:16;-1:-1:-1::0;;;;;26057:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25967:114;::::0;-1:-1:-1;;;;;;25967:114:0::1;::::0;;;;;;-1:-1:-1;;;;;6634:15:1;;;25967:114:0::1;::::0;::::1;6616:34:1::0;6686:15;;6666:18;;;6659:43;6551:18;;25967:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25950:131;;25867:226;26105:11;:28:::0;;-1:-1:-1;;;;;;26105:28:0;;::::1;-1:-1:-1::0;;;;;26105:28:0;;::::1;::::0;;::::1;::::0;;26167:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;26239:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;26239:48:0;;::::1;-1:-1:-1::0;26239:48:0;;::::1;::::0;;;26319:11;;;;::::1;26298:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;26105:28;26119:14;-1:-1:-1;25448:899:0:o;21836:152::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21948:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;21948:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21836:152::o;19799:87::-;19838:13;19871:7;19864:14;;;;;:::i;23839:151::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23946:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;23946:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23839:151::o;20720:400::-;20840:4;20862:228;286:10;20912:7;20934:145;20991:15;20934:145;;;;;;;;;;;;;;;;;286:10;20934:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20934:34:0;;;;;;;;;;;;:38;:145::i;24575:125::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;24656:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;24656:36:0::1;-1:-1:-1::0;;;;24656:36:0;;::::1;::::0;;;::::1;::::0;;24575:125::o;26448:199::-;26553:4;26575:42;286:10;26599:9;26610:6;26575:9;:42::i;24712:296::-;24811:10;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;24836:6:::1;24846:1;24836:11:::0;24833:168:::1;;24873:39;::::0;-1:-1:-1;;;24873:39:0;;24906:4:::1;24873:39;::::0;::::1;1916:51:1::0;-1:-1:-1;;;;;24873:24:0;::::1;::::0;::::1;::::0;1889:18:1;;24873:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24864:48;;24833:168;;;24953:36;::::0;-1:-1:-1;;;24953:36:0;;-1:-1:-1;;;;;7094:32:1;;;24953:36:0::1;::::0;::::1;7076:51:1::0;7143:18;;;7136:34;;;24953:23:0;::::1;::::0;::::1;::::0;7049:18:1;;24953:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24945:44:::0;24712:296;-1:-1:-1;;;;24712:296:0:o;23120:430::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;23297:15:::1;:35:::0;;;23343:15:::1;:35:::0;;;23389:14:::1;:33:::0;;;23462:80:::1;23406:16:::0;23462:36:::1;23315:17:::0;23361;23462:19:::1;:36::i;:80::-;23435:24;:107:::0;-1:-1:-1;;;23120:430:0:o;24396:171::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;24473:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;24473:32:0::1;-1:-1:-1::0;;;;24473:32:0;;::::1;;::::0;;24521:38:::1;::::0;::::1;::::0;::::1;::::0;24497:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;24521:38:0::1;;;;;;;;24396:171:::0;:::o;21996:144::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22100:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;22100:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21996:144::o;24263:125::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;24337:21:::1;:43:::0;;-1:-1:-1;;;;;;24337:43:0::1;-1:-1:-1::0;;;;;24337:43:0;;;::::1;::::0;;;::::1;::::0;;24263:125::o;6442:281::-;6355:6;;-1:-1:-1;;;;;6355:6:0;286:10;6355:22;6347:67;;;;-1:-1:-1;;;6347:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6545:22:0;::::1;6523:110;;;::::0;-1:-1:-1;;;6523:110:0;;7633:2:1;6523:110:0::1;::::0;::::1;7615:21:1::0;7672:2;7652:18;;;7645:30;7711:34;7691:18;;;7684:62;-1:-1:-1;;;7762:18:1;;;7755:36;7808:19;;6523:110:0::1;7431:402:1::0;6523:110:0::1;6670:6;::::0;;6649:38:::1;::::0;-1:-1:-1;;;;;6649:38:0;;::::1;::::0;6670:6;::::1;::::0;6649:38:::1;::::0;::::1;6698:6;:17:::0;;-1:-1:-1;;;;;;6698:17:0::1;-1:-1:-1::0;;;;;6698:17:0;;;::::1;::::0;;;::::1;::::0;;6442:281::o;21457:371::-;-1:-1:-1;;;;;21584:19:0;;21576:68;;;;-1:-1:-1;;;21576:68:0;;8040:2:1;21576:68:0;;;8022:21:1;8079:2;8059:18;;;8052:30;8118:34;8098:18;;;8091:62;-1:-1:-1;;;8169:18:1;;;8162:34;8213:19;;21576:68:0;7838:400:1;21576:68:0;-1:-1:-1;;;;;21663:21:0;;21655:68;;;;-1:-1:-1;;;21655:68:0;;8445:2:1;21655:68:0;;;8427:21:1;8484:2;8464:18;;;8457:30;8523:34;8503:18;;;8496:62;-1:-1:-1;;;8574:18:1;;;8567:32;8616:19;;21655:68:0;8243:398:1;21655:68:0;-1:-1:-1;;;;;21736:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21788:32;;2124:25:1;;;21788:32:0;;2097:18:1;21788:32:0;;;;;;;21457:371;;;:::o;1379:181::-;1437:7;;1469:5;1473:1;1469;:5;:::i;:::-;1457:17;;1498:1;1493;:6;;1485:46;;;;-1:-1:-1;;;1485:46:0;;9110:2:1;1485:46:0;;;9092:21:1;9149:2;9129:18;;;9122:30;9188:29;9168:18;;;9161:57;9235:18;;1485:46:0;8908:351:1;27109:1890:0;27230:4;-1:-1:-1;;;;;27255:20:0;;27247:70;;;;-1:-1:-1;;;27247:70:0;;9466:2:1;27247:70:0;;;9448:21:1;9505:2;9485:18;;;9478:30;9544:34;9524:18;;;9517:62;-1:-1:-1;;;9595:18:1;;;9588:35;9640:19;;27247:70:0;9264:401:1;27247:70:0;-1:-1:-1;;;;;27336:23:0;;27328:71;;;;-1:-1:-1;;;27328:71:0;;9872:2:1;27328:71:0;;;9854:21:1;9911:2;9891:18;;;9884:30;9950:34;9930:18;;;9923:62;-1:-1:-1;;;10001:18:1;;;9994:33;10044:19;;27328:71:0;9670:399:1;27328:71:0;27416:16;;-1:-1:-1;;;27416:16:0;;;;27412:1580;;;27456:41;27471:6;27479:9;27490:6;27456:14;:41::i;:::-;27449:48;;;;27412:1580;-1:-1:-1;;;;;27535:23:0;;;;;;:15;:23;;;;;;;;27534:24;:55;;;;-1:-1:-1;;;;;;27563:26:0;;;;;;:15;:26;;;;;;;;27562:27;27534:55;27530:232;;;27650:12;;27640:6;:22;;27610:136;;;;-1:-1:-1;;;27610:136:0;;10276:2:1;27610:136:0;;;10258:21:1;10315:2;10295:18;;;10288:30;10354:34;10334:18;;;10327:62;-1:-1:-1;;;10405:18:1;;;10398:38;10453:19;;27610:136:0;10074:404:1;27610:136:0;27827:4;27778:28;20186:18;;;:9;:18;;;;;;27920:23;;27879:64;;;;;;;27982:61;;-1:-1:-1;28027:16:0;;-1:-1:-1;;;28027:16:0;;;;28026:17;27982:61;:103;;;;-1:-1:-1;;;;;;28065:20:0;;;;;;:12;:20;;;;;;;;28064:21;27982:103;:145;;;;-1:-1:-1;28106:21:0;;-1:-1:-1;;;28106:21:0;;;;27982:145;27960:371;;;28166:25;;-1:-1:-1;;;28166:25:0;;;;28162:98;;;28237:23;;28214:46;;28162:98;28279:36;28294:20;28279:14;:36::i;:::-;28367:102;;;;;;;;;;;-1:-1:-1;;;28367:102:0;;;;;;;;-1:-1:-1;;;;;28367:17:0;;-1:-1:-1;28367:17:0;;;:9;:17;;;;;;;;:102;;28407:6;;28367:21;:102::i;:::-;-1:-1:-1;;;;;28347:17:0;;;;;;:9;:17;;;;;;;;:122;;;;28509:17;:25;;;;;;;;;:74;;-1:-1:-1;;;;;;28555:28:0;;;;;;:17;:28;;;;;;;;28509:74;28508:156;;28630:34;28638:6;28646:9;28657:6;28630:7;:34::i;:::-;28508:156;;;28604:6;28508:156;28685:16;;28486:178;;-1:-1:-1;;;;28685:16:0;;;;:51;;;;-1:-1:-1;;;;;;28706:30:0;;;;;;:19;:30;;;;;;;;28705:31;28685:51;28681:134;;;28804:10;;28763:37;28788:11;28763:20;28773:9;-1:-1:-1;;;;;20186:18:0;20159:7;20186:18;;;:9;:18;;;;;;;20093:119;28763:37;:51;;28755:60;;;;;;-1:-1:-1;;;;;28855:20:0;;;;;;:9;:20;;;;;;:37;;28880:11;28855:24;:37::i;:::-;-1:-1:-1;;;;;28832:20:0;;;;;;;:9;:20;;;;;;;:60;;;;28914:40;;;;;;;;;;28942:11;2124:25:1;;2112:2;2097:18;;1978:177;28914:40:0;;;;;;;;28976:4;28969:11;;;;;;;1712:226;1832:7;1868:12;1860:6;;;;1852:29;;;;-1:-1:-1;;;1852:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1892:9:0;1904:5;1908:1;1904;:5;:::i;:::-;1892:17;1712:226;-1:-1:-1;;;;;1712:226:0:o;1568:136::-;1626:7;1653:43;1657:1;1660;1653:43;;;;;;;;;;;;;;;;;:3;:43::i;29007:401::-;29171:90;;;;;;;;;;;-1:-1:-1;;;29171:90:0;;;;;;;;-1:-1:-1;;;;;29171:17:0;;29134:4;29171:17;;;:9;:17;;;;;;;:90;;29207:6;;29171:21;:90::i;:::-;-1:-1:-1;;;;;29151:17:0;;;;;;;:9;:17;;;;;;:110;;;;29295:20;;;;;;;:32;;29320:6;29295:24;:32::i;:::-;-1:-1:-1;;;;;29272:20:0;;;;;;;:9;:20;;;;;;;:55;;;;29343:35;;;;;;;;;;29371:6;2124:25:1;;2112:2;2097:18;;1978:177;29343:35:0;;;;;;;;-1:-1:-1;29396:4:0;29007:401;;;;;:::o;29416:1177::-;18330:16;:23;;-1:-1:-1;;;;18330:23:0;-1:-1:-1;;;18330:23:0;;;29571:24:::1;::::0;29536:15:::1;::::0;18330:23;;29510:107:::1;::::0;29615:1:::1;::::0;29510:86:::1;::::0;;;:7;;:25:::1;:42::i;:::-;:60:::0;::::1;:86::i;:107::-;29488:129:::0;-1:-1:-1;29628:21:0::1;29652:24;:7:::0;29488:129;29652:11:::1;:24::i;:::-;29628:48;;29689:31;29706:13;29689:16;:31::i;:::-;29855:15;::::0;29756:21:::1;::::0;29731:22:::1;::::0;29812:76:::1;::::0;29855:22:::1;::::0;29875:1:::1;29855:19;:22::i;:::-;29812:24;::::0;;:28:::1;:76::i;:::-;29790:98;;29901:26;29930:101;30029:1;29930:80;29998:11;29930:49;29963:15;;29930:14;:32;;:49;;;;:::i;:101::-;29901:130;;30042:22;30067:51;30106:11;30067:34;30086:14;;30067;:18;;:34;;;;:::i;:51::-;30042:76:::0;-1:-1:-1;30129:26:0::1;30158:82;30042:76:::0;30158:38:::1;:14:::0;30177:18;30158::::1;:38::i;:::-;:42:::0;::::1;:82::i;:::-;30129:111:::0;-1:-1:-1;30257:22:0;;30253:105:::1;;30315:22;::::0;30294:64:::1;::::0;30315:22:::1;::::0;::::1;-1:-1:-1::0;;;;;30315:22:0::1;30339:18:::0;30294:20:::1;:64::i;:::-;30375:18:::0;;30371:96:::1;;30429:21;::::0;30408:59:::1;::::0;-1:-1:-1;;;;;30429:21:0::1;30452:14:::0;30408:20:::1;:59::i;:::-;30505:1;30484:18;:22;:41;;;;;30524:1;30510:11;:15;30484:41;30480:105;;;30540:45;30553:11;30566:18;30540:12;:45::i;:::-;-1:-1:-1::0;;18376:16:0;:24;;-1:-1:-1;;;;18376:24:0;;;-1:-1:-1;;;;;;29416:1177:0:o;31788:624::-;-1:-1:-1;;;;;31966:20:0;;31908:7;31966:20;;;:12;:20;;;;;;31908:7;;31966:20;;31962:216;;;32015:38;32049:3;32015:29;32026:17;;32015:6;:10;;:29;;;;:::i;:38::-;32003:50;;31962:216;;;-1:-1:-1;;;;;32075:23:0;;;;;;:12;:23;;;;;;;;32071:107;;;32127:39;32162:3;32127:30;32138:18;;32127:6;:10;;:30;;;;:::i;:39::-;32115:51;;32071:107;32194:13;;32190:174;;32269:4;32251:24;;;;:9;:24;;;;;;:39;;32280:9;32251:28;:39::i;:::-;32242:4;32224:24;;;;:9;:24;;;;;;;:66;;;;32310:42;;-1:-1:-1;;;;;32310:42:0;;;;;;;32342:9;2124:25:1;;2112:2;2097:18;;1978:177;32310:42:0;;;;;;;;32190:174;32383:21;:6;32394:9;32383:10;:21::i;1946:250::-;2004:7;2028:1;2033;2028:6;2024:47;;-1:-1:-1;2058:1:0;2051:8;;2024:47;2083:9;2095:5;2099:1;2095;:5;:::i;:::-;2083:17;-1:-1:-1;2128:1:0;2119:5;2123:1;2083:17;2119:5;:::i;:::-;:10;2111:56;;;;-1:-1:-1;;;2111:56:0;;11213:2:1;2111:56:0;;;11195:21:1;11252:2;11232:18;;;11225:30;11291:34;11271:18;;;11264:62;-1:-1:-1;;;11342:18:1;;;11335:31;11383:19;;2111:56:0;11011:397:1;2204:132:0;2262:7;2289:39;2293:1;2296;2289:39;;;;;;;;;;;;;;;;;:3;:39::i;30601:658::-;30751:16;;;30765:1;30751:16;;;;;;;;30727:21;;30751:16;;;;;;;;;;-1:-1:-1;30751:16:0;30727:40;;30796:4;30778;30783:1;30778:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30778:23:0;;;:7;;;;;;;;;;:23;;;;30822:15;;:22;;;-1:-1:-1;;;30822:22:0;;;;:15;;;;;:20;;:22;;;;;30778:7;;30822:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30812:4;30817:1;30812:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30812:32:0;;;:7;;;;;;;;;:32;30889:15;;30857:62;;30874:4;;30889:15;30907:11;30857:8;:62::i;:::-;30958:15;;:240;;-1:-1:-1;;;30958:240:0;;-1:-1:-1;;;;;30958:15:0;;;;:66;;:240;;31039:11;;30958:15;;31109:4;;31136;;31172:15;;30958:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31216:35;31233:11;31246:4;31216:35;;;;;;;:::i;:::-;;;;;;;;30656:603;30601:658;:::o;25300:140::-;25406:26;;-1:-1:-1;;;;;25406:18:0;;;:26;;;;;25425:6;;25406:26;;;;25425:6;25406:18;:26;;;;;;;;;;;;;;;;;;;;;25300:140;;:::o;31267:513::-;31447:15;;31415:62;;31432:4;;-1:-1:-1;;;;;31447:15:0;31465:11;31415:8;:62::i;:::-;31520:15;;-1:-1:-1;;;;;31520:15:0;:31;31559:9;31592:4;31612:11;31520:15;;31724:7;6266;6293:6;-1:-1:-1;;;;;6293:6:0;;6228:79;31724:7;31520:252;;;;;;-1:-1:-1;;;;;;31520:252:0;;;-1:-1:-1;;;;;13426:15:1;;;31520:252:0;;;13408:34:1;13458:18;;;13451:34;;;;13501:18;;;13494:34;;;;13544:18;;;13537:34;13608:15;;;13587:19;;;13580:44;31746:15:0;13640:19:1;;;13633:35;13342:19;;31520:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31267:513;;:::o;2344:312::-;2464:7;2499:12;2492:5;2484:28;;;;-1:-1:-1;;;2484:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2523:9:0;2535:5;2539:1;2535;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:523::-;1319:6;1327;1335;1343;1351;1359;1412:3;1400:9;1391:7;1387:23;1383:33;1380:53;;;1429:1;1426;1419:12;1380:53;-1:-1:-1;;1452:23:1;;;1522:2;1507:18;;1494:32;;-1:-1:-1;1573:2:1;1558:18;;1545:32;;1624:2;1609:18;;1596:32;;-1:-1:-1;1675:3:1;1660:19;;1647:33;;-1:-1:-1;1727:3:1;1712:19;1699:33;;-1:-1:-1;1215:523:1;-1:-1:-1;1215:523:1:o;2160:247::-;2219:6;2272:2;2260:9;2251:7;2247:23;2243:32;2240:52;;;2288:1;2285;2278:12;2240:52;2327:9;2314:23;2346:31;2371:5;2346:31;:::i;2412:456::-;2489:6;2497;2505;2558:2;2546:9;2537:7;2533:23;2529:32;2526:52;;;2574:1;2571;2564:12;2526:52;2613:9;2600:23;2632:31;2657:5;2632:31;:::i;:::-;2682:5;-1:-1:-1;2739:2:1;2724:18;;2711:32;2752:33;2711:32;2752:33;:::i;:::-;2412:456;;2804:7;;-1:-1:-1;;;2858:2:1;2843:18;;;;2830:32;;2412:456::o;2873:118::-;2959:5;2952:13;2945:21;2938:5;2935:32;2925:60;;2981:1;2978;2971:12;2996:241;3052:6;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;3160:9;3147:23;3179:28;3201:5;3179:28;:::i;3450:382::-;3515:6;3523;3576:2;3564:9;3555:7;3551:23;3547:32;3544:52;;;3592:1;3589;3582:12;3544:52;3631:9;3618:23;3650:31;3675:5;3650:31;:::i;:::-;3700:5;-1:-1:-1;3757:2:1;3742:18;;3729:32;3770:30;3729:32;3770:30;:::i;:::-;3819:7;3809:17;;;3450:382;;;;;:::o;4026:248::-;4094:6;4102;4155:2;4143:9;4134:7;4130:23;4126:32;4123:52;;;4171:1;4168;4161:12;4123:52;-1:-1:-1;;4194:23:1;;;4264:2;4249:18;;;4236:32;;-1:-1:-1;4026:248:1:o;4279:180::-;4338:6;4391:2;4379:9;4370:7;4366:23;4362:32;4359:52;;;4407:1;4404;4397:12;4359:52;-1:-1:-1;4430:23:1;;4279:180;-1:-1:-1;4279:180:1:o;4464:316::-;4541:6;4549;4557;4610:2;4598:9;4589:7;4585:23;4581:32;4578:52;;;4626:1;4623;4616:12;4578:52;-1:-1:-1;;4649:23:1;;;4719:2;4704:18;;4691:32;;-1:-1:-1;4770:2:1;4755:18;;;4742:32;;4464:316;-1:-1:-1;4464:316:1:o;5009:388::-;5077:6;5085;5138:2;5126:9;5117:7;5113:23;5109:32;5106:52;;;5154:1;5151;5144:12;5106:52;5193:9;5180:23;5212:31;5237:5;5212:31;:::i;:::-;5262:5;-1:-1:-1;5319:2:1;5304:18;;5291:32;5332:33;5291:32;5332:33;:::i;5402:356::-;5604:2;5586:21;;;5623:18;;;5616:30;5682:34;5677:2;5662:18;;5655:62;5749:2;5734:18;;5402:356::o;5763:380::-;5842:1;5838:12;;;;5885;;;5906:61;;5960:4;5952:6;5948:17;5938:27;;5906:61;6013:2;6005:6;6002:14;5982:18;5979:38;5976:161;;6059:10;6054:3;6050:20;6047:1;6040:31;6094:4;6091:1;6084:15;6122:4;6119:1;6112:15;5976:161;;5763:380;;;:::o;6148:251::-;6218:6;6271:2;6259:9;6250:7;6246:23;6242:32;6239:52;;;6287:1;6284;6277:12;6239:52;6319:9;6313:16;6338:31;6363:5;6338:31;:::i;6713:184::-;6783:6;6836:2;6824:9;6815:7;6811:23;6807:32;6804:52;;;6852:1;6849;6842:12;6804:52;-1:-1:-1;6875:16:1;;6713:184;-1:-1:-1;6713:184:1:o;7181:245::-;7248:6;7301:2;7289:9;7280:7;7276:23;7272:32;7269:52;;;7317:1;7314;7307:12;7269:52;7349:9;7343:16;7368:28;7390:5;7368:28;:::i;8646:127::-;8707:10;8702:3;8698:20;8695:1;8688:31;8738:4;8735:1;8728:15;8762:4;8759:1;8752:15;8778:125;8843:9;;;8864:10;;;8861:36;;;8877:18;;:::i;10483:128::-;10550:9;;;10571:11;;;10568:37;;;10585:18;;:::i;10616:168::-;10689:9;;;10720;;10737:15;;;10731:22;;10717:37;10707:71;;10758:18;;:::i;10789:217::-;10829:1;10855;10845:132;;10899:10;10894:3;10890:20;10887:1;10880:31;10934:4;10931:1;10924:15;10962:4;10959:1;10952:15;10845:132;-1:-1:-1;10991:9:1;;10789:217::o;11545:127::-;11606:10;11601:3;11597:20;11594:1;11587:31;11637:4;11634:1;11627:15;11661:4;11658:1;11651:15;11677:461;11730:3;11768:5;11762:12;11795:6;11790:3;11783:19;11821:4;11850:2;11845:3;11841:12;11834:19;;11887:2;11880:5;11876:14;11908:1;11918:195;11932:6;11929:1;11926:13;11918:195;;;11997:13;;-1:-1:-1;;;;;11993:39:1;11981:52;;12053:12;;;;12088:15;;;;12029:1;11947:9;11918:195;;;-1:-1:-1;12129:3:1;;11677:461;-1:-1:-1;;;;;11677:461:1:o;12143:582::-;12442:6;12431:9;12424:25;12485:6;12480:2;12469:9;12465:18;12458:34;12528:3;12523:2;12512:9;12508:18;12501:31;12405:4;12549:57;12601:3;12590:9;12586:19;12578:6;12549:57;:::i;:::-;-1:-1:-1;;;;;12642:32:1;;;;12637:2;12622:18;;12615:60;-1:-1:-1;12706:3:1;12691:19;12684:35;12541:65;12143:582;-1:-1:-1;;;12143:582:1:o;12730:332::-;12937:6;12926:9;12919:25;12980:2;12975;12964:9;12960:18;12953:30;12900:4;13000:56;13052:2;13041:9;13037:18;13029:6;13000:56;:::i;13679:306::-;13767:6;13775;13783;13836:2;13824:9;13815:7;13811:23;13807:32;13804:52;;;13852:1;13849;13842:12;13804:52;13881:9;13875:16;13865:26;;13931:2;13920:9;13916:18;13910:25;13900:35;;13975:2;13964:9;13960:18;13954:25;13944:35;;13679:306;;;;;:::o

Swarm Source

ipfs://536fdfd5a6e0b5407a9f475a6ad4e3fcd9e53c721f81864f5a447aa4b90e3907
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.