ETH Price: $3,521.36 (+2.93%)
Gas: 4 Gwei

Token

ManaCoin (MNC)
 

Overview

Max Total Supply

92,240,649.002637147861473007 MNC

Holders

180

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.111047894810307007 MNC

Value
$0.00
0xe6b31ed1dcd86f3ef92a9b75d4df13948c955303
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

ManaCoin is an innovative decentralized protocol on the Ethereum network, anchored by the $MNC token, characterized by its ever-advancing randomized tokenomics, which encompass ETH reflections, true burns, intelligent auto LP management, and custom utilities.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ManaCoin

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * Website :  https://www.manacoin.io/
 * DApp :     https://app.manacoin.io/
 * Twitter :  https://twitter.com/ManaCoinETH
 * Medium :   https://medium.com/@ManaCoinETH
 * Telegram : https://t.me/ManaCoinETH
**/

// SPDX-License-Identifier: MIT
pragma solidity = 0.8.18;

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

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor() {
        _transferOwnership(_msgSender());
    }
    
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        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 swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract ManaCoin is Ownable, IERC20{
    string  private _name;
    string  private _symbol;
    uint256 private _decimals;
    uint256 private _totalSupply;

    uint256 public  maxTxLimit;
    uint256 public  maxWalletLimit;
    uint256 public minTokenSwapAmount;
    address payable public treasuryWallet;
    uint256 public  swapableRefection;
    uint256 public  swapableTreasuryTax;
    bool private _swapping;
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public sellTax;
    uint256 public buyTax;
    uint256 public taxSharePercentage;
    uint256 public totalBurned;
    uint256 public totalReflected;
    uint256 public totalLP;

    IUniswapV2Router02 public dexRouter;
    address public  lpPair;
    bool    public  tradingActive;
    bool    public  isLimit;
    uint256 public  ethReflectionBasis;
    uint256 public  reflectionLockPeriod;

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

    mapping(address => bool)    private _reflectionExcluded;
    mapping(address => uint256) public  lastReflectionBasis;
    mapping(address => uint256) public  lastReflectionTimeStamp;
    mapping(address => uint256) public  totalClaimedReflection;
    mapping(address => uint256) private _claimableReflection;

    mapping(address => bool)    public  lpPairs;
    mapping(address => bool)    private _isExcludedFromTax;

    event functionType (uint Type, address sender, uint256 amount);
    event reflectionClaimed (address indexed recipient, uint256 amount);
    event recoverAllEths(uint256 amount);
    event excludedFromTaxes (address account);
    event includeInTaxes(address account);
    event buyTaxUpdated(uint256 tax);
    event sellTaxUpdated(uint256 tax);
    event taxSharePercentageUpdated(uint256 percentage);
    event reflectionExcluded(address account);
    event recoverERC20Tokens(address token, uint256 amount);

    constructor(){
        _name              = "ManaCoin";
        _symbol            = "MNC";
        _decimals          = 18;
        _totalSupply       = 100000000 * (10 ** _decimals);
        _balances[owner()] = _balances[owner()] + _totalSupply;

        treasuryWallet     = payable(0x0aDEAE6683eFB0408542350E89B7B8311C4b6CE2);
        sellTax            = 20;
        buyTax             = 15;
        maxTxLimit         = 2000000000000000000000000;
        maxWalletLimit     = 2000000000000000000000000;
        minTokenSwapAmount = (_totalSupply * 21) / 10000;
        taxSharePercentage   = 50;
        reflectionLockPeriod = 60; 
        isLimit = true;

        dexRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        lpPair    = IUniswapV2Factory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        lpPairs[lpPair] = true;

        _approve(owner(), address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromTax[owner()]        = true;
        _isExcludedFromTax[treasuryWallet] = true;
        _isExcludedFromTax[address(this)]  = true;
        _isExcludedFromTax[lpPair]         = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable {}

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

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

    function decimals() public view returns (uint256) {
        return _decimals;
    }

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

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

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

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

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender  != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_balances[msg.sender] >= amount, "ERC20: Amount exceeds account balance");

        _transfer(msg.sender, recipient, amount);

        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_allowances[sender][msg.sender] >= amount, "ERC20: Insufficient allowance.");
        require(_balances[sender] >= amount, "ERC20: Amount exceeds sender's account balance");

        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender]  = _allowances[sender][msg.sender] + (amount);
        }
        _transfer(sender, recipient, amount);

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private {

        if (sender == owner() && lpPairs[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        }
        else if (lpPairs[sender] || lpPairs[recipient]){
            require(tradingActive == true, "ERC20: Trading is not active.");
            
            if (_isExcludedFromTax[sender] && !_isExcludedFromTax[recipient]){
                if (_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)) {
                    _transferBuy(sender, recipient, amount); //user buy process
                } 
            }   
            else if (!_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]){
                if (_checkTxLimit(amount)) {
                    _transferSell(sender, recipient, amount); //user sell process
                }
            }
            else if (_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]) {
                if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
                } else if (lpPairs[recipient]) {
                    if (_checkTxLimit(amount)) {
                        _transferBothExcluded(sender, recipient, amount);
                    }
                } else if (_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
                }
            } 
        } else {
            if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
            } else if(_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
            }
        }
    }

    function _transferBuy(address sender, address recipient, uint256 amount) private { 
        /// users buy process
        uint256 randomTaxType  = _generateRandomTaxType();
        uint256 taxAmount     = amount * (buyTax)/100;
        uint256 receiveAmount = amount - (taxAmount);
        // get tax details
        ( uint256 treasuryAmount, uint256 burnAmount, uint256 lpAmount, uint256 reflectionAmount ) = _getTaxAmount(taxAmount);
        
        _claimableReflection[recipient] = _claimableReflection[recipient] + unclaimedReflection(recipient); 
        lastReflectionBasis[recipient]  = ethReflectionBasis;

        _balances[sender]        = _balances[sender] - (amount);
        _balances[recipient]     = _balances[recipient] + (receiveAmount);
        _balances[address(this)] = _balances[address(this)] + (treasuryAmount);
        swapableTreasuryTax      = swapableTreasuryTax + (treasuryAmount);

        if (randomTaxType == 1) {
            // true burn
            _burn(sender, burnAmount);
            emit functionType(randomTaxType, sender, burnAmount);
        } else if (randomTaxType == 2) {
            // smart lp
            _takeLP(sender, lpAmount);
            emit functionType(randomTaxType, sender, lpAmount);
        } else if (randomTaxType == 3) {
            // reflection adding
            _balances[address(this)] = _balances[address(this)] + (reflectionAmount);
            swapableRefection        = swapableRefection + (reflectionAmount);
            totalReflected           = totalReflected + (reflectionAmount);
            emit functionType(randomTaxType, sender, reflectionAmount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function _transferSell(address sender, address recipient, uint256 amount) private { 
        /// users sell process
        uint256 randomTaxType = _generateRandomTaxType();
        uint256 taxAmount    = amount * sellTax/100;
        uint256 sentAmount   = amount - taxAmount;
        // get sell tax details
        ( uint256 treasuryAmount, uint256 burnAmount, uint256 lpAmount, uint256 reflectionAmount ) = _getTaxAmount(taxAmount);
        bool canSwap = swapableTreasuryTax >= minTokenSwapAmount;

        if(canSwap && !_swapping ) {
            _swapping = true;
            _swap(treasuryWallet, minTokenSwapAmount); // treasury swap function
            _swapping = false;
            swapableTreasuryTax = swapableTreasuryTax - (minTokenSwapAmount);
        }

        _balances[sender]        = _balances[sender] - (amount);
        _balances[recipient]     = _balances[recipient] + (sentAmount);
        _balances[address(this)] = _balances[address(this)] + (treasuryAmount);
        swapableTreasuryTax      = swapableTreasuryTax + (treasuryAmount);
        
        if(_balances[sender] == 0) {
            _claimableReflection[recipient] = 0; // claimable reflection amount initilize
        }
        
        if (randomTaxType == 1) {
            // true burn
            _burn(sender, burnAmount); 
            emit functionType(randomTaxType, sender, burnAmount);
        } else if (randomTaxType == 2) {
            // smart lp
            _takeLP(sender, lpAmount); 
            emit functionType(randomTaxType, sender, lpAmount);
        } else if (randomTaxType == 3) {
            // reflection adding
            _balances[address(this)] = _balances[address(this)] + (reflectionAmount);
            swapableRefection        = swapableRefection + (reflectionAmount);
            totalReflected           = totalReflected + (reflectionAmount);
            emit functionType(randomTaxType, sender, reflectionAmount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 amount) private {
        if(recipient == owner() || recipient == address(this)){
            _balances[sender]    = _balances[sender] - amount;
            _balances[recipient] = _balances[recipient] + amount;
        } else {
            _claimableReflection[recipient] = _claimableReflection[recipient] + unclaimedReflection(recipient); 
            lastReflectionBasis[recipient]  = ethReflectionBasis;

            _balances[sender]    = _balances[sender] - amount;
            _balances[recipient] = _balances[recipient] + amount;
        }

        emit Transfer(sender, recipient, amount);
    }

    function burn(uint256 amountTokens) public {
        address sender = msg.sender;
        require(_balances[sender] >= amountTokens, "ERC20: Burn Amount exceeds account balance");
        require(amountTokens > 0, "ERC20: Enter some amount to burn");

        if (amountTokens > 0) {
            _balances[sender] = _balances[sender] - amountTokens;
            _burn(sender, amountTokens);
        }
    }

    function _burn(address from, uint256 amount) private {
        _totalSupply = _totalSupply - amount;
        totalBurned  = totalBurned + amount;
        
        emit Transfer(from, address(0), amount);
    }

    function _takeLP(address from, uint256 tax) private {
        if (tax > 0) {
            (, , uint256 lp, ) = _getTaxAmount(tax);
            _balances[lpPair]  = _balances[lpPair] + lp;
            totalLP = totalLP + lp;

            emit Transfer(from, lpPair, lp);
        }
    }

    function addReflection() external payable {
        require (msg.value > 0);
        ethReflectionBasis = ethReflectionBasis + (msg.value);
    }

    function isReflectionExcluded(address account) public view returns (bool) {
        return _reflectionExcluded[account];
    }

    function removeReflectionExcluded(address account) external onlyOwner {
        require(isReflectionExcluded(account), "ERC20: Account must be excluded");

        _reflectionExcluded[account] = false;
    }

    function addReflectionExcluded(address account) external onlyOwner {
        _addReflectionExcluded(account);
        emit reflectionExcluded(account);
    }

    function _addReflectionExcluded(address account) internal {
        require(!isReflectionExcluded(account), "ERC20: Account must not be excluded");
        _reflectionExcluded[account] = true;
    }

    function unclaimedReflection(address addr) public view returns (uint256) {
        if (addr == lpPair || addr == address(dexRouter)) return 0;

        uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[addr];
        return ((basisDifference * balanceOf(addr)) / _totalSupply) + _claimableReflection[addr];
    }

    function _claimReflection(address payable addr) internal {
        uint256 unclaimed = unclaimedReflection(addr);
        require(unclaimed > 0, "ERC20: Claim amount should be more then 0");
        require(isReflectionExcluded(addr) == false, "ERC20: Address is excluded to claim reflection");
        
        lastReflectionBasis[addr] = ethReflectionBasis;
        lastReflectionTimeStamp[addr] = block.timestamp; // adding last claim Timestamp
        _claimableReflection[addr] = 0;
        addr.transfer(unclaimed);
        totalClaimedReflection[addr] = totalClaimedReflection[addr] + unclaimed;
        emit reflectionClaimed(addr, unclaimed);
    }

    function claimReflection() external returns (bool) {
        address _sender = _msgSender();
        require(!_isContract(_sender), "ERC20: Sender can't be a contract"); 
        require(lastReflectionTimeStamp[_sender] + reflectionLockPeriod <= block.timestamp, "ERC20: Reflection lock period exists,  try again later");
        _claimReflection(payable(_sender));
        return true;
    }

    function swapReflection(uint256 amount) public returns (bool) {
        // everyone can call this function to generate eth reflection
        require(swapableRefection > 0, "ERC20: Insufficient token to swap");
        require(swapableRefection >= amount);
        uint256 currentBalance = address(this).balance;
        _swap(address(this), amount);
        swapableRefection = swapableRefection - amount;
        uint256 ethTransfer = (address(this).balance) - currentBalance;
        ethReflectionBasis  = ethReflectionBasis + ethTransfer;
        return true;
    }

    function setMinTokensSwapAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwapAmount,
            "Cannot update minTokenSwapAmount to same value"
        );
        minTokenSwapAmount = newValue;
    }

    function setsellTax(uint256 tax) public onlyOwner {
        require(tax <= 6, "ERC20: The percentage can't more 6%.");
        sellTax = tax;
        emit sellTaxUpdated(tax);
    }

    function setbuyTax(uint256 tax) public onlyOwner {
        require(tax <= 6, "ERC20: The percentage can't more 6%.");
        buyTax = tax;
        emit buyTaxUpdated(tax);
    }

    function setTaxSharePercentage(uint256 percentage) public onlyOwner {
        require(percentage <= 100, "ERC20: The percentage can't more then 100");
        taxSharePercentage = percentage;
        emit taxSharePercentageUpdated(percentage);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function addLpPair(address pair, bool status) public onlyOwner{
        lpPairs[pair] = status;
        _isExcludedFromTax[pair] = status;
    }

    function returnNormalTax() public onlyOwner {
        sellTax = 5;
        buyTax  = 5;
        taxSharePercentage = 50;
    }

    function removeAllTax() public onlyOwner {
        sellTax = 0;
        buyTax  = 0;
        taxSharePercentage = 0;
    }

    function removeAllLimits() public onlyOwner {
        isLimit = false;
    }

    function excludeFromTax(address account) public onlyOwner {
        require(!_isExcludedFromTax[account], "ERC20: Account is already excluded.");
        _isExcludedFromTax[account] = true;
        emit excludedFromTaxes(account);
    }

    function includeInTax(address _account) public onlyOwner {
        require(_isExcludedFromTax[_account], "ERC20: Account is already included.");
        _isExcludedFromTax[_account] = false;
        emit includeInTaxes(_account);
    }
    
    function recoverAllEth() public {
        (bool success, ) = address(treasuryWallet).call{value: address(this).balance}("");
        if (success) {
            emit recoverAllEths(address(this).balance);
        }
    }

    function recoverErc20token(address token, uint256 amount) public onlyOwner {
        require(token != address(this),"can't claim own tokens");
        IERC20(token).transfer(owner(), amount);
        emit recoverERC20Tokens(token, amount);
    }

    function checkExludedFromTax(address _account) public view returns (bool) {
        return _isExcludedFromTax[_account];
    }

    function _generateRandomTaxType() private view returns (uint256) {
        return (uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 3) + 1;
    }

    function _getTaxAmount(uint256 _tax) private view returns (uint256 _treasuryAmount, uint256 Burn, uint256 LP, uint256 Reflection) {
        uint256 treasuryAmount;
        uint256 burnAmount;
        uint256 lpAmount;
        uint256 reflectionAmount;

        if (_tax > 0) {
            treasuryAmount = _tax * ((100 - taxSharePercentage))/100;
            burnAmount = _tax * (taxSharePercentage)/100;
            lpAmount = _tax * (taxSharePercentage)/100;
            reflectionAmount = _tax * (taxSharePercentage)/100;
        }
        return (treasuryAmount, burnAmount, lpAmount, reflectionAmount);
    }

    function _checkWalletLimit(address recipient, uint256 amount) private view returns(bool){
        if (isLimit) {
        require(maxWalletLimit >= balanceOf(recipient) + amount, "ERC20: Wallet limit exceeds");
        }
        return true;
    }

    function _checkTxLimit(uint256 amount) private view returns(bool){
        if (isLimit) {
        require(amount <= maxTxLimit, "ERC20: Transaction limit exceeds");
        }
        return true;
    }

    function _isContract(address _addr) private view returns (bool){
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    function _swap(address recipient, uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETH(
            amount,
            0,
            path,
            recipient,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"buyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"excludedFromTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Type","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"functionType","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"includeInTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverAllEths","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20Tokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reflectionClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"reflectionExcluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"sellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"taxSharePercentageUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addReflection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"checkExludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"includeInTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenSwapAmount","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":"recoverAllEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverErc20token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionLockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAllTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinTokensSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setTaxSharePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setbuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setsellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapableRefection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapableTreasuryTax","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":"taxSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalClaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"unclaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506200001d336200047b565b60408051808201909152600881526726b0b730a1b7b4b760c11b60208201526001906200004b908262000671565b506040805180820190915260038152624d4e4360e81b602082015260029062000075908262000671565b50601260038190556200008a90600a62000852565b6200009a906305f5e10062000867565b600481905560166000620000b66000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002054620000e3919062000881565b60166000620000fa6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055600880546001600160a01b031916730adeae6683efb0408542350e89b7b8311c4b6ce21790556014600c55600f600d556a01a784379d99db420000006005819055600655600454612710906200016c90601562000867565b62000178919062000897565b6007556032600e55603c6015556013805460ff60a81b1916600160a81b179055601280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002239190620008ba565b6001600160a01b031663c9c6539630601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620008ba565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003209190620008ba565b601380546001600160a01b0319166001600160a01b039283169081179091556000908152601d60205260408120805460ff19166001179055546200037491166012546001600160a01b0316600019620004cb565b601254620003909030906001600160a01b0316600019620004cb565b6001601e6000620003a96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085482168152601e9093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004256000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200046d91815260200190565b60405180910390a3620008e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166200051d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200056b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000514565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005f757607f821691505b6020821081036200061857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066c57600081815260208120601f850160051c81016020861015620006475750805b601f850160051c820191505b81811015620006685782815560010162000653565b5050505b505050565b81516001600160401b038111156200068d576200068d620005cc565b620006a5816200069e8454620005e2565b846200061e565b602080601f831160018114620006dd5760008415620006c45750858301515b600019600386901b1c1916600185901b17855562000668565b600085815260208120601f198616915b828110156200070e57888601518255948401946001909101908401620006ed565b50858210156200072d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007945781600019048211156200077857620007786200073d565b808516156200078657918102915b93841c939080029062000758565b509250929050565b600082620007ad575060016200084c565b81620007bc575060006200084c565b8160018114620007d55760028114620007e05762000800565b60019150506200084c565b60ff841115620007f457620007f46200073d565b50506001821b6200084c565b5060208310610133831016604e8410600b841016171562000825575081810a6200084c565b62000831838362000753565b80600019048211156200084857620008486200073d565b0290505b92915050565b60006200086083836200079c565b9392505050565b80820281158282048414176200084c576200084c6200073d565b808201808211156200084c576200084c6200073d565b600082620008b557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008cd57600080fd5b81516001600160a01b03811681146200086057600080fd5b612ffb80620008f56000396000f3fe60806040526004361061036f5760003560e01c806370a08231116101c65780639daa30e3116100f7578063d89135cd11610095578063dd62ed3e1161006f578063dd62ed3e146109b5578063e17c4c74146109fb578063f2fde38b14610a1b578063f98be8ad14610a3b57600080fd5b8063d89135cd14610974578063daed12af1461098a578063db05e5cb146109a057600080fd5b8063b4fe8f6a116100d1578063b4fe8f6a146108fb578063bbc0c74214610910578063cba38f6214610931578063cc1776d31461095e57600080fd5b80639daa30e3146108a5578063a5332f2d146108c5578063a9059cbb146108db57600080fd5b80638da5cb5b116101645780639579d5141161013e5780639579d5141461080a57806395d89b411461083757806396bc05881461084c5780639cc1af631461086c57600080fd5b80638da5cb5b1461079d5780638dc70e82146107bb5780639045be58146107d157600080fd5b80638036d590116101a05780638036d5901461073257806384ff58bd146107485780638a516513146107685780638a8c523c1461078857600080fd5b806370a08231146106d1578063715018a6146107075780637e5f83e81461071c57600080fd5b806342966c68116102a05780635196aadb1161023e57806360d1259e1161021857806360d1259e1461066557806361db244614610685578063664fa9721461069b57806366a88d96146106bb57600080fd5b80635196aadb146105f8578063588d5189146106185780635facf12e1461064557600080fd5b80634626402b1161027a5780634626402b1461059a5780634d5b15d4146105ba5780634e6be544146105da5780634f7041a5146105e257600080fd5b806342966c681461052a57806343cc8c2a1461054a578063452ed4f11461057a57600080fd5b806325e7e3cf1161030d5780633732e214116102e75780633732e214146104ca57806337563293146104e05780633e8c4873146104f55780634048a3741461051557600080fd5b806325e7e3cf1461047d5780632757805514610494578063313ce567146104b557600080fd5b8063132c4feb11610349578063132c4feb1461040e578063165c91e81461043257806318160ddd1461044857806323b872dd1461045d57600080fd5b806306fdde031461037b5780630758d924146103a6578063095ea7b3146103de57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610a5b565b60405161039d9190612b1a565b60405180910390f35b3480156103b257600080fd5b506012546103c6906001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156103ea57600080fd5b506103fe6103f9366004612b7d565b610aed565b604051901515815260200161039d565b34801561041a57600080fd5b5061042460115481565b60405190815260200161039d565b34801561043e57600080fd5b5061042460075481565b34801561045457600080fd5b50600454610424565b34801561046957600080fd5b506103fe610478366004612ba9565b610b04565b34801561048957600080fd5b50610492610d2a565b005b3480156104a057600080fd5b506013546103fe90600160a81b900460ff1681565b3480156104c157600080fd5b50600354610424565b3480156104d657600080fd5b5061042460105481565b3480156104ec57600080fd5b506103fe610dbe565b34801561050157600080fd5b506103fe610510366004612bea565b610ec5565b34801561052157600080fd5b50610492610f76565b34801561053657600080fd5b50610492610545366004612bea565b610f8f565b34801561055657600080fd5b506103fe610565366004612c03565b601d6020526000908152604090205460ff1681565b34801561058657600080fd5b506013546103c6906001600160a01b031681565b3480156105a657600080fd5b506008546103c6906001600160a01b031681565b3480156105c657600080fd5b506104926105d5366004612bea565b6110a2565b610492611100565b3480156105ee57600080fd5b50610424600d5481565b34801561060457600080fd5b50610492610613366004612c03565b611120565b34801561062457600080fd5b50610424610633366004612c03565b601b6020526000908152604090205481565b34801561065157600080fd5b50610424610660366004612c03565b61116a565b34801561067157600080fd5b50610492610680366004612c03565b61121a565b34801561069157600080fd5b5061042460145481565b3480156106a757600080fd5b506104926106b6366004612bea565b6112eb565b3480156106c757600080fd5b5061042460065481565b3480156106dd57600080fd5b506104246106ec366004612c03565b6001600160a01b031660009081526016602052604090205490565b34801561071357600080fd5b5061049261138b565b34801561072857600080fd5b50610424600a5481565b34801561073e57600080fd5b5061042460055481565b34801561075457600080fd5b50610492610763366004612c2e565b61139f565b34801561077457600080fd5b50610492610783366004612b7d565b6113e5565b34801561079457600080fd5b50610492611517565b3480156107a957600080fd5b506000546001600160a01b03166103c6565b3480156107c757600080fd5b5061042460155481565b3480156107dd57600080fd5b506103fe6107ec366004612c03565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561081657600080fd5b50610424610825366004612c03565b60196020526000908152604090205481565b34801561084357600080fd5b50610390611534565b34801561085857600080fd5b50610492610867366004612bea565b611543565b34801561087857600080fd5b506103fe610887366004612c03565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156108b157600080fd5b506104926108c0366004612c03565b6115b8565b3480156108d157600080fd5b5061042460095481565b3480156108e757600080fd5b506103fe6108f6366004612b7d565b611649565b34801561090757600080fd5b50610492611757565b34801561091c57600080fd5b506013546103fe90600160a01b900460ff1681565b34801561093d57600080fd5b5061042461094c366004612c03565b601a6020526000908152604090205481565b34801561096a57600080fd5b50610424600c5481565b34801561098057600080fd5b50610424600f5481565b34801561099657600080fd5b50610424600e5481565b3480156109ac57600080fd5b50610492611770565b3480156109c157600080fd5b506104246109d0366004612c67565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610a0757600080fd5b50610492610a16366004612c03565b611787565b348015610a2757600080fd5b50610492610a36366004612c03565b611854565b348015610a4757600080fd5b50610492610a56366004612bea565b6118ca565b606060018054610a6a90612c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690612c95565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b6000610afa338484611928565b5060015b92915050565b600033610b2c5760405162461bcd60e51b8152600401610b2390612ccf565b60405180910390fd5b6001600160a01b038316610b525760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b03841601610ba35760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b6001600160a01b0384166000908152601760209081526040808320338452909152902054821115610c165760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e00006044820152606401610b23565b6001600160a01b038416600090815260166020526040902054821115610c955760405162461bcd60e51b815260206004820152602e60248201527f45524332303a20416d6f756e7420657863656564732073656e6465722773206160448201526d63636f756e742062616c616e636560901b6064820152608401610b23565b6001600160a01b038416600090815260176020908152604080832033845290915290205460001914610d15576001600160a01b0384166000908152601760209081526040808320338452909152902054610cf0908390612d12565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b610d208484846119d6565b5060019392505050565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610d77576040519150601f19603f3d011682016040523d82523d6000602084013e610d7c565b606091505b505090508015610dbb576040514781527f3a0133def75e9eba8b4be20bfdf7c2800f92d0b460b9718735a2de781d0cab30906020015b60405180910390a15b50565b60003363ffffffff813b1615610e205760405162461bcd60e51b815260206004820152602160248201527f45524332303a2053656e6465722063616e2774206265206120636f6e747261636044820152601d60fa1b6064820152608401610b23565b6015546001600160a01b0382166000908152601a60205260409020544291610e4791612d12565b1115610eb45760405162461bcd60e51b815260206004820152603660248201527f45524332303a205265666c656374696f6e206c6f636b20706572696f6420657860448201527534b9ba399610103a393c9030b3b0b4b7103630ba32b960511b6064820152608401610b23565b610ebd81611ce8565b600191505090565b60008060095411610f225760405162461bcd60e51b815260206004820152602160248201527f45524332303a20496e73756666696369656e7420746f6b656e20746f207377616044820152600760fc1b6064820152608401610b23565b816009541015610f3157600080fd5b47610f3c3084611eb7565b82600954610f4a9190612d25565b6009556000610f598247612d25565b905080601454610f699190612d12565b6014555060019392505050565b610f7e61200f565b6005600c819055600d556032600e55565b336000818152601660205260409020548211156110015760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204275726e20416d6f756e742065786365656473206163636f756044820152696e742062616c616e636560b01b6064820152608401610b23565b600082116110515760405162461bcd60e51b815260206004820181905260248201527f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e6044820152606401610b23565b811561109e576001600160a01b03811660009081526016602052604090205461107b908390612d25565b6001600160a01b03821660009081526016602052604090205561109e8183612069565b5050565b6110aa61200f565b60068111156110cb5760405162461bcd60e51b8152600401610b2390612d38565b600d8190556040518181527f7dcc5c536517abaa6eb281914d04431307a734c37f1f9d4a0b6ea5776a455a2d90602001610db2565b6000341161110d57600080fd5b3460145461111b9190612d12565b601455565b61112861200f565b611131816120be565b6040516001600160a01b03821681527f8bf83848cb943ff3c2e2704617248fcebaccbfafd3881cee3738bc2c032fe99090602001610db2565b6013546000906001600160a01b038381169116148061119657506012546001600160a01b038381169116145b156111a357506000919050565b6001600160a01b0382166000908152601960205260408120546014546111c99190612d25565b6001600160a01b0384166000908152601c6020908152604080832054600454601690935292205492935090916111ff9084612d7c565b6112099190612da9565b6112139190612d12565b9392505050565b61122261200f565b6001600160a01b0381166000908152601e602052604090205460ff16156112975760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916600117905590519182527ffbf18c6c9ec09319f6c830e6c7d8e2a42cdd8f8a642daff024aa9eb809ab12309101610db2565b6112f361200f565b60648111156113565760405162461bcd60e51b815260206004820152602960248201527f45524332303a205468652070657263656e746167652063616e2774206d6f72656044820152680207468656e203130360bc1b6064820152608401610b23565b600e8190556040518181527fc3540e43c066c181c7201382c8d897826efdc788cfeeeacbad255a2a70dd1fdc90602001610db2565b61139361200f565b61139d6000612157565b565b6113a761200f565b6001600160a01b039091166000908152601d60209081526040808320805494151560ff199586168117909155601e9092529091208054909216179055565b6113ed61200f565b306001600160a01b0383160361143e5760405162461bcd60e51b815260206004820152601660248201527563616e277420636c61696d206f776e20746f6b656e7360501b6044820152606401610b23565b816001600160a01b031663a9059cbb61145f6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d09190612dbd565b50604080516001600160a01b0384168152602081018390527fb6cba7eb069007df60bbb1d3a04b15577e1c155a265fd323e0fee07da17ab0eb910160405180910390a15050565b61151f61200f565b6013805460ff60a01b1916600160a01b179055565b606060028054610a6a90612c95565b61154b61200f565b60075481036115b35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420757064617465206d696e546f6b656e53776170416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610b23565b600755565b6115c061200f565b6001600160a01b03811660009081526018602052604090205460ff166116285760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204163636f756e74206d757374206265206578636c75646564006044820152606401610b23565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6000336116685760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b03831661168e5760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b038416016116df5760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b3360009081526016602052604090205482111561174c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a20416d6f756e742065786365656473206163636f756e742062616044820152646c616e636560d81b6064820152608401610b23565b610afa3384846119d6565b61175f61200f565b6000600c819055600d819055600e55565b61177861200f565b6013805460ff60a81b19169055565b61178f61200f565b6001600160a01b0381166000908152601e602052604090205460ff166118035760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c726561647920696e636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916905590519182527f983e915867979aef6807d457eb95f90775b6d8f0e49009cff53c6fa4473cb3759101610db2565b61185c61200f565b6001600160a01b0381166118c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b23565b610dbb81612157565b6118d261200f565b60068111156118f35760405162461bcd60e51b8152600401610b2390612d38565b600c8190556040518181527f10caeb50fe0e719f0abd8c74740443c36472c79bf0f0553e9476a3c131e2b35b90602001610db2565b6001600160a01b03831661194e5760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0382166119745760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b038481169116148015611a0b57506001600160a01b0382166000908152601d602052604090205460ff165b15611a2057611a1b8383836121a7565b505050565b6001600160a01b0383166000908152601d602052604090205460ff1680611a5f57506001600160a01b0382166000908152601d602052604090205460ff165b15611c8957601354600160a01b900460ff161515600114611ac25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610b23565b6001600160a01b0383166000908152601e602052604090205460ff168015611b0357506001600160a01b0382166000908152601e602052604090205460ff16155b15611b3257611b12828261232d565b8015611b225750611b22816123bd565b15611a1b57611a1b83838361242c565b6001600160a01b0383166000908152601e602052604090205460ff16158015611b7357506001600160a01b0382166000908152601e602052604090205460ff165b15611b9157611b81816123bd565b15611a1b57611a1b8383836126a2565b6001600160a01b0383166000908152601e602052604090205460ff168015611bd157506001600160a01b0382166000908152601e602052604090205460ff165b15611a1b576000546001600160a01b0384811691161480611bff57506000546001600160a01b038381169116145b80611c1257506001600160a01b03831630145b80611c2557506001600160a01b03821630145b15611c3557611a1b8383836121a7565b6001600160a01b0382166000908152601d602052604090205460ff1615611c6f57611c5f816123bd565b15611a1b57611a1b8383836121a7565b611c79828261232d565b8015611c5f5750611c5f816123bd565b6000546001600160a01b0384811691161480611cb257506000546001600160a01b038381169116145b80611cc557506001600160a01b03831630145b80611cd857506001600160a01b03821630145b15611c6f57611a1b8383836121a7565b6000611cf38261116a565b905060008111611d575760405162461bcd60e51b815260206004820152602960248201527f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60448201526807265207468656e20360bc1b6064820152608401610b23565b6001600160a01b03821660009081526018602052604090205460ff1615611dd75760405162461bcd60e51b815260206004820152602e60248201527f45524332303a2041646472657373206973206578636c7564656420746f20636c60448201526d30b4b6903932b33632b1ba34b7b760911b6064820152608401610b23565b6014546001600160a01b038316600081815260196020908152604080832094909455601a8152838220429055601c90528281208190559151909183156108fc02918491818181858888f19350505050158015611e37573d6000803e3d6000fd5b506001600160a01b0382166000908152601b6020526040902054611e5c908290612d12565b6001600160a01b0383166000818152601b6020526040908190209290925590517faba62311dcf381aba06c0e76b1bb8e427e7c715edb8c84fc169cc1d1f51ac84e90611eab9084815260200190565b60405180910390a25050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611eec57611eec612df0565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f699190612e06565b81600181518110611f7c57611f7c612df0565b6001600160a01b0392831660209182029290920101526012546040516318cbafe560e01b81529116906318cbafe590611fc2908590600090869089904290600401612e23565b6000604051808303816000875af1158015611fe1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120099190810190612e94565b50505050565b6000546001600160a01b0316331461139d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b23565b806004546120779190612d25565b600455600f54612088908290612d12565b600f556040518181526000906001600160a01b03841690600080516020612fa68339815191529060200160405180910390a35050565b6001600160a01b03811660009081526018602052604090205460ff16156121335760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e74206d757374206e6f74206265206578636c7560448201526219195960ea1b6064820152608401610b23565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03838116911614806121cb57506001600160a01b03821630145b15612242576001600160a01b0383166000908152601660205260409020546121f4908290612d25565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612224908290612d12565b6001600160a01b0383166000908152601660205260409020556122fa565b61224b8261116a565b6001600160a01b0383166000908152601c602052604090205461226e9190612d12565b6001600160a01b038084166000908152601c602090815260408083209490945560145460198252848320559186168152601690915220546122b0908290612d25565b6001600160a01b0380851660009081526016602052604080822093909355908416815220546122e0908290612d12565b6001600160a01b0383166000908152601660205260409020555b816001600160a01b0316836001600160a01b0316600080516020612fa6833981519152836040516119c991815260200190565b601354600090600160a81b900460ff1615610afa5781612362846001600160a01b031660009081526016602052604090205490565b61236c9190612d12565b6006541015610afa5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2057616c6c6574206c696d6974206578636565647300000000006044820152606401610b23565b601354600090600160a81b900460ff1615612424576005548211156124245760405162461bcd60e51b815260206004820181905260248201527f45524332303a205472616e73616374696f6e206c696d697420657863656564736044820152606401610b23565b506001919050565b600061243661296c565b905060006064600d548461244a9190612d7c565b6124549190612da9565b905060006124628285612d25565b9050600080600080612473866129e7565b93509350935093506124848961116a565b6001600160a01b038a166000908152601c60205260409020546124a79190612d12565b6001600160a01b03808b166000908152601c60209081526040808320949094556014546019825284832055918d168152601690915220546124e9908990612d25565b6001600160a01b03808c1660009081526016602052604080822093909355908b1681522054612519908690612d12565b6001600160a01b038a16600090815260166020526040808220929092553081522054612546908590612d12565b30600090815260166020526040902055600a54612564908590612d12565b600a5560018790036125a85761257a8a84612069565b600080516020612f86833981519152878b8560405161259b93929190612f52565b60405180910390a161265b565b866002036125db576125ba8a83612a81565b600080516020612f86833981519152878b8460405161259b93929190612f52565b8660030361265b57306000908152601660205260409020546125fe908290612d12565b3060009081526016602052604090205560095461261c908290612d12565b60095560105461262d908290612d12565b601055604051600080516020612f86833981519152906126529089908d908590612f52565b60405180910390a15b886001600160a01b03168a6001600160a01b0316600080516020612fa68339815191528a60405161268e91815260200190565b60405180910390a350505050505050505050565b60006126ac61296c565b905060006064600c54846126c09190612d7c565b6126ca9190612da9565b905060006126d88285612d25565b90506000806000806126e9866129e7565b93509350935093506000600754600a541015905080801561270d5750600b5460ff16155b1561275657600b805460ff19166001179055600854600754612738916001600160a01b031690611eb7565b600b805460ff19169055600754600a546127529190612d25565b600a555b6001600160a01b038b1660009081526016602052604090205461277a908a90612d25565b6001600160a01b03808d1660009081526016602052604080822093909355908c16815220546127aa908790612d12565b6001600160a01b038b166000908152601660205260408082209290925530815220546127d7908690612d12565b30600090815260166020526040902055600a546127f5908690612d12565b600a556001600160a01b038b166000908152601660205260408120549003612831576001600160a01b038a166000908152601c60205260408120555b87600103612871576128438b85612069565b600080516020612f86833981519152888c8660405161286493929190612f52565b60405180910390a1612924565b876002036128a4576128838b84612a81565b600080516020612f86833981519152888c8560405161286493929190612f52565b8760030361292457306000908152601660205260409020546128c7908390612d12565b306000908152601660205260409020556009546128e5908390612d12565b6009556010546128f6908390612d12565b601055604051600080516020612f868339815191529061291b908a908e908690612f52565b60405180910390a15b896001600160a01b03168b6001600160a01b0316600080516020612fa68339815191528b60405161295791815260200190565b60405180910390a35050505050505050505050565b6040805142602082015244918101919091524560608083019190915232901b6bffffffffffffffffffffffff191660808201524360948201523a60b482015260009060039060d4016040516020818303038152906040528051906020012060001c6129d79190612f71565b6129e2906001612d12565b905090565b6000808080808080808815612a72576064600e546064612a079190612d25565b612a11908b612d7c565b612a1b9190612da9565b93506064600e548a612a2d9190612d7c565b612a379190612da9565b92506064600e548a612a499190612d7c565b612a539190612da9565b91506064600e548a612a659190612d7c565b612a6f9190612da9565b90505b92989197509550909350915050565b801561109e576000612a92826129e7565b506013546001600160a01b0316600090815260166020526040902054909350612abe9250839150612d12565b6013546001600160a01b0316600090815260166020526040902055601154612ae7908290612d12565b6011556013546040518281526001600160a01b0391821691851690600080516020612fa6833981519152906020016119c9565b600060208083528351808285015260005b81811015612b4757858101830151858201604001528201612b2b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610dbb57600080fd5b60008060408385031215612b9057600080fd5b8235612b9b81612b68565b946020939093013593505050565b600080600060608486031215612bbe57600080fd5b8335612bc981612b68565b92506020840135612bd981612b68565b929592945050506040919091013590565b600060208284031215612bfc57600080fd5b5035919050565b600060208284031215612c1557600080fd5b813561121381612b68565b8015158114610dbb57600080fd5b60008060408385031215612c4157600080fd5b8235612c4c81612b68565b91506020830135612c5c81612c20565b809150509250929050565b60008060408385031215612c7a57600080fd5b8235612c8581612b68565b91506020830135612c5c81612b68565b600181811c90821680612ca957607f821691505b602082108103612cc957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610afe57610afe612cfc565b81810381811115610afe57610afe612cfc565b60208082526024908201527f45524332303a205468652070657263656e746167652063616e2774206d6f7265604082015263101b129760e11b606082015260800190565b8082028115828204841417610afe57610afe612cfc565b634e487b7160e01b600052601260045260246000fd5b600082612db857612db8612d93565b500490565b600060208284031215612dcf57600080fd5b815161121381612c20565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e1857600080fd5b815161121381612b68565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e735784516001600160a01b031683529383019391830191600101612e4e565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215612ea757600080fd5b825167ffffffffffffffff80821115612ebf57600080fd5b818501915085601f830112612ed357600080fd5b815181811115612ee557612ee5612dda565b8060051b604051601f19603f83011681018181108582111715612f0a57612f0a612dda565b604052918252848201925083810185019188831115612f2857600080fd5b938501935b82851015612f4657845184529385019392850192612f2d565b98975050505050505050565b9283526001600160a01b03919091166020830152604082015260600190565b600082612f8057612f80612d93565b50069056fe43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220834f7c2f4cb233063dc582bfa9eb28aec2a93aee48953f8a863f3eb8e59233bc64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806370a08231116101c65780639daa30e3116100f7578063d89135cd11610095578063dd62ed3e1161006f578063dd62ed3e146109b5578063e17c4c74146109fb578063f2fde38b14610a1b578063f98be8ad14610a3b57600080fd5b8063d89135cd14610974578063daed12af1461098a578063db05e5cb146109a057600080fd5b8063b4fe8f6a116100d1578063b4fe8f6a146108fb578063bbc0c74214610910578063cba38f6214610931578063cc1776d31461095e57600080fd5b80639daa30e3146108a5578063a5332f2d146108c5578063a9059cbb146108db57600080fd5b80638da5cb5b116101645780639579d5141161013e5780639579d5141461080a57806395d89b411461083757806396bc05881461084c5780639cc1af631461086c57600080fd5b80638da5cb5b1461079d5780638dc70e82146107bb5780639045be58146107d157600080fd5b80638036d590116101a05780638036d5901461073257806384ff58bd146107485780638a516513146107685780638a8c523c1461078857600080fd5b806370a08231146106d1578063715018a6146107075780637e5f83e81461071c57600080fd5b806342966c68116102a05780635196aadb1161023e57806360d1259e1161021857806360d1259e1461066557806361db244614610685578063664fa9721461069b57806366a88d96146106bb57600080fd5b80635196aadb146105f8578063588d5189146106185780635facf12e1461064557600080fd5b80634626402b1161027a5780634626402b1461059a5780634d5b15d4146105ba5780634e6be544146105da5780634f7041a5146105e257600080fd5b806342966c681461052a57806343cc8c2a1461054a578063452ed4f11461057a57600080fd5b806325e7e3cf1161030d5780633732e214116102e75780633732e214146104ca57806337563293146104e05780633e8c4873146104f55780634048a3741461051557600080fd5b806325e7e3cf1461047d5780632757805514610494578063313ce567146104b557600080fd5b8063132c4feb11610349578063132c4feb1461040e578063165c91e81461043257806318160ddd1461044857806323b872dd1461045d57600080fd5b806306fdde031461037b5780630758d924146103a6578063095ea7b3146103de57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610a5b565b60405161039d9190612b1a565b60405180910390f35b3480156103b257600080fd5b506012546103c6906001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156103ea57600080fd5b506103fe6103f9366004612b7d565b610aed565b604051901515815260200161039d565b34801561041a57600080fd5b5061042460115481565b60405190815260200161039d565b34801561043e57600080fd5b5061042460075481565b34801561045457600080fd5b50600454610424565b34801561046957600080fd5b506103fe610478366004612ba9565b610b04565b34801561048957600080fd5b50610492610d2a565b005b3480156104a057600080fd5b506013546103fe90600160a81b900460ff1681565b3480156104c157600080fd5b50600354610424565b3480156104d657600080fd5b5061042460105481565b3480156104ec57600080fd5b506103fe610dbe565b34801561050157600080fd5b506103fe610510366004612bea565b610ec5565b34801561052157600080fd5b50610492610f76565b34801561053657600080fd5b50610492610545366004612bea565b610f8f565b34801561055657600080fd5b506103fe610565366004612c03565b601d6020526000908152604090205460ff1681565b34801561058657600080fd5b506013546103c6906001600160a01b031681565b3480156105a657600080fd5b506008546103c6906001600160a01b031681565b3480156105c657600080fd5b506104926105d5366004612bea565b6110a2565b610492611100565b3480156105ee57600080fd5b50610424600d5481565b34801561060457600080fd5b50610492610613366004612c03565b611120565b34801561062457600080fd5b50610424610633366004612c03565b601b6020526000908152604090205481565b34801561065157600080fd5b50610424610660366004612c03565b61116a565b34801561067157600080fd5b50610492610680366004612c03565b61121a565b34801561069157600080fd5b5061042460145481565b3480156106a757600080fd5b506104926106b6366004612bea565b6112eb565b3480156106c757600080fd5b5061042460065481565b3480156106dd57600080fd5b506104246106ec366004612c03565b6001600160a01b031660009081526016602052604090205490565b34801561071357600080fd5b5061049261138b565b34801561072857600080fd5b50610424600a5481565b34801561073e57600080fd5b5061042460055481565b34801561075457600080fd5b50610492610763366004612c2e565b61139f565b34801561077457600080fd5b50610492610783366004612b7d565b6113e5565b34801561079457600080fd5b50610492611517565b3480156107a957600080fd5b506000546001600160a01b03166103c6565b3480156107c757600080fd5b5061042460155481565b3480156107dd57600080fd5b506103fe6107ec366004612c03565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561081657600080fd5b50610424610825366004612c03565b60196020526000908152604090205481565b34801561084357600080fd5b50610390611534565b34801561085857600080fd5b50610492610867366004612bea565b611543565b34801561087857600080fd5b506103fe610887366004612c03565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156108b157600080fd5b506104926108c0366004612c03565b6115b8565b3480156108d157600080fd5b5061042460095481565b3480156108e757600080fd5b506103fe6108f6366004612b7d565b611649565b34801561090757600080fd5b50610492611757565b34801561091c57600080fd5b506013546103fe90600160a01b900460ff1681565b34801561093d57600080fd5b5061042461094c366004612c03565b601a6020526000908152604090205481565b34801561096a57600080fd5b50610424600c5481565b34801561098057600080fd5b50610424600f5481565b34801561099657600080fd5b50610424600e5481565b3480156109ac57600080fd5b50610492611770565b3480156109c157600080fd5b506104246109d0366004612c67565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610a0757600080fd5b50610492610a16366004612c03565b611787565b348015610a2757600080fd5b50610492610a36366004612c03565b611854565b348015610a4757600080fd5b50610492610a56366004612bea565b6118ca565b606060018054610a6a90612c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690612c95565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b6000610afa338484611928565b5060015b92915050565b600033610b2c5760405162461bcd60e51b8152600401610b2390612ccf565b60405180910390fd5b6001600160a01b038316610b525760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b03841601610ba35760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b6001600160a01b0384166000908152601760209081526040808320338452909152902054821115610c165760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e00006044820152606401610b23565b6001600160a01b038416600090815260166020526040902054821115610c955760405162461bcd60e51b815260206004820152602e60248201527f45524332303a20416d6f756e7420657863656564732073656e6465722773206160448201526d63636f756e742062616c616e636560901b6064820152608401610b23565b6001600160a01b038416600090815260176020908152604080832033845290915290205460001914610d15576001600160a01b0384166000908152601760209081526040808320338452909152902054610cf0908390612d12565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b610d208484846119d6565b5060019392505050565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610d77576040519150601f19603f3d011682016040523d82523d6000602084013e610d7c565b606091505b505090508015610dbb576040514781527f3a0133def75e9eba8b4be20bfdf7c2800f92d0b460b9718735a2de781d0cab30906020015b60405180910390a15b50565b60003363ffffffff813b1615610e205760405162461bcd60e51b815260206004820152602160248201527f45524332303a2053656e6465722063616e2774206265206120636f6e747261636044820152601d60fa1b6064820152608401610b23565b6015546001600160a01b0382166000908152601a60205260409020544291610e4791612d12565b1115610eb45760405162461bcd60e51b815260206004820152603660248201527f45524332303a205265666c656374696f6e206c6f636b20706572696f6420657860448201527534b9ba399610103a393c9030b3b0b4b7103630ba32b960511b6064820152608401610b23565b610ebd81611ce8565b600191505090565b60008060095411610f225760405162461bcd60e51b815260206004820152602160248201527f45524332303a20496e73756666696369656e7420746f6b656e20746f207377616044820152600760fc1b6064820152608401610b23565b816009541015610f3157600080fd5b47610f3c3084611eb7565b82600954610f4a9190612d25565b6009556000610f598247612d25565b905080601454610f699190612d12565b6014555060019392505050565b610f7e61200f565b6005600c819055600d556032600e55565b336000818152601660205260409020548211156110015760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204275726e20416d6f756e742065786365656473206163636f756044820152696e742062616c616e636560b01b6064820152608401610b23565b600082116110515760405162461bcd60e51b815260206004820181905260248201527f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e6044820152606401610b23565b811561109e576001600160a01b03811660009081526016602052604090205461107b908390612d25565b6001600160a01b03821660009081526016602052604090205561109e8183612069565b5050565b6110aa61200f565b60068111156110cb5760405162461bcd60e51b8152600401610b2390612d38565b600d8190556040518181527f7dcc5c536517abaa6eb281914d04431307a734c37f1f9d4a0b6ea5776a455a2d90602001610db2565b6000341161110d57600080fd5b3460145461111b9190612d12565b601455565b61112861200f565b611131816120be565b6040516001600160a01b03821681527f8bf83848cb943ff3c2e2704617248fcebaccbfafd3881cee3738bc2c032fe99090602001610db2565b6013546000906001600160a01b038381169116148061119657506012546001600160a01b038381169116145b156111a357506000919050565b6001600160a01b0382166000908152601960205260408120546014546111c99190612d25565b6001600160a01b0384166000908152601c6020908152604080832054600454601690935292205492935090916111ff9084612d7c565b6112099190612da9565b6112139190612d12565b9392505050565b61122261200f565b6001600160a01b0381166000908152601e602052604090205460ff16156112975760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916600117905590519182527ffbf18c6c9ec09319f6c830e6c7d8e2a42cdd8f8a642daff024aa9eb809ab12309101610db2565b6112f361200f565b60648111156113565760405162461bcd60e51b815260206004820152602960248201527f45524332303a205468652070657263656e746167652063616e2774206d6f72656044820152680207468656e203130360bc1b6064820152608401610b23565b600e8190556040518181527fc3540e43c066c181c7201382c8d897826efdc788cfeeeacbad255a2a70dd1fdc90602001610db2565b61139361200f565b61139d6000612157565b565b6113a761200f565b6001600160a01b039091166000908152601d60209081526040808320805494151560ff199586168117909155601e9092529091208054909216179055565b6113ed61200f565b306001600160a01b0383160361143e5760405162461bcd60e51b815260206004820152601660248201527563616e277420636c61696d206f776e20746f6b656e7360501b6044820152606401610b23565b816001600160a01b031663a9059cbb61145f6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d09190612dbd565b50604080516001600160a01b0384168152602081018390527fb6cba7eb069007df60bbb1d3a04b15577e1c155a265fd323e0fee07da17ab0eb910160405180910390a15050565b61151f61200f565b6013805460ff60a01b1916600160a01b179055565b606060028054610a6a90612c95565b61154b61200f565b60075481036115b35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420757064617465206d696e546f6b656e53776170416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610b23565b600755565b6115c061200f565b6001600160a01b03811660009081526018602052604090205460ff166116285760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204163636f756e74206d757374206265206578636c75646564006044820152606401610b23565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6000336116685760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b03831661168e5760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b038416016116df5760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b3360009081526016602052604090205482111561174c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a20416d6f756e742065786365656473206163636f756e742062616044820152646c616e636560d81b6064820152608401610b23565b610afa3384846119d6565b61175f61200f565b6000600c819055600d819055600e55565b61177861200f565b6013805460ff60a81b19169055565b61178f61200f565b6001600160a01b0381166000908152601e602052604090205460ff166118035760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c726561647920696e636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916905590519182527f983e915867979aef6807d457eb95f90775b6d8f0e49009cff53c6fa4473cb3759101610db2565b61185c61200f565b6001600160a01b0381166118c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b23565b610dbb81612157565b6118d261200f565b60068111156118f35760405162461bcd60e51b8152600401610b2390612d38565b600c8190556040518181527f10caeb50fe0e719f0abd8c74740443c36472c79bf0f0553e9476a3c131e2b35b90602001610db2565b6001600160a01b03831661194e5760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0382166119745760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b038481169116148015611a0b57506001600160a01b0382166000908152601d602052604090205460ff165b15611a2057611a1b8383836121a7565b505050565b6001600160a01b0383166000908152601d602052604090205460ff1680611a5f57506001600160a01b0382166000908152601d602052604090205460ff165b15611c8957601354600160a01b900460ff161515600114611ac25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610b23565b6001600160a01b0383166000908152601e602052604090205460ff168015611b0357506001600160a01b0382166000908152601e602052604090205460ff16155b15611b3257611b12828261232d565b8015611b225750611b22816123bd565b15611a1b57611a1b83838361242c565b6001600160a01b0383166000908152601e602052604090205460ff16158015611b7357506001600160a01b0382166000908152601e602052604090205460ff165b15611b9157611b81816123bd565b15611a1b57611a1b8383836126a2565b6001600160a01b0383166000908152601e602052604090205460ff168015611bd157506001600160a01b0382166000908152601e602052604090205460ff165b15611a1b576000546001600160a01b0384811691161480611bff57506000546001600160a01b038381169116145b80611c1257506001600160a01b03831630145b80611c2557506001600160a01b03821630145b15611c3557611a1b8383836121a7565b6001600160a01b0382166000908152601d602052604090205460ff1615611c6f57611c5f816123bd565b15611a1b57611a1b8383836121a7565b611c79828261232d565b8015611c5f5750611c5f816123bd565b6000546001600160a01b0384811691161480611cb257506000546001600160a01b038381169116145b80611cc557506001600160a01b03831630145b80611cd857506001600160a01b03821630145b15611c6f57611a1b8383836121a7565b6000611cf38261116a565b905060008111611d575760405162461bcd60e51b815260206004820152602960248201527f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60448201526807265207468656e20360bc1b6064820152608401610b23565b6001600160a01b03821660009081526018602052604090205460ff1615611dd75760405162461bcd60e51b815260206004820152602e60248201527f45524332303a2041646472657373206973206578636c7564656420746f20636c60448201526d30b4b6903932b33632b1ba34b7b760911b6064820152608401610b23565b6014546001600160a01b038316600081815260196020908152604080832094909455601a8152838220429055601c90528281208190559151909183156108fc02918491818181858888f19350505050158015611e37573d6000803e3d6000fd5b506001600160a01b0382166000908152601b6020526040902054611e5c908290612d12565b6001600160a01b0383166000818152601b6020526040908190209290925590517faba62311dcf381aba06c0e76b1bb8e427e7c715edb8c84fc169cc1d1f51ac84e90611eab9084815260200190565b60405180910390a25050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611eec57611eec612df0565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f699190612e06565b81600181518110611f7c57611f7c612df0565b6001600160a01b0392831660209182029290920101526012546040516318cbafe560e01b81529116906318cbafe590611fc2908590600090869089904290600401612e23565b6000604051808303816000875af1158015611fe1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120099190810190612e94565b50505050565b6000546001600160a01b0316331461139d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b23565b806004546120779190612d25565b600455600f54612088908290612d12565b600f556040518181526000906001600160a01b03841690600080516020612fa68339815191529060200160405180910390a35050565b6001600160a01b03811660009081526018602052604090205460ff16156121335760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e74206d757374206e6f74206265206578636c7560448201526219195960ea1b6064820152608401610b23565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03838116911614806121cb57506001600160a01b03821630145b15612242576001600160a01b0383166000908152601660205260409020546121f4908290612d25565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612224908290612d12565b6001600160a01b0383166000908152601660205260409020556122fa565b61224b8261116a565b6001600160a01b0383166000908152601c602052604090205461226e9190612d12565b6001600160a01b038084166000908152601c602090815260408083209490945560145460198252848320559186168152601690915220546122b0908290612d25565b6001600160a01b0380851660009081526016602052604080822093909355908416815220546122e0908290612d12565b6001600160a01b0383166000908152601660205260409020555b816001600160a01b0316836001600160a01b0316600080516020612fa6833981519152836040516119c991815260200190565b601354600090600160a81b900460ff1615610afa5781612362846001600160a01b031660009081526016602052604090205490565b61236c9190612d12565b6006541015610afa5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2057616c6c6574206c696d6974206578636565647300000000006044820152606401610b23565b601354600090600160a81b900460ff1615612424576005548211156124245760405162461bcd60e51b815260206004820181905260248201527f45524332303a205472616e73616374696f6e206c696d697420657863656564736044820152606401610b23565b506001919050565b600061243661296c565b905060006064600d548461244a9190612d7c565b6124549190612da9565b905060006124628285612d25565b9050600080600080612473866129e7565b93509350935093506124848961116a565b6001600160a01b038a166000908152601c60205260409020546124a79190612d12565b6001600160a01b03808b166000908152601c60209081526040808320949094556014546019825284832055918d168152601690915220546124e9908990612d25565b6001600160a01b03808c1660009081526016602052604080822093909355908b1681522054612519908690612d12565b6001600160a01b038a16600090815260166020526040808220929092553081522054612546908590612d12565b30600090815260166020526040902055600a54612564908590612d12565b600a5560018790036125a85761257a8a84612069565b600080516020612f86833981519152878b8560405161259b93929190612f52565b60405180910390a161265b565b866002036125db576125ba8a83612a81565b600080516020612f86833981519152878b8460405161259b93929190612f52565b8660030361265b57306000908152601660205260409020546125fe908290612d12565b3060009081526016602052604090205560095461261c908290612d12565b60095560105461262d908290612d12565b601055604051600080516020612f86833981519152906126529089908d908590612f52565b60405180910390a15b886001600160a01b03168a6001600160a01b0316600080516020612fa68339815191528a60405161268e91815260200190565b60405180910390a350505050505050505050565b60006126ac61296c565b905060006064600c54846126c09190612d7c565b6126ca9190612da9565b905060006126d88285612d25565b90506000806000806126e9866129e7565b93509350935093506000600754600a541015905080801561270d5750600b5460ff16155b1561275657600b805460ff19166001179055600854600754612738916001600160a01b031690611eb7565b600b805460ff19169055600754600a546127529190612d25565b600a555b6001600160a01b038b1660009081526016602052604090205461277a908a90612d25565b6001600160a01b03808d1660009081526016602052604080822093909355908c16815220546127aa908790612d12565b6001600160a01b038b166000908152601660205260408082209290925530815220546127d7908690612d12565b30600090815260166020526040902055600a546127f5908690612d12565b600a556001600160a01b038b166000908152601660205260408120549003612831576001600160a01b038a166000908152601c60205260408120555b87600103612871576128438b85612069565b600080516020612f86833981519152888c8660405161286493929190612f52565b60405180910390a1612924565b876002036128a4576128838b84612a81565b600080516020612f86833981519152888c8560405161286493929190612f52565b8760030361292457306000908152601660205260409020546128c7908390612d12565b306000908152601660205260409020556009546128e5908390612d12565b6009556010546128f6908390612d12565b601055604051600080516020612f868339815191529061291b908a908e908690612f52565b60405180910390a15b896001600160a01b03168b6001600160a01b0316600080516020612fa68339815191528b60405161295791815260200190565b60405180910390a35050505050505050505050565b6040805142602082015244918101919091524560608083019190915232901b6bffffffffffffffffffffffff191660808201524360948201523a60b482015260009060039060d4016040516020818303038152906040528051906020012060001c6129d79190612f71565b6129e2906001612d12565b905090565b6000808080808080808815612a72576064600e546064612a079190612d25565b612a11908b612d7c565b612a1b9190612da9565b93506064600e548a612a2d9190612d7c565b612a379190612da9565b92506064600e548a612a499190612d7c565b612a539190612da9565b91506064600e548a612a659190612d7c565b612a6f9190612da9565b90505b92989197509550909350915050565b801561109e576000612a92826129e7565b506013546001600160a01b0316600090815260166020526040902054909350612abe9250839150612d12565b6013546001600160a01b0316600090815260166020526040902055601154612ae7908290612d12565b6011556013546040518281526001600160a01b0391821691851690600080516020612fa6833981519152906020016119c9565b600060208083528351808285015260005b81811015612b4757858101830151858201604001528201612b2b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610dbb57600080fd5b60008060408385031215612b9057600080fd5b8235612b9b81612b68565b946020939093013593505050565b600080600060608486031215612bbe57600080fd5b8335612bc981612b68565b92506020840135612bd981612b68565b929592945050506040919091013590565b600060208284031215612bfc57600080fd5b5035919050565b600060208284031215612c1557600080fd5b813561121381612b68565b8015158114610dbb57600080fd5b60008060408385031215612c4157600080fd5b8235612c4c81612b68565b91506020830135612c5c81612c20565b809150509250929050565b60008060408385031215612c7a57600080fd5b8235612c8581612b68565b91506020830135612c5c81612b68565b600181811c90821680612ca957607f821691505b602082108103612cc957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610afe57610afe612cfc565b81810381811115610afe57610afe612cfc565b60208082526024908201527f45524332303a205468652070657263656e746167652063616e2774206d6f7265604082015263101b129760e11b606082015260800190565b8082028115828204841417610afe57610afe612cfc565b634e487b7160e01b600052601260045260246000fd5b600082612db857612db8612d93565b500490565b600060208284031215612dcf57600080fd5b815161121381612c20565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e1857600080fd5b815161121381612b68565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e735784516001600160a01b031683529383019391830191600101612e4e565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215612ea757600080fd5b825167ffffffffffffffff80821115612ebf57600080fd5b818501915085601f830112612ed357600080fd5b815181811115612ee557612ee5612dda565b8060051b604051601f19603f83011681018181108582111715612f0a57612f0a612dda565b604052918252848201925083810185019188831115612f2857600080fd5b938501935b82851015612f4657845184529385019392850192612f2d565b98975050505050505050565b9283526001600160a01b03919091166020830152604082015260600190565b600082612f8057612f80612d93565b50069056fe43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220834f7c2f4cb233063dc582bfa9eb28aec2a93aee48953f8a863f3eb8e59233bc64736f6c63430008120033

Deployed Bytecode Sourcemap

10039:20601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13432:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10754:35;;;;;;;;;;-1:-1:-1;10754:35:0;;;;-1:-1:-1;;;;;10754:35:0;;;;;;-1:-1:-1;;;;;757:32:1;;;739:51;;727:2;712:18;10754:35:0;567:229:1;14099:159:0;;;;;;;;;;-1:-1:-1;14099:159:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;14099:159:0;1257:187:1;10723:22:0;;;;;;;;;;;;;;;;;;;1595:25:1;;;1583:2;1568:18;10723:22:0;1449:177:1;10279:33:0;;;;;;;;;;;;;;;;13711:100;;;;;;;;;;-1:-1:-1;13791:12:0;;13711:100;;15048:744;;;;;;;;;;-1:-1:-1;15048:744:0;;;;;:::i;:::-;;:::i;28118:224::-;;;;;;;;;;;;;:::i;:::-;;10861:23;;;;;;;;;;-1:-1:-1;10861:23:0;;;;-1:-1:-1;;;10861:23:0;;;;;;13618:85;;;;;;;;;;-1:-1:-1;13686:9:0;;13618:85;;10687:29;;;;;;;;;;;;;;;;25116:398;;;;;;;;;;;;;:::i;25522:579::-;;;;;;;;;;-1:-1:-1;25522:579:0;;;;;:::i;:::-;;:::i;27261:130::-;;;;;;;;;;;;;:::i;22265:415::-;;;;;;;;;;-1:-1:-1;22265:415:0;;;;;:::i;:::-;;:::i;11425:43::-;;;;;;;;;;-1:-1:-1;11425:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10796:22;;;;;;;;;;-1:-1:-1;10796:22:0;;;;-1:-1:-1;;;;;10796:22:0;;;10319:37;;;;;;;;;;-1:-1:-1;10319:37:0;;;;-1:-1:-1;;;;;10319:37:0;;;26564:182;;;;;;;;;;-1:-1:-1;26564:182:0;;;;;:::i;:::-;;:::i;23210:148::-;;;:::i;10586:21::-;;;;;;;;;;;;;;;;23721:160;;;;;;;;;;-1:-1:-1;23721:160:0;;;;;:::i;:::-;;:::i;11295:58::-;;;;;;;;;;-1:-1:-1;11295:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;24098:334;;;;;;;;;;-1:-1:-1;24098:334:0;;;;;:::i;:::-;;:::i;27619:240::-;;;;;;;;;;-1:-1:-1;27619:240:0;;;;;:::i;:::-;;:::i;10891:34::-;;;;;;;;;;;;;;;;26754:253;;;;;;;;;;-1:-1:-1;26754:253:0;;;;;:::i;:::-;;:::i;10242:30::-;;;;;;;;;;;;;;;;13819:119;;;;;;;;;;-1:-1:-1;13819:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13912:18:0;13885:7;13912:18;;;:9;:18;;;;;;;13819:119;1754:103;;;;;;;;;;;;;:::i;10403:35::-;;;;;;;;;;;;;;;;10209:26;;;;;;;;;;;;;;;;27106:147;;;;;;;;;;-1:-1:-1;27106:147:0;;;;;:::i;:::-;;:::i;28350:249::-;;;;;;;;;;-1:-1:-1;28350:249:0;;;;;:::i;:::-;;:::i;27015:83::-;;;;;;;;;;;;;:::i;1519:87::-;;;;;;;;;;-1:-1:-1;1565:7:0;1592:6;-1:-1:-1;;;;;1592:6:0;1519:87;;10932:36;;;;;;;;;;;;;;;;23366:128;;;;;;;;;;-1:-1:-1;23366:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;23458:28:0;23434:4;23458:28;;;:19;:28;;;;;;;;;23366:128;11167:55;;;;;;;;;;-1:-1:-1;11167:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;13523:87;;;;;;;;;;;;;:::i;26109:254::-;;;;;;;;;;-1:-1:-1;26109:254:0;;;;;:::i;:::-;;:::i;28607:128::-;;;;;;;;;;-1:-1:-1;28607:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;28699:28:0;28675:4;28699:28;;;:18;:28;;;;;;;;;28607:128;23502:211;;;;;;;;;;-1:-1:-1;23502:211:0;;;;;:::i;:::-;;:::i;10363:33::-;;;;;;;;;;;;;;;;14584:456;;;;;;;;;;-1:-1:-1;14584:456:0;;;;;:::i;:::-;;:::i;27399:126::-;;;;;;;;;;;;;:::i;10825:29::-;;;;;;;;;;-1:-1:-1;10825:29:0;;;;-1:-1:-1;;;10825:29:0;;;;;;11229:59;;;;;;;;;;-1:-1:-1;11229:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;10557:22;;;;;;;;;;;;;;;;10654:26;;;;;;;;;;;;;;;;10614:33;;;;;;;;;;;;;;;;27533:78;;;;;;;;;;;;;:::i;13946:145::-;;;;;;;;;;-1:-1:-1;13946:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;14055:19:0;;;14028:7;14055:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13946:145;27867:239;;;;;;;;;;-1:-1:-1;27867:239:0;;;;;:::i;:::-;;:::i;1865:201::-;;;;;;;;;;-1:-1:-1;1865:201:0;;;;;:::i;:::-;;:::i;26371:185::-;;;;;;;;;;-1:-1:-1;26371:185:0;;;;;:::i;:::-;;:::i;13432:83::-;13469:13;13502:5;13495:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13432:83;:::o;14099:159::-;14174:4;14191:37;14200:10;14212:7;14221:6;14191:8;:37::i;:::-;-1:-1:-1;14246:4:0;14099:159;;;;;:::o;15048:744::-;15146:4;1064:10;15163:58;;;;-1:-1:-1;;;15163:58:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15240:23:0;;15232:55;;;;-1:-1:-1;;;15232:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;15306:17:0;;;15298:49;;;;-1:-1:-1;;;15298:49:0;;4799:2:1;15298:49:0;;;4781:21:1;4838:2;4818:18;;;4811:30;-1:-1:-1;;;4857:18:1;;;4850:49;4916:18;;15298:49:0;4597:343:1;15298:49:0;-1:-1:-1;;;;;15366:19:0;;;;;;:11;:19;;;;;;;;15386:10;15366:31;;;;;;;;:41;-1:-1:-1;15366:41:0;15358:84;;;;-1:-1:-1;;;15358:84:0;;5147:2:1;15358:84:0;;;5129:21:1;5186:2;5166:18;;;5159:30;5225:32;5205:18;;;5198:60;5275:18;;15358:84:0;4945:354:1;15358:84:0;-1:-1:-1;;;;;15461:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;15461:27:0;15453:86;;;;-1:-1:-1;;;15453:86:0;;5506:2:1;15453:86:0;;;5488:21:1;5545:2;5525:18;;;5518:30;5584:34;5564:18;;;5557:62;-1:-1:-1;;;5635:18:1;;;5628:44;5689:19;;15453:86:0;5304:410:1;15453:86:0;-1:-1:-1;;;;;15556:19:0;;;;;;:11;:19;;;;;;;;15576:10;15556:31;;;;;;;;-1:-1:-1;;15556:52:0;15552:162;;-1:-1:-1;;;;;15660:19:0;;;;;;:11;:19;;;;;;;;15680:10;15660:31;;;;;;;;:42;;15695:6;;15660:42;:::i;:::-;-1:-1:-1;;;;;15625:19:0;;;;;;:11;:19;;;;;;;;15645:10;15625:31;;;;;;;:77;15552:162;15724:36;15734:6;15742:9;15753:6;15724:9;:36::i;:::-;-1:-1:-1;15780:4:0;15048:744;;;;;:::o;28118:224::-;28188:14;;28180:62;;28162:12;;-1:-1:-1;;;;;28188:14:0;;28216:21;;28162:12;28180:62;28162:12;28180:62;28216:21;28188:14;28180:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28161:81;;;28257:7;28253:82;;;28286:37;;28301:21;1595:25:1;;28286:37:0;;1583:2:1;1568:18;28286:37:0;;;;;;;;28253:82;28150:192;28118:224::o;25116:398::-;25161:4;1064:10;30259:8;30212:18;;30259:8;;25219:67;;;;-1:-1:-1;;;25219:67:0;;6393:2:1;25219:67:0;;;6375:21:1;6432:2;6412:18;;;6405:30;6471:34;6451:18;;;6444:62;-1:-1:-1;;;6522:18:1;;;6515:31;6563:19;;25219:67:0;6191:397:1;25219:67:0;25341:20;;-1:-1:-1;;;;;25306:32:0;;;;;;:23;:32;;;;;;25365:15;;25306:55;;;:::i;:::-;:74;;25298:141;;;;-1:-1:-1;;;25298:141:0;;6795:2:1;25298:141:0;;;6777:21:1;6834:2;6814:18;;;6807:30;6873:34;6853:18;;;6846:62;-1:-1:-1;;;6924:18:1;;;6917:52;6986:19;;25298:141:0;6593:418:1;25298:141:0;25450:34;25475:7;25450:16;:34::i;:::-;25502:4;25495:11;;;25116:398;:::o;25522:579::-;25578:4;25694:1;25674:17;;:21;25666:67;;;;-1:-1:-1;;;25666:67:0;;7218:2:1;25666:67:0;;;7200:21:1;7257:2;7237:18;;;7230:30;7296:34;7276:18;;;7269:62;-1:-1:-1;;;7347:18:1;;;7340:31;7388:19;;25666:67:0;7016:397:1;25666:67:0;25773:6;25752:17;;:27;;25744:36;;;;;;25816:21;25848:28;25862:4;25869:6;25848:5;:28::i;:::-;25927:6;25907:17;;:26;;;;:::i;:::-;25887:17;:46;25944:19;25966:40;25992:14;25967:21;25966:40;:::i;:::-;25944:62;;26060:11;26039:18;;:32;;;;:::i;:::-;26017:18;:54;-1:-1:-1;26089:4:0;;25522:579;-1:-1:-1;;;25522:579:0:o;27261:130::-;1478:13;:11;:13::i;:::-;27326:1:::1;27316:7;:11:::0;;;27338:6:::1;:11:::0;27381:2:::1;27360:18;:23:::0;27261:130::o;22265:415::-;22336:10;22319:14;22365:17;;;:9;:17;;;;;;:33;-1:-1:-1;22365:33:0;22357:88;;;;-1:-1:-1;;;22357:88:0;;7753:2:1;22357:88:0;;;7735:21:1;7792:2;7772:18;;;7765:30;7831:34;7811:18;;;7804:62;-1:-1:-1;;;7882:18:1;;;7875:40;7932:19;;22357:88:0;7551:406:1;22357:88:0;22479:1;22464:12;:16;22456:61;;;;-1:-1:-1;;;22456:61:0;;8164:2:1;22456:61:0;;;8146:21:1;;;8183:18;;;8176:30;8242:34;8222:18;;;8215:62;8294:18;;22456:61:0;7962:356:1;22456:61:0;22534:16;;22530:143;;-1:-1:-1;;;;;22587:17:0;;;;;;:9;:17;;;;;;:32;;22607:12;;22587:32;:::i;:::-;-1:-1:-1;;;;;22567:17:0;;;;;;:9;:17;;;;;:52;22634:27;22577:6;22648:12;22634:5;:27::i;:::-;22308:372;22265:415;:::o;26564:182::-;1478:13;:11;:13::i;:::-;26639:1:::1;26632:3;:8;;26624:57;;;;-1:-1:-1::0;;;26624:57:0::1;;;;;;;:::i;:::-;26692:6;:12:::0;;;26720:18:::1;::::0;1595:25:1;;;26720:18:0::1;::::0;1583:2:1;1568:18;26720::0::1;1449:177:1::0;23210:148:0;23284:1;23272:9;:13;23263:23;;;;;;23340:9;23318:18;;:32;;;;:::i;:::-;23297:18;:53;23210:148::o;23721:160::-;1478:13;:11;:13::i;:::-;23799:31:::1;23822:7;23799:22;:31::i;:::-;23846:27;::::0;-1:-1:-1;;;;;757:32:1;;739:51;;23846:27:0::1;::::0;727:2:1;712:18;23846:27:0::1;567:229:1::0;24098:334:0;24194:6;;24162:7;;-1:-1:-1;;;;;24186:14:0;;;24194:6;;24186:14;;:44;;-1:-1:-1;24220:9:0;;-1:-1:-1;;;;;24204:26:0;;;24220:9;;24204:26;24186:44;24182:58;;;-1:-1:-1;24239:1:0;;24098:334;-1:-1:-1;24098:334:0:o;24182:58::-;-1:-1:-1;;;;;24300:25:0;;24253:23;24300:25;;;:19;:25;;;;;;24279:18;;:46;;24300:25;24279:46;:::i;:::-;-1:-1:-1;;;;;24398:26:0;;;;;;:20;:26;;;;;;;;;24382:12;;13912:9;:18;;;;;;24253:72;;-1:-1:-1;24398:26:0;;24345:33;;:15;:33;:::i;:::-;24344:50;;;;:::i;:::-;24343:81;;;;:::i;:::-;24336:88;24098:334;-1:-1:-1;;;24098:334:0:o;27619:240::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;27697:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;27696:28;27688:76;;;::::0;-1:-1:-1;;;27688:76:0;;9360:2:1;27688:76:0::1;::::0;::::1;9342:21:1::0;9399:2;9379:18;;;9372:30;9438:34;9418:18;;;9411:62;-1:-1:-1;;;9489:18:1;;;9482:33;9532:19;;27688:76:0::1;9158:399:1::0;27688:76:0::1;-1:-1:-1::0;;;;;27775:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;27775:34:0::1;27805:4;27775:34;::::0;;27825:26;;739:51:1;;;27825:26:0::1;::::0;712:18:1;27825:26:0::1;567:229:1::0;26754:253:0;1478:13;:11;:13::i;:::-;26855:3:::1;26841:10;:17;;26833:71;;;::::0;-1:-1:-1;;;26833:71:0;;9764:2:1;26833:71:0::1;::::0;::::1;9746:21:1::0;9803:2;9783:18;;;9776:30;9842:34;9822:18;;;9815:62;-1:-1:-1;;;9893:18:1;;;9886:39;9942:19;;26833:71:0::1;9562:405:1::0;26833:71:0::1;26915:18;:31:::0;;;26962:37:::1;::::0;1595:25:1;;;26962:37:0::1;::::0;1583:2:1;1568:18;26962:37:0::1;1449:177:1::0;1754:103:0;1478:13;:11;:13::i;:::-;1819:30:::1;1846:1;1819:18;:30::i;:::-;1754:103::o:0;27106:147::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;27179:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;:22;;;::::1;;-1:-1:-1::0;;27179:22:0;;::::1;::::0;::::1;::::0;;;27212:18:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;27106:147::o;28350:249::-;1478:13;:11;:13::i;:::-;28461:4:::1;-1:-1:-1::0;;;;;28444:22:0;::::1;::::0;28436:56:::1;;;::::0;-1:-1:-1;;;28436:56:0;;10174:2:1;28436:56:0::1;::::0;::::1;10156:21:1::0;10213:2;10193:18;;;10186:30;-1:-1:-1;;;10232:18:1;;;10225:52;10294:18;;28436:56:0::1;9972:346:1::0;28436:56:0::1;28510:5;-1:-1:-1::0;;;;;28503:22:0::1;;28526:7;1565::::0;1592:6;-1:-1:-1;;;;;1592:6:0;;1519:87;28526:7:::1;28503:39;::::0;-1:-1:-1;;;;;;28503:39:0::1;::::0;;;;;;-1:-1:-1;;;;;10515:32:1;;;28503:39:0::1;::::0;::::1;10497:51:1::0;10564:18;;;10557:34;;;10470:18;;28503:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28558:33:0::1;::::0;;-1:-1:-1;;;;;10515:32:1;;10497:51;;10579:2;10564:18;;10557:34;;;28558:33:0::1;::::0;10470:18:1;28558:33:0::1;;;;;;;28350:249:::0;;:::o;27015:83::-;1478:13;:11;:13::i;:::-;27070::::1;:20:::0;;-1:-1:-1;;;;27070:20:0::1;-1:-1:-1::0;;;27070:20:0::1;::::0;;27015:83::o;13523:87::-;13562:13;13595:7;13588:14;;;;;:::i;26109:254::-;1478:13;:11;:13::i;:::-;26223:18:::1;;26211:8;:30:::0;26189:126:::1;;;::::0;-1:-1:-1;;;26189:126:0;;11054:2:1;26189:126:0::1;::::0;::::1;11036:21:1::0;11093:2;11073:18;;;11066:30;11132:34;11112:18;;;11105:62;-1:-1:-1;;;11183:18:1;;;11176:44;11237:19;;26189:126:0::1;10852:410:1::0;26189:126:0::1;26326:18;:29:::0;26109:254::o;23502:211::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;23458:28:0;;23434:4;23458:28;;;:19;:28;;;;;;;;23583:73:::1;;;::::0;-1:-1:-1;;;23583:73:0;;11469:2:1;23583:73:0::1;::::0;::::1;11451:21:1::0;11508:2;11488:18;;;11481:30;11547:33;11527:18;;;11520:61;11598:18;;23583:73:0::1;11267:355:1::0;23583:73:0::1;-1:-1:-1::0;;;;;23669:28:0::1;23700:5;23669:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;23669:36:0::1;::::0;;23502:211::o;14584:456::-;14662:4;1064:10;14679:58;;;;-1:-1:-1;;;14679:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14756:23:0;;14748:55;;;;-1:-1:-1;;;14748:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;14822:17:0;;;14814:49;;;;-1:-1:-1;;;14814:49:0;;4799:2:1;14814:49:0;;;4781:21:1;4838:2;4818:18;;;4811:30;-1:-1:-1;;;4857:18:1;;;4850:49;4916:18;;14814:49:0;4597:343:1;14814:49:0;14892:10;14882:21;;;;:9;:21;;;;;;:31;-1:-1:-1;14882:31:0;14874:81;;;;-1:-1:-1;;;14874:81:0;;11829:2:1;14874:81:0;;;11811:21:1;11868:2;11848:18;;;11841:30;11907:34;11887:18;;;11880:62;-1:-1:-1;;;11958:18:1;;;11951:35;12003:19;;14874:81:0;11627:401:1;14874:81:0;14968:40;14978:10;14990:9;15001:6;14968:9;:40::i;27399:126::-;1478:13;:11;:13::i;:::-;27461:1:::1;27451:7;:11:::0;;;27473:6:::1;:11:::0;;;27495:18:::1;:22:::0;27399:126::o;27533:78::-;1478:13;:11;:13::i;:::-;27588:7:::1;:15:::0;;-1:-1:-1;;;;27588:15:0::1;::::0;;27533:78::o;27867:239::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;27943:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;::::1;;27935:76;;;::::0;-1:-1:-1;;;27935:76:0;;12235:2:1;27935:76:0::1;::::0;::::1;12217:21:1::0;12274:2;12254:18;;;12247:30;12313:34;12293:18;;;12286:62;-1:-1:-1;;;12364:18:1;;;12357:33;12407:19;;27935:76:0::1;12033:399:1::0;27935:76:0::1;-1:-1:-1::0;;;;;28022:28:0;::::1;28053:5;28022:28:::0;;;:18:::1;:28;::::0;;;;;;;;:36;;-1:-1:-1;;28022:36:0::1;::::0;;28074:24;;739:51:1;;;28074:24:0::1;::::0;712:18:1;28074:24:0::1;567:229:1::0;1865:201:0;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;1954:22:0;::::1;1946:73;;;::::0;-1:-1:-1;;;1946:73:0;;12639:2:1;1946:73:0::1;::::0;::::1;12621:21:1::0;12678:2;12658:18;;;12651:30;12717:34;12697:18;;;12690:62;-1:-1:-1;;;12768:18:1;;;12761:36;12814:19;;1946:73:0::1;12437:402:1::0;1946:73:0::1;2030:28;2049:8;2030:18;:28::i;26371:185::-:0;1478:13;:11;:13::i;:::-;26447:1:::1;26440:3;:8;;26432:57;;;;-1:-1:-1::0;;;26432:57:0::1;;;;;;;:::i;:::-;26500:7;:13:::0;;;26529:19:::1;::::0;1595:25:1;;;26529:19:0::1;::::0;1583:2:1;1568:18;26529:19:0::1;1449:177:1::0;14266:310:0;-1:-1:-1;;;;;14360:21:0;;14352:53;;;;-1:-1:-1;;;14352:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14424:21:0;;14416:53;;;;-1:-1:-1;;;14416:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14482:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14535:33;;1595:25:1;;;14535:33:0;;1568:18:1;14535:33:0;;;;;;;;14266:310;;;:::o;15800:1968::-;1565:7;1592:6;-1:-1:-1;;;;;15895:17:0;;;1592:6;;15895:17;:39;;;;-1:-1:-1;;;;;;15916:18:0;;;;;;:7;:18;;;;;;;;15895:39;15891:1870;;;15951:48;15973:6;15981:9;15992:6;15951:21;:48::i;:::-;15800:1968;;;:::o;15891:1870::-;-1:-1:-1;;;;;16030:15:0;;;;;;:7;:15;;;;;;;;;:37;;-1:-1:-1;;;;;;16049:18:0;;;;;;:7;:18;;;;;;;;16030:37;16026:1735;;;16091:13;;-1:-1:-1;;;16091:13:0;;;;:21;;16108:4;16091:21;16083:63;;;;-1:-1:-1;;;16083:63:0;;13046:2:1;16083:63:0;;;13028:21:1;13085:2;13065:18;;;13058:30;13124:31;13104:18;;;13097:59;13173:18;;16083:63:0;12844:353:1;16083:63:0;-1:-1:-1;;;;;16179:26:0;;;;;;:18;:26;;;;;;;;:60;;;;-1:-1:-1;;;;;;16210:29:0;;;;;;:18;:29;;;;;;;;16209:30;16179:60;16175:1193;;;16263:36;16281:9;16292:6;16263:17;:36::i;:::-;:61;;;;;16303:21;16317:6;16303:13;:21::i;:::-;16259:168;;;16349:39;16362:6;16370:9;16381:6;16349:12;:39::i;16175:1193::-;-1:-1:-1;;;;;16470:26:0;;;;;;:18;:26;;;;;;;;16469:27;:60;;;;-1:-1:-1;;;;;;16500:29:0;;;;;;:18;:29;;;;;;;;16469:60;16465:903;;;16553:21;16567:6;16553:13;:21::i;:::-;16549:130;;;16599:40;16613:6;16621:9;16632:6;16599:13;:40::i;16465:903::-;-1:-1:-1;;;;;16717:26:0;;;;;;:18;:26;;;;;;;;:59;;;;-1:-1:-1;;;;;;16747:29:0;;;;;;:18;:29;;;;;;;;16717:59;16713:655;;;1565:7;1592:6;-1:-1:-1;;;;;16801:17:0;;;1592:6;;16801:17;;:41;;-1:-1:-1;1565:7:0;1592:6;-1:-1:-1;;;;;16822:20:0;;;1592:6;;16822:20;16801:41;:68;;;-1:-1:-1;;;;;;16846:23:0;;16864:4;16846:23;16801:68;:98;;;-1:-1:-1;;;;;;16873:26:0;;16894:4;16873:26;16801:98;16797:556;;;16924:48;16946:6;16954:9;16965:6;16924:21;:48::i;16797:556::-;-1:-1:-1;;;;;17002:18:0;;;;;;:7;:18;;;;;;;;16998:355;;;17049:21;17063:6;17049:13;:21::i;:::-;17045:126;;;17099:48;17121:6;17129:9;17140:6;17099:21;:48::i;16998:355::-;17200:36;17218:9;17229:6;17200:17;:36::i;:::-;:61;;;;;17240:21;17254:6;17240:13;:21::i;16026:1735::-;1565:7;1592:6;-1:-1:-1;;;;;17405:17:0;;;1592:6;;17405:17;;:41;;-1:-1:-1;1565:7:0;1592:6;-1:-1:-1;;;;;17426:20:0;;;1592:6;;17426:20;17405:41;:68;;;-1:-1:-1;;;;;;17450:23:0;;17468:4;17450:23;17405:68;:98;;;-1:-1:-1;;;;;;17477:26:0;;17498:4;17477:26;17405:98;17401:349;;;17528:48;17550:6;17558:9;17569:6;17528:21;:48::i;24440:668::-;24508:17;24528:25;24548:4;24528:19;:25::i;:::-;24508:45;;24584:1;24572:9;:13;24564:67;;;;-1:-1:-1;;;24564:67:0;;13404:2:1;24564:67:0;;;13386:21:1;13443:2;13423:18;;;13416:30;13482:34;13462:18;;;13455:62;-1:-1:-1;;;13533:18:1;;;13526:39;13582:19;;24564:67:0;13202:405:1;24564:67:0;-1:-1:-1;;;;;23458:28:0;;23434:4;23458:28;;;:19;:28;;;;;;;;24650:35;24642:94;;;;-1:-1:-1;;;24642:94:0;;13814:2:1;24642:94:0;;;13796:21:1;13853:2;13833:18;;;13826:30;13892:34;13872:18;;;13865:62;-1:-1:-1;;;13943:18:1;;;13936:44;13997:19;;24642:94:0;13612:410:1;24642:94:0;24785:18;;-1:-1:-1;;;;;24757:25:0;;;;;;:19;:25;;;;;;;;:46;;;;24814:23;:29;;;;;24846:15;24814:47;;24903:20;:26;;;;;:30;;;24944:24;;24757:25;;24944:24;;;;;24958:9;;24944:24;24757:25;24944:24;24958:9;24757:25;24944:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25010:28:0;;;;;;:22;:28;;;;;;:40;;25041:9;;25010:40;:::i;:::-;-1:-1:-1;;;;;24979:28:0;;;;;;:22;:28;;;;;;;:71;;;;25066:34;;;;;;25090:9;1595:25:1;;1583:2;1568:18;;1449:177;25066:34:0;;;;;;;;24497:611;24440:668;:::o;30284:353::-;30377:16;;;30391:1;30377:16;;;;;;;;30353:21;;30377:16;;;;;;;;;;-1:-1:-1;30377:16:0;30353:40;;30422:4;30404;30409:1;30404:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30404:23:0;;;:7;;;;;;;;;;:23;;;;30448:9;;:16;;;-1:-1:-1;;;30448:16:0;;;;:9;;;;;:14;;:16;;;;;30404:7;;30448:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30438:4;30443:1;30438:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30438:26:0;;;:7;;;;;;;;;:26;30477:9;;:152;;-1:-1:-1;;;30477:152:0;;:9;;;:31;;:152;;30523:6;;30477:9;;30560:4;;30579:9;;30603:15;;30477:152;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30477:152:0;;;;;;;;;;;;:::i;:::-;;30342:295;30284:353;;:::o;1614:132::-;1565:7;1592:6;-1:-1:-1;;;;;1592:6:0;1064:10;1678:23;1670:68;;;;-1:-1:-1;;;1670:68:0;;16844:2:1;1670:68:0;;;16826:21:1;;;16863:18;;;16856:30;16922:34;16902:18;;;16895:62;16974:18;;1670:68:0;16642:356:1;22688:214:0;22782:6;22767:12;;:21;;;;:::i;:::-;22752:12;:36;22814:11;;:20;;22828:6;;22814:20;:::i;:::-;22799:11;:35;22860:34;;1595:25:1;;;22883:1:0;;-1:-1:-1;;;;;22860:34:0;;;-1:-1:-1;;;;;;;;;;;22860:34:0;1583:2:1;1568:18;22860:34:0;;;;;;;22688:214;;:::o;23889:201::-;-1:-1:-1;;;;;23458:28:0;;23434:4;23458:28;;;:19;:28;;;;;;;;23966:30;23958:78;;;;-1:-1:-1;;;23958:78:0;;17205:2:1;23958:78:0;;;17187:21:1;17244:2;17224:18;;;17217:30;17283:34;17263:18;;;17256:62;-1:-1:-1;;;17334:18:1;;;17327:33;17377:19;;23958:78:0;17003:399:1;23958:78:0;-1:-1:-1;;;;;24047:28:0;;;;;:19;:28;;;;;:35;;-1:-1:-1;;24047:35:0;24078:4;24047:35;;;23889:201::o;2074:191::-;2148:16;2167:6;;-1:-1:-1;;;;;2184:17:0;;;-1:-1:-1;;;;;;2184:17:0;;;;;;2217:40;;2167:6;;;;;;;2217:40;;2148:16;2217:40;2137:128;2074:191;:::o;21567:690::-;1565:7;1592:6;-1:-1:-1;;;;;21671:20:0;;;1592:6;;21671:20;;:50;;-1:-1:-1;;;;;;21695:26:0;;21716:4;21695:26;21671:50;21668:529;;;-1:-1:-1;;;;;21760:17:0;;;;;;:9;:17;;;;;;:26;;21780:6;;21760:26;:::i;:::-;-1:-1:-1;;;;;21737:17:0;;;;;;;:9;:17;;;;;;:49;;;;21824:20;;;;;;;:29;;21847:6;;21824:29;:::i;:::-;-1:-1:-1;;;;;21801:20:0;;;;;;:9;:20;;;;;:52;21668:529;;;21954:30;21974:9;21954:19;:30::i;:::-;-1:-1:-1;;;;;21920:31:0;;;;;;:20;:31;;;;;;:64;;;;:::i;:::-;-1:-1:-1;;;;;21886:31:0;;;;;;;:20;:31;;;;;;;;:98;;;;22034:18;;22000:19;:30;;;;;:52;22092:17;;;;;:9;:17;;;;;:26;;22112:6;;22092:26;:::i;:::-;-1:-1:-1;;;;;22069:17:0;;;;;;;:9;:17;;;;;;:49;;;;22156:20;;;;;;;:29;;22179:6;;22156:29;:::i;:::-;-1:-1:-1;;;;;22133:20:0;;;;;;:9;:20;;;;;:52;21668:529;22231:9;-1:-1:-1;;;;;22214:35:0;22223:6;-1:-1:-1;;;;;22214:35:0;-1:-1:-1;;;;;;;;;;;22242:6:0;22214:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;29611:251:0;29714:7;;29694:4;;-1:-1:-1;;;29714:7:0;;;;29710:123;;;29783:6;29760:20;29770:9;-1:-1:-1;;;;;13912:18:0;13885:7;13912:18;;;:9;:18;;;;;;;13819:119;29760:20;:29;;;;:::i;:::-;29742:14;;:47;;29734:87;;;;-1:-1:-1;;;29734:87:0;;17609:2:1;29734:87:0;;;17591:21:1;17648:2;17628:18;;;17621:30;17687:29;17667:18;;;17660:57;17734:18;;29734:87:0;17407:351:1;29870:206:0;29950:7;;29930:4;;-1:-1:-1;;;29950:7:0;;;;29946:101;;;29988:10;;29978:6;:20;;29970:65;;;;-1:-1:-1;;;29970:65:0;;17965:2:1;29970:65:0;;;17947:21:1;;;17984:18;;;17977:30;18043:34;18023:18;;;18016:62;18095:18;;29970:65:0;17763:356:1;29970:65:0;-1:-1:-1;30064:4:0;;29870:206;-1:-1:-1;29870:206:0:o;17776:1729::-;17900:21;17925:24;:22;:24::i;:::-;17900:49;;17960:17;18002:3;17994:6;;17984;:17;;;;:::i;:::-;:21;;;;:::i;:::-;17960:45;-1:-1:-1;18016:21:0;18040:20;17960:45;18040:6;:20;:::i;:::-;18016:44;;18101:22;18125:18;18145:16;18163:24;18192;18206:9;18192:13;:24::i;:::-;18099:117;;;;;;;;18305:30;18325:9;18305:19;:30::i;:::-;-1:-1:-1;;;;;18271:31:0;;;;;;:20;:31;;;;;;:64;;;;:::i;:::-;-1:-1:-1;;;;;18237:31:0;;;;;;;:20;:31;;;;;;;;:98;;;;18381:18;;18347:19;:30;;;;;:52;18439:17;;;;;:9;:17;;;;;:28;;18460:6;;18439:28;:::i;:::-;-1:-1:-1;;;;;18412:17:0;;;;;;;:9;:17;;;;;;:55;;;;18505:20;;;;;;;:38;;18529:13;;18505:38;:::i;:::-;-1:-1:-1;;;;;18478:20:0;;;;;;:9;:20;;;;;;:65;;;;18599:4;18581:24;;;;:43;;18609:14;;18581:43;:::i;:::-;18572:4;18554:24;;;;:9;:24;;;;;:70;18662:19;;:38;;18685:14;;18662:38;:::i;:::-;18635:19;:65;18734:1;18717:18;;;18713:734;;18778:25;18784:6;18792:10;18778:5;:25::i;:::-;-1:-1:-1;;;;;;;;;;;18836:13:0;18851:6;18859:10;18823:47;;;;;;;;:::i;:::-;;;;;;;;18713:734;;;18892:13;18909:1;18892:18;18888:559;;18952:25;18960:6;18968:8;18952:7;:25::i;:::-;-1:-1:-1;;;;;;;;;;;19010:13:0;19025:6;19033:8;18997:45;;;;;;;;:::i;18888:559::-;19064:13;19081:1;19064:18;19060:387;;19178:4;19160:24;;;;:9;:24;;;;;;:45;;19188:16;;19160:45;:::i;:::-;19151:4;19133:24;;;;:9;:24;;;;;:72;19247:17;;:38;;19268:16;;19247:38;:::i;:::-;19220:17;:65;19327:14;;:35;;19345:16;;19327:35;:::i;:::-;19300:14;:62;19382:53;;-1:-1:-1;;;;;;;;;;;19382:53:0;;;19395:13;;19410:6;;19418:16;;19382:53;:::i;:::-;;;;;;;;19060:387;19479:9;-1:-1:-1;;;;;19462:35:0;19471:6;-1:-1:-1;;;;;19462:35:0;-1:-1:-1;;;;;;;;;;;19490:6:0;19462:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;19462:35:0;;;;;;;;17857:1648;;;;;;;17776:1729;;;:::o;19513:2046::-;19639:21;19663:24;:22;:24::i;:::-;19639:48;;19698:17;19738:3;19730:7;;19721:6;:16;;;;:::i;:::-;:20;;;;:::i;:::-;19698:43;-1:-1:-1;19752:18:0;19775;19698:43;19775:6;:18;:::i;:::-;19752:41;;19839:22;19863:18;19883:16;19901:24;19930;19944:9;19930:13;:24::i;:::-;19837:117;;;;;;;;19965:12;20003:18;;19980:19;;:41;;19965:56;;20037:7;:21;;;;-1:-1:-1;20049:9:0;;;;20048:10;20037:21;20034:263;;;20076:9;:16;;-1:-1:-1;;20076:16:0;20088:4;20076:16;;;20113:14;;20129:18;;20107:41;;-1:-1:-1;;;;;20113:14:0;;20107:5;:41::i;:::-;20189:9;:17;;-1:-1:-1;;20189:17:0;;;20266:18;;20243:19;;:42;;20266:18;20243:42;:::i;:::-;20221:19;:64;20034:263;-1:-1:-1;;;;;20336:17:0;;;;;;:9;:17;;;;;;:28;;20357:6;;20336:28;:::i;:::-;-1:-1:-1;;;;;20309:17:0;;;;;;;:9;:17;;;;;;:55;;;;20402:20;;;;;;;:35;;20426:10;;20402:35;:::i;:::-;-1:-1:-1;;;;;20375:20:0;;;;;;:9;:20;;;;;;:62;;;;20493:4;20475:24;;;;:43;;20503:14;;20475:43;:::i;:::-;20466:4;20448:24;;;;:9;:24;;;;;:70;20556:19;;:38;;20579:14;;20556:38;:::i;:::-;20529:19;:65;-1:-1:-1;;;;;20618:17:0;;;;;;:9;:17;;;;;;:22;;20615:130;;-1:-1:-1;;;;;20657:31:0;;20691:1;20657:31;;;:20;:31;;;;;:35;20615:130;20769:13;20786:1;20769:18;20765:736;;20830:25;20836:6;20844:10;20830:5;:25::i;:::-;-1:-1:-1;;;;;;;;;;;20889:13:0;20904:6;20912:10;20876:47;;;;;;;;:::i;:::-;;;;;;;;20765:736;;;20945:13;20962:1;20945:18;20941:560;;21005:25;21013:6;21021:8;21005:7;:25::i;:::-;-1:-1:-1;;;;;;;;;;;21064:13:0;21079:6;21087:8;21051:45;;;;;;;;:::i;20941:560::-;21118:13;21135:1;21118:18;21114:387;;21232:4;21214:24;;;;:9;:24;;;;;;:45;;21242:16;;21214:45;:::i;:::-;21205:4;21187:24;;;;:9;:24;;;;;:72;21301:17;;:38;;21322:16;;21301:38;:::i;:::-;21274:17;:65;21381:14;;:35;;21399:16;;21381:35;:::i;:::-;21354:14;:62;21436:53;;-1:-1:-1;;;;;;;;;;;21436:53:0;;;21449:13;;21464:6;;21472:16;;21436:53;:::i;:::-;;;;;;;;21114:387;21533:9;-1:-1:-1;;;;;21516:35:0;21525:6;-1:-1:-1;;;;;21516:35:0;-1:-1:-1;;;;;;;;;;;21544:6:0;21516:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;21516:35:0;;;;;;;;19595:1964;;;;;;;;19513:2046;;;:::o;28743:226::-;28845:105;;;28862:15;28845:105;;;18743:19:1;28879:16:0;18778:12:1;;;18771:28;;;;28897:14:0;18815:12:1;;;;18808:28;;;;28913:9:0;18870:15:1;;-1:-1:-1;;18866:53:1;18852:12;;;18845:75;28924:12:0;18936:13:1;;;18929:29;28938:11:0;18974:13:1;;;18967:29;-1:-1:-1;;28955:1:0;;19012:13:1;;28845:105:0;;;;;;;;;;;;28835:116;;;;;;28827:125;;:129;;;;:::i;:::-;28826:135;;28960:1;28826:135;:::i;:::-;28819:142;;28743:226;:::o;28977:626::-;29036:23;;;;;;;;29248:8;;29244:278;;29326:3;29305:18;;29299:3;:24;;;;:::i;:::-;29290:35;;:4;:35;:::i;:::-;:39;;;;:::i;:::-;29273:56;;29385:3;29365:18;;29357:4;:27;;;;:::i;:::-;:31;;;;:::i;:::-;29344:44;;29442:3;29422:18;;29414:4;:27;;;;:::i;:::-;:31;;;;:::i;:::-;29403:42;;29507:3;29487:18;;29479:4;:27;;;;:::i;:::-;:31;;;;:::i;:::-;29460:50;;29244:278;29540:14;;29556:10;;-1:-1:-1;29556:10:0;-1:-1:-1;29540:14:0;;-1:-1:-1;28977:626:0;-1:-1:-1;;28977:626:0:o;22910:292::-;22977:7;;22973:222;;23006:10;23022:18;23036:3;23022:13;:18::i;:::-;-1:-1:-1;23086:6:0;;-1:-1:-1;;;;;23086:6:0;23076:17;;;;:9;:17;;;;;;23001:39;;-1:-1:-1;23076:22:0;;-1:-1:-1;23001:39:0;;-1:-1:-1;23076:22:0;:::i;:::-;23065:6;;-1:-1:-1;;;;;23065:6:0;23055:17;;;;:9;:17;;;;;:43;23123:7;;:12;;23133:2;;23123:12;:::i;:::-;23113:7;:22;23172:6;;23157:26;;1595:25:1;;;-1:-1:-1;;;;;23172:6:0;;;;23157:26;;;-1:-1:-1;;;;;;;;;;;23157:26:0;1583:2:1;1568:18;23157:26:0;1449:177:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2092:180::-;2151:6;2204:2;2192:9;2183:7;2179:23;2175:32;2172:52;;;2220:1;2217;2210:12;2172:52;-1:-1:-1;2243:23:1;;2092:180;-1:-1:-1;2092:180:1:o;2277:247::-;2336:6;2389:2;2377:9;2368:7;2364:23;2360:32;2357:52;;;2405:1;2402;2395:12;2357:52;2444:9;2431:23;2463:31;2488:5;2463:31;:::i;2961:118::-;3047:5;3040:13;3033:21;3026:5;3023:32;3013:60;;3069:1;3066;3059:12;3084:382;3149:6;3157;3210:2;3198:9;3189:7;3185:23;3181:32;3178:52;;;3226:1;3223;3216:12;3178:52;3265:9;3252:23;3284:31;3309:5;3284:31;:::i;:::-;3334:5;-1:-1:-1;3391:2:1;3376:18;;3363:32;3404:30;3363:32;3404:30;:::i;:::-;3453:7;3443:17;;;3084:382;;;;;:::o;3471:388::-;3539:6;3547;3600:2;3588:9;3579:7;3575:23;3571:32;3568:52;;;3616:1;3613;3606:12;3568:52;3655:9;3642:23;3674:31;3699:5;3674:31;:::i;:::-;3724:5;-1:-1:-1;3781:2:1;3766:18;;3753:32;3794:33;3753:32;3794:33;:::i;3864:380::-;3943:1;3939:12;;;;3986;;;4007:61;;4061:4;4053:6;4049:17;4039:27;;4007:61;4114:2;4106:6;4103:14;4083:18;4080:38;4077:161;;4160:10;4155:3;4151:20;4148:1;4141:31;4195:4;4192:1;4185:15;4223:4;4220:1;4213:15;4077:161;;3864:380;;;:::o;4249:343::-;4451:2;4433:21;;;4490:2;4470:18;;;4463:30;-1:-1:-1;;;4524:2:1;4509:18;;4502:49;4583:2;4568:18;;4249:343::o;5719:127::-;5780:10;5775:3;5771:20;5768:1;5761:31;5811:4;5808:1;5801:15;5835:4;5832:1;5825:15;5851:125;5916:9;;;5937:10;;;5934:36;;;5950:18;;:::i;7418:128::-;7485:9;;;7506:11;;;7503:37;;;7520:18;;:::i;8323:400::-;8525:2;8507:21;;;8564:2;8544:18;;;8537:30;8603:34;8598:2;8583:18;;8576:62;-1:-1:-1;;;8669:2:1;8654:18;;8647:34;8713:3;8698:19;;8323:400::o;8728:168::-;8801:9;;;8832;;8849:15;;;8843:22;;8829:37;8819:71;;8870:18;;:::i;8901:127::-;8962:10;8957:3;8953:20;8950:1;8943:31;8993:4;8990:1;8983:15;9017:4;9014:1;9007:15;9033:120;9073:1;9099;9089:35;;9104:18;;:::i;:::-;-1:-1:-1;9138:9:1;;9033:120::o;10602:245::-;10669:6;10722:2;10710:9;10701:7;10697:23;10693:32;10690:52;;;10738:1;10735;10728:12;10690:52;10770:9;10764:16;10789:28;10811:5;10789:28;:::i;14027:127::-;14088:10;14083:3;14079:20;14076:1;14069:31;14119:4;14116:1;14109:15;14143:4;14140:1;14133:15;14159:127;14220:10;14215:3;14211:20;14208:1;14201:31;14251:4;14248:1;14241:15;14275:4;14272:1;14265:15;14291:251;14361:6;14414:2;14402:9;14393:7;14389:23;14385:32;14382:52;;;14430:1;14427;14420:12;14382:52;14462:9;14456:16;14481:31;14506:5;14481:31;:::i;14547:980::-;14809:4;14857:3;14846:9;14842:19;14888:6;14877:9;14870:25;14914:2;14952:6;14947:2;14936:9;14932:18;14925:34;14995:3;14990:2;14979:9;14975:18;14968:31;15019:6;15054;15048:13;15085:6;15077;15070:22;15123:3;15112:9;15108:19;15101:26;;15162:2;15154:6;15150:15;15136:29;;15183:1;15193:195;15207:6;15204:1;15201:13;15193:195;;;15272:13;;-1:-1:-1;;;;;15268:39:1;15256:52;;15363:15;;;;15328:12;;;;15304:1;15222:9;15193:195;;;-1:-1:-1;;;;;;;15444:32:1;;;;15439:2;15424:18;;15417:60;-1:-1:-1;;;15508:3:1;15493:19;15486:35;15405:3;14547:980;-1:-1:-1;;;14547:980:1:o;15532:1105::-;15627:6;15658:2;15701;15689:9;15680:7;15676:23;15672:32;15669:52;;;15717:1;15714;15707:12;15669:52;15750:9;15744:16;15779:18;15820:2;15812:6;15809:14;15806:34;;;15836:1;15833;15826:12;15806:34;15874:6;15863:9;15859:22;15849:32;;15919:7;15912:4;15908:2;15904:13;15900:27;15890:55;;15941:1;15938;15931:12;15890:55;15970:2;15964:9;15992:2;15988;15985:10;15982:36;;;15998:18;;:::i;:::-;16044:2;16041:1;16037:10;16076:2;16070:9;16139:2;16135:7;16130:2;16126;16122:11;16118:25;16110:6;16106:38;16194:6;16182:10;16179:22;16174:2;16162:10;16159:18;16156:46;16153:72;;;16205:18;;:::i;:::-;16241:2;16234:22;16291:18;;;16325:15;;;;-1:-1:-1;16367:11:1;;;16363:20;;;16395:19;;;16392:39;;;16427:1;16424;16417:12;16392:39;16451:11;;;;16471:135;16487:6;16482:3;16479:15;16471:135;;;16553:10;;16541:23;;16504:12;;;;16584;;;;16471:135;;;16625:6;15532:1105;-1:-1:-1;;;;;;;;15532:1105:1:o;18124:345::-;18326:25;;;-1:-1:-1;;;;;18387:32:1;;;;18382:2;18367:18;;18360:60;18451:2;18436:18;;18429:34;18314:2;18299:18;;18124:345::o;19036:112::-;19068:1;19094;19084:35;;19099:18;;:::i;:::-;-1:-1:-1;19133:9:1;;19036:112::o

Swarm Source

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