ETH Price: $3,359.86 (+0.36%)

Token

TaxSolutions AI (TSAI)
 

Overview

Max Total Supply

1,000,000 TSAI

Holders

284 ( -0.704%)

Market

Price

$0.19 @ 0.000056 ETH (+5.86%)

Onchain Market Cap

$189,097.00

Circulating Supply Market Cap

$189,097.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.16064333 TSAI

Value
$0.03 ( ~8.92893844990343E-06 Eth) [0.0000%]
0x291D6a9Eefaa53581f33E8f0824Ac8B05f22EaD9
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

TaxSolutions.AI is an AI-powered platform simplifying DeFi tax reporting. It automates tax calculations, tracks multi-chain assets, and provides real-time insights to optimize compliance.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TSAI

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-21
*/

/*

Website:  https://www.taxsolutionsai.com/
Telegram: https://t.me/TaxSolutionsAI
X: https://x.com/TaxSolutionsAi

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.22;

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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 renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

}

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;
        return c;
    }
}

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract TSAI is Context, IERC20, Ownable {

    using SafeMath for uint256;

    string private constant _name = "TaxSolutions AI";
    string private constant _symbol = "TSAI";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 0;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 0;

    //Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping (address => uint256) public _buyMap;
    address payable private _developmentAddress = payable(0x21A6cf3F4C3aA3bBd4e80851d12C87055ae7dbef);
    address payable private _marketingAddress = payable(0x0d6ffec4b6c175e5a2449B42d9ae5F46d2D6c60D);


    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount = 20000 * 10**9;
    uint256 public _maxWalletSize = 20000 * 10**9;
    uint256 public _swapTokensAtAmount = 10000 * 10**9;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {

        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, 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 tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

    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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {

            //Trade start check
            if (!tradingOpen) {
                require(from == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
            }

            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");

            if(to != uniswapV2Pair) {
                require(balanceOf(to) + amount < _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if(contractTokenBalance >= _maxTxAmount)
            {
                contractTokenBalance = _maxTxAmount;
            }

            if (canSwap && !inSwap && from != uniswapV2Pair && swapEnabled && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {

            //Set Fee for Buys
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }

        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

    function openTrading() public onlyOwner {
        require(tradingOpen == false, "Trading already open!");
        tradingOpen = true;
    }

    function manualswap() external {
        require(_msgSender() == _developmentAddress || _msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == _developmentAddress || _msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) =
            _getTValues(tAmount, _redisFee, _taxFee);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) =
            _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount) public onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    //Set maximum transaction
    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

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

}

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":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","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":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","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"}]

60806040526200001866038d7ea4c680005f196200035f565b62000025905f196200037f565b6006555f60088190556009819055600a819055600b819055600c819055600d819055600e819055600f55601180546001600160a01b03199081167321a6cf3f4c3aa3bbd4e80851d12c87055ae7dbef1790915560128054909116730d6ffec4b6c175e5a2449b42d9ae5f46d2d6c60d1790556014805462ffffff60a01b1916600160b01b1790556512309ce5400060158190556016556509184e72a000601755348015620000d1575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600654335f9081526002602090815260409182902092909255601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa1580156200018b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b19190620003a5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002239190620003a5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200026e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002949190620003a5565b601480546001600160a01b0319166001600160a01b039283161790555f80548216815260056020526040808220805460ff1990811660019081179092553084528284208054821683179055601154851684528284208054821683179055601254909416835291208054909216179055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef66038d7ea4c680006040516200035091815260200190565b60405180910390a350620003d4565b5f826200037a57634e487b7160e01b5f52601260045260245ffd5b500690565b818103818111156200039f57634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215620003b6575f80fd5b81516001600160a01b0381168114620003cd575f80fd5b9392505050565b611a6380620003e25f395ff3fe608060405260043610610198575f3560e01c80637d1db4a5116100e7578063a9059cbb11610087578063c9567bf911610062578063c9567bf914610497578063dd62ed3e146104ab578063ea1644d5146104ef578063f2fde38b1461050e575f80fd5b8063a9059cbb14610445578063c3c8cd8014610464578063c492f04614610478575f80fd5b80638f9a55c0116100c25780638f9a55c0146103c657806395d89b41146103db57806398a5c31514610407578063a2a957bb14610426575f80fd5b80637d1db4a51461036a5780637f2feddc1461037f5780638da5cb5b146103aa575f80fd5b8063313ce567116101525780636fc3eaec1161012d5780636fc3eaec1461030457806370a0823114610318578063715018a61461033757806374010ece1461034b575f80fd5b8063313ce567146102a957806349bd5a5e146102c45780636d8aa8f8146102e3575f80fd5b806306fdde03146101a3578063095ea7b3146101ec5780631694505e1461021b57806318160ddd1461025257806323b872dd146102755780632fd689e314610294575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b5060408051808201909152600f81526e546178536f6c7574696f6e7320414960881b60208201525b6040516101e391906116b6565b60405180910390f35b3480156101f7575f80fd5b5061020b610206366004611716565b61052d565b60405190151581526020016101e3565b348015610226575f80fd5b5060135461023a906001600160a01b031681565b6040516001600160a01b0390911681526020016101e3565b34801561025d575f80fd5b5066038d7ea4c680005b6040519081526020016101e3565b348015610280575f80fd5b5061020b61028f366004611740565b610543565b34801561029f575f80fd5b5061026760175481565b3480156102b4575f80fd5b50604051600981526020016101e3565b3480156102cf575f80fd5b5060145461023a906001600160a01b031681565b3480156102ee575f80fd5b506103026102fd366004611792565b6105aa565b005b34801561030f575f80fd5b506103026105fa565b348015610323575f80fd5b506102676103323660046117ab565b610644565b348015610342575f80fd5b50610302610665565b348015610356575f80fd5b506103026103653660046117c6565b6106d6565b348015610375575f80fd5b5061026760155481565b34801561038a575f80fd5b506102676103993660046117ab565b60106020525f908152604090205481565b3480156103b5575f80fd5b505f546001600160a01b031661023a565b3480156103d1575f80fd5b5061026760165481565b3480156103e6575f80fd5b506040805180820190915260048152635453414960e01b60208201526101d6565b348015610412575f80fd5b506103026104213660046117c6565b610704565b348015610431575f80fd5b506103026104403660046117dd565b610732565b348015610450575f80fd5b5061020b61045f366004611716565b61076f565b34801561046f575f80fd5b5061030261077b565b348015610483575f80fd5b5061030261049236600461180c565b6107cd565b3480156104a2575f80fd5b50610302610860565b3480156104b6575f80fd5b506102676104c5366004611889565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156104fa575f80fd5b506103026105093660046117c6565b6108f0565b348015610519575f80fd5b506103026105283660046117ab565b61091e565b5f610539338484610a05565b5060015b92915050565b5f61054f848484610b28565b6105a0843361059b85604051806060016040528060288152602001611a06602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190610fc0565b610a05565b5060019392505050565b5f546001600160a01b031633146105dc5760405162461bcd60e51b81526004016105d3906118c0565b60405180910390fd5b60148054911515600160b01b0260ff60b01b19909216919091179055565b6011546001600160a01b0316336001600160a01b0316148061062f57506012546001600160a01b0316336001600160a01b0316145b610637575f80fd5b4761064181610ff8565b50565b6001600160a01b0381165f9081526002602052604081205461053d90611033565b5f546001600160a01b0316331461068e5760405162461bcd60e51b81526004016105d3906118c0565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146106ff5760405162461bcd60e51b81526004016105d3906118c0565b601555565b5f546001600160a01b0316331461072d5760405162461bcd60e51b81526004016105d3906118c0565b601755565b5f546001600160a01b0316331461075b5760405162461bcd60e51b81526004016105d3906118c0565b600893909355600a91909155600955600b55565b5f610539338484610b28565b6011546001600160a01b0316336001600160a01b031614806107b057506012546001600160a01b0316336001600160a01b0316145b6107b8575f80fd5b5f6107c230610644565b9050610641816110b5565b5f546001600160a01b031633146107f65760405162461bcd60e51b81526004016105d3906118c0565b5f5b8281101561085a578160055f868685818110610816576108166118f5565b905060200201602081019061082b91906117ab565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556001016107f8565b50505050565b5f546001600160a01b031633146108895760405162461bcd60e51b81526004016105d3906118c0565b601454600160a01b900460ff16156108db5760405162461bcd60e51b815260206004820152601560248201527454726164696e6720616c7265616479206f70656e2160581b60448201526064016105d3565b6014805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146109195760405162461bcd60e51b81526004016105d3906118c0565b601655565b5f546001600160a01b031633146109475760405162461bcd60e51b81526004016105d3906118c0565b6001600160a01b0381166109ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105d3565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610a675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105d3565b6001600160a01b038216610ac85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105d3565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610b8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105d3565b6001600160a01b038216610bee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105d3565b5f8111610c4f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016105d3565b5f546001600160a01b03848116911614801590610c7957505f546001600160a01b03838116911614155b15610ebc57601454600160a01b900460ff16610d11575f546001600160a01b03848116911614610d115760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c65640060648201526084016105d3565b601554811115610d635760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d69740000000060448201526064016105d3565b6014546001600160a01b03838116911614610de85760165481610d8584610644565b610d8f919061191d565b10610de85760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b60648201526084016105d3565b5f610df230610644565b601754601554919250821015908210610e0b5760155491505b808015610e225750601454600160a81b900460ff16155b8015610e3c57506014546001600160a01b03868116911614155b8015610e515750601454600160b01b900460ff165b8015610e7557506001600160a01b0385165f9081526005602052604090205460ff16155b8015610e9957506001600160a01b0384165f9081526005602052604090205460ff16155b15610eb957610ea7826110b5565b478015610eb757610eb747610ff8565b505b50505b6001600160a01b0383165f9081526005602052604090205460019060ff1680610efc57506001600160a01b0383165f9081526005602052604090205460ff165b80610f2e57506014546001600160a01b03858116911614801590610f2e57506014546001600160a01b03848116911614155b15610f3a57505f610fb4565b6014546001600160a01b038581169116148015610f6557506013546001600160a01b03848116911614155b15610f7757600854600c55600954600d555b6014546001600160a01b038481169116148015610fa257506013546001600160a01b03858116911614155b15610fb457600a54600c55600b54600d555b61085a84848484611225565b5f8184841115610fe35760405162461bcd60e51b81526004016105d391906116b6565b505f610fef8486611930565b95945050505050565b6012546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561102f573d5f803e3d5ffd5b5050565b5f6006548211156110995760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016105d3565b5f6110a2611253565b90506110ae8382611274565b9392505050565b6014805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106110fb576110fb6118f5565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611152573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111769190611943565b81600181518110611189576111896118f5565b6001600160a01b0392831660209182029290920101526013546111af9130911684610a05565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac947906111e79085905f9086903090429060040161195e565b5f604051808303815f87803b1580156111fe575f80fd5b505af1158015611210573d5f803e3d5ffd5b50506014805460ff60a81b1916905550505050565b80611232576112326112b5565b61123d8484846112e2565b8061085a5761085a600e54600c55600f54600d55565b5f805f61125e6113d3565b909250905061126d8282611274565b9250505090565b5f6110ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611410565b600c541580156112c55750600d54155b156112cc57565b600c8054600e55600d8054600f555f9182905555565b5f805f805f806112f18761143c565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506113229087611491565b6001600160a01b03808b165f9081526002602052604080822093909355908a168152205461135090866114d2565b6001600160a01b0389165f9081526002602052604090205561137181611530565b61137b8483611576565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516113c091815260200190565b60405180910390a3505050505050505050565b6006545f90819066038d7ea4c680006113ec8282611274565b8210156114075750506006549266038d7ea4c6800092509050565b90939092509050565b5f81836114305760405162461bcd60e51b81526004016105d391906116b6565b505f610fef84866119cf565b5f805f805f805f805f6114548a600c54600d5461159a565b9250925092505f611463611253565b90505f805f6114748e8787876115ec565b919e509c509a509598509396509194505050505091939550919395565b5f6110ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fc0565b5f806114de838561191d565b9050838110156110ae5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016105d3565b5f611539611253565b90505f6115468383611638565b305f9081526002602052604090205490915061156290826114d2565b305f90815260026020526040902055505050565b6006546115839083611491565b60065560075461159390826114d2565b6007555050565b5f8080806115b360646115ad8989611638565b90611274565b90505f6115c560646115ad8a89611638565b90505f6115dc826115d68b86611491565b90611491565b9992985090965090945050505050565b5f8080806115fa8886611638565b90505f6116078887611638565b90505f6116148888611638565b90505f611625826115d68686611491565b939b939a50919850919650505050505050565b5f825f0361164757505f61053d565b5f61165283856119ee565b90508261165f85836119cf565b146110ae5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016105d3565b5f602080835283518060208501525f5b818110156116e2578581018301518582016040015282016116c6565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610641575f80fd5b5f8060408385031215611727575f80fd5b823561173281611702565b946020939093013593505050565b5f805f60608486031215611752575f80fd5b833561175d81611702565b9250602084013561176d81611702565b929592945050506040919091013590565b8035801515811461178d575f80fd5b919050565b5f602082840312156117a2575f80fd5b6110ae8261177e565b5f602082840312156117bb575f80fd5b81356110ae81611702565b5f602082840312156117d6575f80fd5b5035919050565b5f805f80608085870312156117f0575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f6040848603121561181e575f80fd5b833567ffffffffffffffff80821115611835575f80fd5b818601915086601f830112611848575f80fd5b813581811115611856575f80fd5b8760208260051b850101111561186a575f80fd5b602092830195509350611880918601905061177e565b90509250925092565b5f806040838503121561189a575f80fd5b82356118a581611702565b915060208301356118b581611702565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561053d5761053d611909565b8181038181111561053d5761053d611909565b5f60208284031215611953575f80fd5b81516110ae81611702565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156119ae5784516001600160a01b031683529383019391830191600101611989565b50506001600160a01b03969096166060850152505050608001529392505050565b5f826119e957634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761053d5761053d61190956fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b0980d819ae4c523e9e4004c45cc8ebfe181061dc1a6778b2d4e70533c81aa0764736f6c63430008160033

Deployed Bytecode

0x608060405260043610610198575f3560e01c80637d1db4a5116100e7578063a9059cbb11610087578063c9567bf911610062578063c9567bf914610497578063dd62ed3e146104ab578063ea1644d5146104ef578063f2fde38b1461050e575f80fd5b8063a9059cbb14610445578063c3c8cd8014610464578063c492f04614610478575f80fd5b80638f9a55c0116100c25780638f9a55c0146103c657806395d89b41146103db57806398a5c31514610407578063a2a957bb14610426575f80fd5b80637d1db4a51461036a5780637f2feddc1461037f5780638da5cb5b146103aa575f80fd5b8063313ce567116101525780636fc3eaec1161012d5780636fc3eaec1461030457806370a0823114610318578063715018a61461033757806374010ece1461034b575f80fd5b8063313ce567146102a957806349bd5a5e146102c45780636d8aa8f8146102e3575f80fd5b806306fdde03146101a3578063095ea7b3146101ec5780631694505e1461021b57806318160ddd1461025257806323b872dd146102755780632fd689e314610294575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b5060408051808201909152600f81526e546178536f6c7574696f6e7320414960881b60208201525b6040516101e391906116b6565b60405180910390f35b3480156101f7575f80fd5b5061020b610206366004611716565b61052d565b60405190151581526020016101e3565b348015610226575f80fd5b5060135461023a906001600160a01b031681565b6040516001600160a01b0390911681526020016101e3565b34801561025d575f80fd5b5066038d7ea4c680005b6040519081526020016101e3565b348015610280575f80fd5b5061020b61028f366004611740565b610543565b34801561029f575f80fd5b5061026760175481565b3480156102b4575f80fd5b50604051600981526020016101e3565b3480156102cf575f80fd5b5060145461023a906001600160a01b031681565b3480156102ee575f80fd5b506103026102fd366004611792565b6105aa565b005b34801561030f575f80fd5b506103026105fa565b348015610323575f80fd5b506102676103323660046117ab565b610644565b348015610342575f80fd5b50610302610665565b348015610356575f80fd5b506103026103653660046117c6565b6106d6565b348015610375575f80fd5b5061026760155481565b34801561038a575f80fd5b506102676103993660046117ab565b60106020525f908152604090205481565b3480156103b5575f80fd5b505f546001600160a01b031661023a565b3480156103d1575f80fd5b5061026760165481565b3480156103e6575f80fd5b506040805180820190915260048152635453414960e01b60208201526101d6565b348015610412575f80fd5b506103026104213660046117c6565b610704565b348015610431575f80fd5b506103026104403660046117dd565b610732565b348015610450575f80fd5b5061020b61045f366004611716565b61076f565b34801561046f575f80fd5b5061030261077b565b348015610483575f80fd5b5061030261049236600461180c565b6107cd565b3480156104a2575f80fd5b50610302610860565b3480156104b6575f80fd5b506102676104c5366004611889565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156104fa575f80fd5b506103026105093660046117c6565b6108f0565b348015610519575f80fd5b506103026105283660046117ab565b61091e565b5f610539338484610a05565b5060015b92915050565b5f61054f848484610b28565b6105a0843361059b85604051806060016040528060288152602001611a06602891396001600160a01b038a165f9081526004602090815260408083203384529091529020549190610fc0565b610a05565b5060019392505050565b5f546001600160a01b031633146105dc5760405162461bcd60e51b81526004016105d3906118c0565b60405180910390fd5b60148054911515600160b01b0260ff60b01b19909216919091179055565b6011546001600160a01b0316336001600160a01b0316148061062f57506012546001600160a01b0316336001600160a01b0316145b610637575f80fd5b4761064181610ff8565b50565b6001600160a01b0381165f9081526002602052604081205461053d90611033565b5f546001600160a01b0316331461068e5760405162461bcd60e51b81526004016105d3906118c0565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146106ff5760405162461bcd60e51b81526004016105d3906118c0565b601555565b5f546001600160a01b0316331461072d5760405162461bcd60e51b81526004016105d3906118c0565b601755565b5f546001600160a01b0316331461075b5760405162461bcd60e51b81526004016105d3906118c0565b600893909355600a91909155600955600b55565b5f610539338484610b28565b6011546001600160a01b0316336001600160a01b031614806107b057506012546001600160a01b0316336001600160a01b0316145b6107b8575f80fd5b5f6107c230610644565b9050610641816110b5565b5f546001600160a01b031633146107f65760405162461bcd60e51b81526004016105d3906118c0565b5f5b8281101561085a578160055f868685818110610816576108166118f5565b905060200201602081019061082b91906117ab565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790556001016107f8565b50505050565b5f546001600160a01b031633146108895760405162461bcd60e51b81526004016105d3906118c0565b601454600160a01b900460ff16156108db5760405162461bcd60e51b815260206004820152601560248201527454726164696e6720616c7265616479206f70656e2160581b60448201526064016105d3565b6014805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146109195760405162461bcd60e51b81526004016105d3906118c0565b601655565b5f546001600160a01b031633146109475760405162461bcd60e51b81526004016105d3906118c0565b6001600160a01b0381166109ac5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105d3565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610a675760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105d3565b6001600160a01b038216610ac85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105d3565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610b8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105d3565b6001600160a01b038216610bee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105d3565b5f8111610c4f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016105d3565b5f546001600160a01b03848116911614801590610c7957505f546001600160a01b03838116911614155b15610ebc57601454600160a01b900460ff16610d11575f546001600160a01b03848116911614610d115760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c65640060648201526084016105d3565b601554811115610d635760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d69740000000060448201526064016105d3565b6014546001600160a01b03838116911614610de85760165481610d8584610644565b610d8f919061191d565b10610de85760405162461bcd60e51b815260206004820152602360248201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696044820152627a652160e81b60648201526084016105d3565b5f610df230610644565b601754601554919250821015908210610e0b5760155491505b808015610e225750601454600160a81b900460ff16155b8015610e3c57506014546001600160a01b03868116911614155b8015610e515750601454600160b01b900460ff165b8015610e7557506001600160a01b0385165f9081526005602052604090205460ff16155b8015610e9957506001600160a01b0384165f9081526005602052604090205460ff16155b15610eb957610ea7826110b5565b478015610eb757610eb747610ff8565b505b50505b6001600160a01b0383165f9081526005602052604090205460019060ff1680610efc57506001600160a01b0383165f9081526005602052604090205460ff165b80610f2e57506014546001600160a01b03858116911614801590610f2e57506014546001600160a01b03848116911614155b15610f3a57505f610fb4565b6014546001600160a01b038581169116148015610f6557506013546001600160a01b03848116911614155b15610f7757600854600c55600954600d555b6014546001600160a01b038481169116148015610fa257506013546001600160a01b03858116911614155b15610fb457600a54600c55600b54600d555b61085a84848484611225565b5f8184841115610fe35760405162461bcd60e51b81526004016105d391906116b6565b505f610fef8486611930565b95945050505050565b6012546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561102f573d5f803e3d5ffd5b5050565b5f6006548211156110995760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016105d3565b5f6110a2611253565b90506110ae8382611274565b9392505050565b6014805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106110fb576110fb6118f5565b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611152573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111769190611943565b81600181518110611189576111896118f5565b6001600160a01b0392831660209182029290920101526013546111af9130911684610a05565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac947906111e79085905f9086903090429060040161195e565b5f604051808303815f87803b1580156111fe575f80fd5b505af1158015611210573d5f803e3d5ffd5b50506014805460ff60a81b1916905550505050565b80611232576112326112b5565b61123d8484846112e2565b8061085a5761085a600e54600c55600f54600d55565b5f805f61125e6113d3565b909250905061126d8282611274565b9250505090565b5f6110ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611410565b600c541580156112c55750600d54155b156112cc57565b600c8054600e55600d8054600f555f9182905555565b5f805f805f806112f18761143c565b6001600160a01b038f165f90815260026020526040902054959b509399509197509550935091506113229087611491565b6001600160a01b03808b165f9081526002602052604080822093909355908a168152205461135090866114d2565b6001600160a01b0389165f9081526002602052604090205561137181611530565b61137b8483611576565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516113c091815260200190565b60405180910390a3505050505050505050565b6006545f90819066038d7ea4c680006113ec8282611274565b8210156114075750506006549266038d7ea4c6800092509050565b90939092509050565b5f81836114305760405162461bcd60e51b81526004016105d391906116b6565b505f610fef84866119cf565b5f805f805f805f805f6114548a600c54600d5461159a565b9250925092505f611463611253565b90505f805f6114748e8787876115ec565b919e509c509a509598509396509194505050505091939550919395565b5f6110ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610fc0565b5f806114de838561191d565b9050838110156110ae5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016105d3565b5f611539611253565b90505f6115468383611638565b305f9081526002602052604090205490915061156290826114d2565b305f90815260026020526040902055505050565b6006546115839083611491565b60065560075461159390826114d2565b6007555050565b5f8080806115b360646115ad8989611638565b90611274565b90505f6115c560646115ad8a89611638565b90505f6115dc826115d68b86611491565b90611491565b9992985090965090945050505050565b5f8080806115fa8886611638565b90505f6116078887611638565b90505f6116148888611638565b90505f611625826115d68686611491565b939b939a50919850919650505050505050565b5f825f0361164757505f61053d565b5f61165283856119ee565b90508261165f85836119cf565b146110ae5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016105d3565b5f602080835283518060208501525f5b818110156116e2578581018301518582016040015282016116c6565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610641575f80fd5b5f8060408385031215611727575f80fd5b823561173281611702565b946020939093013593505050565b5f805f60608486031215611752575f80fd5b833561175d81611702565b9250602084013561176d81611702565b929592945050506040919091013590565b8035801515811461178d575f80fd5b919050565b5f602082840312156117a2575f80fd5b6110ae8261177e565b5f602082840312156117bb575f80fd5b81356110ae81611702565b5f602082840312156117d6575f80fd5b5035919050565b5f805f80608085870312156117f0575f80fd5b5050823594602084013594506040840135936060013592509050565b5f805f6040848603121561181e575f80fd5b833567ffffffffffffffff80821115611835575f80fd5b818601915086601f830112611848575f80fd5b813581811115611856575f80fd5b8760208260051b850101111561186a575f80fd5b602092830195509350611880918601905061177e565b90509250925092565b5f806040838503121561189a575f80fd5b82356118a581611702565b915060208301356118b581611702565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561053d5761053d611909565b8181038181111561053d5761053d611909565b5f60208284031215611953575f80fd5b81516110ae81611702565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156119ae5784516001600160a01b031683529383019391830191600101611989565b50506001600160a01b03969096166060850152505050608001529392505050565b5f826119e957634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761053d5761053d61190956fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b0980d819ae4c523e9e4004c45cc8ebfe181061dc1a6778b2d4e70533c81aa0764736f6c63430008160033

Deployed Bytecode Sourcemap

4200:13133:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6657:83;;;;;;;;;;-1:-1:-1;6727:5:0;;;;;;;;;;;;-1:-1:-1;;;6727:5:0;;;;6657:83;;;;;;;:::i;:::-;;;;;;;;7582:193;;;;;;;;;;-1:-1:-1;7582:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;7582:193:0;1023:187:1;5505:41:0;;;;;;;;;;-1:-1:-1;5505:41:0;;;;-1:-1:-1;;;;;5505:41:0;;;;;;-1:-1:-1;;;;;1405:32:1;;;1387:51;;1375:2;1360:18;5505:41:0;1215:229:1;6934:95:0;;;;;;;;;;-1:-1:-1;4750:15:0;6934:95;;;1595:25:1;;;1583:2;1568:18;6934:95:0;1449:177:1;7783:446:0;;;;;;;;;;-1:-1:-1;7783:446:0;;;;;:::i;:::-;;:::i;5805:50::-;;;;;;;;;;;;;;;;6843:83;;;;;;;;;;-1:-1:-1;6843:83:0;;4424:1;2234:36:1;;2222:2;2207:18;6843:83:0;2092:184:1;5553:28:0;;;;;;;;;;-1:-1:-1;5553:28:0;;;;-1:-1:-1;;;;;5553:28:0;;;16715:101;;;;;;;;;;-1:-1:-1;16715:101:0;;;;;:::i;:::-;;:::i;:::-;;12540:235;;;;;;;;;;;;;:::i;7037:138::-;;;;;;;;;;-1:-1:-1;7037:138:0;;;;;:::i;:::-;;:::i;1687:148::-;;;;;;;;;;;;;:::i;16855:108::-;;;;;;;;;;-1:-1:-1;16855:108:0;;;;;:::i;:::-;;:::i;5703:43::-;;;;;;;;;;;;;;;;5245;;;;;;;;;;-1:-1:-1;5245:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;1473:79;;;;;;;;;;-1:-1:-1;1511:7:0;1538:6;-1:-1:-1;;;;;1538:6:0;1473:79;;5753:45;;;;;;;;;;;;;;;;6748:87;;;;;;;;;;-1:-1:-1;6820:7:0;;;;;;;;;;;;-1:-1:-1;;;6820:7:0;;;;6748:87;;16524:139;;;;;;;;;;-1:-1:-1;16524:139:0;;;;;:::i;:::-;;:::i;16181:291::-;;;;;;;;;;-1:-1:-1;16181:291:0;;;;;:::i;:::-;;:::i;7183:199::-;;;;;;;;;;-1:-1:-1;7183:199:0;;;;;:::i;:::-;;:::i;12296:236::-;;;;;;;;;;;;;:::i;17094:234::-;;;;;;;;;;-1:-1:-1;17094:234:0;;;;;:::i;:::-;;:::i;12146:142::-;;;;;;;;;;;;;:::i;7390:184::-;;;;;;;;;;-1:-1:-1;7390:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;7539:18:0;;;7507:7;7539:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7390:184;16971:115;;;;;;;;;;-1:-1:-1;16971:115:0;;;;;:::i;:::-;;:::i;1843:244::-;;;;;;;;;;-1:-1:-1;1843:244:0;;;;;:::i;:::-;;:::i;7582:193::-;7684:4;7706:39;312:10;7729:7;7738:6;7706:8;:39::i;:::-;-1:-1:-1;7763:4:0;7582:193;;;;;:::o;7783:446::-;7915:4;7932:36;7942:6;7950:9;7961:6;7932:9;:36::i;:::-;7979:220;8002:6;312:10;8050:138;8106:6;8050:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8050:19:0;;;;;;:11;:19;;;;;;;;312:10;8050:33;;;;;;;;;;:37;:138::i;:::-;7979:8;:220::i;:::-;-1:-1:-1;8217:4:0;7783:446;;;;;:::o;16715:101::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;;;;;;;;;16782:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;16782:26:0::1;-1:-1:-1::0;;;;16782:26:0;;::::1;::::0;;;::::1;::::0;;16715:101::o;12540:235::-;12606:19;;-1:-1:-1;;;;;12606:19:0;312:10;-1:-1:-1;;;;;12590:35:0;;:72;;;-1:-1:-1;12645:17:0;;-1:-1:-1;;;;;12645:17:0;312:10;-1:-1:-1;;;;;12629:33:0;;12590:72;12582:81;;;;;;12703:21;12735:32;12703:21;12735:12;:32::i;:::-;12571:204;12540:235::o;7037:138::-;-1:-1:-1;;;;;7150:16:0;;7103:7;7150:16;;;:7;:16;;;;;;7130:37;;:19;:37::i;1687:148::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;1794:1:::1;1778:6:::0;;1757:40:::1;::::0;-1:-1:-1;;;;;1778:6:0;;::::1;::::0;1757:40:::1;::::0;1794:1;;1757:40:::1;1825:1;1808:19:::0;;-1:-1:-1;;;;;;1808:19:0::1;::::0;;1687:148::o;16855:108::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;16929:12:::1;:26:::0;16855:108::o;16524:139::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;16615:19:::1;:40:::0;16524:139::o;16181:291::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;16315:14:::1;:30:::0;;;;16356:15:::1;:32:::0;;;;16399:12:::1;:26:::0;16436:13:::1;:28:::0;16181:291::o;7183:199::-;7288:4;7310:42;312:10;7334:9;7345:6;7310:9;:42::i;12296:236::-;12362:19;;-1:-1:-1;;;;;12362:19:0;312:10;-1:-1:-1;;;;;12346:35:0;;:72;;;-1:-1:-1;12401:17:0;;-1:-1:-1;;;;;12401:17:0;312:10;-1:-1:-1;;;;;12385:33:0;;12346:72;12338:81;;;;;;12430:23;12456:24;12474:4;12456:9;:24::i;:::-;12430:50;;12491:33;12508:15;12491:16;:33::i;17094:234::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;17211:9:::1;17207:114;17226:19:::0;;::::1;17207:114;;;17301:8;17267:18;:31;17286:8;;17295:1;17286:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17267:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17267:31:0;:42;;-1:-1:-1;;17267:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;17247:3:0::1;17207:114;;;;17094:234:::0;;;:::o;12146:142::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;12205:11:::1;::::0;-1:-1:-1;;;12205:11:0;::::1;;;:20;12197:54;;;::::0;-1:-1:-1;;;12197:54:0;;5448:2:1;12197:54:0::1;::::0;::::1;5430:21:1::0;5487:2;5467:18;;;5460:30;-1:-1:-1;;;5506:18:1;;;5499:51;5567:18;;12197:54:0::1;5246:345:1::0;12197:54:0::1;12262:11;:18:::0;;-1:-1:-1;;;;12262:18:0::1;-1:-1:-1::0;;;12262:18:0::1;::::0;;12146:142::o;16971:115::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;17048:14:::1;:30:::0;16971:115::o;1843:244::-;1600:6;;-1:-1:-1;;;;;1600:6:0;312:10;1600:22;1592:67;;;;-1:-1:-1;;;1592:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1932:22:0;::::1;1924:73;;;::::0;-1:-1:-1;;;1924:73:0;;5798:2:1;1924:73:0::1;::::0;::::1;5780:21:1::0;5837:2;5817:18;;;5810:30;5876:34;5856:18;;;5849:62;-1:-1:-1;;;5927:18:1;;;5920:36;5973:19;;1924:73:0::1;5596:402:1::0;1924:73:0::1;2034:6;::::0;;2013:38:::1;::::0;-1:-1:-1;;;;;2013:38:0;;::::1;::::0;2034:6;::::1;::::0;2013:38:::1;::::0;::::1;2062:6;:17:::0;;-1:-1:-1;;;;;;2062:17:0::1;-1:-1:-1::0;;;;;2062:17:0;;;::::1;::::0;;;::::1;::::0;;1843:244::o;8920:369::-;-1:-1:-1;;;;;9047:19:0;;9039:68;;;;-1:-1:-1;;;9039:68:0;;6205:2:1;9039:68:0;;;6187:21:1;6244:2;6224:18;;;6217:30;6283:34;6263:18;;;6256:62;-1:-1:-1;;;6334:18:1;;;6327:34;6378:19;;9039:68:0;6003:400:1;9039:68:0;-1:-1:-1;;;;;9126:21:0;;9118:68;;;;-1:-1:-1;;;9118:68:0;;6610:2:1;9118:68:0;;;6592:21:1;6649:2;6629:18;;;6622:30;6688:34;6668:18;;;6661:62;-1:-1:-1;;;6739:18:1;;;6732:32;6781:19;;9118:68:0;6408:398:1;9118:68:0;-1:-1:-1;;;;;9197:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9249:32;;1595:25:1;;;9249:32:0;;1568:18:1;9249:32:0;;;;;;;8920:369;;;:::o;9297:2243::-;-1:-1:-1;;;;;9419:18:0;;9411:68;;;;-1:-1:-1;;;9411:68:0;;7013:2:1;9411:68:0;;;6995:21:1;7052:2;7032:18;;;7025:30;7091:34;7071:18;;;7064:62;-1:-1:-1;;;7142:18:1;;;7135:35;7187:19;;9411:68:0;6811:401:1;9411:68:0;-1:-1:-1;;;;;9498:16:0;;9490:64;;;;-1:-1:-1;;;9490:64:0;;7419:2:1;9490:64:0;;;7401:21:1;7458:2;7438:18;;;7431:30;7497:34;7477:18;;;7470:62;-1:-1:-1;;;7548:18:1;;;7541:33;7591:19;;9490:64:0;7217:399:1;9490:64:0;9582:1;9573:6;:10;9565:64;;;;-1:-1:-1;;;9565:64:0;;7823:2:1;9565:64:0;;;7805:21:1;7862:2;7842:18;;;7835:30;7901:34;7881:18;;;7874:62;-1:-1:-1;;;7952:18:1;;;7945:39;8001:19;;9565:64:0;7621:405:1;9565:64:0;1511:7;1538:6;-1:-1:-1;;;;;9646:15:0;;;1538:6;;9646:15;;;;:32;;-1:-1:-1;1511:7:0;1538:6;-1:-1:-1;;;;;9665:13:0;;;1538:6;;9665:13;;9646:32;9642:1172;;;9735:11;;-1:-1:-1;;;9735:11:0;;;;9730:144;;1511:7;1538:6;-1:-1:-1;;;;;9775:15:0;;;1538:6;;9775:15;9767:91;;;;-1:-1:-1;;;9767:91:0;;8233:2:1;9767:91:0;;;8215:21:1;8272:2;8252:18;;;8245:30;8311:34;8291:18;;;8284:62;8382:33;8362:18;;;8355:61;8433:19;;9767:91:0;8031:427:1;9767:91:0;9908:12;;9898:6;:22;;9890:63;;;;-1:-1:-1;;;9890:63:0;;8665:2:1;9890:63:0;;;8647:21:1;8704:2;8684:18;;;8677:30;8743;8723:18;;;8716:58;8791:18;;9890:63:0;8463:352:1;9890:63:0;9979:13;;-1:-1:-1;;;;;9973:19:0;;;9979:13;;9973:19;9970:146;;10046:14;;10037:6;10021:13;10031:2;10021:9;:13::i;:::-;:22;;;;:::i;:::-;:39;10013:87;;;;-1:-1:-1;;;10013:87:0;;9284:2:1;10013:87:0;;;9266:21:1;9323:2;9303:18;;;9296:30;9362:34;9342:18;;;9335:62;-1:-1:-1;;;9413:18:1;;;9406:33;9456:19;;10013:87:0;9082:399:1;10013:87:0;10132:28;10163:24;10181:4;10163:9;:24::i;:::-;10241:19;;10304:12;;10132:55;;-1:-1:-1;10217:43:0;;;;10280:36;;10277:124;;10373:12;;10350:35;;10277:124;10421:7;:18;;;;-1:-1:-1;10433:6:0;;-1:-1:-1;;;10433:6:0;;;;10432:7;10421:18;:43;;;;-1:-1:-1;10451:13:0;;-1:-1:-1;;;;;10443:21:0;;;10451:13;;10443:21;;10421:43;:58;;;;-1:-1:-1;10468:11:0;;-1:-1:-1;;;10468:11:0;;;;10421:58;:87;;;;-1:-1:-1;;;;;;10484:24:0;;;;;;:18;:24;;;;;;;;10483:25;10421:87;:114;;;;-1:-1:-1;;;;;;10513:22:0;;;;;;:18;:22;;;;;;;;10512:23;10421:114;10417:386;;;10556:38;10573:20;10556:16;:38::i;:::-;10642:21;10686:22;;10682:106;;10733:35;10746:21;10733:12;:35::i;:::-;10537:266;10417:386;9680:1134;;9642:1172;-1:-1:-1;;;;;10890:24:0;;10826:12;10890:24;;;:18;:24;;;;;;10841:4;;10890:24;;;:50;;-1:-1:-1;;;;;;10918:22:0;;;;;;:18;:22;;;;;;;;10890:50;10889:102;;;-1:-1:-1;10954:13:0;;-1:-1:-1;;;;;10946:21:0;;;10954:13;;10946:21;;;;:44;;-1:-1:-1;10977:13:0;;-1:-1:-1;;;;;10971:19:0;;;10977:13;;10971:19;;10946:44;10885:594;;;-1:-1:-1;11018:5:0;10885:594;;;11101:13;;-1:-1:-1;;;;;11093:21:0;;;11101:13;;11093:21;:55;;;;-1:-1:-1;11132:15:0;;-1:-1:-1;;;;;11118:30:0;;;11132:15;;11118:30;;11093:55;11090:162;;;11181:14;;11169:9;:26;11224:12;;11214:7;:22;11090:162;11311:13;;-1:-1:-1;;;;;11305:19:0;;;11311:13;;11305:19;:55;;;;-1:-1:-1;11344:15:0;;-1:-1:-1;;;;;11328:32:0;;;11344:15;;11328:32;;11305:55;11301:165;;;11393:15;;11381:9;:27;11437:13;;11427:7;:23;11301:165;11491:41;11506:4;11512:2;11516:6;11524:7;11491:14;:41::i;2451:224::-;2571:7;2607:12;2599:6;;;;2591:29;;;;-1:-1:-1;;;2591:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2631:9:0;2643:5;2647:1;2643;:5;:::i;:::-;2631:17;2451:224;-1:-1:-1;;;;;2451:224:0:o;12039:99::-;12096:17;;:34;;-1:-1:-1;;;;;12096:17:0;;;;:34;;;;;12123:6;;12096:17;:34;:17;:34;12123:6;12096:17;:34;;;;;;;;;;;;;;;;;;;;;12039:99;:::o;8237:323::-;8332:7;8390;;8379;:18;;8357:110;;;;-1:-1:-1;;;8357:110:0;;9821:2:1;8357:110:0;;;9803:21:1;9860:2;9840:18;;;9833:30;9899:34;9879:18;;;9872:62;-1:-1:-1;;;9950:18:1;;;9943:40;10000:19;;8357:110:0;9619:406:1;8357:110:0;8478:19;8500:10;:8;:10::i;:::-;8478:32;-1:-1:-1;8528:24:0;:7;8478:32;8528:11;:24::i;:::-;8521:31;8237:323;-1:-1:-1;;;8237:323:0:o;11548:483::-;5949:6;:13;;-1:-1:-1;;;;5949:13:0;-1:-1:-1;;;5949:13:0;;;11650:16:::1;::::0;;11664:1:::1;11650:16:::0;;;;;::::1;::::0;;-1:-1:-1;;11650:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;11650:16:0::1;11626:40;;11695:4;11677;11682:1;11677:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11677:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;11721:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;11721:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;11677:7;;11721:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11711:4;11716:1;11711:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11711:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;11786:15:::1;::::0;11754:62:::1;::::0;11771:4:::1;::::0;11786:15:::1;11804:11:::0;11754:8:::1;:62::i;:::-;11827:15;::::0;:196:::1;::::0;-1:-1:-1;;;11827:196:0;;-1:-1:-1;;;;;11827:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;11908:11;;11827:15:::1;::::0;11950:4;;11977::::1;::::0;11997:15:::1;::::0;11827:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5985:6:0;:14;;-1:-1:-1;;;;5985:14:0;;;-1:-1:-1;;;;11548:483:0:o;12783:282::-;12939:7;12934:28;;12948:14;:12;:14::i;:::-;12973:44;12991:6;12999:9;13010:6;12973:17;:44::i;:::-;13033:7;13028:29;;13042:15;8851:17;;8839:9;:29;8889:15;;8879:7;:25;8795:117;15744:164;15786:7;15807:15;15824;15843:19;:17;:19::i;:::-;15806:56;;-1:-1:-1;15806:56:0;-1:-1:-1;15880:20:0;15806:56;;15880:11;:20::i;:::-;15873:27;;;;15744:164;:::o;2937:132::-;2995:7;3022:39;3026:1;3029;3022:39;;;;;;;;;;;;;;;;;:3;:39::i;8568:219::-;8615:9;;:14;:30;;;;-1:-1:-1;8633:7:0;;:12;8615:30;8611:43;;;8568:219::o;8611:43::-;8686:9;;;8666:17;:29;8724:7;;;8706:15;:25;-1:-1:-1;8744:13:0;;;;8768:11;8568:219::o;13073:610::-;13220:15;13250:23;13288:12;13315:23;13353:12;13380:13;13407:19;13418:7;13407:10;:19::i;:::-;-1:-1:-1;;;;;13455:15:0;;;;;;:7;:15;;;;;;13205:221;;-1:-1:-1;13205:221:0;;-1:-1:-1;13205:221:0;;-1:-1:-1;13205:221:0;-1:-1:-1;13205:221:0;-1:-1:-1;13205:221:0;-1:-1:-1;13455:28:0;;13205:221;13455:19;:28::i;:::-;-1:-1:-1;;;;;13437:15:0;;;;;;;:7;:15;;;;;;:46;;;;13515:18;;;;;;;:39;;13538:15;13515:22;:39::i;:::-;-1:-1:-1;;;;;13494:18:0;;;;;;:7;:18;;;;;:60;13565:16;13575:5;13565:9;:16::i;:::-;13592:23;13604:4;13610;13592:11;:23::i;:::-;13648:9;-1:-1:-1;;;;;13631:44:0;13640:6;-1:-1:-1;;;;;13631:44:0;;13659:15;13631:44;;;;1595:25:1;;1583:2;1568:18;;1449:177;13631:44:0;;;;;;;;13194:489;;;;;;13073:610;;;:::o;15916:257::-;16014:7;;15967;;;;4750:15;16082:20;16014:7;4750:15;16082:11;:20::i;:::-;16072:7;:30;16068:61;;;-1:-1:-1;;16112:7:0;;;4750:15;;-1:-1:-1;15916:257:0;-1:-1:-1;15916:257:0:o;16068:61::-;16148:7;;16157;;-1:-1:-1;15916:257:0;-1:-1:-1;15916:257:0:o;3077:223::-;3197:7;3232:12;3225:5;3217:28;;;;-1:-1:-1;;;3217:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3256:9:0;3268:5;3272:1;3268;:5;:::i;14102:615::-;14202:7;14224;14246;14268;14290;14312;14348:23;14373:12;14387:13;14417:40;14429:7;14438:9;;14449:7;;14417:11;:40::i;:::-;14347:110;;;;;;14468:19;14490:10;:8;:10::i;:::-;14468:32;;14512:15;14529:23;14554:12;14583:46;14595:7;14604:4;14610:5;14617:11;14583;:46::i;:::-;14511:118;;-1:-1:-1;14511:118:0;-1:-1:-1;14511:118:0;-1:-1:-1;14680:15:0;;-1:-1:-1;14697:4:0;;-1:-1:-1;14703:5:0;;-1:-1:-1;;;;;14102:615:0;;;;;;;:::o;2307:136::-;2365:7;2392:43;2396:1;2399;2392:43;;;;;;;;;;;;;;;;;:3;:43::i;2120:179::-;2178:7;;2210:5;2214:1;2210;:5;:::i;:::-;2198:17;;2239:1;2234;:6;;2226:46;;;;-1:-1:-1;;;2226:46:0;;11827:2:1;2226:46:0;;;11809:21:1;11866:2;11846:18;;;11839:30;11905:29;11885:18;;;11878:57;11952:18;;2226:46:0;11625:351:1;13691:211:0;13744:19;13766:10;:8;:10::i;:::-;13744:32;-1:-1:-1;13787:13:0;13803:22;:5;13744:32;13803:9;:22::i;:::-;13877:4;13861:22;;;;:7;:22;;;;;;13787:38;;-1:-1:-1;13861:33:0;;13787:38;13861:26;:33::i;:::-;13852:4;13836:22;;;;:7;:22;;;;;:58;-1:-1:-1;;;13691:211:0:o;13910:147::-;13988:7;;:17;;14000:4;13988:11;:17::i;:::-;13978:7;:27;14029:10;;:20;;14044:4;14029:14;:20::i;:::-;14016:10;:33;-1:-1:-1;;13910:147:0:o;14725:469::-;14894:7;;;;14988:30;15014:3;14988:21;:7;15000:8;14988:11;:21::i;:::-;:25;;:30::i;:::-;14973:45;-1:-1:-1;15029:13:0;15045:28;15069:3;15045:19;:7;15057:6;15045:11;:19::i;:28::-;15029:44;-1:-1:-1;15084:23:0;15110:28;15029:44;15110:17;:7;15122:4;15110:11;:17::i;:::-;:21;;:28::i;:::-;15084:54;15174:4;;-1:-1:-1;15180:5:0;;-1:-1:-1;14725:469:0;;-1:-1:-1;;;;;14725:469:0:o;15202:534::-;15396:7;;;;15493:24;:7;15505:11;15493;:24::i;:::-;15475:42;-1:-1:-1;15528:12:0;15543:21;:4;15552:11;15543:8;:21::i;:::-;15528:36;-1:-1:-1;15575:13:0;15591:22;:5;15601:11;15591:9;:22::i;:::-;15575:38;-1:-1:-1;15624:23:0;15650:28;15575:38;15650:17;:7;15662:4;15650:11;:17::i;:28::-;15697:7;;;;-1:-1:-1;15723:4:0;;-1:-1:-1;15202:534:0;;-1:-1:-1;;;;;;;15202:534:0:o;2683:246::-;2741:7;2765:1;2770;2765:6;2761:47;;-1:-1:-1;2795:1:0;2788:8;;2761:47;2818:9;2830:5;2834:1;2830;:5;:::i;:::-;2818:17;-1:-1:-1;2863:1:0;2854:5;2858:1;2818:17;2854:5;:::i;:::-;:10;2846:56;;;;-1:-1:-1;;;2846:56:0;;12356:2:1;2846:56:0;;;12338:21:1;12395:2;12375:18;;;12368:30;12434:34;12414:18;;;12407:62;-1:-1:-1;;;12485:18:1;;;12478:31;12526:19;;2846:56:0;12154:397:1;14:548;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;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;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2489:160::-;2554:20;;2610:13;;2603:21;2593:32;;2583:60;;2639:1;2636;2629:12;2583:60;2489:160;;;:::o;2654:180::-;2710:6;2763:2;2751:9;2742:7;2738:23;2734:32;2731:52;;;2779:1;2776;2769:12;2731:52;2802:26;2818:9;2802:26;:::i;2839:247::-;2898:6;2951:2;2939:9;2930:7;2926:23;2922:32;2919:52;;;2967:1;2964;2957:12;2919:52;3006:9;2993:23;3025:31;3050:5;3025:31;:::i;3091:180::-;3150:6;3203:2;3191:9;3182:7;3178:23;3174:32;3171:52;;;3219:1;3216;3209:12;3171:52;-1:-1:-1;3242:23:1;;3091:180;-1:-1:-1;3091:180:1:o;3276:385::-;3362:6;3370;3378;3386;3439:3;3427:9;3418:7;3414:23;3410:33;3407:53;;;3456:1;3453;3446:12;3407:53;-1:-1:-1;;3479:23:1;;;3549:2;3534:18;;3521:32;;-1:-1:-1;3600:2:1;3585:18;;3572:32;;3651:2;3636:18;3623:32;;-1:-1:-1;3276:385:1;-1:-1:-1;3276:385:1:o;3666:689::-;3758:6;3766;3774;3827:2;3815:9;3806:7;3802:23;3798:32;3795:52;;;3843:1;3840;3833:12;3795:52;3883:9;3870:23;3912:18;3953:2;3945:6;3942:14;3939:34;;;3969:1;3966;3959:12;3939:34;4007:6;3996:9;3992:22;3982:32;;4052:7;4045:4;4041:2;4037:13;4033:27;4023:55;;4074:1;4071;4064:12;4023:55;4114:2;4101:16;4140:2;4132:6;4129:14;4126:34;;;4156:1;4153;4146:12;4126:34;4211:7;4204:4;4194:6;4191:1;4187:14;4183:2;4179:23;4175:34;4172:47;4169:67;;;4232:1;4229;4222:12;4169:67;4263:4;4255:13;;;;-1:-1:-1;4287:6:1;-1:-1:-1;4312:37:1;;4328:20;;;-1:-1:-1;4312:37:1;:::i;:::-;4302:47;;3666:689;;;;;:::o;4360:388::-;4428:6;4436;4489:2;4477:9;4468:7;4464:23;4460:32;4457:52;;;4505:1;4502;4495:12;4457:52;4544:9;4531:23;4563:31;4588:5;4563:31;:::i;:::-;4613:5;-1:-1:-1;4670:2:1;4655:18;;4642:32;4683:33;4642:32;4683:33;:::i;:::-;4735:7;4725:17;;;4360:388;;;;;:::o;4753:356::-;4955:2;4937:21;;;4974:18;;;4967:30;5033:34;5028:2;5013:18;;5006:62;5100:2;5085:18;;4753:356::o;5114:127::-;5175:10;5170:3;5166:20;5163:1;5156:31;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;8820:127;8881:10;8876:3;8872:20;8869:1;8862:31;8912:4;8909:1;8902:15;8936:4;8933:1;8926:15;8952:125;9017:9;;;9038:10;;;9035:36;;;9051:18;;:::i;9486:128::-;9553:9;;;9574:11;;;9571:37;;;9588:18;;:::i;10162:251::-;10232:6;10285:2;10273:9;10264:7;10260:23;10256:32;10253:52;;;10301:1;10298;10291:12;10253:52;10333:9;10327:16;10352:31;10377:5;10352:31;:::i;10418:980::-;10680:4;10728:3;10717:9;10713:19;10759:6;10748:9;10741:25;10785:2;10823:6;10818:2;10807:9;10803:18;10796:34;10866:3;10861:2;10850:9;10846:18;10839:31;10890:6;10925;10919:13;10956:6;10948;10941:22;10994:3;10983:9;10979:19;10972:26;;11033:2;11025:6;11021:15;11007:29;;11054:1;11064:195;11078:6;11075:1;11072:13;11064:195;;;11143:13;;-1:-1:-1;;;;;11139:39:1;11127:52;;11234:15;;;;11199:12;;;;11175:1;11093:9;11064:195;;;-1:-1:-1;;;;;;;11315:32:1;;;;11310:2;11295:18;;11288:60;-1:-1:-1;;;11379:3:1;11364:19;11357:35;11276:3;10418:980;-1:-1:-1;;;10418:980:1:o;11403:217::-;11443:1;11469;11459:132;;11513:10;11508:3;11504:20;11501:1;11494:31;11548:4;11545:1;11538:15;11576:4;11573:1;11566:15;11459:132;-1:-1:-1;11605:9:1;;11403:217::o;11981:168::-;12054:9;;;12085;;12102:15;;;12096:22;;12082:37;12072:71;;12123:18;;:::i

Swarm Source

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