ETH Price: $2,356.51 (+1.13%)

Token

DROIDS (ROIDS)
 

Overview

Max Total Supply

1,000,000,000 ROIDS

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
72,209,033.252425609986350381 ROIDS

Value
$0.00
0x6edc33ba017bf633c5cd576f2a51e81ad5e84d19
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:
DROIDS

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-28
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity 0.8.15;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

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

contract ERC20 is Context, IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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);
    }
}

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() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint 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);
    function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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

contract TokenHandler is Ownable {
    function sendTokenToOwner(address token) external onlyOwner {
        if(IERC20(token).balanceOf(address(this)) > 0){
            IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this)));
        }
    }
}

contract DROIDS is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    IDexRouter public immutable dexRouter;
    address public immutable lpPair;
    address public immutable lpPairEth;

    bool public lpToEth;

    IERC20 public immutable STABLECOIN; 

    bool private swapping;
    uint256 public swapTokensAtAmount;

    // must be used with Stablecoin
    TokenHandler public immutable tokenHandler;

    address public marketingAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping (address => bool) public restrictedWallets;
    uint256 public blockForPenaltyEnd;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;

    uint256 constant FEE_DIVISOR = 10000;

    uint256 public tokensForMarketing;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    // Events

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdatedMaxSellAmount(uint256 newAmount);
    event UpdatedMaxWalletAmount(uint256 newAmount);
    event UpdatedBuyFee(uint256 newAmount);
    event UpdatedSellFee(uint256 newAmount);
    event UpdatedMarketingAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event CaughtEarlyBuyer(address sniper);
    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("DROIDS", "ROIDS") {

        lpToEth = true;

        address stablecoinAddress;
        address _dexRouter;

        // automatically detect router/desired stablecoin
        if(block.chainid == 1){
            stablecoinAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 4){
            stablecoinAddress  = 0xE7d541c18D6aDb863F4C570065c57b75a53a64d3; // Rinkeby Testnet USDC
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            stablecoinAddress  = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56; // BUSD
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            stablecoinAddress  = 0x78867BbEeF44f2326bF8DDd1941a4439382EF2A7; // BSC Testnet BUSD
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else {
            revert("Chain not configured");
        }

        STABLECOIN = IERC20(stablecoinAddress);
        require(STABLECOIN.decimals() > 0 , "Incorrect liquidity token");

        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), address(STABLECOIN));
        setAutomatedMarketMakerPair(address(lpPair), true);

        lpPairEth = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        setAutomatedMarketMakerPair(address(lpPairEth), true);

        uint256 totalSupply = 1 * 1e9 * 1e18;
        
        maxBuyAmount = totalSupply * 20 / 1000;
        maxSellAmount = totalSupply * 10 / 1000;
        maxWallet = totalSupply * 2 / 100;
        swapTokensAtAmount = totalSupply * 25 / 100000;

        tokenHandler = new TokenHandler();

        buyMarketingFee = 500;
        buyTotalFees = buyMarketingFee;

        sellMarketingFee = 500;
        sellTotalFees = sellMarketingFee;

        marketingAddress = 0x6EdC33ba017bf633c5cD576f2a51E81ad5E84D19;

        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(marketingAddress), true);
        _excludeFromMaxTransaction(address(dexRouter), true);

        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketingAddress), true);
        excludeFromFees(address(dexRouter), true);

        _createInitialSupply(address(msg.sender), totalSupply);
    }

    receive() external payable {}

    modifier lockSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    // Owner Functions

    function updateLpToEth(bool _lpToEth) external onlyOwner {
        if(_lpToEth){
            require(balanceOf(address(lpPairEth))>0, "Must have tokens in ETH pair to set as default LP pair");
        } else {
            require(balanceOf(address(lpPair))>0, "Must have tokens in STABLECOIN pair to set as default LP pair");
        }
        lpToEth = _lpToEth;
    }

    function enableTrading(uint256 blocksForPenalty) external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(blocksForPenalty <= 10, "Cannot make penalty blocks more than 10");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty;
        emit EnabledTrading();
    }

    function removeRestrictedWallets(address[] calldata wallets) external onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            restrictedWallets[wallets[i]] = false;
        }
    }
    
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        maxBuyAmount = totalSupply();
        maxSellAmount = totalSupply();
        emit RemovedLimits();
    }

    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = newNum * (10 ** decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }
    
    function updateMaxSellAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / (10 ** decimals()), "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = newNum * (10 ** decimals());
        emit UpdatedMaxSellAmount(maxSellAmount);
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 1000000, "Swap amount cannot be lower than 0.0001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
  	}
    
    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function withdrawStuckEth() public onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: address(this).balance}("");
        require(success);
    }

    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "address cannot be 0");
        marketingAddress = payable(_marketingAddress);
        emit UpdatedMarketingAddress(_marketingAddress);
    }
        
    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair || value, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _marketingFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyMarketingFee;
        require(buyTotalFees <= 1500, "Must keep fees at 15% or less");
        emit UpdatedBuyFee(buyTotalFees);
    }

    function updateSellFees(uint256 _marketingFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellMarketingFee;
        require(sellTotalFees <= 1500, "Must keep fees at 15% or less");
        emit UpdatedSellFee(sellTotalFees);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    // private / internal functions

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        // transfer of 0 is allowed, but triggers no logic.  In case of staking where a staking pool is paying out 0 rewards.
        if(amount == 0){
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }

        if(!earlyBuyPenaltyInEffect() && blockForPenaltyEnd > 0){
            require(!restrictedWallets[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address.");
        }

        if(limitsInEffect){
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]){
                
                //on buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                } 
                //on sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxSellAmount, "Sell transfer amount exceeds the max sell.");
                } 
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

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

        if(canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]) {
            if(lpToEth){
                swapBackEth();
            } else {
                swapBack();
            }
        }

        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;

        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.
            if(earlyBuyPenaltyInEffect() && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && buyTotalFees > 0){
                
                if(!restrictedWallets[to]){
                    restrictedWallets[to] = true;
                }
                
                fees = amount * buyTotalFees / FEE_DIVISOR;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }

            // on sell
            else if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees / FEE_DIVISOR;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }

            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees / FEE_DIVISOR;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    // if LP pair in use is STABLECOIN, this function will be used to handle fee distribution.

    function swapBack() private lockSwap {

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }
        
        swapTokensForSTABLECOIN(contractBalance);

        tokenHandler.sendTokenToOwner(address(STABLECOIN));

        tokensForMarketing = 0;

        if(STABLECOIN.balanceOf(address(this)) > 0){
            STABLECOIN.transfer(marketingAddress, STABLECOIN.balanceOf(address(this)));
        }
    }

    function swapTokensForSTABLECOIN(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = address(STABLECOIN);

        _approve(address(this), address(dexRouter), tokenAmount);

        dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(tokenHandler), block.timestamp);
    }

    // if LP pair in use is ETH, this function will be used to handle fee distribution.

    function swapBackEth() private lockSwap {
        bool success;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
            contractBalance = swapTokensAtAmount * 20;
        }

        swapTokensForEth(contractBalance);
        
        tokensForMarketing = 0;

        if(address(this).balance > 0){
            (success, ) = marketingAddress.call{value: address(this).balance}("");
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }

    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    //views

    function earlyBuyPenaltyInEffect() private view returns (bool){
        return block.number < blockForPenaltyEnd;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSellFee","type":"event"},{"inputs":[],"name":"STABLECOIN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPairEth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"removeRestrictedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"restrictedWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHandler","outputs":[{"internalType":"contract TokenHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","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":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_lpToEth","type":"bool"}],"name":"updateLpToEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101206040526000600c55600f805462ffffff191660011790553480156200002657600080fd5b506040518060400160405280600681526020016544524f49445360d01b81525060405180604001604052806005815260200164524f49445360d81b815250816003908162000075919062000aff565b50600462000084828262000aff565b5050506000620000996200070a60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506009805460ff19166001908117909155600090819046900362000137575073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489050737a250d5630b4cf539739df2c5dacb4c659f2488d62000238565b4660040362000173575073e7d541c18d6adb863f4c570065c57b75a53a64d39050737a250d5630b4cf539739df2c5dacb4c659f2488d62000238565b46603803620001af575073e9e7cea3dedca5984780bafc599bd69add087d5690507310ed43c718714eb63d5aa57b78b54704e256024e62000238565b46606103620001eb57507378867bbeef44f2326bf8ddd1941a4439382ef2a7905073d99d1c33f9fc3444f8101754abc46c52416550d162000238565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03821660e08190526040805163313ce56760e01b815290516000929163313ce5679160048083019260209291908290030181865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac919062000bcb565b60ff1611620002fe5760405162461bcd60e51b815260206004820152601960248201527f496e636f7272656374206c697175696469747920746f6b656e0000000000000060448201526064016200022f565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000349573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036f919062000bf7565b60e0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620003c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e7919062000bf7565b6001600160a01b031660a0819052620004029060016200070e565b6080516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000443573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000469919062000bf7565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004df919062000bf7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200052d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000553919062000bf7565b6001600160a01b031660c08190526200056e9060016200070e565b6b033b2e3c9fd0803ce80000006103e86200058b82601462000c38565b62000597919062000c5a565b6006556103e8620005aa82600a62000c38565b620005b6919062000c5a565b6007556064620005c882600262000c38565b620005d4919062000c5a565b600855620186a0620005e882601962000c38565b620005f4919062000c5a565b600a55604051620006059062000a4c565b604051809103906000f08015801562000622573d6000803e3d6000fd5b506001600160a01b0316610100526101f4601181905560108190556013819055601255600b80546001600160a01b031916736edc33ba017bf633c5cd576f2a51e81ad5e84d19179055620006783060016200085a565b6200068761dead60016200085a565b600b54620006a0906001600160a01b031660016200085a565b608051620006b09060016200085a565b620006bd306001620008bd565b620006cc61dead6001620008bd565b600b54620006e5906001600160a01b03166001620008bd565b608051620006f5906001620008bd565b62000701338262000967565b50505062000c98565b3390565b6005546001600160a01b03163314620007595760405162461bcd60e51b815260206004820181905260248201526000805160206200452383398151915260448201526064016200022f565b60a0516001600160a01b0316826001600160a01b03161415806200077a5750805b620007ee5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016200022f565b6001600160a01b0382166000908152601760205260409020805460ff19168215151790556200081e82826200085a565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260166020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03163314620009085760405162461bcd60e51b815260206004820181905260248201526000805160206200452383398151915260448201526064016200022f565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620009bf5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200022f565b8060026000828254620009d3919062000c7d565b90915550506001600160a01b0382166000908152602081905260408120805483929062000a0290849062000c7d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6104f7806200402c83390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a8557607f821691505b60208210810362000aa657634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000afa57600081815260208120601f850160051c8101602086101562000ad55750805b601f850160051c820191505b8181101562000af65782815560010162000ae1565b5050505b505050565b81516001600160401b0381111562000b1b5762000b1b62000a5a565b62000b338162000b2c845462000a70565b8462000aac565b602080601f83116001811462000b6b576000841562000b525750858301515b600019600386901b1c1916600185901b17855562000af6565b600085815260208120601f198616915b8281101562000b9c5788860151825594840194600190910190840162000b7b565b508582101562000bbb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000bde57600080fd5b815160ff8116811462000bf057600080fd5b9392505050565b60006020828403121562000c0a57600080fd5b81516001600160a01b038116811462000bf057600080fd5b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000c555762000c5562000c22565b500290565b60008262000c7857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000c935762000c9362000c22565b500190565b60805160a05160c05160e051610100516132e662000d46600039600081816103d70152818161276a0152612c770152600081816106d20152818161279701528181612810015281816128a70152612baf01526000818161071b01526116d80152600081816104bf01528181610ead0152818161145e0152611774015260008181610317015281816129ef01528181612aa801528181612ae401528181612c070152612c4301526132e66000f3fe6080604052600436106102ce5760003560e01c806388e765ff1161017b578063b62496f5116100d7578063dd62ed3e11610085578063dd62ed3e146108b8578063e2f45605146108fe578063eba4c33314610914578063ee40166e14610934578063f076e5351461094a578063f2fde38b1461097a578063f8b45b051461099a57600080fd5b8063b62496f5146107d3578063bbc0c74214610803578063c024666814610822578063d064e53f14610842578063d257b34f14610862578063d85ba06314610882578063dc3f0d0f1461089857600080fd5b806395d89b411161013457806395d89b41146106f457806396adebb3146107095780639a7a23d61461073d578063a457c2d71461075d578063a5ece9411461077d578063a62068ce1461079d578063a9059cbb146107b357600080fd5b806388e765ff1461063c5780638da5cb5b14610652578063906e9dd01461067057806390b89c9b1461069057806392136913146106aa57806393a39776146106c057600080fd5b80634a62bb651161022a57806371fc4688116101e357806371fc46881461057c578063751039fc1461059c5780637571336a146105b15780637bce5a04146105d15780637fa787ba146105e757806382aa7c68146105fc5780638366e79a1461061c57600080fd5b80634a62bb65146104e157806366d602ae146104fb5780636a486a8e146105115780636ddd17131461052757806370a0823114610547578063715018a61461056757600080fd5b80631f3fed8f116102875780631f3fed8f146103f957806323b872dd1461040f5780632be32b611461042f578063313ce5671461045157806337262b8d1461046d578063395093511461048d578063452ed4f1146104ad57600080fd5b806306fdde03146102da5780630758d92414610305578063095ea7b31461034657806310d5de531461037657806318160ddd146103a65780631b3d6e87146103c557600080fd5b366102d557005b600080fd5b3480156102e657600080fd5b506102ef6109b0565b6040516102fc9190612ca1565b60405180910390f35b34801561031157600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b6040516102fc9190612cf6565b34801561035257600080fd5b50610366610361366004612d1f565b610a42565b60405190151581526020016102fc565b34801561038257600080fd5b50610366610391366004612d4b565b60166020526000908152604090205460ff1681565b3480156103b257600080fd5b506002545b6040519081526020016102fc565b3480156103d157600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b34801561040557600080fd5b506103b760145481565b34801561041b57600080fd5b5061036661042a366004612d6f565b610a59565b34801561043b57600080fd5b5061044f61044a366004612db0565b610b08565b005b34801561045d57600080fd5b50604051601281526020016102fc565b34801561047957600080fd5b5061044f610488366004612dc9565b610c1c565b34801561049957600080fd5b506103666104a8366004612d1f565b610cbd565b3480156104b957600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ed57600080fd5b50600f546103669060ff1681565b34801561050757600080fd5b506103b760075481565b34801561051d57600080fd5b506103b760125481565b34801561053357600080fd5b50600f546103669062010000900460ff1681565b34801561055357600080fd5b506103b7610562366004612d4b565b610cf9565b34801561057357600080fd5b5061044f610d14565b34801561058857600080fd5b5061044f610597366004612db0565b610d88565b3480156105a857600080fd5b5061044f610e11565b3480156105bd57600080fd5b5061044f6105cc366004612e4c565b610e7c565b3480156105dd57600080fd5b506103b760115481565b3480156105f357600080fd5b5061044f610f67565b34801561060857600080fd5b5061044f610617366004612db0565b610fe9565b34801561062857600080fd5b50610366610637366004612e85565b611131565b34801561064857600080fd5b506103b760065481565b34801561065e57600080fd5b506005546001600160a01b0316610339565b34801561067c57600080fd5b5061044f61068b366004612d4b565b611363565b34801561069c57600080fd5b506009546103669060ff1681565b3480156106b657600080fd5b506103b760135481565b3480156106cc57600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b34801561070057600080fd5b506102ef611423565b34801561071557600080fd5b506103397f000000000000000000000000000000000000000000000000000000000000000081565b34801561074957600080fd5b5061044f610758366004612e4c565b611432565b34801561076957600080fd5b50610366610778366004612d1f565b611572565b34801561078957600080fd5b50600b54610339906001600160a01b031681565b3480156107a957600080fd5b506103b7600e5481565b3480156107bf57600080fd5b506103666107ce366004612d1f565b61160b565b3480156107df57600080fd5b506103666107ee366004612d4b565b60176020526000908152604090205460ff1681565b34801561080f57600080fd5b50600f5461036690610100900460ff1681565b34801561082e57600080fd5b5061044f61083d366004612e4c565b611618565b34801561084e57600080fd5b5061044f61085d366004612eb3565b6116a1565b34801561086e57600080fd5b5061044f61087d366004612db0565b61181e565b34801561088e57600080fd5b506103b760105481565b3480156108a457600080fd5b5061044f6108b3366004612db0565b61196a565b3480156108c457600080fd5b506103b76108d3366004612e85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090a57600080fd5b506103b7600a5481565b34801561092057600080fd5b5061044f61092f366004612db0565b611a78565b34801561094057600080fd5b506103b7600c5481565b34801561095657600080fd5b50610366610965366004612d4b565b600d6020526000908152604090205460ff1681565b34801561098657600080fd5b5061044f610995366004612d4b565b611b01565b3480156109a657600080fd5b506103b760085481565b6060600380546109bf90612ed0565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb90612ed0565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000610a4f338484611bec565b5060015b92915050565b6000610a66848484611d10565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610af05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610afd8533858403611bec565b506001949350505050565b6005546001600160a01b03163314610b325760405162461bcd60e51b8152600401610ae790612f0a565b610b3e6012600a613039565b6103e8610b4a60025490565b610b55906001613048565b610b5f9190613067565b610b699190613067565b811015610bca5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610ae7565b610bd66012600a613039565b610be09082613048565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610c465760405162461bcd60e51b8152600401610ae790612f0a565b60005b81811015610cb8576000600d6000858585818110610c6957610c69613089565b9050602002016020810190610c7e9190612d4b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cb08161309f565b915050610c49565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a4f918590610cf49086906130b8565b611bec565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d3e5760405162461bcd60e51b8152600401610ae790612f0a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610db25760405162461bcd60e51b8152600401610ae790612f0a565b601181905560108190556105dc811115610dde5760405162461bcd60e51b8152600401610ae7906130d0565b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f601054604051610c1191815260200190565b6005546001600160a01b03163314610e3b5760405162461bcd60e51b8152600401610ae790612f0a565b600f805460ff191690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610ae790612f0a565b80610f3c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610f3c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ae7565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610ae790612f0a565b604051600090339047908381818185875af1925050503d8060008114610fd3576040519150601f19603f3d011682016040523d82523d6000602084013e610fd8565b606091505b5050905080610fe657600080fd5b50565b6005546001600160a01b031633146110135760405162461bcd60e51b8152600401610ae790612f0a565b600f54610100900460ff161561107f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ae7565b600a8111156110e05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610ae7565b600f805462ffff0019166201010017905543600c8190556111029082906130b8565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461115e5760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b0383166111b45760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ae7565b6001600160a01b038316301415806111d45750600f54610100900460ff16155b61123d5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ae7565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061126c903090600401612cf6565b602060405180830381865afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613107565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb906112de9086908590600401613120565b6020604051808303816000875af11580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190613139565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611354929190613120565b60405180910390a15092915050565b6005546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b0381166113d95760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610ae7565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b6060600480546109bf90612ed0565b6005546001600160a01b0316331461145c5760405162461bcd60e51b8152600401610ae790612f0a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158061149a5750805b6115085760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152786175746f6d617465644d61726b65744d616b6572506169727360381b6064820152608401610ae7565b6001600160a01b0382166000908152601760205260409020805460ff19168215151790556115368282612459565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ae7565b6116013385858403611bec565b5060019392505050565b6000610a4f338484611d10565b6005546001600160a01b031633146116425760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610ae790612f0a565b801561176d5760006116fc7f0000000000000000000000000000000000000000000000000000000000000000610cf9565b116117685760405162461bcd60e51b815260206004820152603660248201527f4d757374206861766520746f6b656e7320696e20455448207061697220746f2060448201527539b2ba1030b9903232b330bab63a102628103830b4b960511b6064820152608401610ae7565b61180b565b60006117987f0000000000000000000000000000000000000000000000000000000000000000610cf9565b1161180b5760405162461bcd60e51b815260206004820152603d60248201527f4d757374206861766520746f6b656e7320696e20535441424c45434f494e207060448201527f61697220746f207365742061732064656661756c74204c5020706169720000006064820152608401610ae7565b6009805460ff1916911515919091179055565b6005546001600160a01b031633146118485760405162461bcd60e51b8152600401610ae790612f0a565b620f424061185560025490565b611860906001613048565b61186a9190613067565b8110156118d85760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e6044820152751018171818181892903a37ba30b61039bab838363c9760511b6064820152608401610ae7565b6103e86118e460025490565b6118ef906001613048565b6118f99190613067565b8111156119655760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ae7565b600a55565b6005546001600160a01b031633146119945760405162461bcd60e51b8152600401610ae790612f0a565b6119a06012600a613039565b6103e86119ac60025490565b6119b7906001613048565b6119c19190613067565b6119cb9190613067565b811015611a2d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610ae7565b611a396012600a613039565b611a439082613048565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610c11565b6005546001600160a01b03163314611aa25760405162461bcd60e51b8152600401610ae790612f0a565b601381905560128190556105dc811115611ace5760405162461bcd60e51b8152600401610ae7906130d0565b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93601254604051610c1191815260200190565b6005546001600160a01b03163314611b2b5760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b038116611b905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611c4e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae7565b6001600160a01b038216611caf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d365760405162461bcd60e51b8152600401610ae790613156565b6001600160a01b038216611d5c5760405162461bcd60e51b8152600401610ae79061319b565b80600003611d7057610cb8838360006124bc565b600f54610100900460ff16611e03576001600160a01b03831660009081526015602052604090205460ff1680611dbe57506001600160a01b03821660009081526015602052604090205460ff165b611e035760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ae7565b600e544310158015611e1757506000600e54115b15611ee7576001600160a01b0383166000908152600d602052604090205460ff161580611e5157506005546001600160a01b038381169116145b80611e6657506001600160a01b03821661dead145b611ee75760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ae7565b600f5460ff1615612179576005546001600160a01b03848116911614801590611f1e57506005546001600160a01b03838116911614155b8015611f3257506001600160a01b03821615155b8015611f4957506001600160a01b03821661dead14155b8015611f6e57506001600160a01b03831660009081526015602052604090205460ff16155b8015611f9357506001600160a01b03821660009081526015602052604090205460ff16155b15612179576001600160a01b03831660009081526017602052604090205460ff168015611fd957506001600160a01b03821660009081526016602052604090205460ff16155b1561207a576006548111156120415760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ae7565b60085461204d83610cf9565b61205790836130b8565b11156120755760405162461bcd60e51b8152600401610ae7906131de565b612179565b6001600160a01b03821660009081526017602052604090205460ff1680156120bb57506001600160a01b03831660009081526016602052604090205460ff16155b15612125576007548111156120755760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ae7565b6001600160a01b03821660009081526016602052604090205460ff166121795760085461215183610cf9565b61215b90836130b8565b11156121795760405162461bcd60e51b8152600401610ae7906131de565b600061218430610cf9565b600a54909150811080159081906121a35750600f5462010000900460ff165b80156121b75750600954610100900460ff16155b80156121db57506001600160a01b03841660009081526017602052604090205460ff165b156122005760095460ff16156121f8576121f3612611565b612200565b6122006126ed565b6001600160a01b03851660009081526015602052604090205460019060ff168061224257506001600160a01b03851660009081526015602052604090205460ff165b1561224b575060005b6000811561244557600e544310801561227c57506001600160a01b03871660009081526017602052604090205460ff165b80156122a157506001600160a01b03861660009081526017602052604090205460ff16155b80156122af57506000601054115b1561234c576001600160a01b0386166000908152600d602052604090205460ff166122f8576001600160a01b0386166000908152600d60205260409020805460ff191660011790555b612710601054866123099190613048565b6123139190613067565b9050601054601154826123269190613048565b6123309190613067565b6014600082825461234191906130b8565b909155506124279050565b6001600160a01b03861660009081526017602052604090205460ff16801561237657506000601254115b156123a9576127106012548661238c9190613048565b6123969190613067565b9050601254601354826123269190613048565b6001600160a01b03871660009081526017602052604090205460ff1680156123d357506000601054115b1561242757612710601054866123e99190613048565b6123f39190613067565b9050601054601154826124069190613048565b6124109190613067565b6014600082825461242191906130b8565b90915550505b8015612438576124388730836124bc565b612442818661320b565b94505b6124508787876124bc565b50505050505050565b6001600160a01b038216600081815260166020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0383166124e25760405162461bcd60e51b8152600401610ae790613156565b6001600160a01b0382166125085760405162461bcd60e51b8152600401610ae79061319b565b6001600160a01b038316600090815260208190526040902054818110156125805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ae7565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125b79084906130b8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161260391815260200190565b60405180910390a350505050565b6009805461ff00191661010017905560008061262c30610cf9565b60145490915081158061263d575080155b1561264a575050506126e0565b600a54612658906014613048565b82111561267057600a5461266d906014613048565b91505b61267982612998565b600060145547156126dc57600b546040516001600160a01b03909116904790600081818185875af1925050503d80600081146126d1576040519150601f19603f3d011682016040523d82523d6000602084013e6126d6565b606091505b50909350505b5050505b6009805461ff0019169055565b6009805461ff001916610100179055600061270730610cf9565b601454909150811580612718575080155b156127245750506126e0565b600a54612732906014613048565b82111561274a57600a54612747906014613048565b91505b61275382612b58565b6040516304fa881160e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906313ea2044906127bf907f000000000000000000000000000000000000000000000000000000000000000090600401612cf6565b600060405180830381600087803b1580156127d957600080fd5b505af11580156127ed573d6000803e3d6000fd5b5050600060148190556040516370a0823160e01b81529092506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691506370a0823190612846903090600401612cf6565b602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128879190613107565b111561298957600b546040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb9291169083906370a08231906128e8903090600401612cf6565b602060405180830381865afa158015612905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129299190613107565b6040518363ffffffff1660e01b8152600401612946929190613120565b6020604051808303816000875af1158015612965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dc9190613139565b50506009805461ff0019169055565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129cd576129cd613089565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6f9190613222565b81600181518110612a8257612a82613089565b60200260200101906001600160a01b031690816001600160a01b031681525050612acd307f000000000000000000000000000000000000000000000000000000000000000084611bec565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612b2290859060009086903090429060040161323f565b600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b8d57612b8d613089565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612be157612be1613089565b60200260200101906001600160a01b031690816001600160a01b031681525050612c2c307f000000000000000000000000000000000000000000000000000000000000000084611bec565b604051635c11d79560e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c11d79590612b2290859060009086907f000000000000000000000000000000000000000000000000000000000000000090429060040161323f565b600060208083528351808285015260005b81811015612cce57858101830151858201604001528201612cb2565b81811115612ce0576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610fe657600080fd5b60008060408385031215612d3257600080fd5b8235612d3d81612d0a565b946020939093013593505050565b600060208284031215612d5d57600080fd5b8135612d6881612d0a565b9392505050565b600080600060608486031215612d8457600080fd5b8335612d8f81612d0a565b92506020840135612d9f81612d0a565b929592945050506040919091013590565b600060208284031215612dc257600080fd5b5035919050565b60008060208385031215612ddc57600080fd5b823567ffffffffffffffff80821115612df457600080fd5b818501915085601f830112612e0857600080fd5b813581811115612e1757600080fd5b8660208260051b8501011115612e2c57600080fd5b60209290920196919550909350505050565b8015158114610fe657600080fd5b60008060408385031215612e5f57600080fd5b8235612e6a81612d0a565b91506020830135612e7a81612e3e565b809150509250929050565b60008060408385031215612e9857600080fd5b8235612ea381612d0a565b91506020830135612e7a81612d0a565b600060208284031215612ec557600080fd5b8135612d6881612e3e565b600181811c90821680612ee457607f821691505b602082108103612f0457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f90578160001904821115612f7657612f76612f3f565b80851615612f8357918102915b93841c9390800290612f5a565b509250929050565b600082612fa757506001610a53565b81612fb457506000610a53565b8160018114612fca5760028114612fd457612ff0565b6001915050610a53565b60ff841115612fe557612fe5612f3f565b50506001821b610a53565b5060208310610133831016604e8410600b8410161715613013575081810a610a53565b61301d8383612f55565b806000190482111561303157613031612f3f565b029392505050565b6000612d6860ff841683612f98565b600081600019048311821515161561306257613062612f3f565b500290565b60008261308457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016130b1576130b1612f3f565b5060010190565b600082198211156130cb576130cb612f3f565b500190565b6020808252601d908201527f4d757374206b656570206665657320617420313525206f72206c657373000000604082015260600190565b60006020828403121561311957600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561314b57600080fd5b8151612d6881612e3e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b60008282101561321d5761321d612f3f565b500390565b60006020828403121561323457600080fd5b8151612d6881612d0a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561328f5784516001600160a01b03168352938301939183019160010161326a565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122027d68e2e747820ad7a4db9c6378ba02de1523e759580a6f8b3246bf9600a867464736f6c634300080f0033608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610496806100616000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806313ea204414610051578063715018a6146100665780638da5cb5b1461006e578063f2fde38b14610090575b600080fd5b61006461005f3660046103ac565b6100a3565b005b61006461024e565b6000546001600160a01b031660405161008791906103dc565b60405180910390f35b61006461009e3660046103ac565b6102c2565b6000546001600160a01b031633146100d65760405162461bcd60e51b81526004016100cd906103f0565b60405180910390fd5b6040516370a0823160e01b81526000906001600160a01b038316906370a08231906101059030906004016103dc565b602060405180830381865afa158015610122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101469190610425565b111561024b57806001600160a01b031663a9059cbb61016d6000546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b038516906370a08231906101999030906004016103dc565b602060405180830381865afa1580156101b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101da9190610425565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610249919061043e565b505b50565b6000546001600160a01b031633146102785760405162461bcd60e51b81526004016100cd906103f0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102ec5760405162461bcd60e51b81526004016100cd906103f0565b6001600160a01b0381166103515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016100cd565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156103be57600080fd5b81356001600160a01b03811681146103d557600080fd5b9392505050565b6001600160a01b0391909116815260200190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561043757600080fd5b5051919050565b60006020828403121561045057600080fd5b815180151581146103d557600080fdfea26469706673582212203e4e3d2f8ec2010bef876e066fd24f7a5a3b4fa01e6ccb1f5f8e89212e28516f64736f6c634300080f00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106102ce5760003560e01c806388e765ff1161017b578063b62496f5116100d7578063dd62ed3e11610085578063dd62ed3e146108b8578063e2f45605146108fe578063eba4c33314610914578063ee40166e14610934578063f076e5351461094a578063f2fde38b1461097a578063f8b45b051461099a57600080fd5b8063b62496f5146107d3578063bbc0c74214610803578063c024666814610822578063d064e53f14610842578063d257b34f14610862578063d85ba06314610882578063dc3f0d0f1461089857600080fd5b806395d89b411161013457806395d89b41146106f457806396adebb3146107095780639a7a23d61461073d578063a457c2d71461075d578063a5ece9411461077d578063a62068ce1461079d578063a9059cbb146107b357600080fd5b806388e765ff1461063c5780638da5cb5b14610652578063906e9dd01461067057806390b89c9b1461069057806392136913146106aa57806393a39776146106c057600080fd5b80634a62bb651161022a57806371fc4688116101e357806371fc46881461057c578063751039fc1461059c5780637571336a146105b15780637bce5a04146105d15780637fa787ba146105e757806382aa7c68146105fc5780638366e79a1461061c57600080fd5b80634a62bb65146104e157806366d602ae146104fb5780636a486a8e146105115780636ddd17131461052757806370a0823114610547578063715018a61461056757600080fd5b80631f3fed8f116102875780631f3fed8f146103f957806323b872dd1461040f5780632be32b611461042f578063313ce5671461045157806337262b8d1461046d578063395093511461048d578063452ed4f1146104ad57600080fd5b806306fdde03146102da5780630758d92414610305578063095ea7b31461034657806310d5de531461037657806318160ddd146103a65780631b3d6e87146103c557600080fd5b366102d557005b600080fd5b3480156102e657600080fd5b506102ef6109b0565b6040516102fc9190612ca1565b60405180910390f35b34801561031157600080fd5b506103397f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516102fc9190612cf6565b34801561035257600080fd5b50610366610361366004612d1f565b610a42565b60405190151581526020016102fc565b34801561038257600080fd5b50610366610391366004612d4b565b60166020526000908152604090205460ff1681565b3480156103b257600080fd5b506002545b6040519081526020016102fc565b3480156103d157600080fd5b506103397f0000000000000000000000003bda6a1d7acabb0e9abec9efa5d41a29e22f897c81565b34801561040557600080fd5b506103b760145481565b34801561041b57600080fd5b5061036661042a366004612d6f565b610a59565b34801561043b57600080fd5b5061044f61044a366004612db0565b610b08565b005b34801561045d57600080fd5b50604051601281526020016102fc565b34801561047957600080fd5b5061044f610488366004612dc9565b610c1c565b34801561049957600080fd5b506103666104a8366004612d1f565b610cbd565b3480156104b957600080fd5b506103397f0000000000000000000000007f23765b3dc4abe4799257666740d87109dcf0e481565b3480156104ed57600080fd5b50600f546103669060ff1681565b34801561050757600080fd5b506103b760075481565b34801561051d57600080fd5b506103b760125481565b34801561053357600080fd5b50600f546103669062010000900460ff1681565b34801561055357600080fd5b506103b7610562366004612d4b565b610cf9565b34801561057357600080fd5b5061044f610d14565b34801561058857600080fd5b5061044f610597366004612db0565b610d88565b3480156105a857600080fd5b5061044f610e11565b3480156105bd57600080fd5b5061044f6105cc366004612e4c565b610e7c565b3480156105dd57600080fd5b506103b760115481565b3480156105f357600080fd5b5061044f610f67565b34801561060857600080fd5b5061044f610617366004612db0565b610fe9565b34801561062857600080fd5b50610366610637366004612e85565b611131565b34801561064857600080fd5b506103b760065481565b34801561065e57600080fd5b506005546001600160a01b0316610339565b34801561067c57600080fd5b5061044f61068b366004612d4b565b611363565b34801561069c57600080fd5b506009546103669060ff1681565b3480156106b657600080fd5b506103b760135481565b3480156106cc57600080fd5b506103397f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b34801561070057600080fd5b506102ef611423565b34801561071557600080fd5b506103397f00000000000000000000000037fbe5e3b5335f8feedc8427de2c04783e0db69f81565b34801561074957600080fd5b5061044f610758366004612e4c565b611432565b34801561076957600080fd5b50610366610778366004612d1f565b611572565b34801561078957600080fd5b50600b54610339906001600160a01b031681565b3480156107a957600080fd5b506103b7600e5481565b3480156107bf57600080fd5b506103666107ce366004612d1f565b61160b565b3480156107df57600080fd5b506103666107ee366004612d4b565b60176020526000908152604090205460ff1681565b34801561080f57600080fd5b50600f5461036690610100900460ff1681565b34801561082e57600080fd5b5061044f61083d366004612e4c565b611618565b34801561084e57600080fd5b5061044f61085d366004612eb3565b6116a1565b34801561086e57600080fd5b5061044f61087d366004612db0565b61181e565b34801561088e57600080fd5b506103b760105481565b3480156108a457600080fd5b5061044f6108b3366004612db0565b61196a565b3480156108c457600080fd5b506103b76108d3366004612e85565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561090a57600080fd5b506103b7600a5481565b34801561092057600080fd5b5061044f61092f366004612db0565b611a78565b34801561094057600080fd5b506103b7600c5481565b34801561095657600080fd5b50610366610965366004612d4b565b600d6020526000908152604090205460ff1681565b34801561098657600080fd5b5061044f610995366004612d4b565b611b01565b3480156109a657600080fd5b506103b760085481565b6060600380546109bf90612ed0565b80601f01602080910402602001604051908101604052809291908181526020018280546109eb90612ed0565b8015610a385780601f10610a0d57610100808354040283529160200191610a38565b820191906000526020600020905b815481529060010190602001808311610a1b57829003601f168201915b5050505050905090565b6000610a4f338484611bec565b5060015b92915050565b6000610a66848484611d10565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610af05760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610afd8533858403611bec565b506001949350505050565b6005546001600160a01b03163314610b325760405162461bcd60e51b8152600401610ae790612f0a565b610b3e6012600a613039565b6103e8610b4a60025490565b610b55906001613048565b610b5f9190613067565b610b699190613067565b811015610bca5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152687468616e20302e312560b81b6064820152608401610ae7565b610bd66012600a613039565b610be09082613048565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b6005546001600160a01b03163314610c465760405162461bcd60e51b8152600401610ae790612f0a565b60005b81811015610cb8576000600d6000858585818110610c6957610c69613089565b9050602002016020810190610c7e9190612d4b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610cb08161309f565b915050610c49565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a4f918590610cf49086906130b8565b611bec565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d3e5760405162461bcd60e51b8152600401610ae790612f0a565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610db25760405162461bcd60e51b8152600401610ae790612f0a565b601181905560108190556105dc811115610dde5760405162461bcd60e51b8152600401610ae7906130d0565b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f601054604051610c1191815260200190565b6005546001600160a01b03163314610e3b5760405162461bcd60e51b8152600401610ae790612f0a565b600f805460ff191690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b03163314610ea65760405162461bcd60e51b8152600401610ae790612f0a565b80610f3c577f0000000000000000000000007f23765b3dc4abe4799257666740d87109dcf0e46001600160a01b0316826001600160a01b031603610f3c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ae7565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f915760405162461bcd60e51b8152600401610ae790612f0a565b604051600090339047908381818185875af1925050503d8060008114610fd3576040519150601f19603f3d011682016040523d82523d6000602084013e610fd8565b606091505b5050905080610fe657600080fd5b50565b6005546001600160a01b031633146110135760405162461bcd60e51b8152600401610ae790612f0a565b600f54610100900460ff161561107f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ae7565b600a8111156110e05760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060448201526607468616e2031360cc1b6064820152608401610ae7565b600f805462ffff0019166201010017905543600c8190556111029082906130b8565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b0316331461115e5760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b0383166111b45760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ae7565b6001600160a01b038316301415806111d45750600f54610100900460ff16155b61123d5760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ae7565b6040516370a0823160e01b81526000906001600160a01b038516906370a082319061126c903090600401612cf6565b602060405180830381865afa158015611289573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ad9190613107565b60405163a9059cbb60e01b81529091506001600160a01b0385169063a9059cbb906112de9086908590600401613120565b6020604051808303816000875af11580156112fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113219190613139565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611354929190613120565b60405180910390a15092915050565b6005546001600160a01b0316331461138d5760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b0381166113d95760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610ae7565b600b80546001600160a01b0319166001600160a01b0383169081179091556040517fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a990600090a250565b6060600480546109bf90612ed0565b6005546001600160a01b0316331461145c5760405162461bcd60e51b8152600401610ae790612f0a565b7f0000000000000000000000007f23765b3dc4abe4799257666740d87109dcf0e46001600160a01b0316826001600160a01b031614158061149a5750805b6115085760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d206044820152786175746f6d617465644d61726b65744d616b6572506169727360381b6064820152608401610ae7565b6001600160a01b0382166000908152601760205260409020805460ff19168215151790556115368282612459565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115f45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ae7565b6116013385858403611bec565b5060019392505050565b6000610a4f338484611d10565b6005546001600160a01b031633146116425760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146116cb5760405162461bcd60e51b8152600401610ae790612f0a565b801561176d5760006116fc7f00000000000000000000000037fbe5e3b5335f8feedc8427de2c04783e0db69f610cf9565b116117685760405162461bcd60e51b815260206004820152603660248201527f4d757374206861766520746f6b656e7320696e20455448207061697220746f2060448201527539b2ba1030b9903232b330bab63a102628103830b4b960511b6064820152608401610ae7565b61180b565b60006117987f0000000000000000000000007f23765b3dc4abe4799257666740d87109dcf0e4610cf9565b1161180b5760405162461bcd60e51b815260206004820152603d60248201527f4d757374206861766520746f6b656e7320696e20535441424c45434f494e207060448201527f61697220746f207365742061732064656661756c74204c5020706169720000006064820152608401610ae7565b6009805460ff1916911515919091179055565b6005546001600160a01b031633146118485760405162461bcd60e51b8152600401610ae790612f0a565b620f424061185560025490565b611860906001613048565b61186a9190613067565b8110156118d85760405162461bcd60e51b815260206004820152603660248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e6044820152751018171818181892903a37ba30b61039bab838363c9760511b6064820152608401610ae7565b6103e86118e460025490565b6118ef906001613048565b6118f99190613067565b8111156119655760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610ae7565b600a55565b6005546001600160a01b031633146119945760405162461bcd60e51b8152600401610ae790612f0a565b6119a06012600a613039565b6103e86119ac60025490565b6119b7906001613048565b6119c19190613067565b6119cb9190613067565b811015611a2d5760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604482015269207468616e20302e312560b01b6064820152608401610ae7565b611a396012600a613039565b611a439082613048565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e90602001610c11565b6005546001600160a01b03163314611aa25760405162461bcd60e51b8152600401610ae790612f0a565b601381905560128190556105dc811115611ace5760405162461bcd60e51b8152600401610ae7906130d0565b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93601254604051610c1191815260200190565b6005546001600160a01b03163314611b2b5760405162461bcd60e51b8152600401610ae790612f0a565b6001600160a01b038116611b905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ae7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611c4e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae7565b6001600160a01b038216611caf5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ae7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d365760405162461bcd60e51b8152600401610ae790613156565b6001600160a01b038216611d5c5760405162461bcd60e51b8152600401610ae79061319b565b80600003611d7057610cb8838360006124bc565b600f54610100900460ff16611e03576001600160a01b03831660009081526015602052604090205460ff1680611dbe57506001600160a01b03821660009081526015602052604090205460ff165b611e035760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ae7565b600e544310158015611e1757506000600e54115b15611ee7576001600160a01b0383166000908152600d602052604090205460ff161580611e5157506005546001600160a01b038381169116145b80611e6657506001600160a01b03821661dead145b611ee75760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610ae7565b600f5460ff1615612179576005546001600160a01b03848116911614801590611f1e57506005546001600160a01b03838116911614155b8015611f3257506001600160a01b03821615155b8015611f4957506001600160a01b03821661dead14155b8015611f6e57506001600160a01b03831660009081526015602052604090205460ff16155b8015611f9357506001600160a01b03821660009081526015602052604090205460ff16155b15612179576001600160a01b03831660009081526017602052604090205460ff168015611fd957506001600160a01b03821660009081526016602052604090205460ff16155b1561207a576006548111156120415760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ae7565b60085461204d83610cf9565b61205790836130b8565b11156120755760405162461bcd60e51b8152600401610ae7906131de565b612179565b6001600160a01b03821660009081526017602052604090205460ff1680156120bb57506001600160a01b03831660009081526016602052604090205460ff16155b15612125576007548111156120755760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ae7565b6001600160a01b03821660009081526016602052604090205460ff166121795760085461215183610cf9565b61215b90836130b8565b11156121795760405162461bcd60e51b8152600401610ae7906131de565b600061218430610cf9565b600a54909150811080159081906121a35750600f5462010000900460ff165b80156121b75750600954610100900460ff16155b80156121db57506001600160a01b03841660009081526017602052604090205460ff165b156122005760095460ff16156121f8576121f3612611565b612200565b6122006126ed565b6001600160a01b03851660009081526015602052604090205460019060ff168061224257506001600160a01b03851660009081526015602052604090205460ff165b1561224b575060005b6000811561244557600e544310801561227c57506001600160a01b03871660009081526017602052604090205460ff165b80156122a157506001600160a01b03861660009081526017602052604090205460ff16155b80156122af57506000601054115b1561234c576001600160a01b0386166000908152600d602052604090205460ff166122f8576001600160a01b0386166000908152600d60205260409020805460ff191660011790555b612710601054866123099190613048565b6123139190613067565b9050601054601154826123269190613048565b6123309190613067565b6014600082825461234191906130b8565b909155506124279050565b6001600160a01b03861660009081526017602052604090205460ff16801561237657506000601254115b156123a9576127106012548661238c9190613048565b6123969190613067565b9050601254601354826123269190613048565b6001600160a01b03871660009081526017602052604090205460ff1680156123d357506000601054115b1561242757612710601054866123e99190613048565b6123f39190613067565b9050601054601154826124069190613048565b6124109190613067565b6014600082825461242191906130b8565b90915550505b8015612438576124388730836124bc565b612442818661320b565b94505b6124508787876124bc565b50505050505050565b6001600160a01b038216600081815260166020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0383166124e25760405162461bcd60e51b8152600401610ae790613156565b6001600160a01b0382166125085760405162461bcd60e51b8152600401610ae79061319b565b6001600160a01b038316600090815260208190526040902054818110156125805760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ae7565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906125b79084906130b8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161260391815260200190565b60405180910390a350505050565b6009805461ff00191661010017905560008061262c30610cf9565b60145490915081158061263d575080155b1561264a575050506126e0565b600a54612658906014613048565b82111561267057600a5461266d906014613048565b91505b61267982612998565b600060145547156126dc57600b546040516001600160a01b03909116904790600081818185875af1925050503d80600081146126d1576040519150601f19603f3d011682016040523d82523d6000602084013e6126d6565b606091505b50909350505b5050505b6009805461ff0019169055565b6009805461ff001916610100179055600061270730610cf9565b601454909150811580612718575080155b156127245750506126e0565b600a54612732906014613048565b82111561274a57600a54612747906014613048565b91505b61275382612b58565b6040516304fa881160e21b81526001600160a01b037f0000000000000000000000003bda6a1d7acabb0e9abec9efa5d41a29e22f897c16906313ea2044906127bf907f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4890600401612cf6565b600060405180830381600087803b1580156127d957600080fd5b505af11580156127ed573d6000803e3d6000fd5b5050600060148190556040516370a0823160e01b81529092506001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481691506370a0823190612846903090600401612cf6565b602060405180830381865afa158015612863573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128879190613107565b111561298957600b546040516370a0823160e01b81526001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881169263a9059cbb9291169083906370a08231906128e8903090600401612cf6565b602060405180830381865afa158015612905573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129299190613107565b6040518363ffffffff1660e01b8152600401612946929190613120565b6020604051808303816000875af1158015612965573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126dc9190613139565b50506009805461ff0019169055565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106129cd576129cd613089565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6f9190613222565b81600181518110612a8257612a82613089565b60200260200101906001600160a01b031690816001600160a01b031681525050612acd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bec565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612b2290859060009086903090429060040161323f565b600060405180830381600087803b158015612b3c57600080fd5b505af1158015612b50573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b8d57612b8d613089565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110612be157612be1613089565b60200260200101906001600160a01b031690816001600160a01b031681525050612c2c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611bec565b604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690635c11d79590612b2290859060009086907f0000000000000000000000003bda6a1d7acabb0e9abec9efa5d41a29e22f897c90429060040161323f565b600060208083528351808285015260005b81811015612cce57858101830151858201604001528201612cb2565b81811115612ce0576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610fe657600080fd5b60008060408385031215612d3257600080fd5b8235612d3d81612d0a565b946020939093013593505050565b600060208284031215612d5d57600080fd5b8135612d6881612d0a565b9392505050565b600080600060608486031215612d8457600080fd5b8335612d8f81612d0a565b92506020840135612d9f81612d0a565b929592945050506040919091013590565b600060208284031215612dc257600080fd5b5035919050565b60008060208385031215612ddc57600080fd5b823567ffffffffffffffff80821115612df457600080fd5b818501915085601f830112612e0857600080fd5b813581811115612e1757600080fd5b8660208260051b8501011115612e2c57600080fd5b60209290920196919550909350505050565b8015158114610fe657600080fd5b60008060408385031215612e5f57600080fd5b8235612e6a81612d0a565b91506020830135612e7a81612e3e565b809150509250929050565b60008060408385031215612e9857600080fd5b8235612ea381612d0a565b91506020830135612e7a81612d0a565b600060208284031215612ec557600080fd5b8135612d6881612e3e565b600181811c90821680612ee457607f821691505b602082108103612f0457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612f90578160001904821115612f7657612f76612f3f565b80851615612f8357918102915b93841c9390800290612f5a565b509250929050565b600082612fa757506001610a53565b81612fb457506000610a53565b8160018114612fca5760028114612fd457612ff0565b6001915050610a53565b60ff841115612fe557612fe5612f3f565b50506001821b610a53565b5060208310610133831016604e8410600b8410161715613013575081810a610a53565b61301d8383612f55565b806000190482111561303157613031612f3f565b029392505050565b6000612d6860ff841683612f98565b600081600019048311821515161561306257613062612f3f565b500290565b60008261308457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016130b1576130b1612f3f565b5060010190565b600082198211156130cb576130cb612f3f565b500190565b6020808252601d908201527f4d757374206b656570206665657320617420313525206f72206c657373000000604082015260600190565b60006020828403121561311957600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561314b57600080fd5b8151612d6881612e3e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526013908201527213585e081dd85b1b195d08195e18d959591959606a1b604082015260600190565b60008282101561321d5761321d612f3f565b500390565b60006020828403121561323457600080fd5b8151612d6881612d0a565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561328f5784516001600160a01b03168352938301939183019160010161326a565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122027d68e2e747820ad7a4db9c6378ba02de1523e759580a6f8b3246bf9600a867464736f6c634300080f0033

