ETH Price: $3,386.66 (-1.75%)
Gas: 1 Gwei

Token

Santa Coin (SANTA)
 

Overview

Max Total Supply

10,000,000,000 SANTA

Holders

137

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.1 SANTA

Value
$0.00
0x04bd8473f2930960f9fbbff57a78c65b6484c583
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:
SANTA

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
    // SPDX-License-Identifier: MIT

    WEB: https://santacoin.fun/
    X: https://twitter.com/Santa_Ethereum
    TG: https://t.me/SantaCoin_ERC
*/
pragma solidity 0.8.21;

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

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

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

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

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

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

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

contract SANTA is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private bots;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    bool public transferDelayEnabled = true;
    address payable private _taxWallet;

    // Present parameters
    uint256 private constant _presentPercentOfTax = 40;
    uint256 private constant _reservoirWalletPercentOfTax = 60;
    uint256 private constant _minETHSpend = 0.048 ether; 
    uint256 private constant _buysPerPresent = 10; 
    uint256 private _taxAccumulator = 0;
    address[_buysPerPresent] private _eligiblePresentReceivers;
    uint256 public _indexTracker = 0; 
    bool private presentsOpen = false;
    event PresentSent(address indexed recipient, uint256 amount);

    uint256 private _buyTax = 20;
    uint256 private _sellTax = 20;
    uint256 private _preventSwapBefore = 20;
    uint256 private _buyCount = 0;
    uint256 private _preclogAmount = 15;

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 10000000000 * 10**_decimals;
    string private constant _name = unicode"Santa Coin";
    string private constant _symbol = unicode"SANTA";
    uint256 public _maxTxAmount = _tTotal.mul(200).div(10000);
    uint256 public _maxWalletSize = _tTotal.mul(200).div(10000);
    uint256 public _taxSwapThreshold = _tTotal.mul(100).div(10000);
    uint256 public _maxTaxSwap = _tTotal.mul(100).div(10000);

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    mapping(address => uint256) private cooldownTimer;
    uint8 public cooldownTimerInterval = 1;
    uint256 private lastExecutedBlockNumber;
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() payable {
        _taxWallet = payable(_msgSender());
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

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

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

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

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

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

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

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

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);
            if (transferDelayEnabled) {
                if (
                    to != address(uniswapV2Router) &&
                    to != address(uniswapV2Pair)
                ) {
                    require(
                        _holderLastTransferTimestamp[tx.origin] < block.number,
                        "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                    );
                    _holderLastTransferTimestamp[tx.origin] = block.number;
                }
            }

            //Buy
            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(
                    balanceOf(to).add(amount) <= _maxWalletSize,
                    "Exceeds the maxWalletSize."
                );
                _buyCount++;

                taxAmount = amount.mul(_buyTax).div(100);
                _taxAccumulator = _taxAccumulator.add(taxAmount);

                // Token amount must be >= _minETHSpend worth of tokens to be eligible
                if (
                    presentsOpen &&
                    amount >= estimateSwapAmount(_minETHSpend, false)
                ) {
                    _eligiblePresentReceivers[_indexTracker] = to;
                    _indexTracker = _indexTracker.add(1).mod(_buysPerPresent);

                    if (_indexTracker == 0) {
                        // Present time!
                        address presentWinner = getRandomWinner();
                        uint256 presentTokens = _taxAccumulator
                            .mul(_presentPercentOfTax)
                            .div(100);
                        uint256 presentETH = estimateSwapAmount(
                            presentTokens,
                            true
                        );
                        if (presentETH <= address(this).balance) {
                            payable(presentWinner).transfer(presentETH);
                            emit PresentSent(presentWinner, presentETH);
                        }
                        _taxAccumulator = 0;
                    }
                }
            }
            //Sell
            else if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(_sellTax).div(100);
                _taxAccumulator = _taxAccumulator.add(taxAmount);
            }
            //Add liquidity
            else if (to == uniswapV2Pair && from == address(this)) {
                taxAmount = amount.mul(_preclogAmount).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _taxSwapThreshold &&
                _buyCount > _preventSwapBefore
            ) {
                require(
                    block.number > lastExecutedBlockNumber,
                    "Block number incorrect"
                );
                uint256 tokensToSwap = min(
                    amount,
                    min(contractTokenBalance, _maxTaxSwap)
                );
                swapTokensForEth(tokensToSwap);
                lastExecutedBlockNumber = block.number;
            }
        }

        if (taxAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(taxAmount);
            emit Transfer(from, address(this), taxAmount);
        }
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }

    function sendETHToWinner(address winnerAddress, uint256 ethAmount) private {
        payable(winnerAddress).transfer(ethAmount);
    }

    function openPresents() external onlyOwner {
        require(!presentsOpen, "Presents are already open");
        _taxAccumulator = 0;
        presentsOpen = true;
    }

    function getRandomWinner() internal view returns (address) {
        uint256 randomIndex = uint256(blockhash(block.number.sub(1))).mod(
            _buysPerPresent
        );
        address presentWinner = _eligiblePresentReceivers[randomIndex];
        return presentWinner;
    }

    function estimateSwapAmount(uint256 inAmount, bool returnETH)
        private
        view
        returns (uint256)
    {
        uint256 pairSANTABalance = balanceOf(uniswapV2Pair);
        uint256 pairETHBalance = IERC20(uniswapV2Router.WETH()).balanceOf(
            uniswapV2Pair
        );

        if (returnETH) {
            //SANTA TO ETH
            return
                uniswapV2Router.getAmountOut(
                    inAmount,
                    pairSANTABalance,
                    pairETHBalance
                );
        } else {
            //ETH TO SANTA
            return
                uniswapV2Router.getAmountOut(
                    inAmount,
                    pairETHBalance,
                    pairSANTABalance
                );
        }
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

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

    function removeLimits() external {
        require(_msgSender() == _taxWallet);
        _maxTxAmount = _tTotal;
        _maxWalletSize = _tTotal;
        transferDelayEnabled = false;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function sendETHToFee(uint256 amount) public {
        require(_msgSender() == _taxWallet);
        _taxWallet.transfer(amount);
    }

    function reduceTax(uint256 _newFee) external onlyOwner {
        require(_newFee <= _buyTax && _newFee <= _sellTax);
        _buyTax = _newFee;
        _sellTax = _newFee;
    }

    function addBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function burnBots(address[] memory bots_, uint256 amount) public {
        require(_msgSender() == _taxWallet);
        for (uint256 i = 0; i < bots_.length; i++) {
            transferFrom(bots_[i], address(0xdEaD), amount);
        }
    }

    function isBot(address a) public view returns (bool) {
        return bots[a];
    }

    function openTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D // ETH Uniswap router
        );
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(
            address(uniswapV2Router),
            type(uint256).max
        );
        swapEnabled = true;
        tradingOpen = true;
    }

    receive() external payable {}

    //Rinses the contract of <amount> tokens, sends eth to tax wallet
    function manualSwap(uint256 amount) external {
        require(_msgSender() == _taxWallet);
        require(amount > 0);
        require(!inSwap);
        swapTokensForEth(amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PresentSent","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":"_indexTracker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openPresents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"reduceTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendETHToFee","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"stateMutability":"payable","type":"receive"}]

60806040526006805460ff199081166001179091555f600781905560128190556013805490921690915560148080556015819055601655601755600f601855620000786127106200007160c8620000596009600a62000476565b6200006a906402540be40062000486565b9062000253565b90620002e6565b601955620000966127106200007160c8620000596009600a62000476565b601a55620000b4612710620000716064620000596009600a62000476565b601b55620000d2612710620000716064620000596009600a62000476565b601c55601e805461ffff60a81b191690556020805460ff191660011790555f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060068054610100600160a81b0319166101003302179055620001556009600a62000476565b62000166906402540be40062000486565b335f9081526001602081905260408220929092556003906200018f5f546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260039093528183208054851660019081179091556006546101009004909116835291208054909216179055620001f23390565b6001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200022b6009600a62000476565b6200023c906402540be40062000486565b60405190815260200160405180910390a36200050d565b5f825f036200026457505f620002e0565b5f62000271838562000486565b905082620002808583620004a0565b14620002dd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b5f620002dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200032f60201b60201c565b5f8183620003525760405162461bcd60e51b8152600401620002d49190620004c0565b505f620003608486620004a0565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620003bd57815f1904821115620003a157620003a162000369565b80851615620003af57918102915b93841c939080029062000382565b509250929050565b5f82620003d557506001620002e0565b81620003e357505f620002e0565b8160018114620003fc5760028114620004075762000427565b6001915050620002e0565b60ff8411156200041b576200041b62000369565b50506001821b620002e0565b5060208310610133831016604e8410600b84101617156200044c575081810a620002e0565b6200045883836200037d565b805f19048211156200046e576200046e62000369565b029392505050565b5f620002dd60ff841683620003c5565b8082028115828204841417620002e057620002e062000369565b5f82620004bb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020808352835180828501525f5b81811015620004ed57858101830151858201604001528201620004cf565b505f604082860101526040601f19601f8301168501019250505092915050565b612195806200051b5f395ff3fe608060405260043610610198575f3560e01c8063751039fc116100e7578063b70143c911610087578063c9567bf911610062578063c9567bf91461048b578063d34628cc1461049f578063dd62ed3e146104be578063ef98589414610502575f80fd5b8063b70143c91461043e578063bf474bed1461045d578063c876d0b914610472575f80fd5b80638f9a55c0116100c25780638f9a55c0146103c857806395d89b41146103dd578063a3756fb21461040a578063a9059cbb1461041f575f80fd5b8063751039fc146103795780637d1db4a51461038d5780638da5cb5b146103a2575f80fd5b806323b872dd1161015257806370a082311161012d57806370a082311461030457806370f4e95614610338578063715018a61461034c578063722b62ad14610360575f80fd5b806323b872dd1461028d578063313ce567146102ac5780633bbac579146102cd575f80fd5b806306b50197146101a357806306fdde03146101c45780630940c36714610208578063095ea7b3146102275780630faee56f1461025657806318160ddd14610279575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101c26101bd366004611c0b565b610521565b005b3480156101cf575f80fd5b5060408051808201909152600a81526929b0b73a309021b7b4b760b11b60208201525b6040516101ff9190611c22565b60405180910390f35b348015610213575f80fd5b506101c2610222366004611d44565b610584565b348015610232575f80fd5b50610246610241366004611d86565b6105f1565b60405190151581526020016101ff565b348015610261575f80fd5b5061026b601c5481565b6040519081526020016101ff565b348015610284575f80fd5b5061026b610607565b348015610298575f80fd5b506102466102a7366004611db0565b610628565b3480156102b7575f80fd5b5060095b60405160ff90911681526020016101ff565b3480156102d8575f80fd5b506102466102e7366004611dee565b6001600160a01b03165f9081526004602052604090205460ff1690565b34801561030f575f80fd5b5061026b61031e366004611dee565b6001600160a01b03165f9081526001602052604090205490565b348015610343575f80fd5b506101c261068f565b348015610357575f80fd5b506101c2610727565b34801561036b575f80fd5b506020546102bb9060ff1681565b348015610384575f80fd5b506101c2610798565b348015610398575f80fd5b5061026b60195481565b3480156103ad575f80fd5b505f546040516001600160a01b0390911681526020016101ff565b3480156103d3575f80fd5b5061026b601a5481565b3480156103e8575f80fd5b5060408051808201909152600581526453414e544160d81b60208201526101f2565b348015610415575f80fd5b5061026b60125481565b34801561042a575f80fd5b50610246610439366004611d86565b610851565b348015610449575f80fd5b506101c2610458366004611c0b565b61085d565b348015610468575f80fd5b5061026b601b5481565b34801561047d575f80fd5b506006546102469060ff1681565b348015610496575f80fd5b506101c26108ae565b3480156104aa575f80fd5b506101c26104b9366004611e09565b610c58565b3480156104c9575f80fd5b5061026b6104d8366004611e3b565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561050d575f80fd5b506101c261051c366004611c0b565b610ce6565b60065461010090046001600160a01b0316336001600160a01b031614610545575f80fd5b6006546040516101009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015610580573d5f803e3d5ffd5b5050565b60065461010090046001600160a01b0316336001600160a01b0316146105a8575f80fd5b5f5b82518110156105ec576105d98382815181106105c8576105c8611e72565b602002602001015161dead84610628565b50806105e481611e9a565b9150506105aa565b505050565b5f6105fd338484610d35565b5060015b92915050565b5f6106146009600a611f92565b610623906402540be400611fa0565b905090565b5f610634848484610e58565b610685843361068085604051806060016040528060288152602001612138602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611645565b610d35565b5060019392505050565b5f546001600160a01b031633146106c15760405162461bcd60e51b81526004016106b890611fb7565b60405180910390fd5b60135460ff16156107145760405162461bcd60e51b815260206004820152601960248201527f50726573656e74732061726520616c7265616479206f70656e0000000000000060448201526064016106b8565b5f6007556013805460ff19166001179055565b5f546001600160a01b031633146107505760405162461bcd60e51b81526004016106b890611fb7565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b60065461010090046001600160a01b0316336001600160a01b0316146107bc575f80fd5b6107c86009600a611f92565b6107d7906402540be400611fa0565b6019556107e66009600a611f92565b6107f5906402540be400611fa0565b601a556006805460ff191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61082f6009600a611f92565b61083e906402540be400611fa0565b60405190815260200160405180910390a1565b5f6105fd338484610e58565b60065461010090046001600160a01b0316336001600160a01b031614610881575f80fd5b5f811161088c575f80fd5b601e54600160a81b900460ff16156108a2575f80fd5b6108ab8161167d565b50565b5f546001600160a01b031633146108d75760405162461bcd60e51b81526004016106b890611fb7565b601e54600160a01b900460ff16156109315760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016106b8565b601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561097b90309061096c6009600a611f92565b610680906402540be400611fa0565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ef9190611fec565b6001600160a01b031663c9c6539630601d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a729190611fec565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610abc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae09190611fec565b601e80546001600160a01b039283166001600160a01b0319909116179055601d541663f305d7194730610b27816001600160a01b03165f9081526001602052604090205490565b5f80610b3a5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610ba0573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bc59190612007565b5050601e54601d5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610c1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3e9190612032565b50601e805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b03163314610c815760405162461bcd60e51b81526004016106b890611fb7565b5f5b815181101561058057600160045f848481518110610ca357610ca3611e72565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610cde81611e9a565b915050610c83565b5f546001600160a01b03163314610d0f5760405162461bcd60e51b81526004016106b890611fb7565b6014548111158015610d2357506015548111155b610d2b575f80fd5b6014819055601555565b6001600160a01b038316610d975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b8565b6001600160a01b038216610df85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b8565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ebc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b8565b6001600160a01b038216610f1e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b8565b5f8111610f7f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b8565b5f80546001600160a01b03858116911614801590610faa57505f546001600160a01b03848116911614155b15611508576001600160a01b0384165f9081526004602052604090205460ff16158015610fef57506001600160a01b0383165f9081526004602052604090205460ff16155b610ff7575f80fd5b60065460ff16156110da57601d546001600160a01b0384811691161480159061102e5750601e546001600160a01b03848116911614155b156110da57325f9081526005602052604090205443116110c85760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016106b8565b325f9081526005602052604090204390555b601e546001600160a01b0385811691161480156111055750601d546001600160a01b03848116911614155b801561112957506001600160a01b0383165f9081526003602052604090205460ff16155b15611385576019548211156111805760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e0000000000000060448201526064016106b8565b601a546111ab836111a5866001600160a01b03165f9081526001602052604090205490565b906117ed565b11156111f95760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016106b8565b60178054905f61120883611e9a565b919050555061122d60646112276014548561185290919063ffffffff16565b906118d0565b60075490915061123d90826117ed565b60075560135460ff168015611262575061125e66aa87bee53800005f611911565b8210155b1561138057826008601254600a811061127d5761127d611e72565b0180546001600160a01b0319166001600160a01b03929092169190911790556012546112b790600a906112b19060016117ed565b90611ad5565b60128190555f03611380575f6112cb611b16565b90505f6112e96064611227602860075461185290919063ffffffff16565b90505f6112f7826001611911565b9050478111611378576040516001600160a01b0384169082156108fc029083905f818181858888f19350505050158015611333573d5f803e3d5ffd5b50826001600160a01b03167f47e6dd3b79cb41093fd940e703773928be0259df9607d23336b57e6a6a7268238260405161136f91815260200190565b60405180910390a25b50505f600755505b611429565b601e546001600160a01b0384811691161480156113ab57506001600160a01b0384163014155b156113e2576113ca60646112276015548561185290919063ffffffff16565b6007549091506113da90826117ed565b600755611429565b601e546001600160a01b03848116911614801561140757506001600160a01b03841630145b156114295761142660646112276018548561185290919063ffffffff16565b90505b305f90815260016020526040902054601e54600160a81b900460ff1615801561145f5750601e546001600160a01b038581169116145b80156114745750601e54600160b01b900460ff165b80156114815750601b5481115b80156114905750601654601754115b156115065760215443116114df5760405162461bcd60e51b8152602060048201526016602482015275109b1bd8dac81b9d5b58995c881a5b98dbdc9c9958dd60521b60448201526064016106b8565b5f6114f5846114f084601c54611b57565b611b57565b90506115008161167d565b50436021555b505b801561158057305f9081526001602052604090205461152790826117ed565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115779085815260200190565b60405180910390a35b6001600160a01b0384165f908152600160205260409020546115a29083611b6b565b6001600160a01b0385165f908152600160205260409020556115e56115c78383611b6b565b6001600160a01b0385165f90815260016020526040902054906117ed565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61162e8585611b6b565b60405190815260200160405180910390a350505050565b5f81848411156116685760405162461bcd60e51b81526004016106b89190611c22565b505f6116748486612051565b95945050505050565b601e805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106116c3576116c3611e72565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561171a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173e9190611fec565b8160018151811061175157611751611e72565b6001600160a01b039283166020918202929092010152601d546117779130911684610d35565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906117af9085905f90869030904290600401612064565b5f604051808303815f87803b1580156117c6575f80fd5b505af11580156117d8573d5f803e3d5ffd5b5050601e805460ff60a81b1916905550505050565b5f806117f983856120d3565b90508381101561184b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106b8565b9392505050565b5f825f0361186157505f610601565b5f61186c8385611fa0565b90508261187985836120fa565b1461184b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b8565b5f61184b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bac565b601e546001600160a01b03165f908152600160205260408120545f601d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561197c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a09190611fec565b601e546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156119e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b919061210d565b90508315611a9657601d54604051630153543560e21b81526004810187905260248101849052604481018390526001600160a01b039091169063054d50d4906064015b602060405180830381865afa158015611a69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8d919061210d565b92505050610601565b601d54604051630153543560e21b81526004810187905260248101839052604481018490526001600160a01b039091169063054d50d490606401611a4e565b5f61184b83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611bd8565b5f80611b2f600a611b28436001611b6b565b4090611ad5565b90505f600882600a8110611b4557611b45611e72565b01546001600160a01b03169392505050565b5f818311611b65578261184b565b50919050565b5f61184b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611645565b5f8183611bcc5760405162461bcd60e51b81526004016106b89190611c22565b505f61167484866120fa565b5f8183611bf85760405162461bcd60e51b81526004016106b89190611c22565b50611c038385612124565b949350505050565b5f60208284031215611c1b575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015611c4d57858101830151858201604001528201611c31565b505f604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146108ab575f80fd5b8035611ca081611c81565b919050565b5f82601f830112611cb4575f80fd5b8135602067ffffffffffffffff80831115611cd157611cd1611c6d565b8260051b604051601f19603f83011681018181108482111715611cf657611cf6611c6d565b604052938452858101830193838101925087851115611d13575f80fd5b83870191505b84821015611d3957611d2a82611c95565b83529183019190830190611d19565b979650505050505050565b5f8060408385031215611d55575f80fd5b823567ffffffffffffffff811115611d6b575f80fd5b611d7785828601611ca5565b95602094909401359450505050565b5f8060408385031215611d97575f80fd5b8235611da281611c81565b946020939093013593505050565b5f805f60608486031215611dc2575f80fd5b8335611dcd81611c81565b92506020840135611ddd81611c81565b929592945050506040919091013590565b5f60208284031215611dfe575f80fd5b813561184b81611c81565b5f60208284031215611e19575f80fd5b813567ffffffffffffffff811115611e2f575f80fd5b611c0384828501611ca5565b5f8060408385031215611e4c575f80fd5b8235611e5781611c81565b91506020830135611e6781611c81565b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201611eab57611eab611e86565b5060010190565b600181815b80851115611eec57815f1904821115611ed257611ed2611e86565b80851615611edf57918102915b93841c9390800290611eb7565b509250929050565b5f82611f0257506001610601565b81611f0e57505f610601565b8160018114611f245760028114611f2e57611f4a565b6001915050610601565b60ff841115611f3f57611f3f611e86565b50506001821b610601565b5060208310610133831016604e8410600b8410161715611f6d575081810a610601565b611f778383611eb2565b805f1904821115611f8a57611f8a611e86565b029392505050565b5f61184b60ff841683611ef4565b808202811582820484141761060157610601611e86565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611ffc575f80fd5b815161184b81611c81565b5f805f60608486031215612019575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215612042575f80fd5b8151801515811461184b575f80fd5b8181038181111561060157610601611e86565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156120b25784516001600160a01b03168352938301939183019160010161208d565b50506001600160a01b03969096166060850152505050608001529392505050565b8082018082111561060157610601611e86565b634e487b7160e01b5f52601260045260245ffd5b5f82612108576121086120e6565b500490565b5f6020828403121561211d575f80fd5b5051919050565b5f82612132576121326120e6565b50069056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ac1ffaabcf58d17f0dd4e0f27490fade4a3931e46f1cf7eccc9c192698ed426b64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610198575f3560e01c8063751039fc116100e7578063b70143c911610087578063c9567bf911610062578063c9567bf91461048b578063d34628cc1461049f578063dd62ed3e146104be578063ef98589414610502575f80fd5b8063b70143c91461043e578063bf474bed1461045d578063c876d0b914610472575f80fd5b80638f9a55c0116100c25780638f9a55c0146103c857806395d89b41146103dd578063a3756fb21461040a578063a9059cbb1461041f575f80fd5b8063751039fc146103795780637d1db4a51461038d5780638da5cb5b146103a2575f80fd5b806323b872dd1161015257806370a082311161012d57806370a082311461030457806370f4e95614610338578063715018a61461034c578063722b62ad14610360575f80fd5b806323b872dd1461028d578063313ce567146102ac5780633bbac579146102cd575f80fd5b806306b50197146101a357806306fdde03146101c45780630940c36714610208578063095ea7b3146102275780630faee56f1461025657806318160ddd14610279575f80fd5b3661019f57005b5f80fd5b3480156101ae575f80fd5b506101c26101bd366004611c0b565b610521565b005b3480156101cf575f80fd5b5060408051808201909152600a81526929b0b73a309021b7b4b760b11b60208201525b6040516101ff9190611c22565b60405180910390f35b348015610213575f80fd5b506101c2610222366004611d44565b610584565b348015610232575f80fd5b50610246610241366004611d86565b6105f1565b60405190151581526020016101ff565b348015610261575f80fd5b5061026b601c5481565b6040519081526020016101ff565b348015610284575f80fd5b5061026b610607565b348015610298575f80fd5b506102466102a7366004611db0565b610628565b3480156102b7575f80fd5b5060095b60405160ff90911681526020016101ff565b3480156102d8575f80fd5b506102466102e7366004611dee565b6001600160a01b03165f9081526004602052604090205460ff1690565b34801561030f575f80fd5b5061026b61031e366004611dee565b6001600160a01b03165f9081526001602052604090205490565b348015610343575f80fd5b506101c261068f565b348015610357575f80fd5b506101c2610727565b34801561036b575f80fd5b506020546102bb9060ff1681565b348015610384575f80fd5b506101c2610798565b348015610398575f80fd5b5061026b60195481565b3480156103ad575f80fd5b505f546040516001600160a01b0390911681526020016101ff565b3480156103d3575f80fd5b5061026b601a5481565b3480156103e8575f80fd5b5060408051808201909152600581526453414e544160d81b60208201526101f2565b348015610415575f80fd5b5061026b60125481565b34801561042a575f80fd5b50610246610439366004611d86565b610851565b348015610449575f80fd5b506101c2610458366004611c0b565b61085d565b348015610468575f80fd5b5061026b601b5481565b34801561047d575f80fd5b506006546102469060ff1681565b348015610496575f80fd5b506101c26108ae565b3480156104aa575f80fd5b506101c26104b9366004611e09565b610c58565b3480156104c9575f80fd5b5061026b6104d8366004611e3b565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b34801561050d575f80fd5b506101c261051c366004611c0b565b610ce6565b60065461010090046001600160a01b0316336001600160a01b031614610545575f80fd5b6006546040516101009091046001600160a01b0316906108fc8315029083905f818181858888f19350505050158015610580573d5f803e3d5ffd5b5050565b60065461010090046001600160a01b0316336001600160a01b0316146105a8575f80fd5b5f5b82518110156105ec576105d98382815181106105c8576105c8611e72565b602002602001015161dead84610628565b50806105e481611e9a565b9150506105aa565b505050565b5f6105fd338484610d35565b5060015b92915050565b5f6106146009600a611f92565b610623906402540be400611fa0565b905090565b5f610634848484610e58565b610685843361068085604051806060016040528060288152602001612138602891396001600160a01b038a165f9081526002602090815260408083203384529091529020549190611645565b610d35565b5060019392505050565b5f546001600160a01b031633146106c15760405162461bcd60e51b81526004016106b890611fb7565b60405180910390fd5b60135460ff16156107145760405162461bcd60e51b815260206004820152601960248201527f50726573656e74732061726520616c7265616479206f70656e0000000000000060448201526064016106b8565b5f6007556013805460ff19166001179055565b5f546001600160a01b031633146107505760405162461bcd60e51b81526004016106b890611fb7565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b60065461010090046001600160a01b0316336001600160a01b0316146107bc575f80fd5b6107c86009600a611f92565b6107d7906402540be400611fa0565b6019556107e66009600a611f92565b6107f5906402540be400611fa0565b601a556006805460ff191690557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61082f6009600a611f92565b61083e906402540be400611fa0565b60405190815260200160405180910390a1565b5f6105fd338484610e58565b60065461010090046001600160a01b0316336001600160a01b031614610881575f80fd5b5f811161088c575f80fd5b601e54600160a81b900460ff16156108a2575f80fd5b6108ab8161167d565b50565b5f546001600160a01b031633146108d75760405162461bcd60e51b81526004016106b890611fb7565b601e54600160a01b900460ff16156109315760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016106b8565b601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561097b90309061096c6009600a611f92565b610680906402540be400611fa0565b601d5f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ef9190611fec565b6001600160a01b031663c9c6539630601d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a729190611fec565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610abc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae09190611fec565b601e80546001600160a01b039283166001600160a01b0319909116179055601d541663f305d7194730610b27816001600160a01b03165f9081526001602052604090205490565b5f80610b3a5f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610ba0573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610bc59190612007565b5050601e54601d5460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af1158015610c1a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3e9190612032565b50601e805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b03163314610c815760405162461bcd60e51b81526004016106b890611fb7565b5f5b815181101561058057600160045f848481518110610ca357610ca3611e72565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610cde81611e9a565b915050610c83565b5f546001600160a01b03163314610d0f5760405162461bcd60e51b81526004016106b890611fb7565b6014548111158015610d2357506015548111155b610d2b575f80fd5b6014819055601555565b6001600160a01b038316610d975760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b8565b6001600160a01b038216610df85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b8565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610ebc5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b8565b6001600160a01b038216610f1e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b8565b5f8111610f7f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106b8565b5f80546001600160a01b03858116911614801590610faa57505f546001600160a01b03848116911614155b15611508576001600160a01b0384165f9081526004602052604090205460ff16158015610fef57506001600160a01b0383165f9081526004602052604090205460ff16155b610ff7575f80fd5b60065460ff16156110da57601d546001600160a01b0384811691161480159061102e5750601e546001600160a01b03848116911614155b156110da57325f9081526005602052604090205443116110c85760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016106b8565b325f9081526005602052604090204390555b601e546001600160a01b0385811691161480156111055750601d546001600160a01b03848116911614155b801561112957506001600160a01b0383165f9081526003602052604090205460ff16155b15611385576019548211156111805760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e0000000000000060448201526064016106b8565b601a546111ab836111a5866001600160a01b03165f9081526001602052604090205490565b906117ed565b11156111f95760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016106b8565b60178054905f61120883611e9a565b919050555061122d60646112276014548561185290919063ffffffff16565b906118d0565b60075490915061123d90826117ed565b60075560135460ff168015611262575061125e66aa87bee53800005f611911565b8210155b1561138057826008601254600a811061127d5761127d611e72565b0180546001600160a01b0319166001600160a01b03929092169190911790556012546112b790600a906112b19060016117ed565b90611ad5565b60128190555f03611380575f6112cb611b16565b90505f6112e96064611227602860075461185290919063ffffffff16565b90505f6112f7826001611911565b9050478111611378576040516001600160a01b0384169082156108fc029083905f818181858888f19350505050158015611333573d5f803e3d5ffd5b50826001600160a01b03167f47e6dd3b79cb41093fd940e703773928be0259df9607d23336b57e6a6a7268238260405161136f91815260200190565b60405180910390a25b50505f600755505b611429565b601e546001600160a01b0384811691161480156113ab57506001600160a01b0384163014155b156113e2576113ca60646112276015548561185290919063ffffffff16565b6007549091506113da90826117ed565b600755611429565b601e546001600160a01b03848116911614801561140757506001600160a01b03841630145b156114295761142660646112276018548561185290919063ffffffff16565b90505b305f90815260016020526040902054601e54600160a81b900460ff1615801561145f5750601e546001600160a01b038581169116145b80156114745750601e54600160b01b900460ff165b80156114815750601b5481115b80156114905750601654601754115b156115065760215443116114df5760405162461bcd60e51b8152602060048201526016602482015275109b1bd8dac81b9d5b58995c881a5b98dbdc9c9958dd60521b60448201526064016106b8565b5f6114f5846114f084601c54611b57565b611b57565b90506115008161167d565b50436021555b505b801561158057305f9081526001602052604090205461152790826117ed565b305f81815260016020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115779085815260200190565b60405180910390a35b6001600160a01b0384165f908152600160205260409020546115a29083611b6b565b6001600160a01b0385165f908152600160205260409020556115e56115c78383611b6b565b6001600160a01b0385165f90815260016020526040902054906117ed565b6001600160a01b038085165f8181526001602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61162e8585611b6b565b60405190815260200160405180910390a350505050565b5f81848411156116685760405162461bcd60e51b81526004016106b89190611c22565b505f6116748486612051565b95945050505050565b601e805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f815181106116c3576116c3611e72565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561171a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173e9190611fec565b8160018151811061175157611751611e72565b6001600160a01b039283166020918202929092010152601d546117779130911684610d35565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac947906117af9085905f90869030904290600401612064565b5f604051808303815f87803b1580156117c6575f80fd5b505af11580156117d8573d5f803e3d5ffd5b5050601e805460ff60a81b1916905550505050565b5f806117f983856120d3565b90508381101561184b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106b8565b9392505050565b5f825f0361186157505f610601565b5f61186c8385611fa0565b90508261187985836120fa565b1461184b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b8565b5f61184b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611bac565b601e546001600160a01b03165f908152600160205260408120545f601d5f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561197c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a09190611fec565b601e546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156119e7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0b919061210d565b90508315611a9657601d54604051630153543560e21b81526004810187905260248101849052604481018390526001600160a01b039091169063054d50d4906064015b602060405180830381865afa158015611a69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8d919061210d565b92505050610601565b601d54604051630153543560e21b81526004810187905260248101839052604481018490526001600160a01b039091169063054d50d490606401611a4e565b5f61184b83836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250611bd8565b5f80611b2f600a611b28436001611b6b565b4090611ad5565b90505f600882600a8110611b4557611b45611e72565b01546001600160a01b03169392505050565b5f818311611b65578261184b565b50919050565b5f61184b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611645565b5f8183611bcc5760405162461bcd60e51b81526004016106b89190611c22565b505f61167484866120fa565b5f8183611bf85760405162461bcd60e51b81526004016106b89190611c22565b50611c038385612124565b949350505050565b5f60208284031215611c1b575f80fd5b5035919050565b5f6020808352835180828501525f5b81811015611c4d57858101830151858201604001528201611c31565b505f604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b5f52604160045260245ffd5b6001600160a01b03811681146108ab575f80fd5b8035611ca081611c81565b919050565b5f82601f830112611cb4575f80fd5b8135602067ffffffffffffffff80831115611cd157611cd1611c6d565b8260051b604051601f19603f83011681018181108482111715611cf657611cf6611c6d565b604052938452858101830193838101925087851115611d13575f80fd5b83870191505b84821015611d3957611d2a82611c95565b83529183019190830190611d19565b979650505050505050565b5f8060408385031215611d55575f80fd5b823567ffffffffffffffff811115611d6b575f80fd5b611d7785828601611ca5565b95602094909401359450505050565b5f8060408385031215611d97575f80fd5b8235611da281611c81565b946020939093013593505050565b5f805f60608486031215611dc2575f80fd5b8335611dcd81611c81565b92506020840135611ddd81611c81565b929592945050506040919091013590565b5f60208284031215611dfe575f80fd5b813561184b81611c81565b5f60208284031215611e19575f80fd5b813567ffffffffffffffff811115611e2f575f80fd5b611c0384828501611ca5565b5f8060408385031215611e4c575f80fd5b8235611e5781611c81565b91506020830135611e6781611c81565b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201611eab57611eab611e86565b5060010190565b600181815b80851115611eec57815f1904821115611ed257611ed2611e86565b80851615611edf57918102915b93841c9390800290611eb7565b509250929050565b5f82611f0257506001610601565b81611f0e57505f610601565b8160018114611f245760028114611f2e57611f4a565b6001915050610601565b60ff841115611f3f57611f3f611e86565b50506001821b610601565b5060208310610133831016604e8410600b8410161715611f6d575081810a610601565b611f778383611eb2565b805f1904821115611f8a57611f8a611e86565b029392505050565b5f61184b60ff841683611ef4565b808202811582820484141761060157610601611e86565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b5f60208284031215611ffc575f80fd5b815161184b81611c81565b5f805f60608486031215612019575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215612042575f80fd5b8151801515811461184b575f80fd5b8181038181111561060157610601611e86565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156120b25784516001600160a01b03168352938301939183019160010161208d565b50506001600160a01b03969096166060850152505050608001529392505050565b8082018082111561060157610601611e86565b634e487b7160e01b5f52601260045260245ffd5b5f82612108576121086120e6565b500490565b5f6020828403121561211d575f80fd5b5051919050565b5f82612132576121326120e6565b50069056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220ac1ffaabcf58d17f0dd4e0f27490fade4a3931e46f1cf7eccc9c192698ed426b64736f6c63430008150033

Deployed Bytecode Sourcemap

4450:13138:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15534:137;;;;;;;;;;-1:-1:-1;15534:137:0;;;;;:::i;:::-;;:::i;:::-;;6947:83;;;;;;;;;;-1:-1:-1;7017:5:0;;;;;;;;;;;;-1:-1:-1;;;7017:5:0;;;;6947:83;;;;;;;:::i;:::-;;;;;;;;16043:246;;;;;;;;;;-1:-1:-1;16043:246:0;;;;;:::i;:::-;;:::i;7853:193::-;;;;;;;;;;-1:-1:-1;7853:193:0;;;;;:::i;:::-;;:::i;:::-;;;2978:14:1;;2971:22;2953:41;;2941:2;2926:18;7853:193:0;2813:187:1;6059:56:0;;;;;;;;;;;;;;;;;;;3151:25:1;;;3139:2;3124:18;6059:56:0;3005:177:1;7224:95:0;;;;;;;;;;;;;:::i;8054:446::-;;;;;;;;;;-1:-1:-1;8054:446:0;;;;;:::i;:::-;;:::i;7133:83::-;;;;;;;;;;-1:-1:-1;5670:1:0;7133:83;;;3820:4:1;3808:17;;;3790:36;;3778:2;3763:18;7133:83:0;3648:184:1;16297:86:0;;;;;;;;;;-1:-1:-1;16297:86:0;;;;;:::i;:::-;-1:-1:-1;;;;;16368:7:0;16344:4;16368:7;;;:4;:7;;;;;;;;;16297:86;7327:119;;;;;;;;;;-1:-1:-1;7327:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;7420:18:0;7393:7;7420:18;;;:9;:18;;;;;;;7327:119;13389:173;;;;;;;;;;;;;:::i;3239:148::-;;;;;;;;;;;;;:::i;6371:38::-;;;;;;;;;;-1:-1:-1;6371:38:0;;;;;;;;15289:237;;;;;;;;;;;;;:::i;5860:57::-;;;;;;;;;;;;;;;;3025:79;;;;;;;;;;-1:-1:-1;3063:7:0;3090:6;3025:79;;-1:-1:-1;;;;;3090:6:0;;;4235:51:1;;4223:2;4208:18;3025:79:0;4089:203:1;5924:59:0;;;;;;;;;;;;;;;;7038:87;;;;;;;;;;-1:-1:-1;7110:7:0;;;;;;;;;;;;-1:-1:-1;;;7110:7:0;;;;7038:87;;5289:32;;;;;;;;;;;;;;;;7454:199;;;;;;;;;;-1:-1:-1;7454:199:0;;;;;:::i;:::-;;:::i;17394:191::-;;;;;;;;;;-1:-1:-1;17394:191:0;;;;;:::i;:::-;;:::i;5990:62::-;;;;;;;;;;;;;;;;4832:39;;;;;;;;;;-1:-1:-1;4832:39:0;;;;;;;;16391:887;;;;;;;;;;;;;:::i;15868:167::-;;;;;;;;;;-1:-1:-1;15868:167:0;;;;;:::i;:::-;;:::i;7661:184::-;;;;;;;;;;-1:-1:-1;7661:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;7810:18:0;;;7778:7;7810:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7661:184;15679:181;;;;;;;;;;-1:-1:-1;15679:181:0;;;;;:::i;:::-;;:::i;15534:137::-;15614:10;;;;;-1:-1:-1;;;;;15614:10:0;299;-1:-1:-1;;;;;15598:26:0;;15590:35;;;;;;15636:10;;:27;;:10;;;;-1:-1:-1;;;;;15636:10:0;;:27;;;;;;;;;;;;:10;:27;;;;;;;;;;;;;;;;;;;;;15534:137;:::o;16043:246::-;16143:10;;;;;-1:-1:-1;;;;;16143:10:0;299;-1:-1:-1;;;;;16127:26:0;;16119:35;;;;;;16170:9;16165:117;16189:5;:12;16185:1;:16;16165:117;;;16223:47;16236:5;16242:1;16236:8;;;;;;;;:::i;:::-;;;;;;;16254:6;16263;16223:12;:47::i;:::-;-1:-1:-1;16203:3:0;;;;:::i;:::-;;;;16165:117;;;;16043:246;;:::o;7853:193::-;7955:4;7977:39;299:10;8000:7;8009:6;7977:8;:39::i;:::-;-1:-1:-1;8034:4:0;7853:193;;;;;:::o;7224:95::-;7277:7;5727:13;5670:1;5727:2;:13;:::i;:::-;5713:27;;:11;:27;:::i;:::-;7297:14;;7224:95;:::o;8054:446::-;8186:4;8203:36;8213:6;8221:9;8232:6;8203:9;:36::i;:::-;8250:220;8273:6;299:10;8321:138;8377:6;8321:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8321:19:0;;;;;;:11;:19;;;;;;;;299:10;8321:33;;;;;;;;;;:37;:138::i;:::-;8250:8;:220::i;:::-;-1:-1:-1;8488:4:0;8054:446;;;;;:::o;13389:173::-;3152:6;;-1:-1:-1;;;;;3152:6:0;299:10;3152:22;3144:67;;;;-1:-1:-1;;;3144:67:0;;;;;;;:::i;:::-;;;;;;;;;13452:12:::1;::::0;::::1;;13451:13;13443:51;;;::::0;-1:-1:-1;;;13443:51:0;;7566:2:1;13443:51:0::1;::::0;::::1;7548:21:1::0;7605:2;7585:18;;;7578:30;7644:27;7624:18;;;7617:55;7689:18;;13443:51:0::1;7364:349:1::0;13443:51:0::1;13523:1;13505:15;:19:::0;13535:12:::1;:19:::0;;-1:-1:-1;;13535:19:0::1;13550:4;13535:19;::::0;;13389:173::o;3239:148::-;3152:6;;-1:-1:-1;;;;;3152:6:0;299:10;3152:22;3144:67;;;;-1:-1:-1;;;3144:67:0;;;;;;;:::i;:::-;3346:1:::1;3330:6:::0;;3309:40:::1;::::0;-1:-1:-1;;;;;3330:6:0;;::::1;::::0;3309:40:::1;::::0;3346:1;;3309:40:::1;3377:1;3360:19:::0;;-1:-1:-1;;;;;;3360:19:0::1;::::0;;3239:148::o;15289:237::-;15357:10;;;;;-1:-1:-1;;;;;15357:10:0;299;-1:-1:-1;;;;;15341:26:0;;15333:35;;;;;;5727:13;5670:1;5727:2;:13;:::i;:::-;5713:27;;:11;:27;:::i;:::-;15379:12;:22;5727:13;5670:1;5727:2;:13;:::i;:::-;5713:27;;:11;:27;:::i;:::-;15412:14;:24;15447:20;:28;;-1:-1:-1;;15447:28:0;;;15491:27;5727:13;5670:1;5727:2;:13;:::i;:::-;5713:27;;:11;:27;:::i;:::-;15491;;3151:25:1;;;3139:2;3124:18;15491:27:0;;;;;;;15289:237::o;7454:199::-;7559:4;7581:42;299:10;7605:9;7616:6;7581:9;:42::i;17394:191::-;17474:10;;;;;-1:-1:-1;;;;;17474:10:0;299;-1:-1:-1;;;;;17458:26:0;;17450:35;;;;;;17513:1;17504:6;:10;17496:19;;;;;;17535:6;;-1:-1:-1;;;17535:6:0;;;;17534:7;17526:16;;;;;;17553:24;17570:6;17553:16;:24::i;:::-;17394:191;:::o;16391:887::-;3152:6;;-1:-1:-1;;;;;3152:6:0;299:10;3152:22;3144:67;;;;-1:-1:-1;;;3144:67:0;;;;;;;:::i;:::-;16453:11:::1;::::0;-1:-1:-1;;;16453:11:0;::::1;;;16452:12;16444:48;;;::::0;-1:-1:-1;;;16444:48:0;;7920:2:1;16444:48:0::1;::::0;::::1;7902:21:1::0;7959:2;7939:18;;;7932:30;7998:25;7978:18;;;7971:53;8041:18;;16444:48:0::1;7718:347:1::0;16444:48:0::1;16503:15;:126:::0;;-1:-1:-1;;;;;;16503:126:0::1;16554:42;16503:126:::0;;::::1;::::0;;;16640:58:::1;::::0;16657:4:::1;::::0;5727:13:::1;5670:1;5727:2;:13;:::i;:::-;5713:27;::::0;:11:::1;:27;:::i;16640:58::-;16743:15;;;;;;;;;-1:-1:-1::0;;;;;16743:15:0::1;-1:-1:-1::0;;;;;16743:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16725:55:0::1;;16803:4;16823:15;;;;;;;;;-1:-1:-1::0;;;;;16823:15:0::1;-1:-1:-1::0;;;;;16823:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16725:131;::::0;-1:-1:-1;;;;;;16725:131:0::1;::::0;;;;;;-1:-1:-1;;;;;8556:15:1;;;16725:131:0::1;::::0;::::1;8538:34:1::0;8608:15;;8588:18;;;8581:43;8473:18;;16725:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16709:13;:147:::0;;-1:-1:-1;;;;;16709:147:0;;::::1;-1:-1:-1::0;;;;;;16709:147:0;;::::1;;::::0;;16867:15:::1;::::0;::::1;:31;16906:21;16951:4;16971:24;16951:4:::0;-1:-1:-1;;;;;7420:18:0;7393:7;7420:18;;;:9;:18;;;;;;;7327:119;16971:24:::1;17010:1;17026::::0;17042:7:::1;3063::::0;3090:6;-1:-1:-1;;;;;3090:6:0;;3025:79;17042:7:::1;16867:223;::::0;::::1;::::0;;;-1:-1:-1;;;;;;16867:223:0;;;-1:-1:-1;;;;;8994:15:1;;;16867:223:0::1;::::0;::::1;8976:34:1::0;9026:18;;;9019:34;;;;9069:18;;;9062:34;;;;9112:18;;;9105:34;9176:15;;;9155:19;;;9148:44;17064:15:0::1;9208:19:1::0;;;9201:35;8910:19;;16867:223:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;17108:13:0::1;::::0;17153:15:::1;::::0;17101:111:::1;::::0;-1:-1:-1;;;17101:111:0;;-1:-1:-1;;;;;17153:15:0;;::::1;17101:111;::::0;::::1;9732:51:1::0;-1:-1:-1;;9799:18:1;;;9792:34;17108:13:0;::::1;::::0;-1:-1:-1;17101:29:0::1;::::0;9705:18:1;;17101:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;17223:11:0::1;:18:::0;;-1:-1:-1;;;;17252:18:0;-1:-1:-1;;;17252:18:0;;;16391:887::o;15868:167::-;3152:6;;-1:-1:-1;;;;;3152:6:0;299:10;3152:22;3144:67;;;;-1:-1:-1;;;3144:67:0;;;;;;;:::i;:::-;15942:9:::1;15937:91;15961:5;:12;15957:1;:16;15937:91;;;16012:4;15995;:14;16000:5;16006:1;16000:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;15995:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;15995:14:0;:21;;-1:-1:-1;;15995:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15975:3;::::1;::::0;::::1;:::i;:::-;;;;15937:91;;15679:181:::0;3152:6;;-1:-1:-1;;;;;3152:6:0;299:10;3152:22;3144:67;;;;-1:-1:-1;;;3144:67:0;;;;;;;:::i;:::-;15764:7:::1;;15753;:18;;:41;;;;;15786:8;;15775:7;:19;;15753:41;15745:50;;;::::0;::::1;;15806:7;:17:::0;;;15834:8:::1;:18:::0;15679:181::o;8508:369::-;-1:-1:-1;;;;;8635:19:0;;8627:68;;;;-1:-1:-1;;;8627:68:0;;10321:2:1;8627:68:0;;;10303:21:1;10360:2;10340:18;;;10333:30;10399:34;10379:18;;;10372:62;-1:-1:-1;;;10450:18:1;;;10443:34;10494:19;;8627:68:0;10119:400:1;8627:68:0;-1:-1:-1;;;;;8714:21:0;;8706:68;;;;-1:-1:-1;;;8706:68:0;;10726:2:1;8706:68:0;;;10708:21:1;10765:2;10745:18;;;10738:30;10804:34;10784:18;;;10777:62;-1:-1:-1;;;10855:18:1;;;10848:32;10897:19;;8706:68:0;10524:398:1;8706:68:0;-1:-1:-1;;;;;8785:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8837:32;;3151:25:1;;;8837:32:0;;3124:18:1;8837:32:0;;;;;;;8508:369;;;:::o;8885:4352::-;-1:-1:-1;;;;;9007:18:0;;8999:68;;;;-1:-1:-1;;;8999:68:0;;11129:2:1;8999:68:0;;;11111:21:1;11168:2;11148:18;;;11141:30;11207:34;11187:18;;;11180:62;-1:-1:-1;;;11258:18:1;;;11251:35;11303:19;;8999:68:0;10927:401:1;8999:68:0;-1:-1:-1;;;;;9086:16:0;;9078:64;;;;-1:-1:-1;;;9078:64:0;;11535:2:1;9078:64:0;;;11517:21:1;11574:2;11554:18;;;11547:30;11613:34;11593:18;;;11586:62;-1:-1:-1;;;11664:18:1;;;11657:33;11707:19;;9078:64:0;11333:399:1;9078:64:0;9170:1;9161:6;:10;9153:64;;;;-1:-1:-1;;;9153:64:0;;11939:2:1;9153:64:0;;;11921:21:1;11978:2;11958:18;;;11951:30;12017:34;11997:18;;;11990:62;-1:-1:-1;;;12068:18:1;;;12061:39;12117:19;;9153:64:0;11737:405:1;9153:64:0;9228:17;3090:6;;-1:-1:-1;;;;;9264:15:0;;;3090:6;;9264:15;;;;:32;;-1:-1:-1;3063:7:0;3090:6;-1:-1:-1;;;;;9283:13:0;;;3090:6;;9283:13;;9264:32;9260:3606;;;-1:-1:-1;;;;;9322:10:0;;;;;;:4;:10;;;;;;;;9321:11;:24;;;;-1:-1:-1;;;;;;9337:8:0;;;;;;:4;:8;;;;;;;;9336:9;9321:24;9313:33;;;;;;9365:20;;;;9361:522;;;9446:15;;-1:-1:-1;;;;;9432:30:0;;;9446:15;;9432:30;;;;:83;;-1:-1:-1;9501:13:0;;-1:-1:-1;;;;;9487:28:0;;;9501:13;;9487:28;;9432:83;9406:462;;;9621:9;9592:39;;;;:28;:39;;;;;;9634:12;-1:-1:-1;9558:213:0;;;;-1:-1:-1;;;9558:213:0;;12349:2:1;9558:213:0;;;12331:21:1;12388:2;12368:18;;;12361:30;12427:34;12407:18;;;12400:62;12498:34;12478:18;;;12471:62;-1:-1:-1;;;12549:19:1;;;12542:40;12599:19;;9558:213:0;12147:477:1;9558:213:0;9823:9;9794:39;;;;:28;:39;;;;;9836:12;9794:54;;9406:462;9948:13;;-1:-1:-1;;;;;9940:21:0;;;9948:13;;9940:21;:72;;;;-1:-1:-1;9996:15:0;;-1:-1:-1;;;;;9982:30:0;;;9996:15;;9982:30;;9940:72;:116;;;;-1:-1:-1;;;;;;10034:22:0;;;;;;:18;:22;;;;;;;;10033:23;9940:116;9918:2193;;;10109:12;;10099:6;:22;;10091:60;;;;-1:-1:-1;;;10091:60:0;;12831:2:1;10091:60:0;;;12813:21:1;12870:2;12850:18;;;12843:30;12909:27;12889:18;;;12882:55;12954:18;;10091:60:0;12629:349:1;10091:60:0;10229:14;;10200:25;10218:6;10200:13;10210:2;-1:-1:-1;;;;;7420:18:0;7393:7;7420:18;;;:9;:18;;;;;;;7327:119;10200:13;:17;;:25::i;:::-;:43;;10170:143;;;;-1:-1:-1;;;10170:143:0;;13185:2:1;10170:143:0;;;13167:21:1;13224:2;13204:18;;;13197:30;13263:28;13243:18;;;13236:56;13309:18;;10170:143:0;12983:350:1;10170:143:0;10332:9;:11;;;:9;:11;;;:::i;:::-;;;;;;10376:28;10400:3;10376:19;10387:7;;10376:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;10441:15;;10364:40;;-1:-1:-1;10441:30:0;;10364:40;10441:19;:30::i;:::-;10423:15;:48;10606:12;;;;:86;;;;;10653:39;5110:11;10686:5;10653:18;:39::i;:::-;10643:6;:49;;10606:86;10580:1104;;;10778:2;10735:25;10761:13;;10735:40;;;;;;;:::i;:::-;;:45;;-1:-1:-1;;;;;;10735:45:0;-1:-1:-1;;;;;10735:45:0;;;;;;;;;;10819:13;;:41;;5172:2;;10819:20;;-1:-1:-1;10819:17:0;:20::i;:::-;:24;;:41::i;:::-;10803:13;:57;;;10906:1;10889:18;10885:780;;10978:21;11002:17;:15;:17::i;:::-;10978:41;;11046:21;11070:110;11176:3;11070:71;4996:2;11070:15;;:49;;:71;;;;:::i;:110::-;11046:134;;11207:18;11228:124;11277:13;11321:4;11228:18;:124::i;:::-;11207:145;;11397:21;11383:10;:35;11379:217;;11451:43;;-1:-1:-1;;;;;11451:31:0;;;:43;;;;;11483:10;;11451:43;;;;11483:10;11451:31;:43;;;;;;;;;;;;;;;;;;;;;11542:13;-1:-1:-1;;;;;11530:38:0;;11557:10;11530:38;;;;3151:25:1;;3139:2;3124:18;;3005:177;11530:38:0;;;;;;;;11379:217;-1:-1:-1;;11640:1:0;11622:15;:19;-1:-1:-1;10885:780:0;9918:2193;;;11748:13;;-1:-1:-1;;;;;11742:19:0;;;11748:13;;11742:19;:44;;;;-1:-1:-1;;;;;;11765:21:0;;11781:4;11765:21;;11742:44;11738:373;;;11819:29;11844:3;11819:20;11830:8;;11819:6;:10;;:20;;;;:::i;:29::-;11885:15;;11807:41;;-1:-1:-1;11885:30:0;;11807:41;11885:19;:30::i;:::-;11867:15;:48;11738:373;;;11989:13;;-1:-1:-1;;;;;11983:19:0;;;11989:13;;11983:19;:44;;;;-1:-1:-1;;;;;;12006:21:0;;12022:4;12006:21;11983:44;11979:132;;;12060:35;12091:3;12060:26;12071:14;;12060:6;:10;;:26;;;;:::i;:35::-;12048:47;;11979:132;12176:4;12127:28;7420:18;;;:9;:18;;;;;;12220:6;;-1:-1:-1;;;12220:6:0;;;;12219:7;:47;;;;-1:-1:-1;12253:13:0;;-1:-1:-1;;;;;12247:19:0;;;12253:13;;12247:19;12219:47;:79;;;;-1:-1:-1;12287:11:0;;-1:-1:-1;;;12287:11:0;;;;12219:79;:140;;;;;12342:17;;12319:20;:40;12219:140;:191;;;;;12392:18;;12380:9;;:30;12219:191;12197:658;;;12490:23;;12475:12;:38;12445:134;;;;-1:-1:-1;;;12445:134:0;;13540:2:1;12445:134:0;;;13522:21:1;13579:2;13559:18;;;13552:30;-1:-1:-1;;;13598:18:1;;;13591:52;13660:18;;12445:134:0;13338:346:1;12445:134:0;12598:20;12621:112;12647:6;12676:38;12680:20;12702:11;;12676:3;:38::i;:::-;12621:3;:112::i;:::-;12598:135;;12752:30;12769:12;12752:16;:30::i;:::-;-1:-1:-1;12827:12:0;12801:23;:38;12197:658;9298:3568;9260:3606;12882:13;;12878:172;;12957:4;12939:24;;;;:9;:24;;;;;;:39;;12968:9;12939:28;:39::i;:::-;12930:4;12912:24;;;;:9;:24;;;;;;;:66;;;;12998:40;;-1:-1:-1;;;;;12998:40:0;;;;;;;13028:9;3151:25:1;;3139:2;3124:18;;3005:177;12998:40:0;;;;;;;;12878:172;-1:-1:-1;;;;;13078:15:0;;;;;;:9;:15;;;;;;:27;;13098:6;13078:19;:27::i;:::-;-1:-1:-1;;;;;13060:15:0;;;;;;:9;:15;;;;;:45;13132:40;13150:21;:6;13161:9;13150:10;:21::i;:::-;-1:-1:-1;;;;;13132:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;13116:13:0;;;;;;;:9;:13;;;;;:56;;;;13188:41;;;13207:21;:6;13218:9;13207:10;:21::i;:::-;13188:41;;3151:25:1;;;3139:2;3124:18;13188:41:0;;;;;;;8988:4249;8885:4352;;;:::o;1481:224::-;1601:7;1637:12;1629:6;;;;1621:29;;;;-1:-1:-1;;;1621:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1661:9:0;1673:5;1677:1;1673;:5;:::i;:::-;1661:17;1481:224;-1:-1:-1;;;;;1481:224:0:o;14798:483::-;6549:6;:13;;-1:-1:-1;;;;6549:13:0;-1:-1:-1;;;6549:13:0;;;14900:16:::1;::::0;;14914:1:::1;14900:16:::0;;;;;::::1;::::0;;-1:-1:-1;;14900:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;14900:16:0::1;14876:40;;14945:4;14927;14932:1;14927:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14927:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;14971:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;14971:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;14927:7;;14971:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14961:4;14966:1;14961:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14961:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;15036:15:::1;::::0;15004:62:::1;::::0;15021:4:::1;::::0;15036:15:::1;15054:11:::0;15004:8:::1;:62::i;:::-;15077:15;::::0;:196:::1;::::0;-1:-1:-1;;;15077:196:0;;-1:-1:-1;;;;;15077:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;15158:11;;15077:15:::1;::::0;15200:4;;15227::::1;::::0;15247:15:::1;::::0;15077:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;6585:6:0;:14;;-1:-1:-1;;;;6585:14:0;;;-1:-1:-1;;;;14798:483:0:o;1150:179::-;1208:7;;1240:5;1244:1;1240;:5;:::i;:::-;1228:17;;1269:1;1264;:6;;1256:46;;;;-1:-1:-1;;;1256:46:0;;15139:2:1;1256:46:0;;;15121:21:1;15178:2;15158:18;;;15151:30;15217:29;15197:18;;;15190:57;15264:18;;1256:46:0;14937:351:1;1256:46:0;1320:1;1150:179;-1:-1:-1;;;1150:179:0:o;1713:246::-;1771:7;1795:1;1800;1795:6;1791:47;;-1:-1:-1;1825:1:0;1818:8;;1791:47;1848:9;1860:5;1864:1;1860;:5;:::i;:::-;1848:17;-1:-1:-1;1893:1:0;1884:5;1888:1;1848:17;1884:5;:::i;:::-;:10;1876:56;;;;-1:-1:-1;;;1876:56:0;;15752:2:1;1876:56:0;;;15734:21:1;15791:2;15771:18;;;15764:30;15830:34;15810:18;;;15803:62;-1:-1:-1;;;15881:18:1;;;15874:31;15922:19;;1876:56:0;15550:397:1;1967:132:0;2025:7;2052:39;2056:1;2059;2052:39;;;;;;;;;;;;;;;;;:3;:39::i;13866:809::-;14039:13;;-1:-1:-1;;;;;14039:13:0;13977:7;7420:18;;;:9;:18;;;;;;14064:22;14096:15;;;;;;;;;-1:-1:-1;;;;;14096:15:0;-1:-1:-1;;;;;14096:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14144:13;;14089:79;;-1:-1:-1;;;14089:79:0;;-1:-1:-1;;;;;14144:13:0;;;14089:79;;;4235:51:1;14089:40:0;;;;;4208:18:1;;14089:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14064:104;;14185:9;14181:487;;;14263:15;;:154;;-1:-1:-1;;;14263:154:0;;;;;16343:25:1;;;16384:18;;;16377:34;;;16427:18;;;16420:34;;;-1:-1:-1;;;;;14263:15:0;;;;:28;;16316:18:1;;14263:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14239:178;;;;;;14181:487;14502:15;;:154;;-1:-1:-1;;;14502:154:0;;;;;16343:25:1;;;16384:18;;;16377:34;;;16427:18;;;16420:34;;;-1:-1:-1;;;;;14502:15:0;;;;:28;;16316:18:1;;14502:154:0;16141:319:1;2338:130:0;2396:7;2423:37;2427:1;2430;2423:37;;;;;;;;;;;;;;;;;:3;:37::i;13570:288::-;13620:7;;13662:84;5172:2;13680:19;:12;13697:1;13680:16;:19::i;:::-;13670:30;;13662:43;:84::i;:::-;13640:106;;13757:21;13781:25;13807:11;13781:38;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;13781:38:0;;13570:288;-1:-1:-1;;;13570:288:0:o;14683:107::-;14740:7;14772:1;14768;:5;14767:15;;14781:1;14767:15;;;-1:-1:-1;14777:1:0;14683:107;-1:-1:-1;14683:107:0:o;1337:136::-;1395:7;1422:43;1426:1;1429;1422:43;;;;;;;;;;;;;;;;;:3;:43::i;2107:223::-;2227:7;2262:12;2255:5;2247:28;;;;-1:-1:-1;;;2247:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2286:9:0;2298:5;2302:1;2298;:5;:::i;2476:200::-;2596:7;2632:12;2624:6;2616:29;;;;-1:-1:-1;;;2616:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2663:5:0;2667:1;2663;:5;:::i;:::-;2656:12;2476:200;-1:-1:-1;;;;2476:200:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:127::-;813:10;808:3;804:20;801:1;794:31;844:4;841:1;834:15;868:4;865:1;858:15;884:131;-1:-1:-1;;;;;959:31:1;;949:42;;939:70;;1005:1;1002;995:12;1020:134;1088:20;;1117:31;1088:20;1117:31;:::i;:::-;1020:134;;;:::o;1159:908::-;1213:5;1266:3;1259:4;1251:6;1247:17;1243:27;1233:55;;1284:1;1281;1274:12;1233:55;1320:6;1307:20;1346:4;1369:18;1406:2;1402;1399:10;1396:36;;;1412:18;;:::i;:::-;1458:2;1455:1;1451:10;1490:2;1484:9;1553:2;1549:7;1544:2;1540;1536:11;1532:25;1524:6;1520:38;1608:6;1596:10;1593:22;1588:2;1576:10;1573:18;1570:46;1567:72;;;1619:18;;:::i;:::-;1655:2;1648:22;1705:18;;;1781:15;;;1777:24;;;1739:15;;;;-1:-1:-1;1813:15:1;;;1810:35;;;1841:1;1838;1831:12;1810:35;1877:2;1869:6;1865:15;1854:26;;1889:148;1905:6;1900:3;1897:15;1889:148;;;1971:23;1990:3;1971:23;:::i;:::-;1959:36;;2015:12;;;;1922;;;;1889:148;;;2055:6;1159:908;-1:-1:-1;;;;;;;1159:908:1:o;2072:416::-;2165:6;2173;2226:2;2214:9;2205:7;2201:23;2197:32;2194:52;;;2242:1;2239;2232:12;2194:52;2282:9;2269:23;2315:18;2307:6;2304:30;2301:50;;;2347:1;2344;2337:12;2301:50;2370:61;2423:7;2414:6;2403:9;2399:22;2370:61;:::i;:::-;2360:71;2478:2;2463:18;;;;2450:32;;-1:-1:-1;;;;2072:416:1:o;2493:315::-;2561:6;2569;2622:2;2610:9;2601:7;2597:23;2593:32;2590:52;;;2638:1;2635;2628:12;2590:52;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;:::-;2746:5;2798:2;2783:18;;;;2770:32;;-1:-1:-1;;;2493:315:1:o;3187:456::-;3264:6;3272;3280;3333:2;3321:9;3312:7;3308:23;3304:32;3301:52;;;3349:1;3346;3339:12;3301:52;3388:9;3375:23;3407:31;3432:5;3407:31;:::i;:::-;3457:5;-1:-1:-1;3514:2:1;3499:18;;3486:32;3527:33;3486:32;3527:33;:::i;:::-;3187:456;;3579:7;;-1:-1:-1;;;3633:2:1;3618:18;;;;3605:32;;3187:456::o;3837:247::-;3896:6;3949:2;3937:9;3928:7;3924:23;3920:32;3917:52;;;3965:1;3962;3955:12;3917:52;4004:9;3991:23;4023:31;4048:5;4023:31;:::i;4297:348::-;4381:6;4434:2;4422:9;4413:7;4409:23;4405:32;4402:52;;;4450:1;4447;4440:12;4402:52;4490:9;4477:23;4523:18;4515:6;4512:30;4509:50;;;4555:1;4552;4545:12;4509:50;4578:61;4631:7;4622:6;4611:9;4607:22;4578:61;:::i;4650:388::-;4718:6;4726;4779:2;4767:9;4758:7;4754:23;4750:32;4747:52;;;4795:1;4792;4785:12;4747:52;4834:9;4821:23;4853:31;4878:5;4853:31;:::i;:::-;4903:5;-1:-1:-1;4960:2:1;4945:18;;4932:32;4973:33;4932:32;4973:33;:::i;:::-;5025:7;5015:17;;;4650:388;;;;;:::o;5043:127::-;5104:10;5099:3;5095:20;5092:1;5085:31;5135:4;5132:1;5125:15;5159:4;5156:1;5149:15;5175:127;5236:10;5231:3;5227:20;5224:1;5217:31;5267:4;5264:1;5257:15;5291:4;5288:1;5281:15;5307:135;5346:3;5367:17;;;5364:43;;5387:18;;:::i;:::-;-1:-1:-1;5434:1:1;5423:13;;5307:135::o;5447:422::-;5536:1;5579:5;5536:1;5593:270;5614:7;5604:8;5601:21;5593:270;;;5673:4;5669:1;5665:6;5661:17;5655:4;5652:27;5649:53;;;5682:18;;:::i;:::-;5732:7;5722:8;5718:22;5715:55;;;5752:16;;;;5715:55;5831:22;;;;5791:15;;;;5593:270;;;5597:3;5447:422;;;;;:::o;5874:806::-;5923:5;5953:8;5943:80;;-1:-1:-1;5994:1:1;6008:5;;5943:80;6042:4;6032:76;;-1:-1:-1;6079:1:1;6093:5;;6032:76;6124:4;6142:1;6137:59;;;;6210:1;6205:130;;;;6117:218;;6137:59;6167:1;6158:10;;6181:5;;;6205:130;6242:3;6232:8;6229:17;6226:43;;;6249:18;;:::i;:::-;-1:-1:-1;;6305:1:1;6291:16;;6320:5;;6117:218;;6419:2;6409:8;6406:16;6400:3;6394:4;6391:13;6387:36;6381:2;6371:8;6368:16;6363:2;6357:4;6354:12;6350:35;6347:77;6344:159;;;-1:-1:-1;6456:19:1;;;6488:5;;6344:159;6535:34;6560:8;6554:4;6535:34;:::i;:::-;6605:6;6601:1;6597:6;6593:19;6584:7;6581:32;6578:58;;;6616:18;;:::i;:::-;6654:20;;5874:806;-1:-1:-1;;;5874:806:1:o;6685:140::-;6743:5;6772:47;6813:4;6803:8;6799:19;6793:4;6772:47;:::i;6830:168::-;6903:9;;;6934;;6951:15;;;6945:22;;6931:37;6921:71;;6972:18;;:::i;7003:356::-;7205:2;7187:21;;;7224:18;;;7217:30;7283:34;7278:2;7263:18;;7256:62;7350:2;7335:18;;7003:356::o;8070:251::-;8140:6;8193:2;8181:9;8172:7;8168:23;8164:32;8161:52;;;8209:1;8206;8199:12;8161:52;8241:9;8235:16;8260:31;8285:5;8260:31;:::i;9247:306::-;9335:6;9343;9351;9404:2;9392:9;9383:7;9379:23;9375:32;9372:52;;;9420:1;9417;9410:12;9372:52;9449:9;9443:16;9433:26;;9499:2;9488:9;9484:18;9478:25;9468:35;;9543:2;9532:9;9528:18;9522:25;9512:35;;9247:306;;;;;:::o;9837:277::-;9904:6;9957:2;9945:9;9936:7;9932:23;9928:32;9925:52;;;9973:1;9970;9963:12;9925:52;10005:9;9999:16;10058:5;10051:13;10044:21;10037:5;10034:32;10024:60;;10080:1;10077;10070:12;13689:128;13756:9;;;13777:11;;;13774:37;;;13791:18;;:::i;13822:980::-;14084:4;14132:3;14121:9;14117:19;14163:6;14152:9;14145:25;14189:2;14227:6;14222:2;14211:9;14207:18;14200:34;14270:3;14265:2;14254:9;14250:18;14243:31;14294:6;14329;14323:13;14360:6;14352;14345:22;14398:3;14387:9;14383:19;14376:26;;14437:2;14429:6;14425:15;14411:29;;14458:1;14468:195;14482:6;14479:1;14476:13;14468:195;;;14547:13;;-1:-1:-1;;;;;14543:39:1;14531:52;;14638:15;;;;14603:12;;;;14579:1;14497:9;14468:195;;;-1:-1:-1;;;;;;;14719:32:1;;;;14714:2;14699:18;;14692:60;-1:-1:-1;;;14783:3:1;14768:19;14761:35;14680:3;13822:980;-1:-1:-1;;;13822:980:1:o;14807:125::-;14872:9;;;14893:10;;;14890:36;;;14906:18;;:::i;15293:127::-;15354:10;15349:3;15345:20;15342:1;15335:31;15385:4;15382:1;15375:15;15409:4;15406:1;15399:15;15425:120;15465:1;15491;15481:35;;15496:18;;:::i;:::-;-1:-1:-1;15530:9:1;;15425:120::o;15952:184::-;16022:6;16075:2;16063:9;16054:7;16050:23;16046:32;16043:52;;;16091:1;16088;16081:12;16043:52;-1:-1:-1;16114:16:1;;15952:184;-1:-1:-1;15952:184:1:o;16465:112::-;16497:1;16523;16513:35;;16528:18;;:::i;:::-;-1:-1:-1;16562:9:1;;16465:112::o

Swarm Source

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