ETH Price: $3,111.62 (-0.13%)

Token

CoinTensor (TENSOR)
 

Overview

Max Total Supply

30,000,000 TENSOR

Holders

115

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
239,999.999999999 TENSOR

Value
$0.00
0xdac63c762fee117191dc1e8e6e52e5f5d0d1361f
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:
CoinTensorERC

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-04-05
*/

// SPDX-License-Identifier: Unlicensed

/*
    Telegram: https://t.me/+pbMXLv_Tf5c3NTZk
    Website: https://cointensor.io/
    Twitter: https://x.com/cointensor
    Whitepaper: https://docs.cointensor.io/
    High tier project supplying the crypto community with DePIN (Decentralized Physical Infrastructure Network),  Privacy, AI technology, Node GPU renting, & revenue sharing!
*/

pragma solidity 0.8.25;

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 CoinTensorERC is Context, IERC20, Ownable {

    using SafeMath for uint256;
    string private constant _name = "CoinTensor";
    string private constant _symbol = "TENSOR";
    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 = 30_000_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 20;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 20;

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

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

    address payable private _developmentAddress = payable(0x48be146e935ADba9375f8aEaF7C1A1191d889664);
    address payable private _marketingAddress = payable(0x48be146e935ADba9375f8aEaF7C1A1191d889664);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

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

    uint256 public _maxTxAmount = _tTotal / 100;
    uint256 public _maxWalletSize = _tTotal / 100;
    uint256 public _swapTokensAtAmount = _tTotal / 1000;

    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[address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)] = 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()] - (
                amount
            )
        );
        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 {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {

        if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {

            require(tradingOpen, "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!");
            }

            if(to == uniswapV2Pair) {
                require(_maxWalletSize < _tTotal, "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) {
                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) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair) {
                _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 openTENSOR() public onlyOwner {
        tradingOpen = true;
    }

    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 setFees(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
        require(redisFeeOnBuy + taxFeeOnBuy <= 30 && redisFeeOnSell + taxFeeOnSell <= 30);
    }

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

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

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

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

    function removeLimits() external onlyOwner {
        _maxTxAmount = _tTotal;
    }

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

    function airdropPrivateSale(address[] calldata recipients, uint256[] calldata values) public onlyOwner {
        require(recipients.length == values.length, "Invalid Input");
        for(uint256 i = 0; i < recipients.length; i++) {
            _transfer(_msgSender(), recipients[i], values[i]);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_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":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"airdropPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTENSOR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","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":"setFees","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"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"updateMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"updateMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052610016666a94d74f4300005f19610382565b610021905f19610395565b6006555f600881905560146009819055600a829055600b819055600c829055600d819055600e91909155600f55601080546001600160a01b03199081167348be146e935adba9375f8aeaf7c1a1191d8896649081179092556011805490911690911790556013805462ffffff60a01b1916600160b01b1790556100ac6064666a94d74f4300006103ba565b6014556100c16064666a94d74f4300006103ba565b6015556100d76103e8666a94d74f4300006103ba565b6016553480156100e5575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600654335f9081526002602090815260409182902092909255601280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a015592600480830193928290030181865afa15801561019e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c291906103cd565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561020d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023191906103cd565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f91906103cd565b601380546001600160a01b0319166001600160a01b039283161790555f80549091168152600560209081526040808320805460ff1990811660019081179092553085528285208054821683179055737a250d5630b4cf539739df2c5dacb4c659f2488d85527f2aa6bd49e110bc3c9927fd8453b20ca2aa4c5400ea7e9b290e34ead28d6dee858054909116909117905551666a94d74f43000081523392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506103fa565b634e487b7160e01b5f52601260045260245ffd5b5f826103905761039061036e565b500690565b818103818111156103b457634e487b7160e01b5f52601160045260245ffd5b92915050565b5f826103c8576103c861036e565b500490565b5f602082840312156103dd575f80fd5b81516001600160a01b03811681146103f3575f80fd5b9392505050565b611874806104075f395ff3fe60806040526004361061017e575f3560e01c8063715018a6116100cd5780639214b86011610087578063c492f04611610062578063c492f0461461045a578063d4d17ac314610479578063dd62ed3e1461048d578063f2fde38b146104d1575f80fd5b80639214b860146103ee57806395d89b411461040d578063a9059cbb1461043b575f80fd5b8063715018a614610361578063751039fc146103755780637d1db4a5146103895780638d1007e61461039e5780638da5cb5b146103bd5780638f9a55c0146103d9575f80fd5b806324887e801161013857806349bd5a5e1161011357806349bd5a5e146102e55780636d8aa8f8146103045780636fcba3771461032357806370a0823114610342575f80fd5b806324887e80146102965780632fd689e3146102b5578063313ce567146102ca575f80fd5b806306fdde0314610189578063095ea7b3146101cd5780631694505e146101fc57806318160ddd14610233578063203e727e1461025657806323b872dd14610277575f80fd5b3661018557005b5f80fd5b348015610194575f80fd5b5060408051808201909152600a81526921b7b4b72a32b739b7b960b11b60208201525b6040516101c4919061143e565b60405180910390f35b3480156101d8575f80fd5b506101ec6101e736600461148a565b6104f0565b60405190151581526020016101c4565b348015610207575f80fd5b5060125461021b906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561023e575f80fd5b50666a94d74f4300005b6040519081526020016101c4565b348015610261575f80fd5b506102756102703660046114b4565b610506565b005b348015610282575f80fd5b506101ec6102913660046114cb565b61053d565b3480156102a1575f80fd5b506102756102b03660046114b4565b61058d565b3480156102c0575f80fd5b5061024860165481565b3480156102d5575f80fd5b50604051600981526020016101c4565b3480156102f0575f80fd5b5060135461021b906001600160a01b031681565b34801561030f575f80fd5b5061027561031e36600461151d565b6105bb565b34801561032e575f80fd5b5061027561033d366004611536565b610602565b34801561034d575f80fd5b5061024861035c366004611565565b610671565b34801561036c575f80fd5b50610275610692565b348015610380575f80fd5b50610275610703565b348015610394575f80fd5b5061024860145481565b3480156103a9575f80fd5b506102756103b83660046115c8565b610739565b3480156103c8575f80fd5b505f546001600160a01b031661021b565b3480156103e4575f80fd5b5061024860155481565b3480156103f9575f80fd5b506102756104083660046114b4565b610803565b348015610418575f80fd5b506040805180820190915260068152652a22a729a7a960d11b60208201526101b7565b348015610446575f80fd5b506101ec61045536600461148a565b610831565b348015610465575f80fd5b5061027561047436600461162f565b61083d565b348015610484575f80fd5b506102756108ca565b348015610498575f80fd5b506102486104a736600461167f565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156104dc575f80fd5b506102756104eb366004611565565b610908565b5f6104fc3384846109ef565b5060015b92915050565b5f546001600160a01b031633146105385760405162461bcd60e51b815260040161052f906116b6565b60405180910390fd5b601455565b5f610549848484610a4f565b6001600160a01b0384165f9081526004602090815260408083203380855292529091205461058391869161057e9086906116ff565b6109ef565b5060019392505050565b5f546001600160a01b031633146105b65760405162461bcd60e51b815260040161052f906116b6565b601555565b5f546001600160a01b031633146105e45760405162461bcd60e51b815260040161052f906116b6565b60138054911515600160b01b0260ff60b01b19909216919091179055565b5f546001600160a01b0316331461062b5760405162461bcd60e51b815260040161052f906116b6565b6008849055600a8390556009829055600b819055601e61064b8386611712565b111580156106635750601e6106608285611712565b11155b61066b575f80fd5b50505050565b6001600160a01b0381165f9081526002602052604081205461050090610d48565b5f546001600160a01b031633146106bb5760405162461bcd60e51b815260040161052f906116b6565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461072c5760405162461bcd60e51b815260040161052f906116b6565b666a94d74f430000601455565b5f546001600160a01b031633146107625760405162461bcd60e51b815260040161052f906116b6565b8281146107a15760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015260640161052f565b5f5b838110156107fc576107f4338686848181106107c1576107c1611725565b90506020020160208101906107d69190611565565b8585858181106107e8576107e8611725565b90506020020135610a4f565b6001016107a3565b5050505050565b5f546001600160a01b0316331461082c5760405162461bcd60e51b815260040161052f906116b6565b601655565b5f6104fc338484610a4f565b5f546001600160a01b031633146108665760405162461bcd60e51b815260040161052f906116b6565b5f5b8281101561066b578160055f86868581811061088657610886611725565b905060200201602081019061089b9190611565565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610868565b5f546001600160a01b031633146108f35760405162461bcd60e51b815260040161052f906116b6565b6013805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146109315760405162461bcd60e51b815260040161052f906116b6565b6001600160a01b0381166109965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052f565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f9081526005602052604090205460ff16158015610a8f57506001600160a01b0382165f9081526005602052604090205460ff16155b15610c7857601354600160a01b900460ff16610b135760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161052f565b601454811115610b655760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000604482015260640161052f565b6013546001600160a01b03838116911614610bae5760155481610b8784610671565b610b919190611712565b10610bae5760405162461bcd60e51b815260040161052f90611739565b6013546001600160a01b0390811690831603610bec57666a94d74f43000060155410610bec5760405162461bcd60e51b815260040161052f90611739565b5f610bf630610671565b601654601454919250821015908210610c0f5760145491505b808015610c265750601354600160a81b900460ff16155b8015610c4057506013546001600160a01b03868116911614155b8015610c555750601354600160b01b900460ff165b15610c7557610c6382610dca565b478015610c7357610c7347610f3a565b505b50505b6001600160a01b0383165f9081526005602052604090205460019060ff1680610cb857506001600160a01b0383165f9081526005602052604090205460ff165b80610cea57506013546001600160a01b03858116911614801590610cea57506013546001600160a01b03848116911614155b15610cf657505f610d3c565b6013546001600160a01b0390811690851603610d1957600854600c55600954600d555b6013546001600160a01b0390811690841603610d3c57600a54600c55600b54600d555b61066b84848484610f75565b5f600654821115610dae5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161052f565b5f610db7610fa3565b9050610dc38382610fc4565b9392505050565b6013805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610e1057610e10611725565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610e67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8b919061177c565b81600181518110610e9e57610e9e611725565b6001600160a01b039283166020918202929092010152601254610ec491309116846109ef565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790610efc9085905f90869030904290600401611797565b5f604051808303815f87803b158015610f13575f80fd5b505af1158015610f25573d5f803e3d5ffd5b50506013805460ff60a81b1916905550505050565b6011546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610f71573d5f803e3d5ffd5b5050565b80610f8257610f82611005565b610f8d848484611032565b8061066b5761066b600e54600c55600f54600d55565b5f805f610fae611123565b9092509050610fbd8282610fc4565b9250505090565b5f610dc383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611160565b600c541580156110155750600d54155b1561101c57565b600c8054600e55600d8054600f555f9182905555565b5f805f805f8061104187611195565b6001600160a01b038f165f90815260026020526040902054959b5093995091975095509350915061107290876111ea565b6001600160a01b03808b165f9081526002602052604080822093909355908a16815220546110a0908661122b565b6001600160a01b0389165f908152600260205260409020556110c181611289565b6110cb84836112cf565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161111091815260200190565b60405180910390a3505050505050505050565b6006545f908190666a94d74f43000061113c8282610fc4565b82101561115757505060065492666a94d74f43000092509050565b90939092509050565b5f81836111805760405162461bcd60e51b815260040161052f919061143e565b505f61118c8486611808565b95945050505050565b5f805f805f805f805f6111ad8a600c54600d546112f3565b9250925092505f6111bc610fa3565b90505f805f6111cd8e878787611345565b919e509c509a509598509396509194505050505091939550919395565b5f610dc383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611391565b5f806112378385611712565b905083811015610dc35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161052f565b5f611292610fa3565b90505f61129f83836113c0565b305f908152600260205260409020549091506112bb908261122b565b305f90815260026020526040902055505050565b6006546112dc90836111ea565b6006556007546112ec908261122b565b6007555050565b5f80808061130c606461130689896113c0565b90610fc4565b90505f61131e60646113068a896113c0565b90505f6113358261132f8b866111ea565b906111ea565b9992985090965090945050505050565b5f80808061135388866113c0565b90505f61136088876113c0565b90505f61136d88886113c0565b90505f61137e8261132f86866111ea565b939b939a50919850919650505050505050565b5f81848411156113b45760405162461bcd60e51b815260040161052f919061143e565b505f61118c84866116ff565b5f825f036113cf57505f610500565b5f6113da8385611827565b9050826113e78583611808565b14610dc35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161052f565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611487575f80fd5b50565b5f806040838503121561149b575f80fd5b82356114a681611473565b946020939093013593505050565b5f602082840312156114c4575f80fd5b5035919050565b5f805f606084860312156114dd575f80fd5b83356114e881611473565b925060208401356114f881611473565b929592945050506040919091013590565b80358015158114611518575f80fd5b919050565b5f6020828403121561152d575f80fd5b610dc382611509565b5f805f8060808587031215611549575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215611575575f80fd5b8135610dc381611473565b5f8083601f840112611590575f80fd5b50813567ffffffffffffffff8111156115a7575f80fd5b6020830191508360208260051b85010111156115c1575f80fd5b9250929050565b5f805f80604085870312156115db575f80fd5b843567ffffffffffffffff808211156115f2575f80fd5b6115fe88838901611580565b90965094506020870135915080821115611616575f80fd5b5061162387828801611580565b95989497509550505050565b5f805f60408486031215611641575f80fd5b833567ffffffffffffffff811115611657575f80fd5b61166386828701611580565b9094509250611676905060208501611509565b90509250925092565b5f8060408385031215611690575f80fd5b823561169b81611473565b915060208301356116ab81611473565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610500576105006116eb565b80820180821115610500576105006116eb565b634e487b7160e01b5f52603260045260245ffd5b60208082526023908201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696040820152627a652160e81b606082015260800190565b5f6020828403121561178c575f80fd5b8151610dc381611473565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117e75784516001600160a01b0316835293830193918301916001016117c2565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8261182257634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610500576105006116eb56fea2646970667358221220477e960d483587a9e90df1fd255486b3932954ecfd3cce62d334a7c3a208860364736f6c63430008190033

Deployed Bytecode

0x60806040526004361061017e575f3560e01c8063715018a6116100cd5780639214b86011610087578063c492f04611610062578063c492f0461461045a578063d4d17ac314610479578063dd62ed3e1461048d578063f2fde38b146104d1575f80fd5b80639214b860146103ee57806395d89b411461040d578063a9059cbb1461043b575f80fd5b8063715018a614610361578063751039fc146103755780637d1db4a5146103895780638d1007e61461039e5780638da5cb5b146103bd5780638f9a55c0146103d9575f80fd5b806324887e801161013857806349bd5a5e1161011357806349bd5a5e146102e55780636d8aa8f8146103045780636fcba3771461032357806370a0823114610342575f80fd5b806324887e80146102965780632fd689e3146102b5578063313ce567146102ca575f80fd5b806306fdde0314610189578063095ea7b3146101cd5780631694505e146101fc57806318160ddd14610233578063203e727e1461025657806323b872dd14610277575f80fd5b3661018557005b5f80fd5b348015610194575f80fd5b5060408051808201909152600a81526921b7b4b72a32b739b7b960b11b60208201525b6040516101c4919061143e565b60405180910390f35b3480156101d8575f80fd5b506101ec6101e736600461148a565b6104f0565b60405190151581526020016101c4565b348015610207575f80fd5b5060125461021b906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561023e575f80fd5b50666a94d74f4300005b6040519081526020016101c4565b348015610261575f80fd5b506102756102703660046114b4565b610506565b005b348015610282575f80fd5b506101ec6102913660046114cb565b61053d565b3480156102a1575f80fd5b506102756102b03660046114b4565b61058d565b3480156102c0575f80fd5b5061024860165481565b3480156102d5575f80fd5b50604051600981526020016101c4565b3480156102f0575f80fd5b5060135461021b906001600160a01b031681565b34801561030f575f80fd5b5061027561031e36600461151d565b6105bb565b34801561032e575f80fd5b5061027561033d366004611536565b610602565b34801561034d575f80fd5b5061024861035c366004611565565b610671565b34801561036c575f80fd5b50610275610692565b348015610380575f80fd5b50610275610703565b348015610394575f80fd5b5061024860145481565b3480156103a9575f80fd5b506102756103b83660046115c8565b610739565b3480156103c8575f80fd5b505f546001600160a01b031661021b565b3480156103e4575f80fd5b5061024860155481565b3480156103f9575f80fd5b506102756104083660046114b4565b610803565b348015610418575f80fd5b506040805180820190915260068152652a22a729a7a960d11b60208201526101b7565b348015610446575f80fd5b506101ec61045536600461148a565b610831565b348015610465575f80fd5b5061027561047436600461162f565b61083d565b348015610484575f80fd5b506102756108ca565b348015610498575f80fd5b506102486104a736600461167f565b6001600160a01b039182165f90815260046020908152604080832093909416825291909152205490565b3480156104dc575f80fd5b506102756104eb366004611565565b610908565b5f6104fc3384846109ef565b5060015b92915050565b5f546001600160a01b031633146105385760405162461bcd60e51b815260040161052f906116b6565b60405180910390fd5b601455565b5f610549848484610a4f565b6001600160a01b0384165f9081526004602090815260408083203380855292529091205461058391869161057e9086906116ff565b6109ef565b5060019392505050565b5f546001600160a01b031633146105b65760405162461bcd60e51b815260040161052f906116b6565b601555565b5f546001600160a01b031633146105e45760405162461bcd60e51b815260040161052f906116b6565b60138054911515600160b01b0260ff60b01b19909216919091179055565b5f546001600160a01b0316331461062b5760405162461bcd60e51b815260040161052f906116b6565b6008849055600a8390556009829055600b819055601e61064b8386611712565b111580156106635750601e6106608285611712565b11155b61066b575f80fd5b50505050565b6001600160a01b0381165f9081526002602052604081205461050090610d48565b5f546001600160a01b031633146106bb5760405162461bcd60e51b815260040161052f906116b6565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b0316331461072c5760405162461bcd60e51b815260040161052f906116b6565b666a94d74f430000601455565b5f546001600160a01b031633146107625760405162461bcd60e51b815260040161052f906116b6565b8281146107a15760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b604482015260640161052f565b5f5b838110156107fc576107f4338686848181106107c1576107c1611725565b90506020020160208101906107d69190611565565b8585858181106107e8576107e8611725565b90506020020135610a4f565b6001016107a3565b5050505050565b5f546001600160a01b0316331461082c5760405162461bcd60e51b815260040161052f906116b6565b601655565b5f6104fc338484610a4f565b5f546001600160a01b031633146108665760405162461bcd60e51b815260040161052f906116b6565b5f5b8281101561066b578160055f86868581811061088657610886611725565b905060200201602081019061089b9190611565565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610868565b5f546001600160a01b031633146108f35760405162461bcd60e51b815260040161052f906116b6565b6013805460ff60a01b1916600160a01b179055565b5f546001600160a01b031633146109315760405162461bcd60e51b815260040161052f906116b6565b6001600160a01b0381166109965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052f565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038381165f8181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f9081526005602052604090205460ff16158015610a8f57506001600160a01b0382165f9081526005602052604090205460ff16155b15610c7857601354600160a01b900460ff16610b135760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400606482015260840161052f565b601454811115610b655760405162461bcd60e51b815260206004820152601c60248201527f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000604482015260640161052f565b6013546001600160a01b03838116911614610bae5760155481610b8784610671565b610b919190611712565b10610bae5760405162461bcd60e51b815260040161052f90611739565b6013546001600160a01b0390811690831603610bec57666a94d74f43000060155410610bec5760405162461bcd60e51b815260040161052f90611739565b5f610bf630610671565b601654601454919250821015908210610c0f5760145491505b808015610c265750601354600160a81b900460ff16155b8015610c4057506013546001600160a01b03868116911614155b8015610c555750601354600160b01b900460ff165b15610c7557610c6382610dca565b478015610c7357610c7347610f3a565b505b50505b6001600160a01b0383165f9081526005602052604090205460019060ff1680610cb857506001600160a01b0383165f9081526005602052604090205460ff165b80610cea57506013546001600160a01b03858116911614801590610cea57506013546001600160a01b03848116911614155b15610cf657505f610d3c565b6013546001600160a01b0390811690851603610d1957600854600c55600954600d555b6013546001600160a01b0390811690841603610d3c57600a54600c55600b54600d555b61066b84848484610f75565b5f600654821115610dae5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840161052f565b5f610db7610fa3565b9050610dc38382610fc4565b9392505050565b6013805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110610e1057610e10611725565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015610e67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8b919061177c565b81600181518110610e9e57610e9e611725565b6001600160a01b039283166020918202929092010152601254610ec491309116846109ef565b60125460405163791ac94760e01b81526001600160a01b039091169063791ac94790610efc9085905f90869030904290600401611797565b5f604051808303815f87803b158015610f13575f80fd5b505af1158015610f25573d5f803e3d5ffd5b50506013805460ff60a81b1916905550505050565b6011546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610f71573d5f803e3d5ffd5b5050565b80610f8257610f82611005565b610f8d848484611032565b8061066b5761066b600e54600c55600f54600d55565b5f805f610fae611123565b9092509050610fbd8282610fc4565b9250505090565b5f610dc383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611160565b600c541580156110155750600d54155b1561101c57565b600c8054600e55600d8054600f555f9182905555565b5f805f805f8061104187611195565b6001600160a01b038f165f90815260026020526040902054959b5093995091975095509350915061107290876111ea565b6001600160a01b03808b165f9081526002602052604080822093909355908a16815220546110a0908661122b565b6001600160a01b0389165f908152600260205260409020556110c181611289565b6110cb84836112cf565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161111091815260200190565b60405180910390a3505050505050505050565b6006545f908190666a94d74f43000061113c8282610fc4565b82101561115757505060065492666a94d74f43000092509050565b90939092509050565b5f81836111805760405162461bcd60e51b815260040161052f919061143e565b505f61118c8486611808565b95945050505050565b5f805f805f805f805f6111ad8a600c54600d546112f3565b9250925092505f6111bc610fa3565b90505f805f6111cd8e878787611345565b919e509c509a509598509396509194505050505091939550919395565b5f610dc383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611391565b5f806112378385611712565b905083811015610dc35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161052f565b5f611292610fa3565b90505f61129f83836113c0565b305f908152600260205260409020549091506112bb908261122b565b305f90815260026020526040902055505050565b6006546112dc90836111ea565b6006556007546112ec908261122b565b6007555050565b5f80808061130c606461130689896113c0565b90610fc4565b90505f61131e60646113068a896113c0565b90505f6113358261132f8b866111ea565b906111ea565b9992985090965090945050505050565b5f80808061135388866113c0565b90505f61136088876113c0565b90505f61136d88886113c0565b90505f61137e8261132f86866111ea565b939b939a50919850919650505050505050565b5f81848411156113b45760405162461bcd60e51b815260040161052f919061143e565b505f61118c84866116ff565b5f825f036113cf57505f610500565b5f6113da8385611827565b9050826113e78583611808565b14610dc35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161052f565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611487575f80fd5b50565b5f806040838503121561149b575f80fd5b82356114a681611473565b946020939093013593505050565b5f602082840312156114c4575f80fd5b5035919050565b5f805f606084860312156114dd575f80fd5b83356114e881611473565b925060208401356114f881611473565b929592945050506040919091013590565b80358015158114611518575f80fd5b919050565b5f6020828403121561152d575f80fd5b610dc382611509565b5f805f8060808587031215611549575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215611575575f80fd5b8135610dc381611473565b5f8083601f840112611590575f80fd5b50813567ffffffffffffffff8111156115a7575f80fd5b6020830191508360208260051b85010111156115c1575f80fd5b9250929050565b5f805f80604085870312156115db575f80fd5b843567ffffffffffffffff808211156115f2575f80fd5b6115fe88838901611580565b90965094506020870135915080821115611616575f80fd5b5061162387828801611580565b95989497509550505050565b5f805f60408486031215611641575f80fd5b833567ffffffffffffffff811115611657575f80fd5b61166386828701611580565b9094509250611676905060208501611509565b90509250925092565b5f8060408385031215611690575f80fd5b823561169b81611473565b915060208301356116ab81611473565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610500576105006116eb565b80820180821115610500576105006116eb565b634e487b7160e01b5f52603260045260245ffd5b60208082526023908201527f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073696040820152627a652160e81b606082015260800190565b5f6020828403121561178c575f80fd5b8151610dc381611473565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156117e75784516001600160a01b0316835293830193918301916001016117c2565b50506001600160a01b03969096166060850152505050608001529392505050565b5f8261182257634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610500576105006116eb56fea2646970667358221220477e960d483587a9e90df1fd255486b3932954ecfd3cce62d334a7c3a208860364736f6c63430008190033

Deployed Bytecode Sourcemap

4423:12478:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6762:83;;;;;;;;;;-1:-1:-1;6832:5:0;;;;;;;;;;;;-1:-1:-1;;;6832:5:0;;;;6762:83;;;;;;;:::i;:::-;;;;;;;;7687:193;;;;;;;;;;-1:-1:-1;7687:193:0;;;;;:::i;:::-;;:::i;:::-;;;1058:14:1;;1051:22;1033:41;;1021:2;1006:18;7687:193:0;893:187:1;5685:41:0;;;;;;;;;;-1:-1:-1;5685:41:0;;;;-1:-1:-1;;;;;5685:41:0;;;;;;-1:-1:-1;;;;;1275:32:1;;;1257:51;;1245:2;1230:18;5685:41:0;1085:229:1;7039:95:0;;;;;;;;;;-1:-1:-1;4977:18:0;7039:95;;;1465:25:1;;;1453:2;1438:18;7039:95:0;1319:177:1;16004:111:0;;;;;;;;;;-1:-1:-1;16004:111:0;;;;;:::i;:::-;;:::i;:::-;;7888:384;;;;;;;;;;-1:-1:-1;7888:384:0;;;;;:::i;:::-;;:::i;16123:118::-;;;;;;;;;;-1:-1:-1;16123:118:0;;;;;:::i;:::-;;:::i;5985:51::-;;;;;;;;;;;;;;;;6948:83;;;;;;;;;;-1:-1:-1;6948:83:0;;4651:1;2289:36:1;;2277:2;2262:18;6948:83:0;2147:184:1;5733:28:0;;;;;;;;;;-1:-1:-1;5733:28:0;;;;-1:-1:-1;;;;;5733:28:0;;;15864:101;;;;;;;;;;-1:-1:-1;15864:101:0;;;;;:::i;:::-;;:::i;15234:384::-;;;;;;;;;;-1:-1:-1;15234:384:0;;;;;:::i;:::-;;:::i;7142:138::-;;;;;;;;;;-1:-1:-1;7142:138:0;;;;;:::i;:::-;;:::i;1910:148::-;;;;;;;;;;;;;:::i;16249:84::-;;;;;;;;;;;;;:::i;5883:43::-;;;;;;;;;;;;;;;;16583:315;;;;;;;;;;-1:-1:-1;16583:315:0;;;;;:::i;:::-;;:::i;1696:79::-;;;;;;;;;;-1:-1:-1;1734:7:0;1761:6;-1:-1:-1;;;;;1761:6:0;1696:79;;5933:45;;;;;;;;;;;;;;;;15670:142;;;;;;;;;;-1:-1:-1;15670:142:0;;;;;:::i;:::-;;:::i;6853:87::-;;;;;;;;;;-1:-1:-1;6925:7:0;;;;;;;;;;;;-1:-1:-1;;;6925:7:0;;;;6853:87;;7288:199;;;;;;;;;;-1:-1:-1;7288:199:0;;;;;:::i;:::-;;:::i;16341:234::-;;;;;;;;;;-1:-1:-1;16341:234:0;;;;;:::i;:::-;;:::i;11752:76::-;;;;;;;;;;;;;:::i;7495:184::-;;;;;;;;;;-1:-1:-1;7495:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;7644:18:0;;;7612:7;7644:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7495:184;2066:244;;;;;;;;;;-1:-1:-1;2066:244:0;;;;;:::i;:::-;;:::i;7687:193::-;7789:4;7811:39;535:10;7834:7;7843:6;7811:8;:39::i;:::-;-1:-1:-1;7868:4:0;7687:193;;;;;:::o;16004:111::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;;;;;;;;;16081:12:::1;:26:::0;16004:111::o;7888:384::-;8020:4;8037:36;8047:6;8055:9;8066:6;8037:9;:36::i;:::-;-1:-1:-1;;;;;8155:19:0;;;;;;:11;:19;;;;;;;;535:10;8155:33;;;;;;;;;8084:158;;8107:6;;8155:76;;8210:6;;8155:76;:::i;:::-;8084:8;:158::i;:::-;-1:-1:-1;8260:4:0;7888:384;;;;;:::o;16123:118::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;16203:14:::1;:30:::0;16123:118::o;15864:101::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;15931:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;15931:26:0::1;-1:-1:-1::0;;;;15931:26:0;;::::1;::::0;;;::::1;::::0;;15864:101::o;15234:384::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;15369:14:::1;:30:::0;;;15410:15:::1;:32:::0;;;15453:12:::1;:26:::0;;;15490:13:::1;:28:::0;;;15568:2:::1;15537:27;15468:11:::0;15386:13;15537:27:::1;:::i;:::-;:33;;:72;;;;-1:-1:-1::0;15607:2:0::1;15574:29;15591:12:::0;15574:14;:29:::1;:::i;:::-;:35;;15537:72;15529:81;;;::::0;::::1;;15234:384:::0;;;;:::o;7142:138::-;-1:-1:-1;;;;;7255:16:0;;7208:7;7255:16;;;:7;:16;;;;;;7235:37;;:19;:37::i;1910:148::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;2017:1:::1;2001:6:::0;;1980:40:::1;::::0;-1:-1:-1;;;;;2001:6:0;;::::1;::::0;1980:40:::1;::::0;2017:1;;1980:40:::1;2048:1;2031:19:::0;;-1:-1:-1;;;;;;2031:19:0::1;::::0;;1910:148::o;16249:84::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;4977:18:::1;16303:12;:22:::0;16249:84::o;16583:315::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;16705:34;;::::1;16697:60;;;::::0;-1:-1:-1;;;16697:60:0;;6547:2:1;16697:60:0::1;::::0;::::1;6529:21:1::0;6586:2;6566:18;;;6559:30;-1:-1:-1;;;6605:18:1;;;6598:43;6658:18;;16697:60:0::1;6345:337:1::0;16697:60:0::1;16772:9;16768:123;16787:21:::0;;::::1;16768:123;;;16830:49;535:10:::0;16854::::1;;16865:1;16854:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16869:6;;16876:1;16869:9;;;;;;;:::i;:::-;;;;;;;16830;:49::i;:::-;16810:3;;16768:123;;;;16583:315:::0;;;;:::o;15670:142::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;15764:19:::1;:40:::0;15670:142::o;7288:199::-;7393:4;7415:42;535:10;7439:9;7450:6;7415:9;:42::i;16341:234::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;16458:9:::1;16454:114;16473:19:::0;;::::1;16454:114;;;16548:8;16514:18;:31;16533:8;;16542:1;16533:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16514:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;16514:31:0;:42;;-1:-1:-1;;16514:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;16494:3:0::1;16454:114;;11752:76:::0;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;11802:11:::1;:18:::0;;-1:-1:-1;;;;11802:18:0::1;-1:-1:-1::0;;;11802:18:0::1;::::0;;11752:76::o;2066:244::-;1823:6;;-1:-1:-1;;;;;1823:6:0;535:10;1823:22;1815:67;;;;-1:-1:-1;;;1815:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2155:22:0;::::1;2147:73;;;::::0;-1:-1:-1;;;2147:73:0;;7021:2:1;2147:73:0::1;::::0;::::1;7003:21:1::0;7060:2;7040:18;;;7033:30;7099:34;7079:18;;;7072:62;-1:-1:-1;;;7150:18:1;;;7143:36;7196:19;;2147:73:0::1;6819:402:1::0;2147:73:0::1;2257:6;::::0;;2236:38:::1;::::0;-1:-1:-1;;;;;2236:38:0;;::::1;::::0;2257:6;::::1;::::0;2236:38:::1;::::0;::::1;2285:6;:17:::0;;-1:-1:-1;;;;;;2285:17:0::1;-1:-1:-1::0;;;;;2285:17:0;;;::::1;::::0;;;::::1;::::0;;2066:244::o;8963:211::-;-1:-1:-1;;;;;9082:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9134:32;;1465:25:1;;;9134:32:0;;1438:18:1;9134:32:0;;;;;;;8963:211;;;:::o;9182:1964::-;-1:-1:-1;;;;;9303:24:0;;;;;;:18;:24;;;;;;;;9302:25;:52;;;;-1:-1:-1;;;;;;9332:22:0;;;;;;:18;:22;;;;;;;;9331:23;9302:52;9298:1192;;;9381:11;;-1:-1:-1;;;9381:11:0;;;;9373:87;;;;-1:-1:-1;;;9373:87:0;;7428:2:1;9373:87:0;;;7410:21:1;7467:2;7447:18;;;7440:30;7506:34;7486:18;;;7479:62;7577:33;7557:18;;;7550:61;7628:19;;9373:87:0;7226:427:1;9373:87:0;9493:12;;9483:6;:22;;9475:63;;;;-1:-1:-1;;;9475:63:0;;7860:2:1;9475:63:0;;;7842:21:1;7899:2;7879:18;;;7872:30;7938;7918:18;;;7911:58;7986:18;;9475:63:0;7658:352:1;9475:63:0;9564:13;;-1:-1:-1;;;;;9558:19:0;;;9564:13;;9558:19;9555:146;;9631:14;;9622:6;9606:13;9616:2;9606:9;:13::i;:::-;:22;;;;:::i;:::-;:39;9598:87;;;;-1:-1:-1;;;9598:87:0;;;;;;;:::i;:::-;9726:13;;-1:-1:-1;;;;;9726:13:0;;;9720:19;;;;9717:131;;4977:18;9768:14;;:24;9760:72;;;;-1:-1:-1;;;9760:72:0;;;;;;;:::i;:::-;9864:28;9895:24;9913:4;9895:9;:24::i;:::-;9973:19;;10036:12;;9864:55;;-1:-1:-1;9949:43:0;;;;10012:36;;10009:124;;10105:12;;10082:35;;10009:124;10153:7;:18;;;;-1:-1:-1;10165:6:0;;-1:-1:-1;;;10165:6:0;;;;10164:7;10153:18;:43;;;;-1:-1:-1;10183:13:0;;-1:-1:-1;;;;;10175:21:0;;;10183:13;;10175:21;;10153:43;:58;;;;-1:-1:-1;10200:11:0;;-1:-1:-1;;;10200:11:0;;;;10153:58;10149:330;;;10232:38;10249:20;10232:16;:38::i;:::-;10318:21;10362:22;;10358:106;;10409:35;10422:21;10409:12;:35::i;:::-;10213:266;10149:330;9356:1134;;9298:1192;-1:-1:-1;;;;;10566:24:0;;10502:12;10566:24;;;:18;:24;;;;;;10517:4;;10566:24;;;:50;;-1:-1:-1;;;;;;10594:22:0;;;;;;:18;:22;;;;;;;;10566:50;10565:102;;;-1:-1:-1;10630:13:0;;-1:-1:-1;;;;;10622:21:0;;;10630:13;;10622:21;;;;:44;;-1:-1:-1;10653:13:0;;-1:-1:-1;;;;;10647:19:0;;;10653:13;;10647:19;;10622:44;10561:524;;;-1:-1:-1;10694:5:0;10561:524;;;10777:13;;-1:-1:-1;;;;;10777:13:0;;;10769:21;;;;10766:128;;10823:14;;10811:9;:26;10866:12;;10856:7;:22;10766:128;10953:13;;-1:-1:-1;;;;;10953:13:0;;;10947:19;;;;10943:129;;10999:15;;10987:9;:27;11043:13;;11033:7;:23;10943:129;11097:41;11112:4;11118:2;11122:6;11130:7;11097:14;:41::i;8280:323::-;8375:7;8433;;8422;:18;;8400:110;;;;-1:-1:-1;;;8400:110:0;;8621:2:1;8400:110:0;;;8603:21:1;8660:2;8640:18;;;8633:30;8699:34;8679:18;;;8672:62;-1:-1:-1;;;8750:18:1;;;8743:40;8800:19;;8400:110:0;8419:406:1;8400:110:0;8521:19;8543:10;:8;:10::i;:::-;8521:32;-1:-1:-1;8571:24:0;:7;8521:32;8571:11;:24::i;:::-;8564:31;8280:323;-1:-1:-1;;;8280:323:0:o;11154:483::-;6077:6;:13;;-1:-1:-1;;;;6077:13:0;-1:-1:-1;;;6077:13:0;;;11256:16:::1;::::0;;11270:1:::1;11256:16:::0;;;;;::::1;::::0;;-1:-1:-1;;11256:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;11256:16:0::1;11232:40;;11301:4;11283;11288:1;11283:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11283:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;11327:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;11327:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;11283:7;;11327:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11317:4;11322:1;11317:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11317:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;11392:15:::1;::::0;11360:62:::1;::::0;11377:4:::1;::::0;11392:15:::1;11410:11:::0;11360:8:::1;:62::i;:::-;11433:15;::::0;:196:::1;::::0;-1:-1:-1;;;11433:196:0;;-1:-1:-1;;;;;11433:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;11514:11;;11433:15:::1;::::0;11556:4;;11583::::1;::::0;11603:15:::1;::::0;11433:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6113:6:0;:14;;-1:-1:-1;;;;6113:14:0;;;-1:-1:-1;;;;11154:483:0:o;11645:99::-;11702:17;;:34;;-1:-1:-1;;;;;11702:17:0;;;;:34;;;;;11729:6;;11702:17;:34;:17;:34;11729:6;11702:17;:34;;;;;;;;;;;;;;;;;;;;;11645:99;:::o;11836:282::-;11992:7;11987:28;;12001:14;:12;:14::i;:::-;12026:44;12044:6;12052:9;12063:6;12026:17;:44::i;:::-;12086:7;12081:29;;12095:15;8894:17;;8882:9;:29;8932:15;;8922:7;:25;8838:117;14797:164;14839:7;14860:15;14877;14896:19;:17;:19::i;:::-;14859:56;;-1:-1:-1;14859:56:0;-1:-1:-1;14933:20:0;14859:56;;14933:11;:20::i;:::-;14926:27;;;;14797:164;:::o;3160:132::-;3218:7;3245:39;3249:1;3252;3245:39;;;;;;;;;;;;;;;;;:3;:39::i;8611:219::-;8658:9;;:14;:30;;;;-1:-1:-1;8676:7:0;;:12;8658:30;8654:43;;;8611:219::o;8654:43::-;8729:9;;;8709:17;:29;8767:7;;;8749:15;:25;-1:-1:-1;8787:13:0;;;;8811:11;8611:219::o;12126:610::-;12273:15;12303:23;12341:12;12368:23;12406:12;12433:13;12460:19;12471:7;12460:10;:19::i;:::-;-1:-1:-1;;;;;12508:15:0;;;;;;:7;:15;;;;;;12258:221;;-1:-1:-1;12258:221:0;;-1:-1:-1;12258:221:0;;-1:-1:-1;12258:221:0;-1:-1:-1;12258:221:0;-1:-1:-1;12258:221:0;-1:-1:-1;12508:28:0;;12258:221;12508:19;:28::i;:::-;-1:-1:-1;;;;;12490:15:0;;;;;;;:7;:15;;;;;;:46;;;;12568:18;;;;;;;:39;;12591:15;12568:22;:39::i;:::-;-1:-1:-1;;;;;12547:18:0;;;;;;:7;:18;;;;;:60;12618:16;12628:5;12618:9;:16::i;:::-;12645:23;12657:4;12663;12645:11;:23::i;:::-;12701:9;-1:-1:-1;;;;;12684:44:0;12693:6;-1:-1:-1;;;;;12684:44:0;;12712:15;12684:44;;;;1465:25:1;;1453:2;1438:18;;1319:177;12684:44:0;;;;;;;;12247:489;;;;;;12126:610;;;:::o;14969:257::-;15067:7;;15020;;;;4977:18;15135:20;15067:7;4977:18;15135:11;:20::i;:::-;15125:7;:30;15121:61;;;-1:-1:-1;;15165:7:0;;;4977:18;;-1:-1:-1;14969:257:0;-1:-1:-1;14969:257:0:o;15121:61::-;15201:7;;15210;;-1:-1:-1;14969:257:0;-1:-1:-1;14969:257:0:o;3300:223::-;3420:7;3455:12;3448:5;3440:28;;;;-1:-1:-1;;;3440:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3479:9:0;3491:5;3495:1;3491;:5;:::i;:::-;3479:17;3300:223;-1:-1:-1;;;;;3300:223:0:o;13155:615::-;13255:7;13277;13299;13321;13343;13365;13401:23;13426:12;13440:13;13470:40;13482:7;13491:9;;13502:7;;13470:11;:40::i;:::-;13400:110;;;;;;13521:19;13543:10;:8;:10::i;:::-;13521:32;;13565:15;13582:23;13607:12;13636:46;13648:7;13657:4;13663:5;13670:11;13636;:46::i;:::-;13564:118;;-1:-1:-1;13564:118:0;-1:-1:-1;13564:118:0;-1:-1:-1;13733:15:0;;-1:-1:-1;13750:4:0;;-1:-1:-1;13756:5:0;;-1:-1:-1;;;;;13155:615:0;;;;;;;:::o;2530:136::-;2588:7;2615:43;2619:1;2622;2615:43;;;;;;;;;;;;;;;;;:3;:43::i;2343:179::-;2401:7;;2433:5;2437:1;2433;:5;:::i;:::-;2421:17;;2462:1;2457;:6;;2449:46;;;;-1:-1:-1;;;2449:46:0;;10627:2:1;2449:46:0;;;10609:21:1;10666:2;10646:18;;;10639:30;10705:29;10685:18;;;10678:57;10752:18;;2449:46:0;10425:351:1;12744:211:0;12797:19;12819:10;:8;:10::i;:::-;12797:32;-1:-1:-1;12840:13:0;12856:22;:5;12797:32;12856:9;:22::i;:::-;12930:4;12914:22;;;;:7;:22;;;;;;12840:38;;-1:-1:-1;12914:33:0;;12840:38;12914:26;:33::i;:::-;12905:4;12889:22;;;;:7;:22;;;;;:58;-1:-1:-1;;;12744:211:0:o;12963:147::-;13041:7;;:17;;13053:4;13041:11;:17::i;:::-;13031:7;:27;13082:10;;:20;;13097:4;13082:14;:20::i;:::-;13069:10;:33;-1:-1:-1;;12963:147:0:o;13778:469::-;13947:7;;;;14041:30;14067:3;14041:21;:7;14053:8;14041:11;:21::i;:::-;:25;;:30::i;:::-;14026:45;-1:-1:-1;14082:13:0;14098:28;14122:3;14098:19;:7;14110:6;14098:11;:19::i;:28::-;14082:44;-1:-1:-1;14137:23:0;14163:28;14082:44;14163:17;:7;14175:4;14163:11;:17::i;:::-;:21;;:28::i;:::-;14137:54;14227:4;;-1:-1:-1;14233:5:0;;-1:-1:-1;13778:469:0;;-1:-1:-1;;;;;13778:469:0:o;14255:534::-;14449:7;;;;14546:24;:7;14558:11;14546;:24::i;:::-;14528:42;-1:-1:-1;14581:12:0;14596:21;:4;14605:11;14596:8;:21::i;:::-;14581:36;-1:-1:-1;14628:13:0;14644:22;:5;14654:11;14644:9;:22::i;:::-;14628:38;-1:-1:-1;14677:23:0;14703:28;14628:38;14703:17;:7;14715:4;14703:11;:17::i;:28::-;14750:7;;;;-1:-1:-1;14776:4:0;;-1:-1:-1;14255:534:0;;-1:-1:-1;;;;;;;14255:534:0:o;2674:224::-;2794:7;2830:12;2822:6;;;;2814:29;;;;-1:-1:-1;;;2814:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2854:9:0;2866:5;2870:1;2866;:5;:::i;2906:246::-;2964:7;2988:1;2993;2988:6;2984:47;;-1:-1:-1;3018:1:0;3011:8;;2984:47;3041:9;3053:5;3057:1;3053;:5;:::i;:::-;3041:17;-1:-1:-1;3086:1:0;3077:5;3081:1;3041:17;3077:5;:::i;:::-;:10;3069:56;;;;-1:-1:-1;;;3069:56:0;;11156:2:1;3069:56:0;;;11138:21:1;11195:2;11175:18;;;11168:30;11234:34;11214:18;;;11207:62;-1:-1:-1;;;11285:18:1;;;11278:31;11326:19;;3069:56:0;10954:397:1;14:418;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;492:70;437:131;:::o;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;1501:180::-;1560:6;1613:2;1601:9;1592:7;1588:23;1584:32;1581:52;;;1629:1;1626;1619:12;1581:52;-1:-1:-1;1652:23:1;;1501:180;-1:-1:-1;1501:180:1:o;1686:456::-;1763:6;1771;1779;1832:2;1820:9;1811:7;1807:23;1803:32;1800:52;;;1848:1;1845;1838:12;1800:52;1887:9;1874:23;1906:31;1931:5;1906:31;:::i;:::-;1956:5;-1:-1:-1;2013:2:1;1998:18;;1985:32;2026:33;1985:32;2026:33;:::i;:::-;1686:456;;2078:7;;-1:-1:-1;;;2132:2:1;2117:18;;;;2104:32;;1686:456::o;2544:160::-;2609:20;;2665:13;;2658:21;2648:32;;2638:60;;2694:1;2691;2684:12;2638:60;2544:160;;;:::o;2709:180::-;2765:6;2818:2;2806:9;2797:7;2793:23;2789:32;2786:52;;;2834:1;2831;2824:12;2786:52;2857:26;2873:9;2857:26;:::i;2894:385::-;2980:6;2988;2996;3004;3057:3;3045:9;3036:7;3032:23;3028:33;3025:53;;;3074:1;3071;3064:12;3025:53;-1:-1:-1;;3097:23:1;;;3167:2;3152:18;;3139:32;;-1:-1:-1;3218:2:1;3203:18;;3190:32;;3269:2;3254:18;3241:32;;-1:-1:-1;2894:385:1;-1:-1:-1;2894:385:1:o;3284:247::-;3343:6;3396:2;3384:9;3375:7;3371:23;3367:32;3364:52;;;3412:1;3409;3402:12;3364:52;3451:9;3438:23;3470:31;3495:5;3470:31;:::i;3536:367::-;3599:8;3609:6;3663:3;3656:4;3648:6;3644:17;3640:27;3630:55;;3681:1;3678;3671:12;3630:55;-1:-1:-1;3704:20:1;;3747:18;3736:30;;3733:50;;;3779:1;3776;3769:12;3733:50;3816:4;3808:6;3804:17;3792:29;;3876:3;3869:4;3859:6;3856:1;3852:14;3844:6;3840:27;3836:38;3833:47;3830:67;;;3893:1;3890;3883:12;3830:67;3536:367;;;;;:::o;3908:773::-;4030:6;4038;4046;4054;4107:2;4095:9;4086:7;4082:23;4078:32;4075:52;;;4123:1;4120;4113:12;4075:52;4163:9;4150:23;4192:18;4233:2;4225:6;4222:14;4219:34;;;4249:1;4246;4239:12;4219:34;4288:70;4350:7;4341:6;4330:9;4326:22;4288:70;:::i;:::-;4377:8;;-1:-1:-1;4262:96:1;-1:-1:-1;4465:2:1;4450:18;;4437:32;;-1:-1:-1;4481:16:1;;;4478:36;;;4510:1;4507;4500:12;4478:36;;4549:72;4613:7;4602:8;4591:9;4587:24;4549:72;:::i;:::-;3908:773;;;;-1:-1:-1;4640:8:1;-1:-1:-1;;;;3908:773:1:o;4686:505::-;4778:6;4786;4794;4847:2;4835:9;4826:7;4822:23;4818:32;4815:52;;;4863:1;4860;4853:12;4815:52;4903:9;4890:23;4936:18;4928:6;4925:30;4922:50;;;4968:1;4965;4958:12;4922:50;5007:70;5069:7;5060:6;5049:9;5045:22;5007:70;:::i;:::-;5096:8;;-1:-1:-1;4981:96:1;-1:-1:-1;5150:35:1;;-1:-1:-1;5181:2:1;5166:18;;5150:35;:::i;:::-;5140:45;;4686:505;;;;;:::o;5196:388::-;5264:6;5272;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5380:9;5367:23;5399:31;5424:5;5399:31;:::i;:::-;5449:5;-1:-1:-1;5506:2:1;5491:18;;5478:32;5519:33;5478:32;5519:33;:::i;:::-;5571:7;5561:17;;;5196:388;;;;;:::o;5589:356::-;5791:2;5773:21;;;5810:18;;;5803:30;5869:34;5864:2;5849:18;;5842:62;5936:2;5921:18;;5589:356::o;5950:127::-;6011:10;6006:3;6002:20;5999:1;5992:31;6042:4;6039:1;6032:15;6066:4;6063:1;6056:15;6082:128;6149:9;;;6170:11;;;6167:37;;;6184:18;;:::i;6215:125::-;6280:9;;;6301:10;;;6298:36;;;6314:18;;:::i;6687:127::-;6748:10;6743:3;6739:20;6736:1;6729:31;6779:4;6776:1;6769:15;6803:4;6800:1;6793:15;8015:399;8217:2;8199:21;;;8256:2;8236:18;;;8229:30;8295:34;8290:2;8275:18;;8268:62;-1:-1:-1;;;8361:2:1;8346:18;;8339:33;8404:3;8389:19;;8015:399::o;8962:251::-;9032:6;9085:2;9073:9;9064:7;9060:23;9056:32;9053:52;;;9101:1;9098;9091:12;9053:52;9133:9;9127:16;9152:31;9177:5;9152:31;:::i;9218:980::-;9480:4;9528:3;9517:9;9513:19;9559:6;9548:9;9541:25;9585:2;9623:6;9618:2;9607:9;9603:18;9596:34;9666:3;9661:2;9650:9;9646:18;9639:31;9690:6;9725;9719:13;9756:6;9748;9741:22;9794:3;9783:9;9779:19;9772:26;;9833:2;9825:6;9821:15;9807:29;;9854:1;9864:195;9878:6;9875:1;9872:13;9864:195;;;9943:13;;-1:-1:-1;;;;;9939:39:1;9927:52;;10034:15;;;;9999:12;;;;9975:1;9893:9;9864:195;;;-1:-1:-1;;;;;;;10115:32:1;;;;10110:2;10095:18;;10088:60;-1:-1:-1;;;10179:3:1;10164:19;10157:35;10076:3;9218:980;-1:-1:-1;;;9218:980:1:o;10203:217::-;10243:1;10269;10259:132;;10313:10;10308:3;10304:20;10301:1;10294:31;10348:4;10345:1;10338:15;10376:4;10373:1;10366:15;10259:132;-1:-1:-1;10405:9:1;;10203:217::o;10781:168::-;10854:9;;;10885;;10902:15;;;10896:22;;10882:37;10872:71;;10923:18;;:::i

Swarm Source

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