Deployed Bytecode Sourcemap

7786:16191:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1815:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7931:37;;;;;;;;;;;;;;;;;;;;;;:::i;2729:169::-;;;;;;;;;;-1:-1:-1;2729:169:0;;;;;:::i;:::-;;:::i;:::-;;;1463:14:1;;1456:22;1438:41;;1426:2;1411:18;2729:169:0;1298:187:1;8925:64:0;;;;;;;;;;-1:-1:-1;8925:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2136:108;;;;;;;;;;-1:-1:-1;2224:12:0;;2136:108;;;1888:25:1;;;1876:2;1861:18;2136:108:0;1742:177:1;8235:42:0;;;;;;;;;;;;;;;8819:33;;;;;;;;;;;;;;;;2906:458;;;;;;;;;;-1:-1:-1;2906:458:0;;;;;:::i;:::-;;:::i;14010:295::-;;;;;;;;;;-1:-1:-1;14010:295:0;;;;;:::i;:::-;;:::i;:::-;;2035:93;;;;;;;;;;-1:-1:-1;2035:93:0;;2118:2;2940:36:1;;2928:2;2913:18;2035:93:0;2798:184:1;13591:205:0;;;;;;;;;;-1:-1:-1;13591:205:0;;;;;:::i;:::-;;:::i;3372:215::-;;;;;;;;;;-1:-1:-1;3372:215:0;;;;;:::i;:::-;;:::i;7975:31::-;;;;;;;;;;;;;;;8502:33;;;;;;;;;;-1:-1:-1;8502:33:0;;;;;;;;7863:28;;;;;;;;;;;;;;;;8699;;;;;;;;;;;;;;;;8582:31;;;;;;;;;;-1:-1:-1;8582:31:0;;;;;;;;;;;2252:127;;;;;;;;;;-1:-1:-1;2252:127:0;;;;;:::i;:::-;;:::i;5794:150::-;;;;;;;;;;;;;:::i;16640:272::-;;;;;;;;;;-1:-1:-1;16640:272:0;;;;;:::i;:::-;;:::i;13808:194::-;;;;;;;;;;;;;:::i;16016:260::-;;;;;;;;;;-1:-1:-1;16016:260:0;;;;;:::i;:::-;;:::i;8660:30::-;;;;;;;;;;;;;;;;15553:168;;;;;;;;;;;;;:::i;13136:447::-;;;;;;;;;;-1:-1:-1;13136:447:0;;;;;:::i;:::-;;:::i;15047:498::-;;;;;;;;;;-1:-1:-1;15047:498:0;;;;;:::i;:::-;;:::i;7829:27::-;;;;;;;;;;;;;;;;5580:79;;;;;;;;;;-1:-1:-1;5645:6:0;;-1:-1:-1;;;;;5645:6:0;5580:79;;15729:271;;;;;;;;;;-1:-1:-1;15729:271:0;;;;;:::i;:::-;;:::i;8056:19::-;;;;;;;;;;-1:-1:-1;8056:19:0;;;;;;;;8734:31;;;;;;;;;;;;;;;;8084:34;;;;;;;;;;;;;;;1923:104;;;;;;;;;;;;;:::i;8013:34::-;;;;;;;;;;;;;;;16284:348;;;;;;;;;;-1:-1:-1;16284:348:0;;;;;:::i;:::-;;:::i;3595:413::-;;;;;;;;;;-1:-1:-1;3595:413:0;;;;;:::i;:::-;;:::i;8286:31::-;;;;;;;;;;-1:-1:-1;8286:31:0;;;;-1:-1:-1;;;;;8286:31:0;;;8460:33;;;;;;;;;;;;;;;;2387:175;;;;;;;;;;-1:-1:-1;2387:175:0;;;;;:::i;:::-;;:::i;8998:58::-;;;;;;;;;;-1:-1:-1;8998:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8542:33;;;;;;;;;;-1:-1:-1;8542:33:0;;;;;;;;;;;17207:182;;;;;;;;;;-1:-1:-1;17207:182:0;;;;;:::i;:::-;;:::i;12752:376::-;;;;;;;;;;-1:-1:-1;12752:376:0;;;;;:::i;:::-;;:::i;14687:348::-;;;;;;;;;;-1:-1:-1;14687:348:0;;;;;:::i;:::-;;:::i;8626:27::-;;;;;;;;;;;;;;;;14317:300;;;;;;;;;;-1:-1:-1;14317:300:0;;;;;:::i;:::-;;:::i;2570:151::-;;;;;;;;;;-1:-1:-1;2570:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2686:18:0;;;2659:7;2686:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2570:151;8156:33;;;;;;;;;;;;;;;;16920:279;;;;;;;;;;-1:-1:-1;16920:279:0;;;;;:::i;:::-;;:::i;8326:37::-;;;;;;;;;;;;;;;;8403:50;;;;;;;;;;-1:-1:-1;8403:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5952:244;;;;;;;;;;-1:-1:-1;5952:244:0;;;;;:::i;:::-;;:::i;7898:24::-;;;;;;;;;;;;;;;;1815:100;1869:13;1902:5;1895:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1815:100;:::o;2729:169::-;2812:4;2829:39;306:10;2852:7;2861:6;2829:8;:39::i;:::-;-1:-1:-1;2886:4:0;2729:169;;;;;:::o;2906:458::-;3012:4;3029:36;3039:6;3047:9;3058:6;3029:9;:36::i;:::-;-1:-1:-1;;;;;3105:19:0;;3078:24;3105:19;;;:11;:19;;;;;;;;306:10;3105:33;;;;;;;;3157:26;;;;3149:79;;;;-1:-1:-1;;;3149:79:0;;5773:2:1;3149:79:0;;;5755:21:1;5812:2;5792:18;;;5785:30;5851:34;5831:18;;;5824:62;-1:-1:-1;;;5902:18:1;;;5895:38;5950:19;;3149:79:0;;;;;;;;;3264:57;3273:6;306:10;3314:6;3295:16;:25;3264:8;:57::i;:::-;-1:-1:-1;3352:4:0;;2906:458;-1:-1:-1;;;;2906:458:0:o;14010:295::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;14132:16:::1;2118:2:::0;14132::::1;:16;:::i;:::-;14123:4;14103:13;2224:12:::0;;;2136:108;14103:13:::1;:17;::::0;14119:1:::1;14103:17;:::i;:::-;:24;;;;:::i;:::-;14102:47;;;;:::i;:::-;14092:6;:57;;14084:111;;;::::0;-1:-1:-1;;;14084:111:0;;8453:2:1;14084:111:0::1;::::0;::::1;8435:21:1::0;8492:2;8472:18;;;8465:30;8531:34;8511:18;;;8504:62;-1:-1:-1;;;8582:18:1;;;8575:39;8631:19;;14084:111:0::1;8251:405:1::0;14084:111:0::1;14231:16;2118:2:::0;14231::::1;:16;:::i;:::-;14221:27;::::0;:6;:27:::1;:::i;:::-;14206:12;:42:::0;;;14264:33:::1;::::0;1888:25:1;;;14264:33:0::1;::::0;1876:2:1;1861:18;14264:33:0::1;;;;;;;;14010:295:::0;:::o;13591:205::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;13686:9:::1;13682:107;13701:18:::0;;::::1;13682:107;;;13772:5;13740:17;:29;13758:7;;13766:1;13758:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13740:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13740:29:0;:37;;-1:-1:-1;;13740:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13721:3;::::1;::::0;::::1;:::i;:::-;;;;13682:107;;;;13591:205:::0;;:::o;3372:215::-;306:10;3460:4;3509:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3509:34:0;;;;;;;;;;3460:4;;3477:80;;3500:7;;3509:47;;3546:10;;3509:47;:::i;:::-;3477:8;:80::i;2252:127::-;-1:-1:-1;;;;;2353:18:0;2326:7;2353:18;;;;;;;;;;;;2252:127::o;5794:150::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;5887:6:::1;::::0;5866:40:::1;::::0;5903:1:::1;::::0;-1:-1:-1;;;;;5887:6:0::1;::::0;5866:40:::1;::::0;5903:1;;5866:40:::1;5917:6;:19:::0;;-1:-1:-1;;;;;;5917:19:0::1;::::0;;5794:150::o;16640:272::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;16716:15:::1;:31:::0;;;16758:12:::1;:30:::0;;;16823:4:::1;16807:20:::0;::::1;;16799:62;;;;-1:-1:-1::0;;;16799:62:0::1;;;;;;;:::i;:::-;16877:27;16891:12;;16877:27;;;;1888:25:1::0;;1876:2;1861:18;;1742:177;13808:194:0;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;13862:14:::1;:22:::0;;-1:-1:-1;;13862:22:0::1;::::0;;2224:12;;13895::::1;:28:::0;2224:12;;13934:13:::1;:29:::0;13979:15:::1;::::0;::::1;::::0;;;::::1;13808:194::o:0;16016:260::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;16112:4:::1;16108:104;;16150:6;-1:-1:-1::0;;;;;16140:16:0::1;:6;-1:-1:-1::0;;;;;16140:16:0::1;::::0;16132:68:::1;;;::::0;-1:-1:-1;;;16132:68:0;;9626:2:1;16132:68:0::1;::::0;::::1;9608:21:1::0;9665:2;9645:18;;;9638:30;9704:34;9684:18;;;9677:62;-1:-1:-1;;;9755:18:1;;;9748:37;9802:19;;16132:68:0::1;9424:403:1::0;16132:68:0::1;-1:-1:-1::0;;;;;16222:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;16222:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16016:260::o;15553:168::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;15628:58:::1;::::0;15610:12:::1;::::0;15636:10:::1;::::0;15660:21:::1;::::0;15610:12;15628:58;15610:12;15628:58;15660:21;15636:10;15628:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15609:77;;;15705:7;15697:16;;;::::0;::::1;;15598:123;15553:168::o:0;13136:447::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;13224:13:::1;::::0;::::1;::::0;::::1;;;13223:14;13215:70;;;::::0;-1:-1:-1;;;13215:70:0;;10244:2:1;13215:70:0::1;::::0;::::1;10226:21:1::0;10283:2;10263:18;;;10256:30;10322:34;10302:18;;;10295:62;-1:-1:-1;;;10373:18:1;;;10366:41;10424:19;;13215:70:0::1;10042:407:1::0;13215:70:0::1;13324:2;13304:16;:22;;13296:74;;;::::0;-1:-1:-1;;;13296:74:0;;10656:2:1;13296:74:0::1;::::0;::::1;10638:21:1::0;10695:2;10675:18;;;10668:30;10734:34;10714:18;;;10707:62;-1:-1:-1;;;10785:18:1;;;10778:37;10832:19;;13296:74:0::1;10454:403:1::0;13296:74:0::1;13381:13;:20:::0;;-1:-1:-1;;13412:18:0;;;;;13462:12:::1;13441:18;:33:::0;;;13506:37:::1;::::0;13527:16;;13506:37:::1;:::i;:::-;13485:18;:58:::0;13559:16:::1;::::0;::::1;::::0;;;::::1;13136:447:::0;:::o;15047:498::-;5707:6;;15134:10;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15165:20:0;::::1;15157:59;;;::::0;-1:-1:-1;;;15157:59:0;;11064:2:1;15157:59:0::1;::::0;::::1;11046:21:1::0;11103:2;11083:18;;;11076:30;11142:28;11122:18;;;11115:56;11188:18;;15157:59:0::1;10862:350:1::0;15157:59:0::1;-1:-1:-1::0;;;;;15235:23:0;::::1;15253:4;15235:23;;::::0;:41:::1;;-1:-1:-1::0;15263:13:0::1;::::0;::::1;::::0;::::1;;;15262:14;15235:41;15227:106;;;::::0;-1:-1:-1;;;15227:106:0;;11419:2:1;15227:106:0::1;::::0;::::1;11401:21:1::0;11458:2;11438:18;;;11431:30;11497:34;11477:18;;;11470:62;-1:-1:-1;;;11548:18:1;;;11541:50;11608:19;;15227:106:0::1;11217:416:1::0;15227:106:0::1;15371:39;::::0;-1:-1:-1;;;15371:39:0;;15344:24:::1;::::0;-1:-1:-1;;;;;15371:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;15404:4:::1;::::0;15371:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15429:46;::::0;-1:-1:-1;;;15429:46:0;;15344:66;;-1:-1:-1;;;;;;15429:23:0;::::1;::::0;::::1;::::0;:46:::1;::::0;15453:3;;15344:66;;15429:46:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15421:54;;15491:46;15512:6;15520:16;15491:46;;;;;;;:::i;:::-;;;;;;;;15146:399;15047:498:::0;;;;:::o;15729:271::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15823:31:0;::::1;15815:63;;;::::0;-1:-1:-1;;;15815:63:0;;12558:2:1;15815:63:0::1;::::0;::::1;12540:21:1::0;12597:2;12577:18;;;12570:30;-1:-1:-1;;;12616:18:1;;;12609:49;12675:18;;15815:63:0::1;12356:343:1::0;15815:63:0::1;15889:16;:45:::0;;-1:-1:-1;;;;;;15889:45:0::1;-1:-1:-1::0;;;;;15889:45:0;::::1;::::0;;::::1;::::0;;;15950:42:::1;::::0;::::1;::::0;-1:-1:-1;;15950:42:0::1;15729:271:::0;:::o;1923:104::-;1979:13;2012:7;2005:14;;;;;:::i;16284:348::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;16391:6:::1;-1:-1:-1::0;;;;;16383:14:0::1;:4;-1:-1:-1::0;;;;;16383:14:0::1;;;:23;;;;16401:5;16383:23;16375:93;;;::::0;-1:-1:-1;;;16375:93:0;;12906:2:1;16375:93:0::1;::::0;::::1;12888:21:1::0;12945:2;12925:18;;;12918:30;12984:34;12964:18;;;12957:62;-1:-1:-1;;;13035:18:1;;;13028:55;13100:19;;16375:93:0::1;12704:421:1::0;16375:93:0::1;-1:-1:-1::0;;;;;16479:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;16479:39:0::1;::::0;::::1;;;::::0;;16529::::1;16479:31:::0;:39;16529:26:::1;:39::i;:::-;16584:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;16584:40:0;::::1;::::0;::::1;::::0;;;::::1;16284:348:::0;;:::o;3595:413::-;306:10;3688:4;3732:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3732:34:0;;;;;;;;;;3785:35;;;;3777:85;;;;-1:-1:-1;;;3777:85:0;;13332:2:1;3777:85:0;;;13314:21:1;13371:2;13351:18;;;13344:30;13410:34;13390:18;;;13383:62;-1:-1:-1;;;13461:18:1;;;13454:35;13506:19;;3777:85:0;13130:401:1;3777:85:0;3898:67;306:10;3921:7;3949:15;3930:16;:34;3898:8;:67::i;:::-;-1:-1:-1;3996:4:0;;3595:413;-1:-1:-1;;;3595:413:0:o;2387:175::-;2473:4;2490:42;306:10;2514:9;2525:6;2490:9;:42::i;17207:182::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17292:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;17292:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17347:34;;1438:41:1;;;17347:34:0::1;::::0;1411:18:1;17347:34:0::1;;;;;;;17207:182:::0;;:::o;12752:376::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;12823:8:::1;12820:272;;;12885:1;12855:29;12873:9;12855;:29::i;:::-;:31;12847:98;;;::::0;-1:-1:-1;;;12847:98:0;;13738:2:1;12847:98:0::1;::::0;::::1;13720:21:1::0;13777:2;13757:18;;;13750:30;13816:34;13796:18;;;13789:62;-1:-1:-1;;;13867:18:1;;;13860:52;13929:19;;12847:98:0::1;13536:418:1::0;12847:98:0::1;12820:272;;;13013:1;12986:26;13004:6;12986:9;:26::i;:::-;:28;12978:102;;;::::0;-1:-1:-1;;;12978:102:0;;14161:2:1;12978:102:0::1;::::0;::::1;14143:21:1::0;14200:2;14180:18;;;14173:30;14239:34;14219:18;;;14212:62;14310:31;14290:18;;;14283:59;14359:19;;12978:102:0::1;13959:425:1::0;12978:102:0::1;13102:7;:18:::0;;-1:-1:-1;;13102:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12752:376::o;14687:348::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;14810:7:::1;14790:13;2224:12:::0;;;2136:108;14790:13:::1;:17;::::0;14806:1:::1;14790:17;:::i;:::-;:27;;;;:::i;:::-;14777:9;:40;;14769:107;;;::::0;-1:-1:-1;;;14769:107:0;;14591:2:1;14769:107:0::1;::::0;::::1;14573:21:1::0;14630:2;14610:18;;;14603:30;14669:34;14649:18;;;14642:62;-1:-1:-1;;;14720:18:1;;;14713:52;14782:19;;14769:107:0::1;14389:418:1::0;14769:107:0::1;14927:4;14907:13;2224:12:::0;;;2136:108;14907:13:::1;:17;::::0;14923:1:::1;14907:17;:::i;:::-;:24;;;;:::i;:::-;14894:9;:37;;14886:102;;;::::0;-1:-1:-1;;;14886:102:0;;15014:2:1;14886:102:0::1;::::0;::::1;14996:21:1::0;15053:2;15033:18;;;15026:30;15092:34;15072:18;;;15065:62;-1:-1:-1;;;15143:18:1;;;15136:50;15203:19;;14886:102:0::1;14812:416:1::0;14886:102:0::1;14998:18;:30:::0;14687:348::o;14317:300::-;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;14440:16:::1;2118:2:::0;14440::::1;:16;:::i;:::-;14431:4;14411:13;2224:12:::0;;;2136:108;14411:13:::1;:17;::::0;14427:1:::1;14411:17;:::i;:::-;:24;;;;:::i;:::-;14410:47;;;;:::i;:::-;14400:6;:57;;14392:112;;;::::0;-1:-1:-1;;;14392:112:0;;15435:2:1;14392:112:0::1;::::0;::::1;15417:21:1::0;15474:2;15454:18;;;15447:30;15513:34;15493:18;;;15486:62;-1:-1:-1;;;15564:18:1;;;15557:40;15614:19;;14392:112:0::1;15233:406:1::0;14392:112:0::1;14541:16;2118:2:::0;14541::::1;:16;:::i;:::-;14531:27;::::0;:6;:27:::1;:::i;:::-;14515:13;:43:::0;;;14574:35:::1;::::0;1888:25:1;;;14574:35:0::1;::::0;1876:2:1;1861:18;14574:35:0::1;1742:177:1::0;16920:279:0;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;16997:16:::1;:32:::0;;;17040:13:::1;:32:::0;;;17108:4:::1;17091:21:::0;::::1;;17083:63;;;;-1:-1:-1::0;;;17083:63:0::1;;;;;;;:::i;:::-;17162:29;17177:13;;17162:29;;;;1888:25:1::0;;1876:2;1861:18;;1742:177;5952:244:0;5707:6;;-1:-1:-1;;;;;5707:6:0;306:10;5707:22;5699:67;;;;-1:-1:-1;;;5699:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6041:22:0;::::1;6033:73;;;::::0;-1:-1:-1;;;6033:73:0;;15846:2:1;6033:73:0::1;::::0;::::1;15828:21:1::0;15885:2;15865:18;;;15858:30;15924:34;15904:18;;;15897:62;-1:-1:-1;;;15975:18:1;;;15968:36;16021:19;;6033:73:0::1;15644:402:1::0;6033:73:0::1;6143:6;::::0;6122:38:::1;::::0;-1:-1:-1;;;;;6122:38:0;;::::1;::::0;6143:6:::1;::::0;6122:38:::1;::::0;6143:6:::1;::::0;6122:38:::1;6171:6;:17:::0;;-1:-1:-1;;;;;;6171:17:0::1;-1:-1:-1::0;;;;;6171:17:0;;;::::1;::::0;;;::::1;::::0;;5952:244::o;4903:346::-;-1:-1:-1;;;;;5005:19:0;;4997:68;;;;-1:-1:-1;;;4997:68:0;;16253:2:1;4997:68:0;;;16235:21:1;16292:2;16272:18;;;16265:30;16331:34;16311:18;;;16304:62;-1:-1:-1;;;16382:18:1;;;16375:34;16426:19;;4997:68:0;16051:400:1;4997:68:0;-1:-1:-1;;;;;5084:21:0;;5076:68;;;;-1:-1:-1;;;5076:68:0;;16658:2:1;5076:68:0;;;16640:21:1;16697:2;16677:18;;;16670:30;16736:34;16716:18;;;16709:62;-1:-1:-1;;;16787:18:1;;;16780:32;16829:19;;5076:68:0;16456:398:1;5076:68:0;-1:-1:-1;;;;;5157:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5209:32;;1888:25:1;;;5209:32:0;;1861:18:1;5209:32:0;;;;;;;4903:346;;;:::o;17436:3778::-;-1:-1:-1;;;;;17536:18:0;;17528:68;;;;-1:-1:-1;;;17528:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17615:16:0;;17607:64;;;;-1:-1:-1;;;17607:64:0;;;;;;;:::i;:::-;17812:6;17822:1;17812:11;17809:91;;17839:28;17855:4;17861:2;17865:1;17839:15;:28::i;17809:91::-;17924:13;;;;;;;17920:132;;-1:-1:-1;;;;;17961:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;17990:23:0;;;;;;:19;:23;;;;;;;;17961:52;17953:87;;;;-1:-1:-1;;;17953:87:0;;17871:2:1;17953:87:0;;;17853:21:1;17910:2;17890:18;;;17883:30;-1:-1:-1;;;17929:18:1;;;17922:52;17991:18;;17953:87:0;17669:346:1;17953:87:0;23948:18;;23933:12;:33;18067:26;:52;;;;;18118:1;18097:18;;:22;18067:52;18064:232;;;-1:-1:-1;;;;;18144:23:0;;;;;;:17;:23;;;;;;;;18143:24;;:41;;-1:-1:-1;5645:6:0;;-1:-1:-1;;;;;18171:13:0;;;5645:6;;18171:13;18143:41;:66;;;-1:-1:-1;;;;;;18188:21:0;;18202:6;18188:21;18143:66;18135:149;;;;-1:-1:-1;;;18135:149:0;;18222:2:1;18135:149:0;;;18204:21:1;18261:2;18241:18;;;18234:30;18300:34;18280:18;;;18273:62;18371:34;18351:18;;;18344:62;-1:-1:-1;;;18422:19:1;;;18415:37;18469:19;;18135:149:0;18020:474:1;18135:149:0;18311:14;;;;18308:970;;;5645:6;;-1:-1:-1;;;;;18345:15:0;;;5645:6;;18345:15;;;;:32;;-1:-1:-1;5645:6:0;;-1:-1:-1;;;;;18364:13:0;;;5645:6;;18364:13;;18345:32;:52;;;;-1:-1:-1;;;;;;18381:16:0;;;;18345:52;:77;;;;-1:-1:-1;;;;;;18401:21:0;;18415:6;18401:21;;18345:77;:107;;;;-1:-1:-1;;;;;;18427:25:0;;;;;;:19;:25;;;;;;;;18426:26;18345:107;:135;;;;-1:-1:-1;;;;;;18457:23:0;;;;;;:19;:23;;;;;;;;18456:24;18345:135;18341:926;;;-1:-1:-1;;;;;18548:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;18584:35:0;;;;;;:31;:35;;;;;;;;18583:36;18548:71;18544:708;;;18662:12;;18652:6;:22;;18644:75;;;;-1:-1:-1;;;18644:75:0;;18701:2:1;18644:75:0;;;18683:21:1;18740:2;18720:18;;;18713:30;18779:34;18759:18;;;18752:62;-1:-1:-1;;;18830:18:1;;;18823:38;18878:19;;18644:75:0;18499:404:1;18644:75:0;18776:9;;18759:13;18769:2;18759:9;:13::i;:::-;18750:22;;:6;:22;:::i;:::-;:35;;18742:67;;;;-1:-1:-1;;;18742:67:0;;;;;;;:::i;:::-;18544:708;;;-1:-1:-1;;;;;18884:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;18918:37:0;;;;;;:31;:37;;;;;;;;18917:38;18884:71;18880:372;;;18998:13;;18988:6;:23;;18980:78;;;;-1:-1:-1;;;18980:78:0;;19458:2:1;18980:78:0;;;19440:21:1;19497:2;19477:18;;;19470:30;19536:34;19516:18;;;19509:62;-1:-1:-1;;;19587:18:1;;;19580:40;19637:19;;18980:78:0;19256:406:1;18880:372:0;-1:-1:-1;;;;;19106:35:0;;;;;;:31;:35;;;;;;;;19102:150;;19199:9;;19182:13;19192:2;19182:9;:13::i;:::-;19173:22;;:6;:22;:::i;:::-;:35;;19165:67;;;;-1:-1:-1;;;19165:67:0;;;;;;;:::i;:::-;19290:28;19321:24;19339:4;19321:9;:24::i;:::-;19405:18;;19290:55;;-1:-1:-1;19381:42:0;;;;;;;19439:22;;-1:-1:-1;19450:11:0;;;;;;;19439:22;:35;;;;-1:-1:-1;19466:8:0;;;;;;;19465:9;19439:35;:68;;;;-1:-1:-1;;;;;;19478:29:0;;;;;;:25;:29;;;;;;;;19439:68;19436:209;;;19527:7;;;;19524:110;;;19554:13;:11;:13::i;:::-;19524:110;;;19608:10;:8;:10::i;:::-;-1:-1:-1;;;;;19777:25:0;;19657:12;19777:25;;;:19;:25;;;;;;19672:4;;19777:25;;;:52;;-1:-1:-1;;;;;;19806:23:0;;;;;;:19;:23;;;;;;;;19777:52;19774:99;;;-1:-1:-1;19856:5:0;19774:99;19893:12;19999:7;19996:1165;;;23948:18;;23933:12;:33;20061:60;;;;-1:-1:-1;;;;;;20090:31:0;;;;;;:25;:31;;;;;;;;20061:60;:94;;;;-1:-1:-1;;;;;;20126:29:0;;;;;;:25;:29;;;;;;;;20125:30;20061:94;:114;;;;;20174:1;20159:12;;:16;20061:114;20058:934;;;-1:-1:-1;;;;;20217:21:0;;;;;;:17;:21;;;;;;;;20213:97;;-1:-1:-1;;;;;20262:21:0;;;;;;:17;:21;;;;;:28;;-1:-1:-1;;20262:28:0;20286:4;20262:28;;;20213:97;8805:5;20362:12;;20353:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;20346:42;;20454:12;;20436:15;;20429:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;20407:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;20058:934:0;;-1:-1:-1;20058:934:0;;-1:-1:-1;;;;;20531:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;20580:1;20564:13;;:17;20531:50;20527:465;;;8805:5;20617:13;;20608:6;:22;;;;:::i;:::-;:36;;;;:::i;:::-;20601:43;;20711:13;;20692:16;;20685:4;:23;;;;:::i;20527:465::-;-1:-1:-1;;;;;20787:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;20837:1;20822:12;;:16;20787:51;20784:208;;;8805:5;20872:12;;20863:6;:21;;;;:::i;:::-;:35;;;;:::i;:::-;20856:42;;20964:12;;20946:15;;20939:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;20917:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;20784:208:0;21023:8;;21020:93;;21055:42;21071:4;21085;21092;21055:15;:42::i;:::-;21135:14;21145:4;21135:14;;:::i;:::-;;;19996:1165;21173:33;21189:4;21195:2;21199:6;21173:15;:33::i;:::-;17515:3699;;;;17436:3778;;;:::o;23623:207::-;-1:-1:-1;;;;;23711:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;23711:52:0;;;;;;;;;;23779:43;;19965:51:1;;;20032:18;;;20025:50;23779:43:0;;19938:18:1;23779:43:0;;;;;;;23623:207;;:::o;4016:580::-;-1:-1:-1;;;;;4122:20:0;;4114:70;;;;-1:-1:-1;;;4114:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4203:23:0;;4195:71;;;;-1:-1:-1;;;4195:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4303:17:0;;4279:21;4303:17;;;;;;;;;;;4339:23;;;;4331:74;;;;-1:-1:-1;;;4331:74:0;;20288:2:1;4331:74:0;;;20270:21:1;20327:2;20307:18;;;20300:30;20366:34;20346:18;;;20339:62;-1:-1:-1;;;20417:18:1;;;20410:36;20463:19;;4331:74:0;20086:402:1;4331:74:0;-1:-1:-1;;;;;4441:17:0;;;:9;:17;;;;;;;;;;;4461:22;;;4441:42;;4505:20;;;;;;;;:30;;4477:6;;4441:9;4505:30;;4477:6;;4505:30;:::i;:::-;;;;;;;;4570:9;-1:-1:-1;;;;;4553:35:0;4562:6;-1:-1:-1;;;;;4553:35:0;;4581:6;4553:35;;;;1888:25:1;;1876:2;1861:18;;1742:177;4553:35:0;;;;;;;;4103:493;4016:580;;;:::o;22516:622::-;12656:8;:15;;-1:-1:-1;;12656:15:0;;;;;;;22618:24:::1;22636:4;22618:9;:24::i;:::-;22681:18;::::0;22592:50;;-1:-1:-1;22723:20:0;;;:46:::1;;-1:-1:-1::0;22747:22:0;;22723:46:::1;22720:60;;;22772:7;;;;;22720:60;22813:18;::::0;:23:::1;::::0;22834:2:::1;22813:23;:::i;:::-;22795:15;:41;22792:113;;;22870:18;::::0;:23:::1;::::0;22891:2:::1;22870:23;:::i;:::-;22852:41;;22792:113;22917:33;22934:15;22917:16;:33::i;:::-;22992:1;22971:18;:22:::0;23009:21:::1;:25:::0;23006:125:::1;;23064:16;::::0;:55:::1;::::0;-1:-1:-1;;;;;23064:16:0;;::::1;::::0;23093:21:::1;::::0;23064:55:::1;::::0;;;23093:21;23064:16;:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23050:69:0;;-1:-1:-1;;23006:125:0::1;22556:582;;;12682:1;12694:8:::0;:16;;-1:-1:-1;;12694:16:0;;;22516:622::o;21320:685::-;12656:8;:15;;-1:-1:-1;;12656:15:0;;;;;;21396:24:::1;21414:4;21396:9;:24::i;:::-;21459:18;::::0;21370:50;;-1:-1:-1;21501:20:0;;;:46:::1;;-1:-1:-1::0;21525:22:0;;21501:46:::1;21498:60;;;21550:7;;;;21498:60;21591:18;::::0;:23:::1;::::0;21612:2:::1;21591:23;:::i;:::-;21573:15;:41;21570:113;;;21648:18;::::0;:23:::1;::::0;21669:2:::1;21648:23;:::i;:::-;21630:41;;21570:113;21703:40;21727:15;21703:23;:40::i;:::-;21756:50;::::0;-1:-1:-1;;;21756:50:0;;-1:-1:-1;;;;;21756:12:0::1;:29;::::0;::::1;::::0;:50:::1;::::0;21794:10:::1;::::0;21756:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;21840:1:0::1;21819:18;:22:::0;;;21857:35:::1;::::0;-1:-1:-1;;;21857:35:0;;21840:1;;-1:-1:-1;;;;;;21857:10:0::1;:20;::::0;-1:-1:-1;21857:20:0::1;::::0;:35:::1;::::0;21886:4:::1;::::0;21857:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;21854:144;;;21932:16;::::0;21950:35:::1;::::0;-1:-1:-1;;;21950:35:0;;-1:-1:-1;;;;;21912:10:0::1;:19:::0;::::1;::::0;::::1;::::0;21932:16;::::1;::::0;21912:19;;21950:20:::1;::::0;:35:::1;::::0;21979:4:::1;::::0;21950:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21912:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21854:144::-;21357:648;;12694:8:::0;:16;;-1:-1:-1;;12694:16:0;;;21320:685::o;23146:469::-;23298:16;;;23312:1;23298:16;;;;;;;;23274:21;;23298:16;;;;;;;;;;-1:-1:-1;23298:16:0;23274:40;;23343:4;23325;23330:1;23325:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;23325:23:0;;;-1:-1:-1;;;;;23325:23:0;;;;;23369:9;-1:-1:-1;;;;;23369:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23359:4;23364:1;23359:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;23359:26:0;;;-1:-1:-1;;;;;23359:26:0;;;;;23398:56;23415:4;23430:9;23442:11;23398:8;:56::i;:::-;23493:114;;-1:-1:-1;;;23493:114:0;;-1:-1:-1;;;;;23493:9:0;:60;;;;:114;;23554:11;;23567:1;;23570:4;;23584;;23591:15;;23493:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23201:414;23146:469;:::o;22013:404::-;22112:16;;;22126:1;22112:16;;;;;;;;22088:21;;22112:16;;;;;;;;;;-1:-1:-1;22112:16:0;22088:40;;22157:4;22139;22144:1;22139:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22139:23:0;;;-1:-1:-1;;;;;22139:23:0;;;;;22191:10;22173:4;22178:1;22173:7;;;;;;;;:::i;:::-;;;;;;:29;-1:-1:-1;;;;;22173:29:0;;;-1:-1:-1;;;;;22173:29:0;;;;;22215:56;22232:4;22247:9;22259:11;22215:8;:56::i;:::-;22284:125;;-1:-1:-1;;;22284:125:0;;-1:-1:-1;;;;;22284:9:0;:63;;;;:125;;22348:11;;22361:1;;22364:4;;22378:12;;22393:15;;22284:125;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:221::-;-1:-1:-1;;;;;798:32:1;;;;780:51;;768:2;753:18;;616:221::o;842:131::-;-1:-1:-1;;;;;917:31:1;;907:42;;897:70;;963:1;960;953:12;978:315;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1162:9;1149:23;1181:31;1206:5;1181:31;:::i;:::-;1231:5;1283:2;1268:18;;;;1255:32;;-1:-1:-1;;;978:315:1:o;1490:247::-;1549:6;1602:2;1590:9;1581:7;1577:23;1573:32;1570:52;;;1618:1;1615;1608:12;1570:52;1657:9;1644:23;1676:31;1701:5;1676:31;:::i;:::-;1726:5;1490:247;-1:-1:-1;;;1490:247:1:o;2152:456::-;2229:6;2237;2245;2298:2;2286:9;2277:7;2273:23;2269:32;2266:52;;;2314:1;2311;2304:12;2266:52;2353:9;2340:23;2372:31;2397:5;2372:31;:::i;:::-;2422:5;-1:-1:-1;2479:2:1;2464:18;;2451:32;2492:33;2451:32;2492:33;:::i;:::-;2152:456;;2544:7;;-1:-1:-1;;;2598:2:1;2583:18;;;;2570:32;;2152:456::o;2613:180::-;2672:6;2725:2;2713:9;2704:7;2700:23;2696:32;2693:52;;;2741:1;2738;2731:12;2693:52;-1:-1:-1;2764:23:1;;2613:180;-1:-1:-1;2613:180:1:o;2987:615::-;3073:6;3081;3134:2;3122:9;3113:7;3109:23;3105:32;3102:52;;;3150:1;3147;3140:12;3102:52;3190:9;3177:23;3219:18;3260:2;3252:6;3249:14;3246:34;;;3276:1;3273;3266:12;3246:34;3314:6;3303:9;3299:22;3289:32;;3359:7;3352:4;3348:2;3344:13;3340:27;3330:55;;3381:1;3378;3371:12;3330:55;3421:2;3408:16;3447:2;3439:6;3436:14;3433:34;;;3463:1;3460;3453:12;3433:34;3516:7;3511:2;3501:6;3498:1;3494:14;3490:2;3486:23;3482:32;3479:45;3476:65;;;3537:1;3534;3527:12;3476:65;3568:2;3560:11;;;;;3590:6;;-1:-1:-1;2987:615:1;;-1:-1:-1;;;;2987:615:1:o;3815:118::-;3901:5;3894:13;3887:21;3880:5;3877:32;3867:60;;3923:1;3920;3913:12;3938:382;4003:6;4011;4064:2;4052:9;4043:7;4039:23;4035:32;4032:52;;;4080:1;4077;4070:12;4032:52;4119:9;4106:23;4138:31;4163:5;4138:31;:::i;:::-;4188:5;-1:-1:-1;4245:2:1;4230:18;;4217:32;4258:30;4217:32;4258:30;:::i;:::-;4307:7;4297:17;;;3938:382;;;;;:::o;4325:388::-;4393:6;4401;4454:2;4442:9;4433:7;4429:23;4425:32;4422:52;;;4470:1;4467;4460:12;4422:52;4509:9;4496:23;4528:31;4553:5;4528:31;:::i;:::-;4578:5;-1:-1:-1;4635:2:1;4620:18;;4607:32;4648:33;4607:32;4648:33;:::i;4940:241::-;4996:6;5049:2;5037:9;5028:7;5024:23;5020:32;5017:52;;;5065:1;5062;5055:12;5017:52;5104:9;5091:23;5123:28;5145:5;5123:28;:::i;5186:380::-;5265:1;5261:12;;;;5308;;;5329:61;;5383:4;5375:6;5371:17;5361:27;;5329:61;5436:2;5428:6;5425:14;5405:18;5402:38;5399:161;;5482:10;5477:3;5473:20;5470:1;5463:31;5517:4;5514:1;5507:15;5545:4;5542:1;5535:15;5399:161;;5186:380;;;:::o;5980:356::-;6182:2;6164:21;;;6201:18;;;6194:30;6260:34;6255:2;6240:18;;6233:62;6327:2;6312:18;;5980:356::o;6341:127::-;6402:10;6397:3;6393:20;6390:1;6383:31;6433:4;6430:1;6423:15;6457:4;6454:1;6447:15;6473:422;6562:1;6605:5;6562:1;6619:270;6640:7;6630:8;6627:21;6619:270;;;6699:4;6695:1;6691:6;6687:17;6681:4;6678:27;6675:53;;;6708:18;;:::i;:::-;6758:7;6748:8;6744:22;6741:55;;;6778:16;;;;6741:55;6857:22;;;;6817:15;;;;6619:270;;;6623:3;6473:422;;;;;:::o;6900:806::-;6949:5;6979:8;6969:80;;-1:-1:-1;7020:1:1;7034:5;;6969:80;7068:4;7058:76;;-1:-1:-1;7105:1:1;7119:5;;7058:76;7150:4;7168:1;7163:59;;;;7236:1;7231:130;;;;7143:218;;7163:59;7193:1;7184:10;;7207:5;;;7231:130;7268:3;7258:8;7255:17;7252:43;;;7275:18;;:::i;:::-;-1:-1:-1;;7331:1:1;7317:16;;7346:5;;7143:218;;7445:2;7435:8;7432:16;7426:3;7420:4;7417:13;7413:36;7407:2;7397:8;7394:16;7389:2;7383:4;7380:12;7376:35;7373:77;7370:159;;;-1:-1:-1;7482:19:1;;;7514:5;;7370:159;7561:34;7586:8;7580:4;7561:34;:::i;:::-;7631:6;7627:1;7623:6;7619:19;7610:7;7607:32;7604:58;;;7642:18;;:::i;:::-;7680:20;;6900:806;-1:-1:-1;;;6900:806:1:o;7711:140::-;7769:5;7798:47;7839:4;7829:8;7825:19;7819:4;7798:47;:::i;7856:168::-;7896:7;7962:1;7958;7954:6;7950:14;7947:1;7944:21;7939:1;7932:9;7925:17;7921:45;7918:71;;;7969:18;;:::i;:::-;-1:-1:-1;8009:9:1;;7856:168::o;8029:217::-;8069:1;8095;8085:132;;8139:10;8134:3;8130:20;8127:1;8120:31;8174:4;8171:1;8164:15;8202:4;8199:1;8192:15;8085:132;-1:-1:-1;8231:9:1;;8029:217::o;8661:127::-;8722:10;8717:3;8713:20;8710:1;8703:31;8753:4;8750:1;8743:15;8777:4;8774:1;8767:15;8793:135;8832:3;8853:17;;;8850:43;;8873:18;;:::i;:::-;-1:-1:-1;8920:1:1;8909:13;;8793:135::o;8933:128::-;8973:3;9004:1;9000:6;8997:1;8994:13;8991:39;;;9010:18;;:::i;:::-;-1:-1:-1;9046:9:1;;8933:128::o;9066:353::-;9268:2;9250:21;;;9307:2;9287:18;;;9280:30;9346:31;9341:2;9326:18;;9319:59;9410:2;9395:18;;9066:353::o;11638:184::-;11708:6;11761:2;11749:9;11740:7;11736:23;11732:32;11729:52;;;11777:1;11774;11767:12;11729:52;-1:-1:-1;11800:16:1;;11638:184;-1:-1:-1;11638:184:1:o;11827:274::-;-1:-1:-1;;;;;12019:32:1;;;;12001:51;;12083:2;12068:18;;12061:34;11989:2;11974:18;;11827:274::o;12106:245::-;12173:6;12226:2;12214:9;12205:7;12201:23;12197:32;12194:52;;;12242:1;12239;12232:12;12194:52;12274:9;12268:16;12293:28;12315:5;12293:28;:::i;16859:401::-;17061:2;17043:21;;;17100:2;17080:18;;;17073:30;17139:34;17134:2;17119:18;;17112:62;-1:-1:-1;;;17205:2:1;17190:18;;17183:35;17250:3;17235:19;;16859:401::o;17265:399::-;17467:2;17449:21;;;17506:2;17486:18;;;17479:30;17545:34;17540:2;17525:18;;17518:62;-1:-1:-1;;;17611:2:1;17596:18;;17589:33;17654:3;17639:19;;17265:399::o;18908:343::-;19110:2;19092:21;;;19149:2;19129:18;;;19122:30;-1:-1:-1;;;19183:2:1;19168:18;;19161:49;19242:2;19227:18;;18908:343::o;19667:125::-;19707:4;19735:1;19732;19729:8;19726:34;;;19740:18;;:::i;:::-;-1:-1:-1;19777:9:1;;19667:125::o;20625:251::-;20695:6;20748:2;20736:9;20727:7;20723:23;20719:32;20716:52;;;20764:1;20761;20754:12;20716:52;20796:9;20790:16;20815:31;20840:5;20815:31;:::i;20881:980::-;21143:4;21191:3;21180:9;21176:19;21222:6;21211:9;21204:25;21248:2;21286:6;21281:2;21270:9;21266:18;21259:34;21329:3;21324:2;21313:9;21309:18;21302:31;21353:6;21388;21382:13;21419:6;21411;21404:22;21457:3;21446:9;21442:19;21435:26;;21496:2;21488:6;21484:15;21470:29;;21517:1;21527:195;21541:6;21538:1;21535:13;21527:195;;;21606:13;;-1:-1:-1;;;;;21602:39:1;21590:52;;21697:15;;;;21662:12;;;;21638:1;21556:9;21527:195;;;-1:-1:-1;;;;;;;21778:32:1;;;;21773:2;21758:18;;21751:60;-1:-1:-1;;;21842:3:1;21827:19;21820:35;21739:3;20881:980;-1:-1:-1;;;20881:980:1:o

Swarm Source

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