ETH Price: $3,066.23 (+2.88%)
Gas: 1 Gwei

Token

Solare Flare (SFlare)
 

Overview

Max Total Supply

1,000,000,000 SFlare

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,000,000 SFlare

Value
$0.00
0xb56953b52a848bcbe4d0b45d8f50b13598a2d239
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SFlare

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-24
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view 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);
}
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 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function 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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    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 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;
}
library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract SFlare is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private constant tokenName = "Solare Flare";
    string private constant tokenSymbol = "SFlare";
    uint8 private constant tokenDecimal = 18;
    uint256 private constant tokenSupply = 1e9 * 10**tokenDecimal;

    mapping(address => mapping(address => uint256)) private tokenAllowances;
    mapping(address => uint256) private tokenBalance;
    mapping(address => bool) private isContractsExcluded;
    mapping(address => bool) private isMaxWalletExcluded;
    mapping(address => bool) private isTaxExcluded;
    mapping(address => bool) public isSniper;
    mapping(address => bool) public isBot;

    address payable liquidityAddress;
    address payable marketingAddress;
    address payable devAddress;
    address dead = address(0xdead);
    address public uniV2Pair;
    IUniswapV2Router02 public uniV2Router;
    address public uniV3Router;
    
    uint256 private maxWallet;
    uint256 private minTaxSwap;
    uint256 private marketingTokens;
    uint256 private liquidityTokens;
	uint256 private totalBurnedTokens;

    uint256 private marketingTax;
    uint256 private liquidityTax;
    uint256 private divForSplitTax;
    uint256 private taxBuyMarketing;
    uint256 private taxBuyLiquidity;
    uint256 private taxSellMarketing;
    uint256 private taxSellTreasury;
    uint256 private taxSellLiquidity;

    uint256 public activeTradingBlock;
    uint256 public sniperPenaltyEnd;

    bool public limitsOn = false;
    bool public maxWalletOn = false;
    bool public live = false;
    bool public contractBlocker = false;
    bool inSwapAndLiquify;
    bool private swapAndLiquifyStatus = false;
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() payable {
        tokenBalance[address(this)] = tokenSupply;
        maxWallet = tokenSupply.mul(5).div(1000);
        minTaxSwap = tokenSupply.mul(4).div(10000);

        marketingAddress = payable(0x59eC70508f07f993bc524f4369bcc96aDf8480dA);
        devAddress = payable(0x5c32d78ebd63bFFa6626C33f1c20C184dC1E6667);

        liquidityAddress = payable(owner()); //LEAVE AS OWNER

        taxBuyMarketing = 4;
        taxBuyLiquidity = 1;
        taxSellMarketing = 5;
        taxSellLiquidity = 2;

        isContractsExcluded[address(this)] = true;
        isTaxExcluded[owner()] = true;
        isTaxExcluded[dead] = true;
        isTaxExcluded[address(this)] = true;
        isTaxExcluded[marketingAddress] = true;
        isTaxExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[address(this)] = true;
        isMaxWalletExcluded[owner()] = true;
        isMaxWalletExcluded[marketingAddress] = true;
        isMaxWalletExcluded[liquidityAddress] = true;
        isMaxWalletExcluded[dead] = true;
        
        emit Transfer(address(0), address(this), tokenSupply);
    }
    receive() external payable {}
    function name() external pure override returns (string memory) {
        return tokenName;
    }
    function symbol() external pure override returns (string memory) {
        return tokenSymbol;
    }
    function decimals() external pure override returns (uint8) {
        return tokenDecimal;
    }
    function totalSupply() external pure override returns (uint256) {
        return tokenSupply;
    }
    function balanceOf(address account) public view override returns (uint256) {
        return tokenBalance[account];
    }
    function allowance(address owner, address spender) external view override returns (uint256) {
        return tokenAllowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[_msgSender()][spender] = amount;
        emit Approval(_msgSender(), spender, amount);
        return true;
    }
    function internalApprove(address owner,address spender,uint256 amount) internal {
        require(owner != address(0), "ERC20: Can not approve from zero address");
        require(spender != address(0), "ERC20: Can not approve to zero address");
        tokenAllowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        internalTransfer(_msgSender(), recipient, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) external override returns (bool) {
        internalTransfer(sender, recipient, amount);
        internalApprove(sender,_msgSender(),
        tokenAllowances[sender][_msgSender()].sub(amount, "ERC20: Can not transfer. Amount exceeds allowance"));
        return true;
    }

    function launch() external onlyOwner returns (bool){
        require(!live, "ERC20: Trades already Live!");
        activeTradingBlock = block.number;
        sniperPenaltyEnd = block.timestamp.add(2 days);
        IUniswapV2Router02 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniV2Router = _uniV2Router;
        uniV3Router = 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45;
        isContractsExcluded[address(uniV2Router)] = true;
        isContractsExcluded[address(uniV3Router)] = true;
        isMaxWalletExcluded[address(uniV2Router)] = true;
        internalApprove(address(this), address(uniV2Router), tokenSupply);
        uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).createPair(address(this), _uniV2Router.WETH());
        isContractsExcluded[address(uniV2Pair)] = true;
        isMaxWalletExcluded[address(uniV2Pair)] = true;
        require(address(this).balance > 0, "ERC20: Must have ETH on contract to Go Live!");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        launchSetLiquidityAddress(dead);
        maxWalletOn = true;
        swapAndLiquifyStatus = true;
        limitsOn = true;
        live = true;
        return true;
    }
    function internalTransfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "ERC20: Transfer amount must be greater than zero");
        require(!isBot[from], "ERC20: Can not transfer from BOT");
        if(!live){
            require(isTaxExcluded[from] || isTaxExcluded[to], "ERC20: Trading Is Not Live!");
        }
        if (maxWalletOn == true && ! isMaxWalletExcluded[to]) {
            require(balanceOf(to).add(amount) <= maxWallet, "ERC20: Max amount of tokens for wallet reached");
        }
        if(limitsOn){
            if (from != owner() && to != owner() && to != address(0) && to != dead && to != uniV2Pair) {
                for (uint x = 0; x < 1; x++) {
                    if(block.number == activeTradingBlock.add(x)) {
                        isSniper[to] = true;
                    }
                }
            }
        }
        if(contractBlocker) {
            require(
                !isContract(to) && isContractsExcluded[from] ||
                !isContract(from) && isContractsExcluded[to] || 
                isContract(from) && isContractsExcluded[to] || 
                isContract(to) && isContractsExcluded[from]
                );
        }
        uint256 totalTokensToSwap = liquidityTokens.add(marketingTokens);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minTaxSwap;
        if (!inSwapAndLiquify && swapAndLiquifyStatus && balanceOf(uniV2Pair) > 0 && totalTokensToSwap > 0 && !isTaxExcluded[to] && !isTaxExcluded[from] && to == uniV2Pair && overMinimumTokenBalance) {
            taxTokenSwap();
            }
        if (isTaxExcluded[from] || isTaxExcluded[to]) {
            marketingTax = 0;
            liquidityTax = 0;
            divForSplitTax = marketingTax.add(liquidityTax);
        } else {
            if (from == uniV2Pair) {
                marketingTax = taxBuyMarketing;
                liquidityTax = taxBuyLiquidity;
                divForSplitTax = taxBuyMarketing.add(taxBuyLiquidity);
            }else if (to == uniV2Pair) {
                marketingTax = taxSellMarketing;
                liquidityTax = taxSellLiquidity;
                divForSplitTax = taxSellMarketing.add(taxSellLiquidity);
                if(isSniper[from] && sniperPenaltyEnd >= block.timestamp){
                    marketingTax = 85;
                    liquidityTax = 10;
                    divForSplitTax = marketingTax.add(liquidityTax);
                }
            }else {
                require(!isSniper[from] || sniperPenaltyEnd <= block.timestamp, "ERC20: Snipers can not transfer till penalty time is over");
                marketingTax = 0;
                liquidityTax = 0;
            }
        }
        tokenTransfer(from, to, amount);
    }
    function taxTokenSwap() internal lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = marketingTokens.add(liquidityTokens);
        uint256 swapLiquidityTokens = liquidityTokens.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(swapLiquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(marketingTokens).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        marketingTokens = 0;
        liquidityTokens = 0;
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        if(ethForLiquidity != 0 && swapLiquidityTokens != 0) {
            addLiquidity(swapLiquidityTokens, ethForLiquidity);
        }
        if(address(this).balance > 5 * 1e17){
            (success,) = address(devAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        internalApprove(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityAddress,
            block.timestamp
        );
    }
    function calculateTax(uint256 amount) internal view returns (uint256) {
        return amount.mul(marketingTax.add(liquidityTax)).div(100);
    }
    function splitTaxTokens(uint256 taxTokens) internal {
        marketingTokens += taxTokens.mul(marketingTax).div(divForSplitTax);
        liquidityTokens += taxTokens.mul(liquidityTax).div(divForSplitTax);
    }
    function tokenTransfer(address sender,address recipient,uint256 amount) internal {
        if(divForSplitTax != 0){
            uint256 taxTokens = calculateTax(amount);
            uint256 transferTokens = amount.sub(taxTokens);
            splitTaxTokens(taxTokens);
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += transferTokens;
            tokenBalance[address(this)] += taxTokens;
            emit Transfer(sender, recipient, transferTokens);
        }else{
            tokenBalance[sender] -= amount;
            tokenBalance[recipient] += amount;
            emit Transfer(sender, recipient, amount);
        }
    }
    function launchSetLiquidityAddress(address LPAddress) internal {
        liquidityAddress = payable(LPAddress);
        isTaxExcluded[liquidityAddress] = true;
    }
    function isContract(address account) public view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function addRemoveContract(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[account] = trueORfalse;
    }
    function isExcludedContract(address account) public view returns (bool) {
        return isContractsExcluded[account];
    }
    function withdrawStuckETH() external onlyOwner {
        bool success;
        (success,) = address(owner()).call{value: address(this).balance}("");
    }
    function withdrawStuckTokens(uint256 percent) external onlyOwner {
        internalTransfer(address(this), owner(), tokenSupply*percent/100);
    }
    function manualBurnTokensFromLP(uint256 percent) external onlyOwner returns (bool){
        require(percent <= 10, "ERC20: May not nuke more than 10% of tokens in LP");
        uint256 liquidityPairBalance = this.balanceOf(uniV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10**2);
        if (amountToBurn > 0){
            internalTransfer(uniV2Pair, dead, amountToBurn);
        }
        totalBurnedTokens = balanceOf(dead);
        require(totalBurnedTokens <= tokenSupply * 50 / 10**2, "ERC20: Can not burn more then 50% of supply");
        IUniswapV2Pair pair = IUniswapV2Pair(uniV2Pair);
        pair.sync();
        return true;
    }
    function manualSwapTax() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= tokenSupply.mul(5).div(10000), "ERC20: Can only swap back if more than 0.05% of tokens stuck on contract");
        taxTokenSwap();
    }
    function addBot(address account) external onlyOwner {
        require(!isBot[account], "ERC20: Account already added");
        isBot[account] = true;
    }

    function AirDrop(address[] memory wallets, uint256[] memory percent) external onlyOwner{
        require(wallets.length < 100, "Can only airdrop 100 wallets per txn due to gas limits");
        for(uint256 i = 0; i < wallets.length; i++){
            address wallet = wallets[i];
            uint256 amount = tokenSupply.mul(percent[i]).div(1000);
            internalTransfer(address(this), wallet, amount);
        }
    }

	function removeBot(address account) external onlyOwner {
        require(isBot[account], "ERC20: Account is not bot");
        isBot[account] = false;
    }
	function removeSniper(address account) external onlyOwner {
        require(isSniper[account], "ERC20: Account is not sniper");
        isSniper[account] = false;
    }
    function setExcludedContractAccount(address account, bool trueORfalse) external onlyOwner {
        isContractsExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromTax(address account, bool trueORfalse) external onlyOwner {
        isTaxExcluded[address(account)] = trueORfalse;
    }
    function setExcludedFromMaxWallet(address account, bool trueORfalse) external onlyOwner {
        isMaxWalletExcluded[address(account)] = trueORfalse;
    }
    function setMaxWalletAmount(uint256 percent, uint256 divider) external onlyOwner {
        maxWallet = tokenSupply.mul(percent).div(divider);
        require(maxWallet <=tokenSupply.mul(4).div(100), "ERC20: Can not set max wallet more than 4%");
    }
    function setStatusLimits(bool trueORfalse) external onlyOwner {
        limitsOn = trueORfalse;
    }
    function setStatusMaxWallet(bool trueORfalse) external onlyOwner {
       maxWalletOn = trueORfalse;
    }
    function setStatusContractBlocker(bool trueORfalse) external onlyOwner {
        contractBlocker = trueORfalse;
    }
    function setSwapAndLiquifyStatus(bool trueORfalse) external onlyOwner {
        swapAndLiquifyStatus = trueORfalse;
    }
    function setTaxes(uint256 buyMarketingTax, uint256 buyLiquidityTax, uint256 sellMarketingTax, uint256 sellLiquidityTax) external onlyOwner {
        taxBuyMarketing = buyMarketingTax;
        taxBuyLiquidity = buyLiquidityTax;
        taxSellMarketing = sellMarketingTax;
        taxSellLiquidity = sellLiquidityTax;
    }
    function viewTaxes() public view returns(uint256 marketingBuy, uint256 liquidityBuy, uint256 marketingSell, uint256 liquiditySell) {
        return(taxBuyMarketing,taxBuyLiquidity,taxSellMarketing,taxSellLiquidity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"percent","type":"uint256[]"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"addRemoveContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBlocker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"live","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnTokensFromLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedContractAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divider","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusContractBlocker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setStatusMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"trueORfalse","type":"bool"}],"name":"setSwapAndLiquifyStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV3Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewTaxes","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600b80546001600160a01b03191661dead179055601e805465ff00ffffffff191690556000620000313390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000896012600a62000480565b6200009990633b9aca0062000491565b30600090815260026020526040902055620000fc6103e8620000e86005620000c46012600a62000480565b620000d490633b9aca0062000491565b6200034860201b62001a641790919060201c565b6200035f60201b62001a771790919060201c565b600f556200011a612710620000e86004620000c46012600a62000480565b601055600980546001600160a01b03199081167359ec70508f07f993bc524f4369bcc96adf8480da17909155600a8054909116735c32d78ebd63bffa6626c33f1c20c184dc1e6667179055620001786000546001600160a01b031690565b600880546001600160a01b0319166001600160a01b0392909216919091179055600460175560016018819055600560198190556002601b55306000908152600360205260408120805460ff191684179055620001dc6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600b5482168152600584528281208054861660019081179091553080835284832080548816831790556009548416835284832080548816831790556008549093168252838220805487168217905591815260049384905291822080549094168117909355620002816000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600954821681526004909352818320805485166001908117909155600854821684528284208054861682179055600b54909116835290822080549093161790915530907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620003216012600a62000480565b6200033190633b9aca0062000491565b60405190815260200160405180910390a3620004d6565b600062000356828462000491565b90505b92915050565b6000620003568284620004b3565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003c4578160001904821115620003a857620003a86200036d565b80851615620003b657918102915b93841c939080029062000388565b509250929050565b600082620003dd5750600162000359565b81620003ec5750600062000359565b8160018114620004055760028114620004105762000430565b600191505062000359565b60ff8411156200042457620004246200036d565b50506001821b62000359565b5060208310610133831016604e8410600b841016171562000455575081810a62000359565b62000461838362000383565b80600019048211156200047857620004786200036d565b029392505050565b60006200035660ff841683620003cc565b6000816000190483118215151615620004ae57620004ae6200036d565b500290565b600082620004d157634e487b7160e01b600052601260045260246000fd5b500490565b61302880620004e66000396000f3fe6080604052600436106102765760003560e01c80637817be6c1161014f578063a73f9b58116100c1578063ee2e5a2e1161007a578063ee2e5a2e146107e2578063f0c0cf8714610802578063f2fde38b14610818578063f35900d014610838578063f5648a4f14610858578063ffecf5161461086d57600080fd5b8063a73f9b5814610731578063a9059cbb14610746578063c2ed286b14610766578063dd62ed3e14610786578063e4252ddf14610628578063ea090d97146107cc57600080fd5b8063957aa58c11610113578063957aa58c14610648578063958c2e521461066857806395d89b411461068857806396c9b442146106b7578063a12a7d61146106d8578063a20d9615146106f857600080fd5b80637817be6c146105aa5780638bcea939146105ca5780638c714f80146105ea5780638da5cb5b1461060a57806391c09d1e1461062857600080fd5b806333251a0b116101e85780635fafa589116101ac5780635fafa589146104de5780635fecd9261461051657806370a0823114610536578063715018a614610556578063745d032f1461056b57806375d0cc431461058a57600080fd5b806333251a0b1461042e5780633bbac5791461044e578063412201041461047e57806351524e5b1461049e5780635e6710de146104be57600080fd5b8063162790551161023a578063162790551461037357806318160ddd14610393578063186d260d146103b65780631c42047a146103d857806323b872dd146103f2578063313ce5671461041257600080fd5b806301339c211461028257806306fdde03146102ac578063095ea7b3146102ea5780630f3a325f1461030a57806311abf5371461033a57600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761088d565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b5060408051808201909152600c81526b536f6c61726520466c61726560a01b60208201525b6040516102a391906128dd565b3480156102f657600080fd5b50610297610305366004612947565b610cbf565b34801561031657600080fd5b50610297610325366004612973565b60066020526000908152604090205460ff1681565b34801561034657600080fd5b50601754601854601954601b546040805194855260208501939093529183015260608201526080016102a3565b34801561037f57600080fd5b5061029761038e366004612973565b610d69565b34801561039f57600080fd5b506103a8610da5565b6040519081526020016102a3565b3480156103c257600080fd5b506103d66103d13660046129a0565b610dc6565b005b3480156103e457600080fd5b50601e546102979060ff1681565b3480156103fe57600080fd5b5061029761040d3660046129bb565b610e03565b34801561041e57600080fd5b50604051601281526020016102a3565b34801561043a57600080fd5b506103d6610449366004612973565b610e67565b34801561045a57600080fd5b50610297610469366004612973565b60076020526000908152604090205460ff1681565b34801561048a57600080fd5b506103d66104993660046129fc565b610f1a565b3480156104aa57600080fd5b506103d66104b9366004612b07565b610f6f565b3480156104ca57600080fd5b506103d66104d9366004612bc9565b6110a7565b3480156104ea57600080fd5b50600e546104fe906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561052257600080fd5b506103d6610531366004612973565b611120565b34801561054257600080fd5b506103a8610551366004612973565b6111d3565b34801561056257600080fd5b506103d66111ee565b34801561057757600080fd5b50601e5461029790610100900460ff1681565b34801561059657600080fd5b506103d66105a53660046129a0565b611262565b3480156105b657600080fd5b506102976105c5366004612bc9565b6112aa565b3480156105d657600080fd5b50600c546104fe906001600160a01b031681565b3480156105f657600080fd5b506103d66106053660046129a0565b611513565b34801561061657600080fd5b506000546001600160a01b03166104fe565b34801561063457600080fd5b506103d66106433660046129fc565b611557565b34801561065457600080fd5b50601e546102979062010000900460ff1681565b34801561067457600080fd5b50600d546104fe906001600160a01b031681565b34801561069457600080fd5b5060408051808201909152600681526553466c61726560d01b60208201526102dd565b3480156106c357600080fd5b50601e54610297906301000000900460ff1681565b3480156106e457600080fd5b506103d66106f3366004612be2565b6115ac565b34801561070457600080fd5b50610297610713366004612973565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561073d57600080fd5b506103d66115ea565b34801561075257600080fd5b50610297610761366004612947565b6116c6565b34801561077257600080fd5b506103d66107813660046129fc565b6116dc565b34801561079257600080fd5b506103a86107a1366004612c14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107d857600080fd5b506103a8601c5481565b3480156107ee57600080fd5b506103d66107fd3660046129a0565b611731565b34801561080e57600080fd5b506103a8601d5481565b34801561082457600080fd5b506103d6610833366004612973565b61177d565b34801561084457600080fd5b506103d6610853366004612c4d565b61186c565b34801561086457600080fd5b506103d661192b565b34801561087957600080fd5b506103d6610888366004612973565b6119ad565b600080546001600160a01b031633146108c15760405162461bcd60e51b81526004016108b890612c6f565b60405180910390fd5b601e5462010000900460ff161561091a5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108b8565b43601c5561092b426202a300611a83565b601d55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610a2b3082610a186012600a612dae565b610a2690633b9aca00612dbd565b611a8f565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c9190612ddc565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae457600080fd5b505afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c9190612ddc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9c9190612ddc565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610c555760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108b8565b610c67610c61306111d3565b47611b3d565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601e805465ff0000ffffff191665010000010101179055600190565b600033610cde5760405162461bcd60e51b81526004016108b890612df9565b6001600160a01b038316610d045760405162461bcd60e51b81526004016108b890612e41565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610d9d57508115155b949350505050565b6000610db36012600a612dae565b610dc190633b9aca00612dbd565b905090565b6000546001600160a01b03163314610df05760405162461bcd60e51b81526004016108b890612c6f565b601e805460ff1916911515919091179055565b6000610e10848484611c00565b610e5d8433610a2685604051806060016040528060318152602001612fc2603191396001600160a01b038a166000908152600160209081526040808320338452909152902054919061236f565b5060019392505050565b6000546001600160a01b03163314610e915760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03811660009081526006602052604090205460ff16610ef95760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108b8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610f445760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f995760405162461bcd60e51b81526004016108b890612c6f565b60648251106110095760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108b8565b60005b82518110156110a257600083828151811061102957611029612e87565b6020026020010151905060006110806103e861107a86868151811061105057611050612e87565b60200260200101516012600a6110669190612dae565b61107490633b9aca00612dbd565b90611a64565b90611a77565b905061108d308383611c00565b5050808061109a90612e9d565b91505061100c565b505050565b6000546001600160a01b031633146110d15760405162461bcd60e51b81526004016108b890612c6f565b61111d306110e76000546001600160a01b031690565b6064846110f66012600a612dae565b61110490633b9aca00612dbd565b61110e9190612dbd565b6111189190612eb8565b611c00565b50565b6000546001600160a01b0316331461114a5760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03811660009081526007602052604090205460ff166111b25760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108b8565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031633146112185760405162461bcd60e51b81526004016108b890612c6f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b81526004016108b890612c6f565b601e805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b031633146112d55760405162461bcd60e51b81526004016108b890612c6f565b600a8211156113405760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108b8565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b15801561138657600080fd5b505afa15801561139a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113be9190612eda565b905060006113d1606461107a8487611a64565b905080156113f657600c54600b546113f6916001600160a01b03908116911683611c00565b600b5461140b906001600160a01b03166111d3565b601355606461141c6012600a612dae565b61142a90633b9aca00612dbd565b611435906032612dbd565b61143f9190612eb8565b60135411156114a45760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108b8565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156114ee57600080fd5b505af1158015611502573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b0316331461153d5760405162461bcd60e51b81526004016108b890612c6f565b601e80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115815760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115d65760405162461bcd60e51b81526004016108b890612c6f565b601793909355601891909155601955601b55565b6000546001600160a01b031633146116145760405162461bcd60e51b81526004016108b890612c6f565b600061161f306111d3565b905061163861271061107a60056110666012600a612dae565b8110156116be5760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108b8565b61111d61239b565b60006116d3338484611c00565b50600192915050565b6000546001600160a01b031633146117065760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461175b5760405162461bcd60e51b81526004016108b890612c6f565b601e8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146117a75760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b0381166118115760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108b8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118965760405162461bcd60e51b81526004016108b890612c6f565b6118aa8161107a846110666012600a612dae565b600f556118c3606461107a60046110666012600a612dae565b600f5411156119275760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108b8565b5050565b6000546001600160a01b031633146119555760405162461bcd60e51b81526004016108b890612c6f565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146119a2576040519150601f19603f3d011682016040523d82523d6000602084013e6119a7565b606091505b50505050565b6000546001600160a01b031633146119d75760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03811660009081526007602052604090205460ff1615611a405760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108b8565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611a708284612dbd565b9392505050565b6000611a708284612eb8565b6000611a708284612ef3565b6001600160a01b038316611ab55760405162461bcd60e51b81526004016108b890612df9565b6001600160a01b038216611adb5760405162461bcd60e51b81526004016108b890612e41565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600d54611b559030906001600160a01b031684611a8f565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611bc057600080fd5b505af1158015611bd4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bf99190612f0b565b5050505050565b6001600160a01b038316611c645760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108b8565b6001600160a01b038216611cc65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108b8565b60008111611d2f5760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108b8565b6001600160a01b03831660009081526007602052604090205460ff1615611d985760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108b8565b601e5462010000900460ff16611e33576001600160a01b03831660009081526005602052604090205460ff1680611de757506001600160a01b03821660009081526005602052604090205460ff165b611e335760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108b8565b601e5460ff6101009091041615156001148015611e6957506001600160a01b03821660009081526004602052604090205460ff16155b15611ee957600f54611e8482611e7e856111d3565b90611a83565b1115611ee95760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108b8565b601e5460ff1615611fc5576000546001600160a01b03848116911614801590611f2057506000546001600160a01b03838116911614155b8015611f3457506001600160a01b03821615155b8015611f4e5750600b546001600160a01b03838116911614155b8015611f685750600c546001600160a01b03838116911614155b15611fc55760005b6001811015611fc357601c54611f869082611a83565b431415611fb1576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611fbb81612e9d565b915050611f70565b505b601e546301000000900460ff16156120a857611fe082610d69565b15801561200557506001600160a01b03831660009081526003602052604090205460ff165b80612039575061201483610d69565b15801561203957506001600160a01b03821660009081526003602052604090205460ff165b8061206c575061204883610d69565b801561206c57506001600160a01b03821660009081526003602052604090205460ff165b8061209f575061207b82610d69565b801561209f57506001600160a01b03831660009081526003602052604090205460ff165b6120a857600080fd5b60006120c1601154601254611a8390919063ffffffff16565b905060006120ce306111d3565b601054601e5491925082101590640100000000900460ff161580156120fe5750601e5465010000000000900460ff165b801561211f5750600c5460009061211d906001600160a01b03166111d3565b115b801561212b5750600083115b801561215057506001600160a01b03851660009081526005602052604090205460ff16155b801561217557506001600160a01b03861660009081526005602052604090205460ff16155b801561218e5750600c546001600160a01b038681169116145b80156121975750805b156121a4576121a461239b565b6001600160a01b03861660009081526005602052604090205460ff16806121e357506001600160a01b03851660009081526005602052604090205460ff165b15612206576000601481905560158190556121fe9080611a83565b60165561235c565b600c546001600160a01b038781169116141561223657601754601481905560185460158190556121fe9190611a83565b600c546001600160a01b03868116911614156122b5576019546014819055601b5460158190556122669190611a83565b6016556001600160a01b03861660009081526006602052604090205460ff168015612293575042601d5410155b156122b05760556014819055600a60158190556121fe9190611a83565b61235c565b6001600160a01b03861660009081526006602052604090205460ff1615806122df575042601d5411155b6123515760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108b8565b600060148190556015555b612367868686612547565b505050505050565b600081848411156123935760405162461bcd60e51b81526004016108b891906128dd565b505050900390565b601e805464ff00000000191664010000000017905560006123bb306111d3565b905060006123d6601254601154611a8390919063ffffffff16565b905060006123f06002601254611a7790919063ffffffff16565b905060006123fe84836126e8565b90504761240a826126f4565b600061241647836126e8565b905060006124338661107a60115485611a6490919063ffffffff16565b9050600061244183836126e8565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d806000811461249e576040519150601f19603f3d011682016040523d82523d6000602084013e6124a3565b606091505b50509050816000141580156124b757508615155b156124c6576124c68783611b3d565b6706f05b59d3b2000047111561252e57600a546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612523576040519150601f19603f3d011682016040523d82523d6000602084013e612528565b606091505b50909150505b5050601e805464ff000000001916905550505050505050565b6016541561264757600061255a82612855565b9050600061256883836126e8565b90506125738261287d565b6001600160a01b0385166000908152600260205260408120805485929061259b908490612f39565b90915550506001600160a01b038416600090815260026020526040812080548392906125c8908490612ef3565b909155505030600090815260026020526040812080548492906125ec908490612ef3565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161263891815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061266f908490612f39565b90915550506001600160a01b0382166000908152600260205260408120805483929061269c908490612ef3565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b3091815260200190565b6000611a708284612f39565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061272957612729612e87565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561277d57600080fd5b505afa158015612791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b59190612ddc565b816001815181106127c8576127c8612e87565b6001600160a01b039283166020918202929092010152600d546127ee9130911684611a8f565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612827908590600090869030904290600401612f50565b600060405180830381600087803b15801561284157600080fd5b505af1158015612367573d6000803e3d6000fd5b6000610d63606461107a612876601554601454611a8390919063ffffffff16565b8590611a64565b61289860165461107a60145484611a6490919063ffffffff16565b601160008282546128a99190612ef3565b90915550506016546015546128c4919061107a908490611a64565b601260008282546128d59190612ef3565b909155505050565b600060208083528351808285015260005b8181101561290a578581018301518582016040015282016128ee565b8181111561291c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461111d57600080fd5b6000806040838503121561295a57600080fd5b823561296581612932565b946020939093013593505050565b60006020828403121561298557600080fd5b8135611a7081612932565b8035801515811461150e57600080fd5b6000602082840312156129b257600080fd5b611a7082612990565b6000806000606084860312156129d057600080fd5b83356129db81612932565b925060208401356129eb81612932565b929592945050506040919091013590565b60008060408385031215612a0f57600080fd5b8235612a1a81612932565b9150612a2860208401612990565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a7057612a70612a31565b604052919050565b600067ffffffffffffffff821115612a9257612a92612a31565b5060051b60200190565b600082601f830112612aad57600080fd5b81356020612ac2612abd83612a78565b612a47565b82815260059290921b84018101918181019086841115612ae157600080fd5b8286015b84811015612afc5780358352918301918301612ae5565b509695505050505050565b60008060408385031215612b1a57600080fd5b823567ffffffffffffffff80821115612b3257600080fd5b818501915085601f830112612b4657600080fd5b81356020612b56612abd83612a78565b82815260059290921b84018101918181019089841115612b7557600080fd5b948201945b83861015612b9c578535612b8d81612932565b82529482019490820190612b7a565b96505086013592505080821115612bb257600080fd5b50612bbf85828601612a9c565b9150509250929050565b600060208284031215612bdb57600080fd5b5035919050565b60008060008060808587031215612bf857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612c2757600080fd5b8235612c3281612932565b91506020830135612c4281612932565b809150509250929050565b60008060408385031215612c6057600080fd5b50508035926020909101359150565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612d05578160001904821115612ceb57612ceb612cb4565b80851615612cf857918102915b93841c9390800290612ccf565b509250929050565b600082612d1c57506001610d63565b81612d2957506000610d63565b8160018114612d3f5760028114612d4957612d65565b6001915050610d63565b60ff841115612d5a57612d5a612cb4565b50506001821b610d63565b5060208310610133831016604e8410600b8410161715612d88575081810a610d63565b612d928383612cca565b8060001904821115612da657612da6612cb4565b029392505050565b6000611a7060ff841683612d0d565b6000816000190483118215151615612dd757612dd7612cb4565b500290565b600060208284031215612dee57600080fd5b8151611a7081612932565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612eb157612eb1612cb4565b5060010190565b600082612ed557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612eec57600080fd5b5051919050565b60008219821115612f0657612f06612cb4565b500190565b600080600060608486031215612f2057600080fd5b8351925060208401519150604084015190509250925092565b600082821015612f4b57612f4b612cb4565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fa05784516001600160a01b031683529383019391830191600101612f7b565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220acada12e8fb3f3aa46c896f48706803e25e84e13be3a9c61b9e1afb13070ab0464736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102765760003560e01c80637817be6c1161014f578063a73f9b58116100c1578063ee2e5a2e1161007a578063ee2e5a2e146107e2578063f0c0cf8714610802578063f2fde38b14610818578063f35900d014610838578063f5648a4f14610858578063ffecf5161461086d57600080fd5b8063a73f9b5814610731578063a9059cbb14610746578063c2ed286b14610766578063dd62ed3e14610786578063e4252ddf14610628578063ea090d97146107cc57600080fd5b8063957aa58c11610113578063957aa58c14610648578063958c2e521461066857806395d89b411461068857806396c9b442146106b7578063a12a7d61146106d8578063a20d9615146106f857600080fd5b80637817be6c146105aa5780638bcea939146105ca5780638c714f80146105ea5780638da5cb5b1461060a57806391c09d1e1461062857600080fd5b806333251a0b116101e85780635fafa589116101ac5780635fafa589146104de5780635fecd9261461051657806370a0823114610536578063715018a614610556578063745d032f1461056b57806375d0cc431461058a57600080fd5b806333251a0b1461042e5780633bbac5791461044e578063412201041461047e57806351524e5b1461049e5780635e6710de146104be57600080fd5b8063162790551161023a578063162790551461037357806318160ddd14610393578063186d260d146103b65780631c42047a146103d857806323b872dd146103f2578063313ce5671461041257600080fd5b806301339c211461028257806306fdde03146102ac578063095ea7b3146102ea5780630f3a325f1461030a57806311abf5371461033a57600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b5061029761088d565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b5060408051808201909152600c81526b536f6c61726520466c61726560a01b60208201525b6040516102a391906128dd565b3480156102f657600080fd5b50610297610305366004612947565b610cbf565b34801561031657600080fd5b50610297610325366004612973565b60066020526000908152604090205460ff1681565b34801561034657600080fd5b50601754601854601954601b546040805194855260208501939093529183015260608201526080016102a3565b34801561037f57600080fd5b5061029761038e366004612973565b610d69565b34801561039f57600080fd5b506103a8610da5565b6040519081526020016102a3565b3480156103c257600080fd5b506103d66103d13660046129a0565b610dc6565b005b3480156103e457600080fd5b50601e546102979060ff1681565b3480156103fe57600080fd5b5061029761040d3660046129bb565b610e03565b34801561041e57600080fd5b50604051601281526020016102a3565b34801561043a57600080fd5b506103d6610449366004612973565b610e67565b34801561045a57600080fd5b50610297610469366004612973565b60076020526000908152604090205460ff1681565b34801561048a57600080fd5b506103d66104993660046129fc565b610f1a565b3480156104aa57600080fd5b506103d66104b9366004612b07565b610f6f565b3480156104ca57600080fd5b506103d66104d9366004612bc9565b6110a7565b3480156104ea57600080fd5b50600e546104fe906001600160a01b031681565b6040516001600160a01b0390911681526020016102a3565b34801561052257600080fd5b506103d6610531366004612973565b611120565b34801561054257600080fd5b506103a8610551366004612973565b6111d3565b34801561056257600080fd5b506103d66111ee565b34801561057757600080fd5b50601e5461029790610100900460ff1681565b34801561059657600080fd5b506103d66105a53660046129a0565b611262565b3480156105b657600080fd5b506102976105c5366004612bc9565b6112aa565b3480156105d657600080fd5b50600c546104fe906001600160a01b031681565b3480156105f657600080fd5b506103d66106053660046129a0565b611513565b34801561061657600080fd5b506000546001600160a01b03166104fe565b34801561063457600080fd5b506103d66106433660046129fc565b611557565b34801561065457600080fd5b50601e546102979062010000900460ff1681565b34801561067457600080fd5b50600d546104fe906001600160a01b031681565b34801561069457600080fd5b5060408051808201909152600681526553466c61726560d01b60208201526102dd565b3480156106c357600080fd5b50601e54610297906301000000900460ff1681565b3480156106e457600080fd5b506103d66106f3366004612be2565b6115ac565b34801561070457600080fd5b50610297610713366004612973565b6001600160a01b031660009081526003602052604090205460ff1690565b34801561073d57600080fd5b506103d66115ea565b34801561075257600080fd5b50610297610761366004612947565b6116c6565b34801561077257600080fd5b506103d66107813660046129fc565b6116dc565b34801561079257600080fd5b506103a86107a1366004612c14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107d857600080fd5b506103a8601c5481565b3480156107ee57600080fd5b506103d66107fd3660046129a0565b611731565b34801561080e57600080fd5b506103a8601d5481565b34801561082457600080fd5b506103d6610833366004612973565b61177d565b34801561084457600080fd5b506103d6610853366004612c4d565b61186c565b34801561086457600080fd5b506103d661192b565b34801561087957600080fd5b506103d6610888366004612973565b6119ad565b600080546001600160a01b031633146108c15760405162461bcd60e51b81526004016108b890612c6f565b60405180910390fd5b601e5462010000900460ff161561091a5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164657320616c7265616479204c69766521000000000060448201526064016108b8565b43601c5561092b426202a300611a83565b601d55600d80546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d908117909255600e80549091167368b3465833fb72a70ecdf485e0e4c7bd8665fc451790557ffb19a963956c9cb662dd3ae48988c4b90766df71ea130109840abe0a1b23dba8805460ff1990811660019081179092557fdc51a0a44317b550a6b5ddb34687ce2bd40e4750eec27343e32b23e6867392088054821683179055600083905260046020527f1fc5acd025f7cc5cf2691b667dba808b5a149bf27192c208fc66f1f0ec4222d780549091169091179055610a2b3082610a186012600a612dae565b610a2690633b9aca00612dbd565b611a8f565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c9190612ddc565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae457600080fd5b505afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c9190612ddc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610b6457600080fd5b505af1158015610b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9c9190612ddc565b600c80546001600160a01b0319166001600160a01b0392831690811782556000908152600360209081526040808320805460ff19908116600190811790925594549095168352600490915290208054909116909117905547610c555760405162461bcd60e51b815260206004820152602c60248201527f45524332303a204d757374206861766520455448206f6e20636f6e747261637460448201526b20746f20476f204c6976652160a01b60648201526084016108b8565b610c67610c61306111d3565b47611b3d565b600b54600880546001600160a01b0319166001600160a01b0390921691821790556000908152600560205260409020805460ff191660011790555050601e805465ff0000ffffff191665010000010101179055600190565b600033610cde5760405162461bcd60e51b81526004016108b890612df9565b6001600160a01b038316610d045760405162461bcd60e51b81526004016108b890612e41565b3360008181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060015b92915050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610d9d57508115155b949350505050565b6000610db36012600a612dae565b610dc190633b9aca00612dbd565b905090565b6000546001600160a01b03163314610df05760405162461bcd60e51b81526004016108b890612c6f565b601e805460ff1916911515919091179055565b6000610e10848484611c00565b610e5d8433610a2685604051806060016040528060318152602001612fc2603191396001600160a01b038a166000908152600160209081526040808320338452909152902054919061236f565b5060019392505050565b6000546001600160a01b03163314610e915760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03811660009081526006602052604090205460ff16610ef95760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e74206973206e6f7420736e697065720000000060448201526064016108b8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314610f445760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f995760405162461bcd60e51b81526004016108b890612c6f565b60648251106110095760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b60648201526084016108b8565b60005b82518110156110a257600083828151811061102957611029612e87565b6020026020010151905060006110806103e861107a86868151811061105057611050612e87565b60200260200101516012600a6110669190612dae565b61107490633b9aca00612dbd565b90611a64565b90611a77565b905061108d308383611c00565b5050808061109a90612e9d565b91505061100c565b505050565b6000546001600160a01b031633146110d15760405162461bcd60e51b81526004016108b890612c6f565b61111d306110e76000546001600160a01b031690565b6064846110f66012600a612dae565b61110490633b9aca00612dbd565b61110e9190612dbd565b6111189190612eb8565b611c00565b50565b6000546001600160a01b0316331461114a5760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03811660009081526007602052604090205460ff166111b25760405162461bcd60e51b815260206004820152601960248201527f45524332303a204163636f756e74206973206e6f7420626f740000000000000060448201526064016108b8565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b031633146112185760405162461bcd60e51b81526004016108b890612c6f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461128c5760405162461bcd60e51b81526004016108b890612c6f565b601e805491151563010000000263ff00000019909216919091179055565b600080546001600160a01b031633146112d55760405162461bcd60e51b81526004016108b890612c6f565b600a8211156113405760405162461bcd60e51b815260206004820152603160248201527f45524332303a204d6179206e6f74206e756b65206d6f7265207468616e203130604482015270025206f6620746f6b656e7320696e204c5607c1b60648201526084016108b8565b600c546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b15801561138657600080fd5b505afa15801561139a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113be9190612eda565b905060006113d1606461107a8487611a64565b905080156113f657600c54600b546113f6916001600160a01b03908116911683611c00565b600b5461140b906001600160a01b03166111d3565b601355606461141c6012600a612dae565b61142a90633b9aca00612dbd565b611435906032612dbd565b61143f9190612eb8565b60135411156114a45760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e206e6f74206275726e206d6f7265207468656e20353060448201526a25206f6620737570706c7960a81b60648201526084016108b8565b600c546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156114ee57600080fd5b505af1158015611502573d6000803e3d6000fd5b50505050600193505050505b919050565b6000546001600160a01b0316331461153d5760405162461bcd60e51b81526004016108b890612c6f565b601e80549115156101000261ff0019909216919091179055565b6000546001600160a01b031633146115815760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115d65760405162461bcd60e51b81526004016108b890612c6f565b601793909355601891909155601955601b55565b6000546001600160a01b031633146116145760405162461bcd60e51b81526004016108b890612c6f565b600061161f306111d3565b905061163861271061107a60056110666012600a612dae565b8110156116be5760405162461bcd60e51b815260206004820152604860248201527f45524332303a2043616e206f6e6c792073776170206261636b206966206d6f7260448201527f65207468616e20302e303525206f6620746f6b656e7320737475636b206f6e2060648201526718dbdb9d1c9858dd60c21b608482015260a4016108b8565b61111d61239b565b60006116d3338484611c00565b50600192915050565b6000546001600160a01b031633146117065760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461175b5760405162461bcd60e51b81526004016108b890612c6f565b601e8054911515650100000000000265ff000000000019909216919091179055565b6000546001600160a01b031633146117a75760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b0381166118115760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b60648201526084016108b8565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118965760405162461bcd60e51b81526004016108b890612c6f565b6118aa8161107a846110666012600a612dae565b600f556118c3606461107a60046110666012600a612dae565b600f5411156119275760405162461bcd60e51b815260206004820152602a60248201527f45524332303a2043616e206e6f7420736574206d61782077616c6c6574206d6f6044820152697265207468616e20342560b01b60648201526084016108b8565b5050565b6000546001600160a01b031633146119555760405162461bcd60e51b81526004016108b890612c6f565b600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146119a2576040519150601f19603f3d011682016040523d82523d6000602084013e6119a7565b606091505b50505050565b6000546001600160a01b031633146119d75760405162461bcd60e51b81526004016108b890612c6f565b6001600160a01b03811660009081526007602052604090205460ff1615611a405760405162461bcd60e51b815260206004820152601c60248201527f45524332303a204163636f756e7420616c72656164792061646465640000000060448201526064016108b8565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000611a708284612dbd565b9392505050565b6000611a708284612eb8565b6000611a708284612ef3565b6001600160a01b038316611ab55760405162461bcd60e51b81526004016108b890612df9565b6001600160a01b038216611adb5760405162461bcd60e51b81526004016108b890612e41565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600d54611b559030906001600160a01b031684611a8f565b600d5460085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611bc057600080fd5b505af1158015611bd4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bf99190612f0b565b5050505050565b6001600160a01b038316611c645760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108b8565b6001600160a01b038216611cc65760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108b8565b60008111611d2f5760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108b8565b6001600160a01b03831660009081526007602052604090205460ff1615611d985760405162461bcd60e51b815260206004820181905260248201527f45524332303a2043616e206e6f74207472616e736665722066726f6d20424f5460448201526064016108b8565b601e5462010000900460ff16611e33576001600160a01b03831660009081526005602052604090205460ff1680611de757506001600160a01b03821660009081526005602052604090205460ff165b611e335760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2054726164696e67204973204e6f74204c69766521000000000060448201526064016108b8565b601e5460ff6101009091041615156001148015611e6957506001600160a01b03821660009081526004602052604090205460ff16155b15611ee957600f54611e8482611e7e856111d3565b90611a83565b1115611ee95760405162461bcd60e51b815260206004820152602e60248201527f45524332303a204d617820616d6f756e74206f6620746f6b656e7320666f722060448201526d1dd85b1b195d081c995858da195960921b60648201526084016108b8565b601e5460ff1615611fc5576000546001600160a01b03848116911614801590611f2057506000546001600160a01b03838116911614155b8015611f3457506001600160a01b03821615155b8015611f4e5750600b546001600160a01b03838116911614155b8015611f685750600c546001600160a01b03838116911614155b15611fc55760005b6001811015611fc357601c54611f869082611a83565b431415611fb1576001600160a01b0383166000908152600660205260409020805460ff191660011790555b80611fbb81612e9d565b915050611f70565b505b601e546301000000900460ff16156120a857611fe082610d69565b15801561200557506001600160a01b03831660009081526003602052604090205460ff165b80612039575061201483610d69565b15801561203957506001600160a01b03821660009081526003602052604090205460ff165b8061206c575061204883610d69565b801561206c57506001600160a01b03821660009081526003602052604090205460ff165b8061209f575061207b82610d69565b801561209f57506001600160a01b03831660009081526003602052604090205460ff165b6120a857600080fd5b60006120c1601154601254611a8390919063ffffffff16565b905060006120ce306111d3565b601054601e5491925082101590640100000000900460ff161580156120fe5750601e5465010000000000900460ff165b801561211f5750600c5460009061211d906001600160a01b03166111d3565b115b801561212b5750600083115b801561215057506001600160a01b03851660009081526005602052604090205460ff16155b801561217557506001600160a01b03861660009081526005602052604090205460ff16155b801561218e5750600c546001600160a01b038681169116145b80156121975750805b156121a4576121a461239b565b6001600160a01b03861660009081526005602052604090205460ff16806121e357506001600160a01b03851660009081526005602052604090205460ff165b15612206576000601481905560158190556121fe9080611a83565b60165561235c565b600c546001600160a01b038781169116141561223657601754601481905560185460158190556121fe9190611a83565b600c546001600160a01b03868116911614156122b5576019546014819055601b5460158190556122669190611a83565b6016556001600160a01b03861660009081526006602052604090205460ff168015612293575042601d5410155b156122b05760556014819055600a60158190556121fe9190611a83565b61235c565b6001600160a01b03861660009081526006602052604090205460ff1615806122df575042601d5411155b6123515760405162461bcd60e51b815260206004820152603960248201527f45524332303a20536e69706572732063616e206e6f74207472616e736665722060448201527f74696c6c2070656e616c74792074696d65206973206f7665720000000000000060648201526084016108b8565b600060148190556015555b612367868686612547565b505050505050565b600081848411156123935760405162461bcd60e51b81526004016108b891906128dd565b505050900390565b601e805464ff00000000191664010000000017905560006123bb306111d3565b905060006123d6601254601154611a8390919063ffffffff16565b905060006123f06002601254611a7790919063ffffffff16565b905060006123fe84836126e8565b90504761240a826126f4565b600061241647836126e8565b905060006124338661107a60115485611a6490919063ffffffff16565b9050600061244183836126e8565b60006011819055601281905560095460405192935090916001600160a01b039091169084908381818185875af1925050503d806000811461249e576040519150601f19603f3d011682016040523d82523d6000602084013e6124a3565b606091505b50509050816000141580156124b757508615155b156124c6576124c68783611b3d565b6706f05b59d3b2000047111561252e57600a546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612523576040519150601f19603f3d011682016040523d82523d6000602084013e612528565b606091505b50909150505b5050601e805464ff000000001916905550505050505050565b6016541561264757600061255a82612855565b9050600061256883836126e8565b90506125738261287d565b6001600160a01b0385166000908152600260205260408120805485929061259b908490612f39565b90915550506001600160a01b038416600090815260026020526040812080548392906125c8908490612ef3565b909155505030600090815260026020526040812080548492906125ec908490612ef3565b92505081905550836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161263891815260200190565b60405180910390a35050505050565b6001600160a01b0383166000908152600260205260408120805483929061266f908490612f39565b90915550506001600160a01b0382166000908152600260205260408120805483929061269c908490612ef3565b92505081905550816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b3091815260200190565b6000611a708284612f39565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061272957612729612e87565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561277d57600080fd5b505afa158015612791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b59190612ddc565b816001815181106127c8576127c8612e87565b6001600160a01b039283166020918202929092010152600d546127ee9130911684611a8f565b600d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612827908590600090869030904290600401612f50565b600060405180830381600087803b15801561284157600080fd5b505af1158015612367573d6000803e3d6000fd5b6000610d63606461107a612876601554601454611a8390919063ffffffff16565b8590611a64565b61289860165461107a60145484611a6490919063ffffffff16565b601160008282546128a99190612ef3565b90915550506016546015546128c4919061107a908490611a64565b601260008282546128d59190612ef3565b909155505050565b600060208083528351808285015260005b8181101561290a578581018301518582016040015282016128ee565b8181111561291c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461111d57600080fd5b6000806040838503121561295a57600080fd5b823561296581612932565b946020939093013593505050565b60006020828403121561298557600080fd5b8135611a7081612932565b8035801515811461150e57600080fd5b6000602082840312156129b257600080fd5b611a7082612990565b6000806000606084860312156129d057600080fd5b83356129db81612932565b925060208401356129eb81612932565b929592945050506040919091013590565b60008060408385031215612a0f57600080fd5b8235612a1a81612932565b9150612a2860208401612990565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612a7057612a70612a31565b604052919050565b600067ffffffffffffffff821115612a9257612a92612a31565b5060051b60200190565b600082601f830112612aad57600080fd5b81356020612ac2612abd83612a78565b612a47565b82815260059290921b84018101918181019086841115612ae157600080fd5b8286015b84811015612afc5780358352918301918301612ae5565b509695505050505050565b60008060408385031215612b1a57600080fd5b823567ffffffffffffffff80821115612b3257600080fd5b818501915085601f830112612b4657600080fd5b81356020612b56612abd83612a78565b82815260059290921b84018101918181019089841115612b7557600080fd5b948201945b83861015612b9c578535612b8d81612932565b82529482019490820190612b7a565b96505086013592505080821115612bb257600080fd5b50612bbf85828601612a9c565b9150509250929050565b600060208284031215612bdb57600080fd5b5035919050565b60008060008060808587031215612bf857600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215612c2757600080fd5b8235612c3281612932565b91506020830135612c4281612932565b809150509250929050565b60008060408385031215612c6057600080fd5b50508035926020909101359150565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612d05578160001904821115612ceb57612ceb612cb4565b80851615612cf857918102915b93841c9390800290612ccf565b509250929050565b600082612d1c57506001610d63565b81612d2957506000610d63565b8160018114612d3f5760028114612d4957612d65565b6001915050610d63565b60ff841115612d5a57612d5a612cb4565b50506001821b610d63565b5060208310610133831016604e8410600b8410161715612d88575081810a610d63565b612d928383612cca565b8060001904821115612da657612da6612cb4565b029392505050565b6000611a7060ff841683612d0d565b6000816000190483118215151615612dd757612dd7612cb4565b500290565b600060208284031215612dee57600080fd5b8151611a7081612932565b60208082526028908201527f45524332303a2043616e206e6f7420617070726f76652066726f6d207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f45524332303a2043616e206e6f7420617070726f766520746f207a65726f206160408201526564647265737360d01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415612eb157612eb1612cb4565b5060010190565b600082612ed557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612eec57600080fd5b5051919050565b60008219821115612f0657612f06612cb4565b500190565b600080600060608486031215612f2057600080fd5b8351925060208401519150604084015190509250925092565b600082821015612f4b57612f4b612cb4565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fa05784516001600160a01b031683529383019391830191600101612f7b565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a2043616e206e6f74207472616e736665722e20416d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220acada12e8fb3f3aa46c896f48706803e25e84e13be3a9c61b9e1afb13070ab0464736f6c63430008090033

Deployed Bytecode Sourcemap

18117:17215:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23206:1249;;;;;;;;;;;;;:::i;:::-;;;179:14:1;;172:22;154:41;;142:2;127:18;23206:1249:0;;;;;;;;21201:98;;;;;;;;;;-1:-1:-1;21282:9:0;;;;;;;;;;;;-1:-1:-1;;;21282:9:0;;;;21201:98;;;;;;;:::i;21906:397::-;;;;;;;;;;-1:-1:-1;21906:397:0;;;;;:::i;:::-;;:::i;18771:40::-;;;;;;;;;;-1:-1:-1;18771:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35106:223;;;;;;;;;;-1:-1:-1;35255:15:0;;35271;;35287:16;;35304;;35106:223;;;1747:25:1;;;1803:2;1788:18;;1781:34;;;;1831:18;;;1824:34;1889:2;1874:18;;1867:34;1734:3;1719:19;35106:223:0;1516:391:1;30691:337:0;;;;;;;;;;-1:-1:-1;30691:337:0;;;;;:::i;:::-;;:::i;21516:101::-;;;;;;;;;;;;;:::i;:::-;;;2058:25:1;;;2046:2;2031:18;21516:101:0;1912:177:1;34296:103:0;;;;;;;;;;-1:-1:-1;34296:103:0;;;;;:::i;:::-;;:::i;:::-;;19687:28;;;;;;;;;;-1:-1:-1;19687:28:0;;;;;;;;22850:348;;;;;;;;;;-1:-1:-1;22850:348:0;;;;;:::i;:::-;;:::i;21413:97::-;;;;;;;;;;-1:-1:-1;21413:97:0;;18388:2;3047:36:1;;3035:2;3020:18;21413:97:0;2905:184:1;33377:171:0;;;;;;;;;;-1:-1:-1;33377:171:0;;;;;:::i;:::-;;:::i;18818:37::-;;;;;;;;;;-1:-1:-1;18818:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;33872:158;;;;;;;;;;-1:-1:-1;33872:158:0;;;;;:::i;:::-;;:::i;32779:431::-;;;;;;;;;;-1:-1:-1;32779:431:0;;;;;:::i;:::-;;:::i;31477:149::-;;;;;;;;;;-1:-1:-1;31477:149:0;;;;;:::i;:::-;;:::i;19087:26::-;;;;;;;;;;-1:-1:-1;19087:26:0;;;;-1:-1:-1;;;;;19087:26:0;;;;;;-1:-1:-1;;;;;6250:32:1;;;6232:51;;6220:2;6205:18;19087:26:0;6086:203:1;33215:159:0;;;;;;;;;;-1:-1:-1;33215:159:0;;;;;:::i;:::-;;:::i;21623:122::-;;;;;;;;;;-1:-1:-1;21623:122:0;;;;;:::i;:::-;;:::i;731:148::-;;;;;;;;;;;;;:::i;19722:31::-;;;;;;;;;;-1:-1:-1;19722:31:0;;;;;;;;;;;34519:119;;;;;;;;;;-1:-1:-1;34519:119:0;;;;;:::i;:::-;;:::i;31632:686::-;;;;;;;;;;-1:-1:-1;31632:686:0;;;;;:::i;:::-;;:::i;19012:24::-;;;;;;;;;;-1:-1:-1;19012:24:0;;;;-1:-1:-1;;;;;19012:24:0;;;34405:108;;;;;;;;;;-1:-1:-1;34405:108:0;;;;;:::i;:::-;;:::i;507:87::-;;;;;;;;;;-1:-1:-1;553:7:0;580:6;-1:-1:-1;;;;;580:6:0;507:87;;33554:160;;;;;;;;;;-1:-1:-1;33554:160:0;;;;;:::i;:::-;;:::i;19760:24::-;;;;;;;;;;-1:-1:-1;19760:24:0;;;;;;;;;;;19043:37;;;;;;;;;;-1:-1:-1;19043:37:0;;;;-1:-1:-1;;;;;19043:37:0;;;21305:102;;;;;;;;;;-1:-1:-1;21388:11:0;;;;;;;;;;;;-1:-1:-1;;;21388:11:0;;;;21305:102;;19791:35;;;;;;;;;;-1:-1:-1;19791:35:0;;;;;;;;;;;34773:327;;;;;;;;;;-1:-1:-1;34773:327:0;;;;;:::i;:::-;;:::i;31182:126::-;;;;;;;;;;-1:-1:-1;31182:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;31272:28:0;31248:4;31272:28;;;:19;:28;;;;;;;;;31182:126;32324:282;;;;;;;;;;;;;:::i;22668:176::-;;;;;;;;;;-1:-1:-1;22668:176:0;;;;;:::i;:::-;;:::i;33720:146::-;;;;;;;;;;-1:-1:-1;33720:146:0;;;;;:::i;:::-;;:::i;21751:149::-;;;;;;;;;;-1:-1:-1;21751:149:0;;;;;:::i;:::-;-1:-1:-1;;;;;21861:22:0;;;21834:7;21861:22;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;21751:149;19607:33;;;;;;;;;;;;;;;;34644:123;;;;;;;;;;-1:-1:-1;34644:123:0;;;;;:::i;:::-;;:::i;19647:31::-;;;;;;;;;;;;;;;;885:249;;;;;;;;;;-1:-1:-1;885:249:0;;;;;:::i;:::-;;:::i;34036:254::-;;;;;;;;;;-1:-1:-1;34036:254:0;;;;;:::i;:::-;;:::i;31314:157::-;;;;;;;;;;;;;:::i;32612:159::-;;;;;;;;;;-1:-1:-1;32612:159:0;;;;;:::i;:::-;;:::i;23206:1249::-;23252:4;580:6;;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;;;;;;;;;23277:4:::1;::::0;;;::::1;;;23276:5;23268:45;;;::::0;-1:-1:-1;;;23268:45:0;;8173:2:1;23268:45:0::1;::::0;::::1;8155:21:1::0;8212:2;8192:18;;;8185:30;8251:29;8231:18;;;8224:57;8298:18;;23268:45:0::1;7971:351:1::0;23268:45:0::1;23345:12;23324:18;:33:::0;23387:27:::1;:15;23407:6;23387:19;:27::i;:::-;23368:16;:46:::0;23532:11:::1;:26:::0;;-1:-1:-1;;;;;;23532:26:0;;::::1;23478:42;23532:26:::0;;::::1;::::0;;;23569:11:::1;:56:::0;;;;::::1;23583:42;23569:56;::::0;;23636:41;:48;;-1:-1:-1;;23636:48:0;;::::1;23532:26:::0;23636:48;;::::1;::::0;;;23695:41;:48;;;::::1;::::0;::::1;::::0;;23425:31:::1;23754:41:::0;;;:19:::1;23636:41;23754::::0;;:48;;;;::::1;::::0;;::::1;::::0;;23813:65:::1;23837:4;23478:42:::0;18442:16:::1;18388:2;18442;:16;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;:::-;23813:15;:65::i;:::-;23919:12;-1:-1:-1::0;;;;;23919:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23901:52:0::1;;23962:4;23969:12;-1:-1:-1::0;;;;;23969:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23901:88;::::0;-1:-1:-1;;;;;;23901:88:0::1;::::0;;;;;;-1:-1:-1;;;;;10501:15:1;;;23901:88:0::1;::::0;::::1;10483:34:1::0;10553:15;;10533:18;;;10526:43;10418:18;;23901:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23889:9;:100:::0;;-1:-1:-1;;;;;;23889:100:0::1;-1:-1:-1::0;;;;;23889:100:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;24000:39:0;;;:19:::1;:39;::::0;;;;;;;:46;;-1:-1:-1;;24000:46:0;;::::1;-1:-1:-1::0;24000:46:0;;::::1;::::0;;;24085:9;;;;::::1;24057:39:::0;;:19:::1;:39:::0;;;;;:46;;;;::::1;::::0;;::::1;::::0;;24122:21:::1;24114:82;;;::::0;-1:-1:-1;;;24114:82:0;;10782:2:1;24114:82:0::1;::::0;::::1;10764:21:1::0;10821:2;10801:18;;;10794:30;10860:34;10840:18;;;10833:62;-1:-1:-1;;;10911:18:1;;;10904:42;10963:19;;24114:82:0::1;10580:408:1::0;24114:82:0::1;24207:61;24220:24;24238:4;24220:9;:24::i;:::-;24246:21;24207:12;:61::i;:::-;24305:4;::::0;30591:16;:37;;-1:-1:-1;;;;;;30591:37:0;-1:-1:-1;;;;;24305:4:0;;::::1;30591:37:::0;;;;;-1:-1:-1;30639:31:0;;;:13;:31;;;;;:38;;-1:-1:-1;;30639:38:0;-1:-1:-1;30639:38:0;;;-1:-1:-1;;24321:11:0::1;:18:::0;;-1:-1:-1;;24414:11:0;;;;;-1:-1:-1;;23206:1249:0:o;21906:397::-;21981:4;166:10;21998:79;;;;-1:-1:-1;;;21998:79:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22096:21:0;;22088:72;;;;-1:-1:-1;;;22088:72:0;;;;;;;:::i;:::-;166:10;22171:29;;;;:15;:29;;;;;;;;-1:-1:-1;;;;;22171:38:0;;;;;;;;;;;;:47;;;22234:39;2058:25:1;;;22171:38:0;;166:10;22234:39;;2031:18:1;22234:39:0;;;;;;;-1:-1:-1;22291:4:0;21906:397;;;;;:::o;30691:337::-;30749:4;30928:20;;30815:66;30977:23;;;;;;:42;;-1:-1:-1;31004:15:0;;;30977:42;30969:51;30691:337;-1:-1:-1;;;;30691:337:0:o;21516:101::-;21571:7;18442:16;18388:2;18442;:16;:::i;:::-;18436:22;;:3;:22;:::i;:::-;21591:18;;21516:101;:::o;34296:103::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;34369:8:::1;:22:::0;;-1:-1:-1;;34369:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34296:103::o;22850:348::-;22948:4;22965:43;22982:6;22990:9;23001:6;22965:16;:43::i;:::-;23019:149;23035:6;166:10;23065:102;23107:6;23065:102;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23065:23:0;;;;;;:15;:23;;;;;;;;166:10;23065:37;;;;;;;;;;:41;:102::i;23019:149::-;-1:-1:-1;23186:4:0;22850:348;;;;;:::o;33377:171::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33454:17:0;::::1;;::::0;;;:8:::1;:17;::::0;;;;;::::1;;33446:58;;;::::0;-1:-1:-1;;;33446:58:0;;12011:2:1;33446:58:0::1;::::0;::::1;11993:21:1::0;12050:2;12030:18;;;12023:30;12089;12069:18;;;12062:58;12137:18;;33446:58:0::1;11809:352:1::0;33446:58:0::1;-1:-1:-1::0;;;;;33515:17:0::1;33535:5;33515:17:::0;;;:8:::1;:17;::::0;;;;:25;;-1:-1:-1;;33515:25:0::1;::::0;;33377:171::o;33872:158::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33971:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;33971:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33872:158::o;32779:431::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;32902:3:::1;32885:7;:14;:20;32877:87;;;::::0;-1:-1:-1;;;32877:87:0;;12368:2:1;32877:87:0::1;::::0;::::1;12350:21:1::0;12407:2;12387:18;;;12380:30;12446:34;12426:18;;;12419:62;-1:-1:-1;;;12497:18:1;;;12490:52;12559:19;;32877:87:0::1;12166:418:1::0;32877:87:0::1;32979:9;32975:228;32998:7;:14;32994:1;:18;32975:228;;;33033:14;33050:7;33058:1;33050:10;;;;;;;;:::i;:::-;;;;;;;33033:27;;33075:14;33092:37;33124:4;33092:27;33108:7;33116:1;33108:10;;;;;;;;:::i;:::-;;;;;;;18388:2;18442;:16;;;;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;:::-;33092:15:::0;::::1;:27::i;:::-;:31:::0;::::1;:37::i;:::-;33075:54;;33144:47;33169:4;33176:6;33184;33144:16;:47::i;:::-;33018:185;;33014:3;;;;;:::i;:::-;;;;32975:228;;;;32779:431:::0;;:::o;31477:149::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;31553:65:::1;31578:4;31585:7;553::::0;580:6;-1:-1:-1;;;;;580:6:0;;507:87;31585:7:::1;31614:3;31606:7:::0;18442:16:::1;18388:2;18442;:16;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;:::-;31594:19;;;;:::i;:::-;:23;;;;:::i;:::-;31553:16;:65::i;:::-;31477:149:::0;:::o;33215:159::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33289:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;33281:52;;;::::0;-1:-1:-1;;;33281:52:0;;13285:2:1;33281:52:0::1;::::0;::::1;13267:21:1::0;13324:2;13304:18;;;13297:30;13363:27;13343:18;;;13336:55;13408:18;;33281:52:0::1;13083:349:1::0;33281:52:0::1;-1:-1:-1::0;;;;;33344:14:0::1;33361:5;33344:14:::0;;;:5:::1;:14;::::0;;;;:22;;-1:-1:-1;;33344:22:0::1;::::0;;33215:159::o;21623:122::-;-1:-1:-1;;;;;21716:21:0;21689:7;21716:21;;;:12;:21;;;;;;;21623:122::o;731:148::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;838:1:::1;822:6:::0;;801:40:::1;::::0;-1:-1:-1;;;;;822:6:0;;::::1;::::0;801:40:::1;::::0;838:1;;801:40:::1;869:1;852:19:::0;;-1:-1:-1;;;;;;852:19:0::1;::::0;;731:148::o;34519:119::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;34601:15:::1;:29:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34601:29:0;;::::1;::::0;;;::::1;::::0;;34519:119::o;31632:686::-;31709:4;580:6;;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;31744:2:::1;31733:7;:13;;31725:75;;;::::0;-1:-1:-1;;;31725:75:0;;13639:2:1;31725:75:0::1;::::0;::::1;13621:21:1::0;13678:2;13658:18;;;13651:30;13717:34;13697:18;;;13690:62;-1:-1:-1;;;13768:18:1;;;13761:47;13825:19;;31725:75:0::1;13437:413:1::0;31725:75:0::1;31857:9;::::0;31842:25:::1;::::0;-1:-1:-1;;;31842:25:0;;-1:-1:-1;;;;;31857:9:0;;::::1;31842:25;::::0;::::1;6232:51:1::0;31811:28:0::1;::::0;31842:4:::1;::::0;:14:::1;::::0;6205:18:1;;31842:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31811:56:::0;-1:-1:-1;31878:20:0::1;31901:44;31939:5;31901:33;31811:56:::0;31926:7;31901:24:::1;:33::i;:44::-;31878:67:::0;-1:-1:-1;31960:16:0;;31956:95:::1;;32009:9;::::0;32020:4:::1;::::0;31992:47:::1;::::0;-1:-1:-1;;;;;32009:9:0;;::::1;::::0;32020:4:::1;32026:12:::0;31992:16:::1;:47::i;:::-;32091:4;::::0;32081:15:::1;::::0;-1:-1:-1;;;;;32091:4:0::1;32081:9;:15::i;:::-;32061:17;:35:::0;32155:5:::1;18442:16;18388:2;18442;:16;:::i;:::-;18436:22;::::0;:3:::1;:22;:::i;:::-;32136:16;::::0;32150:2:::1;32136:16;:::i;:::-;:24;;;;:::i;:::-;32115:17;;:45;;32107:101;;;::::0;-1:-1:-1;;;32107:101:0;;14246:2:1;32107:101:0::1;::::0;::::1;14228:21:1::0;14285:2;14265:18;;;14258:30;14324:34;14304:18;;;14297:62;-1:-1:-1;;;14375:18:1;;;14368:41;14426:19;;32107:101:0::1;14044:407:1::0;32107:101:0::1;32256:9;::::0;32277:11:::1;::::0;;-1:-1:-1;;;;;;32277:11:0;;;;-1:-1:-1;;;;;32256:9:0;;::::1;::::0;;;32277::::1;::::0;:11:::1;::::0;;::::1;::::0;32219:19:::1;::::0;32277:11;;;;;;;32219:19;32256:9;32277:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32306:4;32299:11;;;;;716:1;31632:686:::0;;;:::o;34405:108::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;34480:11:::1;:25:::0;;;::::1;;;;-1:-1:-1::0;;34480:25:0;;::::1;::::0;;;::::1;::::0;;34405:108::o;33554:160::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33655:37:0;;;::::1;;::::0;;;:19:::1;:37;::::0;;;;:51;;-1:-1:-1;;33655:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33554:160::o;34773:327::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;34923:15:::1;:33:::0;;;;34967:15:::1;:33:::0;;;;35011:16:::1;:35:::0;35057:16:::1;:35:::0;34773:327::o;32324:282::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;32379:23:::1;32405:24;32423:4;32405:9;:24::i;:::-;32379:50:::0;-1:-1:-1;32467:29:0::1;32490:5;32467:18;32483:1;18442:16;18388:2;18442;:16;:::i;32467:29::-;32448:15;:48;;32440:133;;;::::0;-1:-1:-1;;;32440:133:0;;14658:2:1;32440:133:0::1;::::0;::::1;14640:21:1::0;14697:2;14677:18;;;14670:30;14736:34;14716:18;;;14709:62;14807:34;14787:18;;;14780:62;-1:-1:-1;;;14858:19:1;;;14851:39;14907:19;;32440:133:0::1;14456:476:1::0;32440:133:0::1;32584:14;:12;:14::i;22668:176::-:0;22748:4;22765:49;166:10;22796:9;22807:6;22765:16;:49::i;:::-;-1:-1:-1;22832:4:0;22668:176;;;;:::o;33720:146::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33813:31:0;;;::::1;;::::0;;;:13:::1;:31;::::0;;;;:45;;-1:-1:-1;;33813:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33720:146::o;34644:123::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;34725:20:::1;:34:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34725:34:0;;::::1;::::0;;;::::1;::::0;;34644:123::o;885:249::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;974:22:0;::::1;966:78;;;::::0;-1:-1:-1;;;966:78:0;;15139:2:1;966:78:0::1;::::0;::::1;15121:21:1::0;15178:2;15158:18;;;15151:30;15217:34;15197:18;;;15190:62;-1:-1:-1;;;15268:18:1;;;15261:41;15319:19;;966:78:0::1;14937:407:1::0;966:78:0::1;1081:6;::::0;;1060:38:::1;::::0;-1:-1:-1;;;;;1060:38:0;;::::1;::::0;1081:6;::::1;::::0;1060:38:::1;::::0;::::1;1109:6;:17:::0;;-1:-1:-1;;;;;;1109:17:0::1;-1:-1:-1::0;;;;;1109:17:0;;;::::1;::::0;;;::::1;::::0;;885:249::o;34036:254::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;34140:37:::1;34169:7:::0;34140:24:::1;34156:7:::0;18442:16:::1;18388:2;18442;:16;:::i;34140:37::-;34128:9;:49:::0;34208:27:::1;34231:3;34208:18;34224:1;18442:16;18388:2;18442;:16;:::i;34208:27::-;34196:9;;:39;;34188:94;;;::::0;-1:-1:-1;;;34188:94:0;;15551:2:1;34188:94:0::1;::::0;::::1;15533:21:1::0;15590:2;15570:18;;;15563:30;15629:34;15609:18;;;15602:62;-1:-1:-1;;;15680:18:1;;;15673:40;15730:19;;34188:94:0::1;15349:406:1::0;34188:94:0::1;34036:254:::0;;:::o;31314:157::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;31372:12:::1;580:6:::0;;31408:55:::1;::::0;-1:-1:-1;;;;;580:6:0;;;;31437:21:::1;::::0;31372:12;31408:55;31372:12;31408:55;31437:21;580:6;31408:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;31314:157:0:o;32612:159::-;553:7;580:6;-1:-1:-1;;;;;580:6:0;166:10;640:23;632:73;;;;-1:-1:-1;;;632:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32684:14:0;::::1;;::::0;;;:5:::1;:14;::::0;;;;;::::1;;32683:15;32675:56;;;::::0;-1:-1:-1;;;32675:56:0;;16172:2:1;32675:56:0::1;::::0;::::1;16154:21:1::0;16211:2;16191:18;;;16184:30;16250;16230:18;;;16223:58;16298:18;;32675:56:0::1;15970:352:1::0;32675:56:0::1;-1:-1:-1::0;;;;;32742:14:0::1;;::::0;;;:5:::1;:14;::::0;;;;:21;;-1:-1:-1;;32742:21:0::1;32759:4;32742:21;::::0;;32612:159::o;2710:98::-;2768:7;2795:5;2799:1;2795;:5;:::i;:::-;2788:12;2710:98;-1:-1:-1;;;2710:98:0:o;2814:::-;2872:7;2899:5;2903:1;2899;:5;:::i;2502:98::-;2560:7;2587:5;2591:1;2587;:5;:::i;22309:353::-;-1:-1:-1;;;;;22408:19:0;;22400:72;;;;-1:-1:-1;;;22400:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22491:21:0;;22483:72;;;;-1:-1:-1;;;22483:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22566:22:0;;;;;;;:15;:22;;;;;;;;:31;;;;;;;;;;;;;:40;;;22622:32;;2058:25:1;;;22622:32:0;;2031:18:1;22622:32:0;;;;;;;;22309:353;;;:::o;29090:369::-;29211:11;;29172:65;;29196:4;;-1:-1:-1;;;;;29211:11:0;29225;29172:15;:65::i;:::-;29248:11;;29394:16;;29248:203;;-1:-1:-1;;;29248:203:0;;29316:4;29248:203;;;16809:34:1;16859:18;;;16852:34;;;29248:11:0;16902:18:1;;;16895:34;;;16945:18;;;16938:34;-1:-1:-1;;;;;29394:16:0;;;16988:19:1;;;16981:44;29425:15:0;17041:19:1;;;17034:35;29248:11:0;;;:27;;29283:9;;16743:19:1;;29248:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29090:369;;:::o;24461:3038::-;-1:-1:-1;;;;;24557:18:0;;24549:68;;;;-1:-1:-1;;;24549:68:0;;17593:2:1;24549:68:0;;;17575:21:1;17632:2;17612:18;;;17605:30;17671:34;17651:18;;;17644:62;-1:-1:-1;;;17722:18:1;;;17715:35;17767:19;;24549:68:0;17391:401:1;24549:68:0;-1:-1:-1;;;;;24636:16:0;;24628:64;;;;-1:-1:-1;;;24628:64:0;;17999:2:1;24628:64:0;;;17981:21:1;18038:2;18018:18;;;18011:30;18077:34;18057:18;;;18050:62;-1:-1:-1;;;18128:18:1;;;18121:33;18171:19;;24628:64:0;17797:399:1;24628:64:0;24720:1;24711:6;:10;24703:71;;;;-1:-1:-1;;;24703:71:0;;18403:2:1;24703:71:0;;;18385:21:1;18442:2;18422:18;;;18415:30;18481:34;18461:18;;;18454:62;-1:-1:-1;;;18532:18:1;;;18525:46;18588:19;;24703:71:0;18201:412:1;24703:71:0;-1:-1:-1;;;;;24794:11:0;;;;;;:5;:11;;;;;;;;24793:12;24785:57;;;;-1:-1:-1;;;24785:57:0;;18820:2:1;24785:57:0;;;18802:21:1;;;18839:18;;;18832:30;18898:34;18878:18;;;18871:62;18950:18;;24785:57:0;18618:356:1;24785:57:0;24857:4;;;;;;;24853:116;;-1:-1:-1;;;;;24885:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;24908:17:0;;;;;;:13;:17;;;;;;;;24885:40;24877:80;;;;-1:-1:-1;;;24877:80:0;;19181:2:1;24877:80:0;;;19163:21:1;19220:2;19200:18;;;19193:30;19259:29;19239:18;;;19232:57;19306:18;;24877:80:0;18979:351:1;24877:80:0;24983:11;;;;;;;;:19;;:11;:19;:48;;;;-1:-1:-1;;;;;;25008:23:0;;;;;;:19;:23;;;;;;;;25006:25;24983:48;24979:178;;;25085:9;;25056:25;25074:6;25056:13;25066:2;25056:9;:13::i;:::-;:17;;:25::i;:::-;:38;;25048:97;;;;-1:-1:-1;;;25048:97:0;;19537:2:1;25048:97:0;;;19519:21:1;19576:2;19556:18;;;19549:30;19615:34;19595:18;;;19588:62;-1:-1:-1;;;19666:18:1;;;19659:44;19720:19;;25048:97:0;19335:410:1;25048:97:0;25170:8;;;;25167:350;;;553:7;580:6;-1:-1:-1;;;;;25198:15:0;;;580:6;;25198:15;;;;:32;;-1:-1:-1;553:7:0;580:6;-1:-1:-1;;;;;25217:13:0;;;580:6;;25217:13;;25198:32;:52;;;;-1:-1:-1;;;;;;25234:16:0;;;;25198:52;:66;;;;-1:-1:-1;25260:4:0;;-1:-1:-1;;;;;25254:10:0;;;25260:4;;25254:10;;25198:66;:85;;;;-1:-1:-1;25274:9:0;;-1:-1:-1;;;;;25268:15:0;;;25274:9;;25268:15;;25198:85;25194:312;;;25309:6;25304:187;25325:1;25321;:5;25304:187;;;25375:18;;:25;;25398:1;25375:22;:25::i;:::-;25359:12;:41;25356:116;;;-1:-1:-1;;;;;25429:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;25429:19:0;25444:4;25429:19;;;25356:116;25328:3;;;;:::i;:::-;;;;25304:187;;;;25194:312;25530:15;;;;;;;25527:331;;;25589:14;25600:2;25589:10;:14::i;:::-;25588:15;:44;;;;-1:-1:-1;;;;;;25607:25:0;;;;;;:19;:25;;;;;;;;25588:44;:109;;;;25654:16;25665:4;25654:10;:16::i;:::-;25653:17;:44;;;;-1:-1:-1;;;;;;25674:23:0;;;;;;:19;:23;;;;;;;;25653:44;25588:174;;;;25719:16;25730:4;25719:10;:16::i;:::-;:43;;;;-1:-1:-1;;;;;;25739:23:0;;;;;;:19;:23;;;;;;;;25719:43;25588:239;;;;25784:14;25795:2;25784:10;:14::i;:::-;:43;;;;-1:-1:-1;;;;;;25802:25:0;;;;;;:19;:25;;;;;;;;25784:43;25562:284;;;;;;25868:25;25896:36;25916:15;;25896;;:19;;:36;;;;:::i;:::-;25868:64;;25943:28;25974:24;25992:4;25974:9;:24::i;:::-;26064:10;;26090:16;;25943:55;;-1:-1:-1;26040:34:0;;;;26090:16;;;;;26089:17;:41;;;;-1:-1:-1;26110:20:0;;;;;;;26089:41;:69;;;;-1:-1:-1;26144:9:0;;26157:1;;26134:20;;-1:-1:-1;;;;;26144:9:0;26134;:20::i;:::-;:24;26089:69;:94;;;;;26182:1;26162:17;:21;26089:94;:116;;;;-1:-1:-1;;;;;;26188:17:0;;;;;;:13;:17;;;;;;;;26187:18;26089:116;:140;;;;-1:-1:-1;;;;;;26210:19:0;;;;;;:13;:19;;;;;;;;26209:20;26089:140;:159;;;;-1:-1:-1;26239:9:0;;-1:-1:-1;;;;;26233:15:0;;;26239:9;;26233:15;26089:159;:186;;;;;26252:23;26089:186;26085:237;;;26292:14;:12;:14::i;:::-;-1:-1:-1;;;;;26336:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;26359:17:0;;;;;;:13;:17;;;;;;;;26336:40;26332:1118;;;26408:1;26393:12;:16;;;26424:12;:16;;;26472:30;;26408:1;26472:16;:30::i;:::-;26455:14;:47;26332:1118;;;26547:9;;-1:-1:-1;;;;;26539:17:0;;;26547:9;;26539:17;26535:904;;;26592:15;;26577:12;:30;;;26641:15;;26626:12;:30;;;26692:36;;26592:15;26692:19;:36::i;26535:904::-;26759:9;;-1:-1:-1;;;;;26753:15:0;;;26759:9;;26753:15;26749:690;;;26804:16;;26789:12;:31;;;26854:16;;26839:12;:31;;;26906:38;;26804:16;26906:20;:38::i;:::-;26889:14;:55;-1:-1:-1;;;;;26966:14:0;;;;;;:8;:14;;;;;;;;:53;;;;;27004:15;26984:16;;:35;;26966:53;26963:227;;;27058:2;27043:12;:17;;;27098:2;27083:12;:17;;;27140:30;;27058:2;27140:16;:30::i;26963:227::-;26749:690;;;-1:-1:-1;;;;;27238:14:0;;;;;;:8;:14;;;;;;;;27237:15;;:54;;;27276:15;27256:16;;:35;;27237:54;27229:124;;;;-1:-1:-1;;;27229:124:0;;19952:2:1;27229:124:0;;;19934:21:1;19991:2;19971:18;;;19964:30;20030:34;20010:18;;;20003:62;20101:27;20081:18;;;20074:55;20146:19;;27229:124:0;19750:421:1;27229:124:0;27387:1;27372:12;:16;;;27407:12;:16;26749:690;27460:31;27474:4;27480:2;27484:6;27460:13;:31::i;:::-;24538:2961;;;24461:3038;;;:::o;3022:206::-;3108:7;3169:12;3161:6;;;;3153:29;;;;-1:-1:-1;;;3153:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3204:5:0;;;3022:206::o;27505:1106::-;19943:16;:23;;-1:-1:-1;;19943:23:0;;;;;;27587:24:::1;27605:4;27587:9;:24::i;:::-;27561:50;;27622:25;27650:36;27670:15;;27650;;:19;;:36;;;;:::i;:::-;27622:64;;27697:27;27727:22;27747:1;27727:15;;:19;;:22;;;;:::i;:::-;27697:52:::0;-1:-1:-1;27760:26:0::1;27789:40;:15:::0;27697:52;27789:19:::1;:40::i;:::-;27760:69:::0;-1:-1:-1;27868:21:0::1;27900:36;27760:69:::0;27900:16:::1;:36::i;:::-;27948:18;27969:44;:21;27995:17:::0;27969:25:::1;:44::i;:::-;27948:65;;28024:23;28050:54;28086:17;28050:31;28065:15;;28050:10;:14;;:31;;;;:::i;:54::-;28024:80:::0;-1:-1:-1;28115:23:0::1;28141:31;:10:::0;28024:80;28141:14:::1;:31::i;:::-;28201:1;28183:15;:19:::0;;;28213:15:::1;:19:::0;;;28269:16:::1;::::0;28261:58:::1;::::0;28115:57;;-1:-1:-1;28201:1:0;;-1:-1:-1;;;;;28269:16:0;;::::1;::::0;28299:15;;28201:1;28261:58;28201:1;28261:58;28299:15;28269:16;28261:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28243:76;;;28333:15;28352:1;28333:20;;:48;;;;-1:-1:-1::0;28357:24:0;;::::1;28333:48;28330:130;;;28398:50;28411:19;28432:15;28398:12;:50::i;:::-;28497:8;28473:21;:32;28470:134;;;28542:10;::::0;28534:58:::1;::::0;-1:-1:-1;;;;;28542:10:0;;::::1;::::0;28566:21:::1;::::0;28534:58:::1;::::0;;;28566:21;28542:10;28534:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;28521:71:0;;-1:-1:-1;;28470:134:0::1;-1:-1:-1::0;;19989:16:0;:24;;-1:-1:-1;;19989:24:0;;;-1:-1:-1;;;;;;;27505:1106:0:o;29838:673::-;29933:14;;:19;29930:574;;29968:17;29988:20;30001:6;29988:12;:20::i;:::-;29968:40;-1:-1:-1;30023:22:0;30048:21;:6;29968:40;30048:10;:21::i;:::-;30023:46;;30084:25;30099:9;30084:14;:25::i;:::-;-1:-1:-1;;;;;30124:20:0;;;;;;:12;:20;;;;;:30;;30148:6;;30124:20;:30;;30148:6;;30124:30;:::i;:::-;;;;-1:-1:-1;;;;;;;30169:23:0;;;;;;:12;:23;;;;;:41;;30196:14;;30169:23;:41;;30196:14;;30169:41;:::i;:::-;;;;-1:-1:-1;;30246:4:0;30225:27;;;;:12;:27;;;;;:40;;30256:9;;30225:27;:40;;30256:9;;30225:40;:::i;:::-;;;;;;;;30302:9;-1:-1:-1;;;;;30285:43:0;30294:6;-1:-1:-1;;;;;30285:43:0;;30313:14;30285:43;;;;2058:25:1;;2046:2;2031:18;;1912:177;30285:43:0;;;;;;;;29953:387;;32975:228:::1;32779:431:::0;;:::o;29930:574::-;-1:-1:-1;;;;;30359:20:0;;;;;;:12;:20;;;;;:30;;30383:6;;30359:20;:30;;30383:6;;30359:30;:::i;:::-;;;;-1:-1:-1;;;;;;;30404:23:0;;;;;;:12;:23;;;;;:33;;30431:6;;30404:23;:33;;30431:6;;30404:33;:::i;:::-;;;;;;;;30474:9;-1:-1:-1;;;;;30457:35:0;30466:6;-1:-1:-1;;;;;30457:35:0;;30485:6;30457:35;;;;2058:25:1;;2046:2;2031:18;;1912:177;2606:98:0;2664:7;2691:5;2695:1;2691;:5;:::i;28617:467::-;28708:16;;;28722:1;28708:16;;;;;;;;28684:21;;28708:16;;;;;;;;;;-1:-1:-1;28708:16:0;28684:40;;28753:4;28735;28740:1;28735:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28735:23:0;;;:7;;;;;;;;;;:23;;;;28779:11;;:18;;;-1:-1:-1;;;28779:18:0;;;;:11;;;;;:16;;:18;;;;;28735:7;;28779:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28769:4;28774:1;28769:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28769:28:0;;;:7;;;;;;;;;:28;28847:11;;28808:65;;28832:4;;28847:11;28861;28808:15;:65::i;:::-;28884:11;;:192;;-1:-1:-1;;;28884:192:0;;-1:-1:-1;;;;;28884:11:0;;;;:62;;:192;;28961:11;;28884;;29003:4;;29030;;29050:15;;28884:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29465:147;29526:7;29553:51;29600:3;29553:42;29564:30;29581:12;;29564;;:16;;:30;;;;:::i;:::-;29553:6;;:10;:42::i;29618:214::-;29700:47;29732:14;;29700:27;29714:12;;29700:9;:13;;:27;;;;:::i;:47::-;29681:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;29809:14:0;;29791:12;;29777:47;;29809:14;29777:27;;:9;;:13;:27::i;:47::-;29758:15;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;29618:214:0:o;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1264:247::-;1323:6;1376:2;1364:9;1355:7;1351:23;1347:32;1344:52;;;1392:1;1389;1382:12;1344:52;1431:9;1418:23;1450:31;1475:5;1450:31;:::i;2094:160::-;2159:20;;2215:13;;2208:21;2198:32;;2188:60;;2244:1;2241;2234:12;2259:180;2315:6;2368:2;2356:9;2347:7;2343:23;2339:32;2336:52;;;2384:1;2381;2374:12;2336:52;2407:26;2423:9;2407:26;:::i;2444:456::-;2521:6;2529;2537;2590:2;2578:9;2569:7;2565:23;2561:32;2558:52;;;2606:1;2603;2596:12;2558:52;2645:9;2632:23;2664:31;2689:5;2664:31;:::i;:::-;2714:5;-1:-1:-1;2771:2:1;2756:18;;2743:32;2784:33;2743:32;2784:33;:::i;:::-;2444:456;;2836:7;;-1:-1:-1;;;2890:2:1;2875:18;;;;2862:32;;2444:456::o;3094:315::-;3159:6;3167;3220:2;3208:9;3199:7;3195:23;3191:32;3188:52;;;3236:1;3233;3226:12;3188:52;3275:9;3262:23;3294:31;3319:5;3294:31;:::i;:::-;3344:5;-1:-1:-1;3368:35:1;3399:2;3384:18;;3368:35;:::i;:::-;3358:45;;3094:315;;;;;:::o;3414:127::-;3475:10;3470:3;3466:20;3463:1;3456:31;3506:4;3503:1;3496:15;3530:4;3527:1;3520:15;3546:275;3617:2;3611:9;3682:2;3663:13;;-1:-1:-1;;3659:27:1;3647:40;;3717:18;3702:34;;3738:22;;;3699:62;3696:88;;;3764:18;;:::i;:::-;3800:2;3793:22;3546:275;;-1:-1:-1;3546:275:1:o;3826:183::-;3886:4;3919:18;3911:6;3908:30;3905:56;;;3941:18;;:::i;:::-;-1:-1:-1;3986:1:1;3982:14;3998:4;3978:25;;3826:183::o;4014:662::-;4068:5;4121:3;4114:4;4106:6;4102:17;4098:27;4088:55;;4139:1;4136;4129:12;4088:55;4175:6;4162:20;4201:4;4225:60;4241:43;4281:2;4241:43;:::i;:::-;4225:60;:::i;:::-;4319:15;;;4405:1;4401:10;;;;4389:23;;4385:32;;;4350:12;;;;4429:15;;;4426:35;;;4457:1;4454;4447:12;4426:35;4493:2;4485:6;4481:15;4505:142;4521:6;4516:3;4513:15;4505:142;;;4587:17;;4575:30;;4625:12;;;;4538;;4505:142;;;-1:-1:-1;4665:5:1;4014:662;-1:-1:-1;;;;;;4014:662:1:o;4681:1215::-;4799:6;4807;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4916:9;4903:23;4945:18;4986:2;4978:6;4975:14;4972:34;;;5002:1;4999;4992:12;4972:34;5040:6;5029:9;5025:22;5015:32;;5085:7;5078:4;5074:2;5070:13;5066:27;5056:55;;5107:1;5104;5097:12;5056:55;5143:2;5130:16;5165:4;5189:60;5205:43;5245:2;5205:43;:::i;5189:60::-;5283:15;;;5365:1;5361:10;;;;5353:19;;5349:28;;;5314:12;;;;5389:19;;;5386:39;;;5421:1;5418;5411:12;5386:39;5445:11;;;;5465:217;5481:6;5476:3;5473:15;5465:217;;;5561:3;5548:17;5578:31;5603:5;5578:31;:::i;:::-;5622:18;;5498:12;;;;5660;;;;5465:217;;;5701:5;-1:-1:-1;;5744:18:1;;5731:32;;-1:-1:-1;;5775:16:1;;;5772:36;;;5804:1;5801;5794:12;5772:36;;5827:63;5882:7;5871:8;5860:9;5856:24;5827:63;:::i;:::-;5817:73;;;4681:1215;;;;;:::o;5901:180::-;5960:6;6013:2;6001:9;5992:7;5988:23;5984:32;5981:52;;;6029:1;6026;6019:12;5981:52;-1:-1:-1;6052:23:1;;5901:180;-1:-1:-1;5901:180:1:o;6529:385::-;6615:6;6623;6631;6639;6692:3;6680:9;6671:7;6667:23;6663:33;6660:53;;;6709:1;6706;6699:12;6660:53;-1:-1:-1;;6732:23:1;;;6802:2;6787:18;;6774:32;;-1:-1:-1;6853:2:1;6838:18;;6825:32;;6904:2;6889:18;6876:32;;-1:-1:-1;6529:385:1;-1:-1:-1;6529:385:1:o;6919:388::-;6987:6;6995;7048:2;7036:9;7027:7;7023:23;7019:32;7016:52;;;7064:1;7061;7054:12;7016:52;7103:9;7090:23;7122:31;7147:5;7122:31;:::i;:::-;7172:5;-1:-1:-1;7229:2:1;7214:18;;7201:32;7242:33;7201:32;7242:33;:::i;:::-;7294:7;7284:17;;;6919:388;;;;;:::o;7312:248::-;7380:6;7388;7441:2;7429:9;7420:7;7416:23;7412:32;7409:52;;;7457:1;7454;7447:12;7409:52;-1:-1:-1;;7480:23:1;;;7550:2;7535:18;;;7522:32;;-1:-1:-1;7312:248:1:o;7565:401::-;7767:2;7749:21;;;7806:2;7786:18;;;7779:30;7845:34;7840:2;7825:18;;7818:62;-1:-1:-1;;;7911:2:1;7896:18;;7889:35;7956:3;7941:19;;7565:401::o;8327:127::-;8388:10;8383:3;8379:20;8376:1;8369:31;8419:4;8416:1;8409:15;8443:4;8440:1;8433:15;8459:422;8548:1;8591:5;8548:1;8605:270;8626:7;8616:8;8613:21;8605:270;;;8685:4;8681:1;8677:6;8673:17;8667:4;8664:27;8661:53;;;8694:18;;:::i;:::-;8744:7;8734:8;8730:22;8727:55;;;8764:16;;;;8727:55;8843:22;;;;8803:15;;;;8605:270;;;8609:3;8459:422;;;;;:::o;8886:806::-;8935:5;8965:8;8955:80;;-1:-1:-1;9006:1:1;9020:5;;8955:80;9054:4;9044:76;;-1:-1:-1;9091:1:1;9105:5;;9044:76;9136:4;9154:1;9149:59;;;;9222:1;9217:130;;;;9129:218;;9149:59;9179:1;9170:10;;9193:5;;;9217:130;9254:3;9244:8;9241:17;9238:43;;;9261:18;;:::i;:::-;-1:-1:-1;;9317:1:1;9303:16;;9332:5;;9129:218;;9431:2;9421:8;9418:16;9412:3;9406:4;9403:13;9399:36;9393:2;9383:8;9380:16;9375:2;9369:4;9366:12;9362:35;9359:77;9356:159;;;-1:-1:-1;9468:19:1;;;9500:5;;9356:159;9547:34;9572:8;9566:4;9547:34;:::i;:::-;9617:6;9613:1;9609:6;9605:19;9596:7;9593:32;9590:58;;;9628:18;;:::i;:::-;9666:20;;8886:806;-1:-1:-1;;;8886:806:1:o;9697:140::-;9755:5;9784:47;9825:4;9815:8;9811:19;9805:4;9784:47;:::i;9842:168::-;9882:7;9948:1;9944;9940:6;9936:14;9933:1;9930:21;9925:1;9918:9;9911:17;9907:45;9904:71;;;9955:18;;:::i;:::-;-1:-1:-1;9995:9:1;;9842:168::o;10015:251::-;10085:6;10138:2;10126:9;10117:7;10113:23;10109:32;10106:52;;;10154:1;10151;10144:12;10106:52;10186:9;10180:16;10205:31;10230:5;10205:31;:::i;10993:404::-;11195:2;11177:21;;;11234:2;11214:18;;;11207:30;11273:34;11268:2;11253:18;;11246:62;-1:-1:-1;;;11339:2:1;11324:18;;11317:38;11387:3;11372:19;;10993:404::o;11402:402::-;11604:2;11586:21;;;11643:2;11623:18;;;11616:30;11682:34;11677:2;11662:18;;11655:62;-1:-1:-1;;;11748:2:1;11733:18;;11726:36;11794:3;11779:19;;11402:402::o;12589:127::-;12650:10;12645:3;12641:20;12638:1;12631:31;12681:4;12678:1;12671:15;12705:4;12702:1;12695:15;12721:135;12760:3;-1:-1:-1;;12781:17:1;;12778:43;;;12801:18;;:::i;:::-;-1:-1:-1;12848:1:1;12837:13;;12721:135::o;12861:217::-;12901:1;12927;12917:132;;12971:10;12966:3;12962:20;12959:1;12952:31;13006:4;13003:1;12996:15;13034:4;13031:1;13024:15;12917:132;-1:-1:-1;13063:9:1;;12861:217::o;13855:184::-;13925:6;13978:2;13966:9;13957:7;13953:23;13949:32;13946:52;;;13994:1;13991;13984:12;13946:52;-1:-1:-1;14017:16:1;;13855:184;-1:-1:-1;13855:184:1:o;16327:128::-;16367:3;16398:1;16394:6;16391:1;16388:13;16385:39;;;16404:18;;:::i;:::-;-1:-1:-1;16440:9:1;;16327:128::o;17080:306::-;17168:6;17176;17184;17237:2;17225:9;17216:7;17212:23;17208:32;17205:52;;;17253:1;17250;17243:12;17205:52;17282:9;17276:16;17266:26;;17332:2;17321:9;17317:18;17311:25;17301:35;;17376:2;17365:9;17361:18;17355:25;17345:35;;17080:306;;;;;:::o;20176:125::-;20216:4;20244:1;20241;20238:8;20235:34;;;20249:18;;:::i;:::-;-1:-1:-1;20286:9:1;;20176:125::o;20306:980::-;20568:4;20616:3;20605:9;20601:19;20647:6;20636:9;20629:25;20673:2;20711:6;20706:2;20695:9;20691:18;20684:34;20754:3;20749:2;20738:9;20734:18;20727:31;20778:6;20813;20807:13;20844:6;20836;20829:22;20882:3;20871:9;20867:19;20860:26;;20921:2;20913:6;20909:15;20895:29;;20942:1;20952:195;20966:6;20963:1;20960:13;20952:195;;;21031:13;;-1:-1:-1;;;;;21027:39:1;21015:52;;21122:15;;;;21087:12;;;;21063:1;20981:9;20952:195;;;-1:-1:-1;;;;;;;21203:32:1;;;;21198:2;21183:18;;21176:60;-1:-1:-1;;;21267:3:1;21252:19;21245:35;21164:3;20306:980;-1:-1:-1;;;20306:980:1:o

Swarm Source

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