ETH Price: $3,143.59 (-8.53%)
Gas: 9 Gwei

Token

Team Rocket Inu (TINU)
 

Overview

Max Total Supply

1,000,000,000,000,000 TINU

Holders

198

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,868,766,641,069.568455203 TINU

Value
$0.00
0x81f88AAe9B36f26E8F3b127dBCDF4e18C46cFCca
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:
TeamRocketInu

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-23
*/

//         \:.             .:/
//          \``._________.''/ 
//           \             / 
//   .--.--, / .':.   .':. \
//  /__:  /  | '::' . '::' |
//     / /   |`.   ._.   .'|
//    / /    |.'         '.|
//   /___-_-,|.\  \   /  /.|
//        // |''\.;   ;,/ '|
//        `==|:=         =:|
//           `.          .'
//            :-._____.-:
//            `''       `''


pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        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"
        );

        (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);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}


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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


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;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

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

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

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract TeamRocketInu is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress;
        
    address payable public devAddress;
        
    address payable public liquidityAddress;
        
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; 
    bool public transferDelayEnabled = true;
    bool public limitsInEffect = true;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1 * 1e15 * 1e9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private constant _name = "Team Rocket Inu";
    string private constant _symbol = "TINU";
    uint8 private constant _decimals = 9;

    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _marketingFee;
    
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;

    uint256 public _buyTaxFee = 2;
    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 7;

    uint256 public _sellTaxFee = 2;
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 7;
    
    uint256 public tradingActiveBlock = 0;
    mapping(address => bool) public boughtEarly;
    uint256 public earlyBuyPenaltyEnd;
    
    uint256 public _liquidityTokensToSwap;
    uint256 public _marketingTokensToSwap;
    
    uint256 public maxTransactionAmount;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    
    bool private gasLimitActive = true;

    uint256 public gasPriceBuyers = 100000000 gwei;
    uint256 public gasPriceSellers = 100000000 gwei;
    
    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);
    
    event SetAutomatedMarketMakerPair(address pair, bool value);
    
    event ExcludeFromReward(address excludedAddress);
    
    event IncludeInReward(address includedAddress);
    
    event ExcludeFromFee(address excludedAddress);
    
    event IncludeInFee(address includedAddress);
    
    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee);
    
    event SetSellFee(uint256 marketingFee, uint256 liquidityFee, uint256 reflectFee);
    
    event TransferForeignToken(address token, uint256 amount);
    
    event UpdatedMarketingAddress(address marketing);
    
    event UpdatedLiquidityAddress(address liquidity);
    
    event OwnerForcedSwapBack(uint256 timestamp);
    
    event BoughtEarly(address indexed sniper);
    
    event RemovedSniper(address indexed notsnipersupposedly);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() payable {
        _rOwned[_msgSender()] = _rTotal / 1000 * 405;
        _rOwned[address(this)] = _rTotal / 1000 * 595;
        
        maxTransactionAmount = _tTotal * 10 / 1000; // 1% maxTransactionAmountTxn
        minimumTokensBeforeSwap = _tTotal * 5 / 10000; // 0.05% swap tokens amount
        
        marketingAddress = payable(0x00A5d81be4c49f2D96Da379eDaF3307378460373);
        
        devAddress = payable(0x882b1A9F8a423552FEA15160Bd5f7a38bB17Fa80);
        
        liquidityAddress = payable(owner()); // Liquidity Address (switches to dead address once launch happens)
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        emit Transfer(address(0), _msgSender(), _tTotal * 405 / 1000);
        emit Transfer(address(0), address(this), _tTotal * 595 / 1000);
    }

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

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

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

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

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcludedFromReward(address account)
        external
        view
        returns (bool)
    {
        return _isExcluded[account];
    }

    function totalFees() external view returns (uint256) {
        return _tFeeTotal;
    }
    
    // remove limits after token is stable - 30-60 minutes
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // disable Transfer delay
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // once enabled, can never be turned off
    function enableTrading() internal onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        earlyBuyPenaltyEnd = block.timestamp + 72 hours;
    }
    
    function launch(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool){
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); 
        for(uint256 i = 0; i < airdropWallets.length; i++){
            address wallet = airdropWallets[i];
            uint256 amount = amounts[i];
            _transfer(msg.sender, wallet, amount);
        }
        enableTrading();
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        return true;
    }
    
    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }
    
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        _isExcludedMaxTransactionAmount[pair] = value;
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
    }
    
    function setSniperGasBuyers(uint256 gasBuyer) public onlyOwner{
        require(gasBuyer >= 0);
        gasPriceBuyers = gasBuyer * 1 gwei;
    }

        function setSniperGasSellers(uint256 gasSeller) public onlyOwner{
        require(gasSeller >= 0);
        gasPriceSellers = gasSeller * 1 gwei;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length + 1 <= 50, "Cannot exclude more than 50 accounts.  Include a previously excluded address.");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
 
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,

        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
        
        
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !inSwapAndLiquify
            ){
                
                if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock){
                    boughtEarly[to] = true;
                    emit BoughtEarly(to);
                }
                
                if (gasLimitActive && automatedMarketMakerPairs[from]) {
                    require(tx.gasprice <= gasPriceBuyers, "Botted action detected"); 
                }
                

                if (gasLimitActive && automatedMarketMakerPairs[to]) {
                    require(tx.gasprice <= gasPriceSellers, "Botted action detected"); 
                }
                
                
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[to] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[to] = block.number;
                    }
                }
                
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(gasPriceBuyers + amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                } 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(gasPriceSellers + amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
            }
        }
        
        
        
        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_marketingTokensToSwap);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        // swap and liquify
        if (
            !inSwapAndLiquify &&
            swapAndLiquifyEnabled &&
            balanceOf(uniswapV2Pair) > 0 &&
            totalTokensToSwap > 0 &&
            !_isExcludedFromFee[to] &&
            !_isExcludedFromFee[from] &&
            automatedMarketMakerPairs[to] &&
            overMinimumTokenBalance
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER; // no tax on transfers
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee;
                buyOrSellSwitch = BUY;
            } 
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee;
                buyOrSellSwitch = SELL;
                // higher tax if bought in the same block as trading active for 72 hours (sniper protect)
                if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){
                    _taxFee = _taxFee * 5;
                    _liquidityFee = _liquidityFee * 5;
                }
            // Normal transfers do not get taxed
            } else {
                require(!boughtEarly[from] || earlyBuyPenaltyEnd <= block.timestamp, "Snipers can't transfer tokens to sell cheaper until penalty timeframe is over.  DM a Mod.");
                removeAllFee();
                buyOrSellSwitch = TRANSFER; // no tax on transfers
            }
        }
        
        _tokenTransfer(from, to, amount, takeFee);
        
    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap;
        
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForETH = contractBalance.sub(tokensForLiquidity);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap);
        
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing);
        
        uint256 ethForDev= ethForMarketing * 2 / 7; 
        ethForMarketing -= ethForDev;
        
        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;
        
        (bool success,) = address(marketingAddress).call{value: ethForMarketing}("");
        (success,) = address(devAddress).call{value: ethForDev}("");
        
        addLiquidity(tokensForLiquidity, ethForLiquidity);
        emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        
        if(address(this).balance > 1e17){
            (success,) = address(marketingAddress).call{value: address(this).balance}("");
        }
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= _tTotal / 100, "Can only swap back if more than 1% of tokens stuck on contract");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }
    
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

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

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        if(buyOrSellSwitch == BUY){
            _liquidityTokensToSwap += tLiquidity * _buyLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _buyMarketingFee / _liquidityFee;
        } else if(buyOrSellSwitch == SELL){
            _liquidityTokensToSwap += tLiquidity * _sellLiquidityFee / _liquidityFee;
            _marketingTokensToSwap += tLiquidity * _sellMarketingFee / _liquidityFee;
        }
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }
    
     function removeBoughtEarly(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }

    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFee(account);
    }

    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
        emit IncludeInFee(account);
    }

    function setBuyFee(uint256 buyTaxFee, uint256 buyLiquidityFee, uint256 buyMarketingFee)
        external
        onlyOwner
    {
        _buyTaxFee = buyTaxFee;
        _buyLiquidityFee = buyLiquidityFee;
        _buyMarketingFee = buyMarketingFee;
        require(_buyTaxFee + _buyLiquidityFee + _buyMarketingFee <= 10, "Must keep buy taxes below 10%");
        emit SetBuyFee(buyMarketingFee, buyLiquidityFee, buyTaxFee);
    }

    function setSellFee(uint256 sellTaxFee, uint256 sellLiquidityFee, uint256 sellMarketingFee)
        external
        onlyOwner
    {
        _sellTaxFee = sellTaxFee;
        _sellLiquidityFee = sellLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        require(_sellTaxFee + _sellLiquidityFee + _sellMarketingFee <= 15, "Must keep sell taxes below 15%");
        emit SetSellFee(sellMarketingFee, sellLiquidityFee, sellTaxFee);
    }


    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        _isExcludedFromFee[marketingAddress] = false;
        marketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[marketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    
    function setLiquidityAddress(address _liquidityAddress) public onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
    
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "Can only withdraw if trading hasn't started");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
}

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reflectFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","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":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasPriceBuyers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasPriceSellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"launch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBoughtEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityAddress","type":"address"}],"name":"setLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasBuyer","type":"uint256"}],"name":"setSniperGasBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gasSeller","type":"uint256"}],"name":"setSniperGasSellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a805461ffff19166101011790556200002b69d3c21bcecceda1000000600019620003c4565b6200003990600019620003f1565b600e55601054601155601354601455600260168190556001601781905560076018819055601992909255601a819055601b919091556000601c8190556023805460ff191690921790915567016345785d8a000060248190556025556029805461ffff60a81b1916905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506103e8600e54620000f391906200040b565b620001019061019562000422565b33600090815260066020526040902055600e5462000123906103e8906200040b565b620001319061025362000422565b306000908152600660205260409020556103e86200015b69d3c21bcecceda1000000600a62000422565b6200016791906200040b565b6021556127106200018469d3c21bcecceda1000000600562000422565b6200019091906200040b565b602755600380546001600160a01b031990811672a5d81be4c49f2d96da379edaf3307378460373179091556004805490911673882b1a9f8a423552fea15160bd5f7a38bb17fa80179055620001ed6000546001600160a01b031690565b600580546001600160a01b0319166001600160a01b039283161781556000805483168152600b6020526040808220805460ff1990811660019081179092553084528284208054821683179055600354861684528284208054821683179055935485168352908220805490931617909155546200026c9116600162000324565b6200027930600162000324565b6200028861dead600162000324565b336000600080516020620047c88339815191526103e8620002b669d3c21bcecceda100000061019562000422565b620002c291906200040b565b60405190815260200160405180910390a3306000600080516020620047c88339815191526103e86200030169d3c21bcecceda100000061025362000422565b6200030d91906200040b565b60405190815260200160405180910390a362000444565b6000546001600160a01b03163314620003835760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b634e487b7160e01b600052601260045260246000fd5b600082620003d657620003d6620003ae565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620004065762000406620003db565b500390565b6000826200041d576200041d620003ae565b500490565b60008160001904831182151516156200043f576200043f620003db565b500290565b61437480620004546000396000f3fe6080604052600436106103e85760003560e01c8063602bc62b11610208578063a5ece94111610118578063c8c8ebe4116100ab578063ea2f0b371161007a578063ea2f0b3714610bd1578063ee40166e14610bf1578063efcc52de14610c07578063f2fde38b14610c1d578063f5648a4f14610c3d57600080fd5b8063c8c8ebe414610b4a578063dc44b6a014610b60578063dd62ed3e14610b76578063e884f26014610bbc57600080fd5b8063c49b9a80116100e7578063c49b9a8014610ae4578063c5d2418914610b04578063c860795214610b1a578063c876d0b914610b3057600080fd5b8063a5ece94114610a53578063a9059cbb14610a73578063b62496f514610a93578063bbc0c74214610ac357600080fd5b806388790a681161019b57806395d89b411161016a57806395d89b41146109b15780639a7a23d6146109de578063a073d37f146109fe578063a09bd45614610a13578063a457c2d714610a3357600080fd5b806388790a681461092457806388f820201461093a5780638da5cb5b14610973578063906e9dd01461099157600080fd5b80637571336a116101d75780637571336a146108945780638366e79a146108b457806383791758146108d457806385ecfd28146108f457600080fd5b8063602bc62b1461083557806370a082311461084a578063715018a61461086a578063751039fc1461087f57600080fd5b806339509351116103035780634c70f13f116102965780635342acb4116102655780635342acb41461079d578063557ed1ba146107d65780635913ab05146107e95780635b45a01e146107ff5780635bb988c91461081557600080fd5b80634c70f13f1461072857806351f205e41461074857806352390c021461075d578063525fa81f1461077d57600080fd5b80634549b039116102d25780634549b039146106a857806349bd5a5e146106c85780634a62bb65146106e85780634a74bb021461070757600080fd5b806339509351146106325780633ad10ef6146106525780634047ea3e14610672578063437823ec1461068857600080fd5b8063200a692d1161037b5780632d8381191161034a5780632d838119146105b6578063313ce567146105d65780633221c93f146105f25780633685d4191461061257600080fd5b8063200a692d1461054a57806323b872dd1461056057806324171f321461058057806325519cf21461059657600080fd5b80631694505e116103b75780631694505e146104bd57806318160ddd146104f55780631d865c30146105125780631fc851bd1461053457600080fd5b806306fdde03146103f4578063095ea7b31461043e57806310d5de531461046e57806313114a9d1461049e57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5060408051808201909152600f81526e5465616d20526f636b657420496e7560881b60208201525b6040516104359190613d72565b60405180910390f35b34801561044a57600080fd5b5061045e610459366004613ddf565b610c52565b6040519015158152602001610435565b34801561047a57600080fd5b5061045e610489366004613e0b565b60226020526000908152604090205460ff1681565b3480156104aa57600080fd5b50600f545b604051908152602001610435565b3480156104c957600080fd5b506028546104dd906001600160a01b031681565b6040516001600160a01b039091168152602001610435565b34801561050157600080fd5b5069d3c21bcecceda10000006104af565b34801561051e57600080fd5b5061053261052d366004613e28565b610c69565b005b34801561054057600080fd5b506104af601e5481565b34801561055657600080fd5b506104af60195481565b34801561056c57600080fd5b5061045e61057b366004613e54565b610d57565b34801561058c57600080fd5b506104af60205481565b3480156105a257600080fd5b506105326105b1366004613e28565b610dc0565b3480156105c257600080fd5b506104af6105d1366004613e95565b610e9c565b3480156105e257600080fd5b5060405160098152602001610435565b3480156105fe57600080fd5b506005546104dd906001600160a01b031681565b34801561061e57600080fd5b5061053261062d366004613e0b565b610f20565b34801561063e57600080fd5b5061045e61064d366004613ddf565b6110d7565b34801561065e57600080fd5b506004546104dd906001600160a01b031681565b34801561067e57600080fd5b506104af601f5481565b34801561069457600080fd5b506105326106a3366004613e0b565b61110d565b3480156106b457600080fd5b506104af6106c3366004613ebc565b611192565b3480156106d457600080fd5b506029546104dd906001600160a01b031681565b3480156106f457600080fd5b50600a5461045e90610100900460ff1681565b34801561071357600080fd5b5060295461045e90600160a81b900460ff1681565b34801561073457600080fd5b50610532610743366004613e95565b611227565b34801561075457600080fd5b50610532611265565b34801561076957600080fd5b50610532610778366004613e0b565b61135e565b34801561078957600080fd5b50610532610798366004613e0b565b61154c565b3480156107a957600080fd5b5061045e6107b8366004613e0b565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107e257600080fd5b50426104af565b3480156107f557600080fd5b506104af60255481565b34801561080b57600080fd5b506104af60245481565b34801561082157600080fd5b50610532610830366004613e0b565b611642565b34801561084157600080fd5b506002546104af565b34801561085657600080fd5b506104af610865366004613e0b565b6116b5565b34801561087657600080fd5b50610532611714565b34801561088b57600080fd5b5061045e611788565b3480156108a057600080fd5b506105326108af366004613eec565b6117ce565b3480156108c057600080fd5b5061045e6108cf366004613f1a565b611823565b3480156108e057600080fd5b5061045e6108ef36600461401e565b611a49565b34801561090057600080fd5b5061045e61090f366004613e0b565b601d6020526000908152604090205460ff1681565b34801561093057600080fd5b506104af601a5481565b34801561094657600080fd5b5061045e610955366004613e0b565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561097f57600080fd5b506000546001600160a01b03166104dd565b34801561099d57600080fd5b506105326109ac366004613e0b565b611e37565b3480156109bd57600080fd5b5060408051808201909152600481526354494e5560e01b6020820152610428565b3480156109ea57600080fd5b506105326109f9366004613eec565b611f43565b348015610a0a57600080fd5b506027546104af565b348015610a1f57600080fd5b50610532610a2e366004613e95565b611ffb565b348015610a3f57600080fd5b5061045e610a4e366004613ddf565b612039565b348015610a5f57600080fd5b506003546104dd906001600160a01b031681565b348015610a7f57600080fd5b5061045e610a8e366004613ddf565b612088565b348015610a9f57600080fd5b5061045e610aae366004613e0b565b60266020526000908152604090205460ff1681565b348015610acf57600080fd5b5060295461045e90600160b01b900460ff1681565b348015610af057600080fd5b50610532610aff3660046140e0565b612095565b348015610b1057600080fd5b506104af60185481565b348015610b2657600080fd5b506104af601b5481565b348015610b3c57600080fd5b50600a5461045e9060ff1681565b348015610b5657600080fd5b506104af60215481565b348015610b6c57600080fd5b506104af60175481565b348015610b8257600080fd5b506104af610b91366004613f1a565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610bc857600080fd5b5061045e61210c565b348015610bdd57600080fd5b50610532610bec366004613e0b565b612147565b348015610bfd57600080fd5b506104af601c5481565b348015610c1357600080fd5b506104af60165481565b348015610c2957600080fd5b50610532610c38366004613e0b565b6121c2565b348015610c4957600080fd5b506105326122ac565b6000610c5f338484612391565b5060015b92915050565b6000546001600160a01b03163314610c9c5760405162461bcd60e51b8152600401610c93906140fd565b60405180910390fd5b6019839055601a829055601b819055600f81610cb88486614148565b610cc29190614148565b1115610d105760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031352500006044820152606401610c93565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610d648484846124b5565b610db68433610db1856040518060600160405280602881526020016142f2602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612e3a565b612391565b5060019392505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610c93906140fd565b601683905560178290556018819055600a81610e068486614148565b610e109190614148565b1115610e5e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610c93565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610d4a565b6000600e54821115610f035760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c93565b6000610f0d612e74565b9050610f198382612e97565b9392505050565b6000546001600160a01b03163314610f4a5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000908152600c602052604090205460ff16610fb25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c93565b60005b600d548110156110d357816001600160a01b0316600d8281548110610fdc57610fdc614160565b6000918252602090912001546001600160a01b031614156110c157600d805461100790600190614176565b8154811061101757611017614160565b600091825260209091200154600d80546001600160a01b03909216918390811061104357611043614160565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d80548061109b5761109b61418d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110cb816141a3565b915050610fb5565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c5f918590610db19086612ed9565b6000546001600160a01b031633146111375760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda10000008311156111ee5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c93565b8161120d5760006111fe84612f38565b50939550610c63945050505050565b600061121884612f38565b50929550610c63945050505050565b6000546001600160a01b031633146112515760405162461bcd60e51b8152600401610c93906140fd565b61125f81633b9aca006141be565b60255550565b6000546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610c93906140fd565b600061129a306116b5565b90506112b1606469d3c21bcecceda10000006141dd565b8110156113265760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610c93565b61132e612f87565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611187565b6000546001600160a01b031633146113885760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000908152600c602052604090205460ff16156113f15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c93565b600d54603290611402906001614148565b111561148c5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c93565b6001600160a01b038116600090815260066020526040902054156114e6576001600160a01b0381166000908152600660205260409020546114cc90610e9c565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146115765760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166115da5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c93565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611187565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600c602052604081205460ff16156116f257506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610c6390610e9c565b6000546001600160a01b0316331461173e5760405162461bcd60e51b8152600401610c93906140fd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146117b35760405162461bcd60e51b8152600401610c93906140fd565b50600a80546023805460ff1916905561ffff19169055600190565b6000546001600160a01b031633146117f85760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600080546001600160a01b0316331461184e5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0383166118a45760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c93565b6001600160a01b0383163014156118fd5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c93565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197791906141ff565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190614218565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b600080546001600160a01b03163314611a745760405162461bcd60e51b8152600401610c93906140fd565b602954600160b01b900460ff1615611ae25760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c93565b60c8835110611b525760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c93565b60005b8351811015611bba576000848281518110611b7257611b72614160565b602002602001015190506000848381518110611b9057611b90614160565b60200260200101519050611ba53383836124b5565b50508080611bb2906141a3565b915050611b55565b50611bc36131da565b737a250d5630b4cf539739df2c5dacb4c659f2488d611be38160016117ce565b602880546001600160a01b0319166001600160a01b038316908117909155611c1790309069d3c21bcecceda1000000612391565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5057600080fd5b505afa158015611c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c889190614235565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cd057600080fd5b505afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d089190614235565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611d5057600080fd5b505af1158015611d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d889190614235565b602980546001600160a01b0319166001600160a01b03929092169182179055611db29060016117ce565b602954611dc9906001600160a01b0316600161322f565b60004711611e255760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c93565b610db6611e31306116b5565b4761328a565b6000546001600160a01b03163314611e615760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b038116611ec55760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c93565b600380546001600160a01b039081166000908152600b60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611187565b6000546001600160a01b03163314611f6d5760405162461bcd60e51b8152600401610c93906140fd565b6029546001600160a01b0383811691161415611ff15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c93565b6110d3828261322f565b6000546001600160a01b031633146120255760405162461bcd60e51b8152600401610c93906140fd565b61203381633b9aca006141be565b60245550565b6000610c5f3384610db18560405180606001604052806025815260200161431a602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612e3a565b6000610c5f3384846124b5565b6000546001600160a01b031633146120bf5760405162461bcd60e51b8152600401610c93906140fd565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061118790831515815260200190565b600080546001600160a01b031633146121375760405162461bcd60e51b8152600401610c93906140fd565b50600a805460ff19169055600190565b6000546001600160a01b031633146121715760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611187565b6000546001600160a01b031633146121ec5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166122515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c93565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122d65760405162461bcd60e51b8152600401610c93906140fd565b602954600160b01b900460ff16156123445760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610c93565b604051600090339047908381818185875af1925050503d8060008114612386576040519150601f19603f3d011682016040523d82523d6000602084013e61238b565b606091505b50505050565b6001600160a01b0383166123f35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c93565b6001600160a01b0382166124545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c93565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125195760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c93565b6001600160a01b03821661257b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c93565b600081116125dd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c93565b602954600160b01b900460ff16612679576001600160a01b0383166000908152600b602052604090205460ff168061262d57506001600160a01b0382166000908152600b602052604090205460ff165b6126795760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c93565b600a54610100900460ff1615612b14576000546001600160a01b038481169116148015906126b557506000546001600160a01b03838116911614155b80156126c957506001600160a01b03821615155b80156126e057506001600160a01b03821661dead14155b80156126f65750602954600160a01b900460ff16155b15612b14576000546001600160a01b0384811691161480159061272757506029546001600160a01b03838116911614155b80156127345750601c5443145b15612783576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff1680156127ad57506001600160a01b03831660009081526026602052604090205460ff165b156127fd576024543a11156127fd5760405162461bcd60e51b8152602060048201526016602482015275109bdd1d1959081858dd1a5bdb8819195d1958dd195960521b6044820152606401610c93565b60235460ff16801561282757506001600160a01b03821660009081526026602052604090205460ff165b15612877576025543a11156128775760405162461bcd60e51b8152602060048201526016602482015275109bdd1d1959081858dd1a5bdb8819195d1958dd195960521b6044820152606401610c93565b600a5460ff1615612988576000546001600160a01b038381169116148015906128ae57506028546001600160a01b03838116911614155b80156128c857506029546001600160a01b03838116911614155b15612988576001600160a01b038216600090815260096020526040902054431161296c5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c93565b6001600160a01b03821660009081526009602052604090204390555b6001600160a01b03831660009081526026602052604090205460ff1680156129c957506001600160a01b03821660009081526022602052604090205460ff16155b15612a5057602154816024546129df9190614148565b1115612a4b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c93565b612b14565b6001600160a01b03821660009081526026602052604090205460ff168015612a9157506001600160a01b03831660009081526022602052604090205460ff16155b15612b145760215481602554612aa79190614148565b1115612b145760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c93565b6000612b2d602054601f54612ed990919063ffffffff16565b90506000612b3a306116b5565b60275460295491925082101590600160a01b900460ff16158015612b675750602954600160a81b900460ff165b8015612b885750602954600090612b86906001600160a01b03166116b5565b115b8015612b945750600083115b8015612bb957506001600160a01b0385166000908152600b602052604090205460ff16155b8015612bde57506001600160a01b0386166000908152600b602052604090205460ff16155b8015612c0257506001600160a01b03851660009081526026602052604090205460ff165b8015612c0b5750805b15612c1857612c18612f87565b6001600160a01b0386166000908152600b602052604090205460019060ff1680612c5a57506001600160a01b0386166000908152600b602052604090205460ff165b15612c6c575060036015556000612e25565b6001600160a01b03871660009081526026602052604090205460ff1615612cb857612c9561334d565b601654601055601854601754612cab9190614148565b6013556001601555612e25565b6001600160a01b03861660009081526026602052604090205460ff1615612d5557612ce161334d565b601954601055601b54601a54612cf79190614148565b60135560026015556001600160a01b0387166000908152601d602052604090205460ff168015612d28575042601e54115b15612d5057601054612d3b9060056141be565b601055601354612d4c9060056141be565b6013555b612e25565b6001600160a01b0387166000908152601d602052604090205460ff161580612d7f575042601e5411155b612e175760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610c93565b612e1f61334d565b60036015555b612e318787878461337b565b50505050505050565b60008184841115612e5e5760405162461bcd60e51b8152600401610c939190613d72565b506000612e6b8486614176565b95945050505050565b6000806000612e816134a0565b9092509050612e908282612e97565b9250505090565b6000610f1983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613640565b600080612ee68385614148565b905083811015610f195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c93565b6000806000806000806000806000612f4f8a61366e565b9250925092506000806000612f6d8d8686612f68612e74565b6136b0565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b1790556000612fa5306116b5565b90506000602054601f54612fb99190614148565b90506000612fd36002601f54612e9790919063ffffffff16565b90506000612fe18483613700565b905047612fed82613742565b6000612ff94783613700565b9050600061301c86613016602054856138ab90919063ffffffff16565b90612e97565b9050600061302a8383613700565b90506000600761303b8460026141be565b61304591906141dd565b90506130518184614176565b6000601f819055602081905560035460405192955090916001600160a01b039091169085908381818185875af1925050503d80600081146130ae576040519150601f19603f3d011682016040523d82523d6000602084013e6130b3565b606091505b50506004546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114613103576040519150601f19603f3d011682016040523d82523d6000602084013e613108565b606091505b505080915050613118888461328a565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a00004711156131c1576003546040516001600160a01b03909116904790600081818185875af1925050503d80600081146131b6576040519150601f19603f3d011682016040523d82523d6000602084013e6131bb565b606091505b50909150505b50506029805460ff60a01b191690555050505050505050565b6000546001600160a01b031633146132045760405162461bcd60e51b8152600401610c93906140fd565b6029805461ffff60a81b191661010160a81b17905543601c5561322a426203f480614148565b601e55565b6001600160a01b038216600090815260266020908152604080832080548515801560ff199283168117909355602290945291909320805490911690921790915561327c5761327c8261135e565b806110d3576110d382610f20565b6028546132a29030906001600160a01b031684612391565b60285460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561330d57600080fd5b505af1158015613321573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133469190614252565b5050505050565b60105415801561335d5750601354155b1561336457565b601080546011556013805460145560009182905555565b806133885761338861334d565b6001600160a01b0384166000908152600c602052604090205460ff1680156133c957506001600160a01b0383166000908152600c602052604090205460ff16155b156133de576133d984848461392a565b61348a565b6001600160a01b0384166000908152600c602052604090205460ff1615801561341f57506001600160a01b0383166000908152600c602052604090205460ff165b1561342f576133d9848484613a50565b6001600160a01b0384166000908152600c602052604090205460ff16801561346f57506001600160a01b0383166000908152600c602052604090205460ff165b1561347f576133d9848484613af9565b61348a848484613b6c565b8061238b5761238b601154601055601454601355565b600e54600090819069d3c21bcecceda1000000825b600d54811015613601578260066000600d84815481106134d7576134d7614160565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061354257508160076000600d848154811061351b5761351b614160565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561355f575050600e549369d3c21bcecceda10000009350915050565b6135a560066000600d848154811061357957613579614160565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613700565b92506135ed60076000600d84815481106135c1576135c1614160565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613700565b9150806135f9816141a3565b9150506134b5565b50600e546136199069d3c21bcecceda1000000612e97565b821015613637575050600e549269d3c21bcecceda100000092509050565b90939092509050565b600081836136615760405162461bcd60e51b8152600401610c939190613d72565b506000612e6b84866141dd565b60008060008061367d85613bb0565b9050600061368a86613bcc565b905060006136a28261369c8986613700565b90613700565b979296509094509092505050565b60008080806136bf88866138ab565b905060006136cd88876138ab565b905060006136db88886138ab565b905060006136ed8261369c8686613700565b939b939a50919850919650505050505050565b6000610f1983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e3a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061377757613777614160565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138039190614235565b8160018151811061381657613816614160565b6001600160a01b03928316602091820292909201015260285461383c9130911684612391565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790613875908590600090869030904290600401614280565b600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b505050505050565b6000826138ba57506000610c63565b60006138c683856141be565b9050826138d385836141dd565b14610f195760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c93565b60008060008060008061393c87612f38565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061396e9088613700565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461399d9087613700565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546139cc9086612ed9565b6001600160a01b0389166000908152600660205260409020556139ee81613be8565b6139f88483613d4e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a3d91815260200190565b60405180910390a3505050505050505050565b600080600080600080613a6287612f38565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613a949087613700565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054613aca9084612ed9565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546139cc9086612ed9565b600080600080600080613b0b87612f38565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613b3d9088613700565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613a949087613700565b600080600080600080613b7e87612f38565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061399d9087613700565b6000610c636064613016601054856138ab90919063ffffffff16565b6000610c636064613016601354856138ab90919063ffffffff16565b60016015541415613c5957601354601754613c0390836141be565b613c0d91906141dd565b601f6000828254613c1e9190614148565b9091555050601354601854613c3390836141be565b613c3d91906141dd565b60206000828254613c4e9190614148565b90915550613cc59050565b60026015541415613cc557601354601a54613c7490836141be565b613c7e91906141dd565b601f6000828254613c8f9190614148565b9091555050601354601b54613ca490836141be565b613cae91906141dd565b60206000828254613cbf9190614148565b90915550505b6000613ccf612e74565b90506000613cdd83836138ab565b30600090815260066020526040902054909150613cfa9082612ed9565b30600090815260066020908152604080832093909355600c9052205460ff1615613d495730600090815260076020526040902054613d389084612ed9565b306000908152600760205260409020555b505050565b600e54613d5b9083613700565b600e55600f54613d6b9082612ed9565b600f555050565b600060208083528351808285015260005b81811015613d9f57858101830151858201604001528201613d83565b81811115613db1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613ddc57600080fd5b50565b60008060408385031215613df257600080fd5b8235613dfd81613dc7565b946020939093013593505050565b600060208284031215613e1d57600080fd5b8135610f1981613dc7565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613dc7565b92506020840135613e8481613dc7565b929592945050506040919091013590565b600060208284031215613ea757600080fd5b5035919050565b8015158114613ddc57600080fd5b60008060408385031215613ecf57600080fd5b823591506020830135613ee181613eae565b809150509250929050565b60008060408385031215613eff57600080fd5b8235613f0a81613dc7565b91506020830135613ee181613eae565b60008060408385031215613f2d57600080fd5b8235613f3881613dc7565b91506020830135613ee181613dc7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613f8757613f87613f48565b604052919050565b600067ffffffffffffffff821115613fa957613fa9613f48565b5060051b60200190565b600082601f830112613fc457600080fd5b81356020613fd9613fd483613f8f565b613f5e565b82815260059290921b84018101918181019086841115613ff857600080fd5b8286015b848110156140135780358352918301918301613ffc565b509695505050505050565b6000806040838503121561403157600080fd5b823567ffffffffffffffff8082111561404957600080fd5b818501915085601f83011261405d57600080fd5b8135602061406d613fd483613f8f565b82815260059290921b8401810191818101908984111561408c57600080fd5b948201945b838610156140b35785356140a481613dc7565b82529482019490820190614091565b965050860135925050808211156140c957600080fd5b506140d685828601613fb3565b9150509250929050565b6000602082840312156140f257600080fd5b8135610f1981613eae565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561415b5761415b614132565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561418857614188614132565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156141b7576141b7614132565b5060010190565b60008160001904831182151516156141d8576141d8614132565b500290565b6000826141fa57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561421157600080fd5b5051919050565b60006020828403121561422a57600080fd5b8151610f1981613eae565b60006020828403121561424757600080fd5b8151610f1981613dc7565b60008060006060848603121561426757600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156142d05784516001600160a01b0316835293830193918301916001016142ab565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ea3ed56aeeeaa3acd98bda71e8b64c1f5b052a12f459bc9a7bf64fc92413ba564736f6c63430008090033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103e85760003560e01c8063602bc62b11610208578063a5ece94111610118578063c8c8ebe4116100ab578063ea2f0b371161007a578063ea2f0b3714610bd1578063ee40166e14610bf1578063efcc52de14610c07578063f2fde38b14610c1d578063f5648a4f14610c3d57600080fd5b8063c8c8ebe414610b4a578063dc44b6a014610b60578063dd62ed3e14610b76578063e884f26014610bbc57600080fd5b8063c49b9a80116100e7578063c49b9a8014610ae4578063c5d2418914610b04578063c860795214610b1a578063c876d0b914610b3057600080fd5b8063a5ece94114610a53578063a9059cbb14610a73578063b62496f514610a93578063bbc0c74214610ac357600080fd5b806388790a681161019b57806395d89b411161016a57806395d89b41146109b15780639a7a23d6146109de578063a073d37f146109fe578063a09bd45614610a13578063a457c2d714610a3357600080fd5b806388790a681461092457806388f820201461093a5780638da5cb5b14610973578063906e9dd01461099157600080fd5b80637571336a116101d75780637571336a146108945780638366e79a146108b457806383791758146108d457806385ecfd28146108f457600080fd5b8063602bc62b1461083557806370a082311461084a578063715018a61461086a578063751039fc1461087f57600080fd5b806339509351116103035780634c70f13f116102965780635342acb4116102655780635342acb41461079d578063557ed1ba146107d65780635913ab05146107e95780635b45a01e146107ff5780635bb988c91461081557600080fd5b80634c70f13f1461072857806351f205e41461074857806352390c021461075d578063525fa81f1461077d57600080fd5b80634549b039116102d25780634549b039146106a857806349bd5a5e146106c85780634a62bb65146106e85780634a74bb021461070757600080fd5b806339509351146106325780633ad10ef6146106525780634047ea3e14610672578063437823ec1461068857600080fd5b8063200a692d1161037b5780632d8381191161034a5780632d838119146105b6578063313ce567146105d65780633221c93f146105f25780633685d4191461061257600080fd5b8063200a692d1461054a57806323b872dd1461056057806324171f321461058057806325519cf21461059657600080fd5b80631694505e116103b75780631694505e146104bd57806318160ddd146104f55780631d865c30146105125780631fc851bd1461053457600080fd5b806306fdde03146103f4578063095ea7b31461043e57806310d5de531461046e57806313114a9d1461049e57600080fd5b366103ef57005b600080fd5b34801561040057600080fd5b5060408051808201909152600f81526e5465616d20526f636b657420496e7560881b60208201525b6040516104359190613d72565b60405180910390f35b34801561044a57600080fd5b5061045e610459366004613ddf565b610c52565b6040519015158152602001610435565b34801561047a57600080fd5b5061045e610489366004613e0b565b60226020526000908152604090205460ff1681565b3480156104aa57600080fd5b50600f545b604051908152602001610435565b3480156104c957600080fd5b506028546104dd906001600160a01b031681565b6040516001600160a01b039091168152602001610435565b34801561050157600080fd5b5069d3c21bcecceda10000006104af565b34801561051e57600080fd5b5061053261052d366004613e28565b610c69565b005b34801561054057600080fd5b506104af601e5481565b34801561055657600080fd5b506104af60195481565b34801561056c57600080fd5b5061045e61057b366004613e54565b610d57565b34801561058c57600080fd5b506104af60205481565b3480156105a257600080fd5b506105326105b1366004613e28565b610dc0565b3480156105c257600080fd5b506104af6105d1366004613e95565b610e9c565b3480156105e257600080fd5b5060405160098152602001610435565b3480156105fe57600080fd5b506005546104dd906001600160a01b031681565b34801561061e57600080fd5b5061053261062d366004613e0b565b610f20565b34801561063e57600080fd5b5061045e61064d366004613ddf565b6110d7565b34801561065e57600080fd5b506004546104dd906001600160a01b031681565b34801561067e57600080fd5b506104af601f5481565b34801561069457600080fd5b506105326106a3366004613e0b565b61110d565b3480156106b457600080fd5b506104af6106c3366004613ebc565b611192565b3480156106d457600080fd5b506029546104dd906001600160a01b031681565b3480156106f457600080fd5b50600a5461045e90610100900460ff1681565b34801561071357600080fd5b5060295461045e90600160a81b900460ff1681565b34801561073457600080fd5b50610532610743366004613e95565b611227565b34801561075457600080fd5b50610532611265565b34801561076957600080fd5b50610532610778366004613e0b565b61135e565b34801561078957600080fd5b50610532610798366004613e0b565b61154c565b3480156107a957600080fd5b5061045e6107b8366004613e0b565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107e257600080fd5b50426104af565b3480156107f557600080fd5b506104af60255481565b34801561080b57600080fd5b506104af60245481565b34801561082157600080fd5b50610532610830366004613e0b565b611642565b34801561084157600080fd5b506002546104af565b34801561085657600080fd5b506104af610865366004613e0b565b6116b5565b34801561087657600080fd5b50610532611714565b34801561088b57600080fd5b5061045e611788565b3480156108a057600080fd5b506105326108af366004613eec565b6117ce565b3480156108c057600080fd5b5061045e6108cf366004613f1a565b611823565b3480156108e057600080fd5b5061045e6108ef36600461401e565b611a49565b34801561090057600080fd5b5061045e61090f366004613e0b565b601d6020526000908152604090205460ff1681565b34801561093057600080fd5b506104af601a5481565b34801561094657600080fd5b5061045e610955366004613e0b565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561097f57600080fd5b506000546001600160a01b03166104dd565b34801561099d57600080fd5b506105326109ac366004613e0b565b611e37565b3480156109bd57600080fd5b5060408051808201909152600481526354494e5560e01b6020820152610428565b3480156109ea57600080fd5b506105326109f9366004613eec565b611f43565b348015610a0a57600080fd5b506027546104af565b348015610a1f57600080fd5b50610532610a2e366004613e95565b611ffb565b348015610a3f57600080fd5b5061045e610a4e366004613ddf565b612039565b348015610a5f57600080fd5b506003546104dd906001600160a01b031681565b348015610a7f57600080fd5b5061045e610a8e366004613ddf565b612088565b348015610a9f57600080fd5b5061045e610aae366004613e0b565b60266020526000908152604090205460ff1681565b348015610acf57600080fd5b5060295461045e90600160b01b900460ff1681565b348015610af057600080fd5b50610532610aff3660046140e0565b612095565b348015610b1057600080fd5b506104af60185481565b348015610b2657600080fd5b506104af601b5481565b348015610b3c57600080fd5b50600a5461045e9060ff1681565b348015610b5657600080fd5b506104af60215481565b348015610b6c57600080fd5b506104af60175481565b348015610b8257600080fd5b506104af610b91366004613f1a565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b348015610bc857600080fd5b5061045e61210c565b348015610bdd57600080fd5b50610532610bec366004613e0b565b612147565b348015610bfd57600080fd5b506104af601c5481565b348015610c1357600080fd5b506104af60165481565b348015610c2957600080fd5b50610532610c38366004613e0b565b6121c2565b348015610c4957600080fd5b506105326122ac565b6000610c5f338484612391565b5060015b92915050565b6000546001600160a01b03163314610c9c5760405162461bcd60e51b8152600401610c93906140fd565b60405180910390fd5b6019839055601a829055601b819055600f81610cb88486614148565b610cc29190614148565b1115610d105760405162461bcd60e51b815260206004820152601e60248201527f4d757374206b6565702073656c6c2074617865732062656c6f772031352500006044820152606401610c93565b60408051828152602081018490529081018490527f5ff33e060dbf96ff8c11eeadaaa320b34884dc8af8156d77ab6134d2bece22c3906060015b60405180910390a1505050565b6000610d648484846124b5565b610db68433610db1856040518060600160405280602881526020016142f2602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190612e3a565b612391565b5060019392505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610c93906140fd565b601683905560178290556018819055600a81610e068486614148565b610e109190614148565b1115610e5e5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206275792074617865732062656c6f77203130250000006044820152606401610c93565b60408051828152602081018490529081018490527f4b44023290188702187818a2359a9d40279e516e5e9bbade40c321936a77362090606001610d4a565b6000600e54821115610f035760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c93565b6000610f0d612e74565b9050610f198382612e97565b9392505050565b6000546001600160a01b03163314610f4a5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000908152600c602052604090205460ff16610fb25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c93565b60005b600d548110156110d357816001600160a01b0316600d8281548110610fdc57610fdc614160565b6000918252602090912001546001600160a01b031614156110c157600d805461100790600190614176565b8154811061101757611017614160565b600091825260209091200154600d80546001600160a01b03909216918390811061104357611043614160565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600782526040808220829055600c90925220805460ff19169055600d80548061109b5761109b61418d565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806110cb816141a3565b915050610fb5565b5050565b3360008181526008602090815260408083206001600160a01b03871684529091528120549091610c5f918590610db19086612ed9565b6000546001600160a01b031633146111375760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b600069d3c21bcecceda10000008311156111ee5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c93565b8161120d5760006111fe84612f38565b50939550610c63945050505050565b600061121884612f38565b50929550610c63945050505050565b6000546001600160a01b031633146112515760405162461bcd60e51b8152600401610c93906140fd565b61125f81633b9aca006141be565b60255550565b6000546001600160a01b0316331461128f5760405162461bcd60e51b8152600401610c93906140fd565b600061129a306116b5565b90506112b1606469d3c21bcecceda10000006141dd565b8110156113265760405162461bcd60e51b815260206004820152603e60248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e747261637400006064820152608401610c93565b61132e612f87565b6040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3290602001611187565b6000546001600160a01b031633146113885760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000908152600c602052604090205460ff16156113f15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c93565b600d54603290611402906001614148565b111561148c5760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c93565b6001600160a01b038116600090815260066020526040902054156114e6576001600160a01b0381166000908152600660205260409020546114cc90610e9c565b6001600160a01b0382166000908152600760205260409020555b6001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6000546001600160a01b031633146115765760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166115da5760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c93565b600580546001600160a01b0319166001600160a01b0383169081179091556000818152600b6020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101611187565b6000546001600160a01b0316331461166c5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000818152601d6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6001600160a01b0381166000908152600c602052604081205460ff16156116f257506001600160a01b031660009081526007602052604090205490565b6001600160a01b038216600090815260066020526040902054610c6390610e9c565b6000546001600160a01b0316331461173e5760405162461bcd60e51b8152600401610c93906140fd565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146117b35760405162461bcd60e51b8152600401610c93906140fd565b50600a80546023805460ff1916905561ffff19169055600190565b6000546001600160a01b031633146117f85760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b600080546001600160a01b0316331461184e5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0383166118a45760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c93565b6001600160a01b0383163014156118fd5760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c93565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561193f57600080fd5b505afa158015611953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197791906141ff565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b1580156119c557600080fd5b505af11580156119d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fd9190614218565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b600080546001600160a01b03163314611a745760405162461bcd60e51b8152600401610c93906140fd565b602954600160b01b900460ff1615611ae25760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610c93565b60c8835110611b525760405162461bcd60e51b815260206004820152603660248201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726044820152752074786e2064756520746f20676173206c696d69747360501b6064820152608401610c93565b60005b8351811015611bba576000848281518110611b7257611b72614160565b602002602001015190506000848381518110611b9057611b90614160565b60200260200101519050611ba53383836124b5565b50508080611bb2906141a3565b915050611b55565b50611bc36131da565b737a250d5630b4cf539739df2c5dacb4c659f2488d611be38160016117ce565b602880546001600160a01b0319166001600160a01b038316908117909155611c1790309069d3c21bcecceda1000000612391565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611c5057600080fd5b505afa158015611c64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c889190614235565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611cd057600080fd5b505afa158015611ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d089190614235565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611d5057600080fd5b505af1158015611d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d889190614235565b602980546001600160a01b0319166001600160a01b03929092169182179055611db29060016117ce565b602954611dc9906001600160a01b0316600161322f565b60004711611e255760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610c93565b610db6611e31306116b5565b4761328a565b6000546001600160a01b03163314611e615760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b038116611ec55760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c93565b600380546001600160a01b039081166000908152600b60209081526040808320805460ff1990811690915585546001600160a01b031916948716948517909555838352918290208054909416600117909355519081527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101611187565b6000546001600160a01b03163314611f6d5760405162461bcd60e51b8152600401610c93906140fd565b6029546001600160a01b0383811691161415611ff15760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c93565b6110d3828261322f565b6000546001600160a01b031633146120255760405162461bcd60e51b8152600401610c93906140fd565b61203381633b9aca006141be565b60245550565b6000610c5f3384610db18560405180606001604052806025815260200161431a602591393360009081526008602090815260408083206001600160a01b038d1684529091529020549190612e3a565b6000610c5f3384846124b5565b6000546001600160a01b031633146120bf5760405162461bcd60e51b8152600401610c93906140fd565b60298054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061118790831515815260200190565b600080546001600160a01b031633146121375760405162461bcd60e51b8152600401610c93906140fd565b50600a805460ff19169055600190565b6000546001600160a01b031633146121715760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166000818152600b6020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e9101611187565b6000546001600160a01b031633146121ec5760405162461bcd60e51b8152600401610c93906140fd565b6001600160a01b0381166122515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c93565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122d65760405162461bcd60e51b8152600401610c93906140fd565b602954600160b01b900460ff16156123445760405162461bcd60e51b815260206004820152602b60248201527f43616e206f6e6c792077697468647261772069662074726164696e672068617360448201526a1b89dd081cdd185c9d195960aa1b6064820152608401610c93565b604051600090339047908381818185875af1925050503d8060008114612386576040519150601f19603f3d011682016040523d82523d6000602084013e61238b565b606091505b50505050565b6001600160a01b0383166123f35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c93565b6001600160a01b0382166124545760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c93565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166125195760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c93565b6001600160a01b03821661257b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c93565b600081116125dd5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c93565b602954600160b01b900460ff16612679576001600160a01b0383166000908152600b602052604090205460ff168061262d57506001600160a01b0382166000908152600b602052604090205460ff165b6126795760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c93565b600a54610100900460ff1615612b14576000546001600160a01b038481169116148015906126b557506000546001600160a01b03838116911614155b80156126c957506001600160a01b03821615155b80156126e057506001600160a01b03821661dead14155b80156126f65750602954600160a01b900460ff16155b15612b14576000546001600160a01b0384811691161480159061272757506029546001600160a01b03838116911614155b80156127345750601c5443145b15612783576001600160a01b0382166000818152601d6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b60235460ff1680156127ad57506001600160a01b03831660009081526026602052604090205460ff165b156127fd576024543a11156127fd5760405162461bcd60e51b8152602060048201526016602482015275109bdd1d1959081858dd1a5bdb8819195d1958dd195960521b6044820152606401610c93565b60235460ff16801561282757506001600160a01b03821660009081526026602052604090205460ff165b15612877576025543a11156128775760405162461bcd60e51b8152602060048201526016602482015275109bdd1d1959081858dd1a5bdb8819195d1958dd195960521b6044820152606401610c93565b600a5460ff1615612988576000546001600160a01b038381169116148015906128ae57506028546001600160a01b03838116911614155b80156128c857506029546001600160a01b03838116911614155b15612988576001600160a01b038216600090815260096020526040902054431161296c5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610c93565b6001600160a01b03821660009081526009602052604090204390555b6001600160a01b03831660009081526026602052604090205460ff1680156129c957506001600160a01b03821660009081526022602052604090205460ff16155b15612a5057602154816024546129df9190614148565b1115612a4b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c93565b612b14565b6001600160a01b03821660009081526026602052604090205460ff168015612a9157506001600160a01b03831660009081526022602052604090205460ff16155b15612b145760215481602554612aa79190614148565b1115612b145760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610c93565b6000612b2d602054601f54612ed990919063ffffffff16565b90506000612b3a306116b5565b60275460295491925082101590600160a01b900460ff16158015612b675750602954600160a81b900460ff165b8015612b885750602954600090612b86906001600160a01b03166116b5565b115b8015612b945750600083115b8015612bb957506001600160a01b0385166000908152600b602052604090205460ff16155b8015612bde57506001600160a01b0386166000908152600b602052604090205460ff16155b8015612c0257506001600160a01b03851660009081526026602052604090205460ff165b8015612c0b5750805b15612c1857612c18612f87565b6001600160a01b0386166000908152600b602052604090205460019060ff1680612c5a57506001600160a01b0386166000908152600b602052604090205460ff165b15612c6c575060036015556000612e25565b6001600160a01b03871660009081526026602052604090205460ff1615612cb857612c9561334d565b601654601055601854601754612cab9190614148565b6013556001601555612e25565b6001600160a01b03861660009081526026602052604090205460ff1615612d5557612ce161334d565b601954601055601b54601a54612cf79190614148565b60135560026015556001600160a01b0387166000908152601d602052604090205460ff168015612d28575042601e54115b15612d5057601054612d3b9060056141be565b601055601354612d4c9060056141be565b6013555b612e25565b6001600160a01b0387166000908152601d602052604090205460ff161580612d7f575042601e5411155b612e175760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610c93565b612e1f61334d565b60036015555b612e318787878461337b565b50505050505050565b60008184841115612e5e5760405162461bcd60e51b8152600401610c939190613d72565b506000612e6b8486614176565b95945050505050565b6000806000612e816134a0565b9092509050612e908282612e97565b9250505090565b6000610f1983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613640565b600080612ee68385614148565b905083811015610f195760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c93565b6000806000806000806000806000612f4f8a61366e565b9250925092506000806000612f6d8d8686612f68612e74565b6136b0565b919f909e50909c50959a5093985091965092945050505050565b6029805460ff60a01b1916600160a01b1790556000612fa5306116b5565b90506000602054601f54612fb99190614148565b90506000612fd36002601f54612e9790919063ffffffff16565b90506000612fe18483613700565b905047612fed82613742565b6000612ff94783613700565b9050600061301c86613016602054856138ab90919063ffffffff16565b90612e97565b9050600061302a8383613700565b90506000600761303b8460026141be565b61304591906141dd565b90506130518184614176565b6000601f819055602081905560035460405192955090916001600160a01b039091169085908381818185875af1925050503d80600081146130ae576040519150601f19603f3d011682016040523d82523d6000602084013e6130b3565b606091505b50506004546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114613103576040519150601f19603f3d011682016040523d82523d6000602084013e613108565b606091505b505080915050613118888461328a565b60408051888152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a00004711156131c1576003546040516001600160a01b03909116904790600081818185875af1925050503d80600081146131b6576040519150601f19603f3d011682016040523d82523d6000602084013e6131bb565b606091505b50909150505b50506029805460ff60a01b191690555050505050505050565b6000546001600160a01b031633146132045760405162461bcd60e51b8152600401610c93906140fd565b6029805461ffff60a81b191661010160a81b17905543601c5561322a426203f480614148565b601e55565b6001600160a01b038216600090815260266020908152604080832080548515801560ff199283168117909355602290945291909320805490911690921790915561327c5761327c8261135e565b806110d3576110d382610f20565b6028546132a29030906001600160a01b031684612391565b60285460055460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b15801561330d57600080fd5b505af1158015613321573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133469190614252565b5050505050565b60105415801561335d5750601354155b1561336457565b601080546011556013805460145560009182905555565b806133885761338861334d565b6001600160a01b0384166000908152600c602052604090205460ff1680156133c957506001600160a01b0383166000908152600c602052604090205460ff16155b156133de576133d984848461392a565b61348a565b6001600160a01b0384166000908152600c602052604090205460ff1615801561341f57506001600160a01b0383166000908152600c602052604090205460ff165b1561342f576133d9848484613a50565b6001600160a01b0384166000908152600c602052604090205460ff16801561346f57506001600160a01b0383166000908152600c602052604090205460ff165b1561347f576133d9848484613af9565b61348a848484613b6c565b8061238b5761238b601154601055601454601355565b600e54600090819069d3c21bcecceda1000000825b600d54811015613601578260066000600d84815481106134d7576134d7614160565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061354257508160076000600d848154811061351b5761351b614160565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561355f575050600e549369d3c21bcecceda10000009350915050565b6135a560066000600d848154811061357957613579614160565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490613700565b92506135ed60076000600d84815481106135c1576135c1614160565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390613700565b9150806135f9816141a3565b9150506134b5565b50600e546136199069d3c21bcecceda1000000612e97565b821015613637575050600e549269d3c21bcecceda100000092509050565b90939092509050565b600081836136615760405162461bcd60e51b8152600401610c939190613d72565b506000612e6b84866141dd565b60008060008061367d85613bb0565b9050600061368a86613bcc565b905060006136a28261369c8986613700565b90613700565b979296509094509092505050565b60008080806136bf88866138ab565b905060006136cd88876138ab565b905060006136db88886138ab565b905060006136ed8261369c8686613700565b939b939a50919850919650505050505050565b6000610f1983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612e3a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061377757613777614160565b6001600160a01b03928316602091820292909201810191909152602854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138039190614235565b8160018151811061381657613816614160565b6001600160a01b03928316602091820292909201015260285461383c9130911684612391565b60285460405163791ac94760e01b81526001600160a01b039091169063791ac94790613875908590600090869030904290600401614280565b600060405180830381600087803b15801561388f57600080fd5b505af11580156138a3573d6000803e3d6000fd5b505050505050565b6000826138ba57506000610c63565b60006138c683856141be565b9050826138d385836141dd565b14610f195760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c93565b60008060008060008061393c87612f38565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061396e9088613700565b6001600160a01b038a1660009081526007602090815260408083209390935560069052205461399d9087613700565b6001600160a01b03808b1660009081526006602052604080822093909355908a16815220546139cc9086612ed9565b6001600160a01b0389166000908152600660205260409020556139ee81613be8565b6139f88483613d4e565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a3d91815260200190565b60405180910390a3505050505050505050565b600080600080600080613a6287612f38565b6001600160a01b038f16600090815260066020526040902054959b50939950919750955093509150613a949087613700565b6001600160a01b03808b16600090815260066020908152604080832094909455918b16815260079091522054613aca9084612ed9565b6001600160a01b0389166000908152600760209081526040808320939093556006905220546139cc9086612ed9565b600080600080600080613b0b87612f38565b6001600160a01b038f16600090815260076020526040902054959b50939950919750955093509150613b3d9088613700565b6001600160a01b038a16600090815260076020908152604080832093909355600690522054613a949087613700565b600080600080600080613b7e87612f38565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061399d9087613700565b6000610c636064613016601054856138ab90919063ffffffff16565b6000610c636064613016601354856138ab90919063ffffffff16565b60016015541415613c5957601354601754613c0390836141be565b613c0d91906141dd565b601f6000828254613c1e9190614148565b9091555050601354601854613c3390836141be565b613c3d91906141dd565b60206000828254613c4e9190614148565b90915550613cc59050565b60026015541415613cc557601354601a54613c7490836141be565b613c7e91906141dd565b601f6000828254613c8f9190614148565b9091555050601354601b54613ca490836141be565b613cae91906141dd565b60206000828254613cbf9190614148565b90915550505b6000613ccf612e74565b90506000613cdd83836138ab565b30600090815260066020526040902054909150613cfa9082612ed9565b30600090815260066020908152604080832093909355600c9052205460ff1615613d495730600090815260076020526040902054613d389084612ed9565b306000908152600760205260409020555b505050565b600e54613d5b9083613700565b600e55600f54613d6b9082612ed9565b600f555050565b600060208083528351808285015260005b81811015613d9f57858101830151858201604001528201613d83565b81811115613db1576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114613ddc57600080fd5b50565b60008060408385031215613df257600080fd5b8235613dfd81613dc7565b946020939093013593505050565b600060208284031215613e1d57600080fd5b8135610f1981613dc7565b600080600060608486031215613e3d57600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215613e6957600080fd5b8335613e7481613dc7565b92506020840135613e8481613dc7565b929592945050506040919091013590565b600060208284031215613ea757600080fd5b5035919050565b8015158114613ddc57600080fd5b60008060408385031215613ecf57600080fd5b823591506020830135613ee181613eae565b809150509250929050565b60008060408385031215613eff57600080fd5b8235613f0a81613dc7565b91506020830135613ee181613eae565b60008060408385031215613f2d57600080fd5b8235613f3881613dc7565b91506020830135613ee181613dc7565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613f8757613f87613f48565b604052919050565b600067ffffffffffffffff821115613fa957613fa9613f48565b5060051b60200190565b600082601f830112613fc457600080fd5b81356020613fd9613fd483613f8f565b613f5e565b82815260059290921b84018101918181019086841115613ff857600080fd5b8286015b848110156140135780358352918301918301613ffc565b509695505050505050565b6000806040838503121561403157600080fd5b823567ffffffffffffffff8082111561404957600080fd5b818501915085601f83011261405d57600080fd5b8135602061406d613fd483613f8f565b82815260059290921b8401810191818101908984111561408c57600080fd5b948201945b838610156140b35785356140a481613dc7565b82529482019490820190614091565b965050860135925050808211156140c957600080fd5b506140d685828601613fb3565b9150509250929050565b6000602082840312156140f257600080fd5b8135610f1981613eae565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561415b5761415b614132565b500190565b634e487b7160e01b600052603260045260246000fd5b60008282101561418857614188614132565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156141b7576141b7614132565b5060010190565b60008160001904831182151516156141d8576141d8614132565b500290565b6000826141fa57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561421157600080fd5b5051919050565b60006020828403121561422a57600080fd5b8151610f1981613eae565b60006020828403121561424757600080fd5b8151610f1981613dc7565b60008060006060848603121561426757600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156142d05784516001600160a01b0316835293830193918301916001016142ab565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205ea3ed56aeeeaa3acd98bda71e8b64c1f5b052a12f459bc9a7bf64fc92413ba564736f6c63430008090033

Deployed Bytecode Sourcemap

16438:31412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21556:85;;;;;;;;;;-1:-1:-1;21628:5:0;;;;;;;;;;;;-1:-1:-1;;;21628:5:0;;;;21556:85;;;;;;;:::i;:::-;;;;;;;;22553:193;;;;;;;;;;-1:-1:-1;22553:193:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;22553:193:0;1072:187:1;18529:64:0;;;;;;;;;;-1:-1:-1;18529:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24092:89;;;;;;;;;;-1:-1:-1;24163:10:0;;24092:89;;;1662:25:1;;;1650:2;1635:18;24092:89:0;1516:177:1;18877:41:0;;;;;;;;;;-1:-1:-1;18877:41:0;;;;-1:-1:-1;;;;;18877:41:0;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;18877:41:0;1698:230:1;21839:97:0;;;;;;;;;;-1:-1:-1;17355:14:0;21839:97;;45665:456;;;;;;;;;;-1:-1:-1;45665:456:0;;;;;:::i;:::-;;:::i;:::-;;18347:33;;;;;;;;;;;;;;;;18124:30;;;;;;;;;;;;;;;;22754:448;;;;;;;;;;-1:-1:-1;22754:448:0;;;;;:::i;:::-;;:::i;18437:37::-;;;;;;;;;;;;;;;;45219:438;;;;;;;;;;-1:-1:-1;45219:438:0;;;;;:::i;:::-;;:::i;27841:322::-;;;;;;;;;;-1:-1:-1;27841:322:0;;;;;:::i;:::-;;:::i;21746:85::-;;;;;;;;;;-1:-1:-1;21746:85:0;;17605:1;3042:36:1;;3030:2;3015:18;21746:85:0;2900:184:1;16669:39:0;;;;;;;;;;-1:-1:-1;16669:39:0;;;;-1:-1:-1;;;;;16669:39:0;;;28638:471;;;;;;;;;;-1:-1:-1;28638:471:0;;;;;:::i;:::-;;:::i;23210:302::-;;;;;;;;;;-1:-1:-1;23210:302:0;;;;;:::i;:::-;;:::i;16619:33::-;;;;;;;;;;-1:-1:-1;16619:33:0;;;;-1:-1:-1;;;;;16619:33:0;;;18393:37;;;;;;;;;;;;;;;;44902:152;;;;;;;;;;-1:-1:-1;44902:152:0;;;;;:::i;:::-;;:::i;27352:481::-;;;;;;;;;;-1:-1:-1;27352:481:0;;;;;:::i;:::-;;:::i;18925:28::-;;;;;;;;;;-1:-1:-1;18925:28:0;;;;-1:-1:-1;;;;;18925:28:0;;;17078:33;;;;;;;;;;-1:-1:-1;17078:33:0;;;;;;;;;;;18990:41;;;;;;;;;;-1:-1:-1;18990:41:0;;;;-1:-1:-1;;;18990:41:0;;;;;;27191:153;;;;;;;;;;-1:-1:-1;27191:153:0;;;;;:::i;:::-;;:::i;35665:304::-;;;;;;;;;;;;;:::i;28171:459::-;;;;;;;;;;-1:-1:-1;28171:459:0;;;;;:::i;:::-;;:::i;46541:341::-;;;;;;;;;;-1:-1:-1;46541:341:0;;;;;:::i;:::-;;:::i;44607:126::-;;;;;;;;;;-1:-1:-1;44607:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44698:27:0;44674:4;44698:27;;;:18;:27;;;;;;;;;44607:126;7140:90;;;;;;;;;;-1:-1:-1;7207:15:0;7140:90;;18702:47;;;;;;;;;;;;;;;;18649:46;;;;;;;;;;;;;;;;44746:148;;;;;;;;;;-1:-1:-1;44746:148:0;;;;;:::i;:::-;;:::i;7042:90::-;;;;;;;;;;-1:-1:-1;7115:9:0;;7042:90;;21944:198;;;;;;;;;;-1:-1:-1;21944:198:0;;;;;:::i;:::-;;:::i;6597:148::-;;;;;;;;;;;;;:::i;24253:192::-;;;;;;;;;;;;;:::i;24634:144::-;;;;;;;;;;-1:-1:-1;24634:144:0;;;;;:::i;:::-;;:::i;47106:488::-;;;;;;;;;;-1:-1:-1;47106:488:0;;;;;:::i;:::-;;:::i;25072:1274::-;;;;;;;;;;-1:-1:-1;25072:1274:0;;;;;:::i;:::-;;:::i;18297:43::-;;;;;;;;;;-1:-1:-1;18297:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18161:36;;;;;;;;;;;;;;;;23930:154;;;;;;;;;;-1:-1:-1;23930:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24056:20:0;24027:4;24056:20;;;:11;:20;;;;;;;;;23930:154;6383:79;;;;;;;;;;-1:-1:-1;6421:7:0;6448:6;-1:-1:-1;;;;;6448:6:0;6383:79;;46131:398;;;;;;;;;;-1:-1:-1;46131:398:0;;;;;:::i;:::-;;:::i;21649:89::-;;;;;;;;;;-1:-1:-1;21723:7:0;;;;;;;;;;;;-1:-1:-1;;;21723:7:0;;;;21649:89;;26492:244;;;;;;;;;;-1:-1:-1;26492:244:0;;;;;:::i;:::-;;:::i;26358:122::-;;;;;;;;;;-1:-1:-1;26449:23:0;;26358:122;;27031:148;;;;;;;;;;-1:-1:-1;27031:148:0;;;;;:::i;:::-;;:::i;23520:402::-;;;;;;;;;;-1:-1:-1;23520:402:0;;;;;:::i;:::-;;:::i;16563:39::-;;;;;;;;;;-1:-1:-1;16563:39:0;;;;-1:-1:-1;;;;;16563:39:0;;;22150:201;;;;;;;;;;-1:-1:-1;22150:201:0;;;;;:::i;:::-;;:::i;18762:58::-;;;;;;;;;;-1:-1:-1;18762:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19038:33;;;;;;;;;;-1:-1:-1;19038:33:0;;;;-1:-1:-1;;;19038:33:0;;;;;;46890:171;;;;;;;;;;-1:-1:-1;46890:171:0;;;;;:::i;:::-;;:::i;18080:35::-;;;;;;;;;;;;;;;;18204:36;;;;;;;;;;;;;;;;17032:39;;;;;;;;;;-1:-1:-1;17032:39:0;;;;;;;;18487:35;;;;;;;;;;;;;;;;18038;;;;;;;;;;;;;;;;22359:186;;;;;;;;;;-1:-1:-1;22359:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;22510:18:0;;;22478:7;22510:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22359:186;24488:134;;;;;;;;;;;;;:::i;45062:149::-;;;;;;;;;;-1:-1:-1;45062:149:0;;;;;:::i;:::-;;:::i;18253:37::-;;;;;;;;;;;;;;;;18002:29;;;;;;;;;;;;;;;;6753:281;;;;;;;;;;-1:-1:-1;6753:281:0;;;;;:::i;:::-;;:::i;47606:241::-;;;;;;;;;;;;;:::i;22553:193::-;22655:4;22677:39;550:10;22700:7;22709:6;22677:8;:39::i;:::-;-1:-1:-1;22734:4:0;22553:193;;;;;:::o;45665:456::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;;;;;;;;;45810:11:::1;:24:::0;;;45845:17:::1;:36:::0;;;45892:17:::1;:36:::0;;;46002:2:::1;45912:16:::0;45947:31:::1;45865:16:::0;45824:10;45947:31:::1;:::i;:::-;:51;;;;:::i;:::-;:57;;45939:100;;;::::0;-1:-1:-1;;;45939:100:0;;8299:2:1;45939:100:0::1;::::0;::::1;8281:21:1::0;8338:2;8318:18;;;8311:30;8377:32;8357:18;;;8350:60;8427:18;;45939:100:0::1;8097:354:1::0;45939:100:0::1;46055:58;::::0;;8658:25:1;;;8714:2;8699:18;;8692:34;;;8742:18;;;8735:34;;;46055:58:0::1;::::0;8646:2:1;8631:18;46055:58:0::1;;;;;;;;45665:456:::0;;;:::o;22754:448::-;22888:4;22905:36;22915:6;22923:9;22934:6;22905:9;:36::i;:::-;22952:220;22975:6;550:10;23023:138;23079:6;23023:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23023:19:0;;;;;;:11;:19;;;;;;;;550:10;23023:33;;;;;;;;;;:37;:138::i;:::-;22952:8;:220::i;:::-;-1:-1:-1;23190:4:0;22754:448;;;;;:::o;45219:438::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;45360:10:::1;:22:::0;;;45393:16:::1;:34:::0;;;45438:16:::1;:34:::0;;;45543:2:::1;45457:15:::0;45491:29:::1;45412:15:::0;45373:9;45491:29:::1;:::i;:::-;:48;;;;:::i;:::-;:54;;45483:96;;;::::0;-1:-1:-1;;;45483:96:0;;8982:2:1;45483:96:0::1;::::0;::::1;8964:21:1::0;9021:2;9001:18;;;8994:30;9060:31;9040:18;;;9033:59;9109:18;;45483:96:0::1;8780:353:1::0;45483:96:0::1;45595:54;::::0;;8658:25:1;;;8714:2;8699:18;;8692:34;;;8742:18;;;8735:34;;;45595:54:0::1;::::0;8646:2:1;8631:18;45595:54:0::1;8456:319:1::0;27841:322:0;27935:7;27993;;27982;:18;;27960:110;;;;-1:-1:-1;;;27960:110:0;;9340:2:1;27960:110:0;;;9322:21:1;9379:2;9359:18;;;9352:30;9418:34;9398:18;;;9391:62;-1:-1:-1;;;9469:18:1;;;9462:40;9519:19;;27960:110:0;9138:406:1;27960:110:0;28081:19;28103:10;:8;:10::i;:::-;28081:32;-1:-1:-1;28131:24:0;:7;28081:32;28131:11;:24::i;:::-;28124:31;27841:322;-1:-1:-1;;;27841:322:0:o;28638:471::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28716:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28708:56;;;::::0;-1:-1:-1;;;28708:56:0;;9751:2:1;28708:56:0::1;::::0;::::1;9733:21:1::0;9790:2;9770:18;;;9763:30;9829:25;9809:18;;;9802:53;9872:18;;28708:56:0::1;9549:347:1::0;28708:56:0::1;28780:9;28775:327;28799:9;:16:::0;28795:20;::::1;28775:327;;;28857:7;-1:-1:-1::0;;;;;28841:23:0::1;:9;28851:1;28841:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;28841:12:0::1;:23;28837:254;;;28900:9;28910:16:::0;;:20:::1;::::0;28929:1:::1;::::0;28910:20:::1;:::i;:::-;28900:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;28885:9:::1;:12:::0;;-1:-1:-1;;;;;28900:31:0;;::::1;::::0;28895:1;;28885:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;28885:46:0::1;-1:-1:-1::0;;;;;28885:46:0;;::::1;;::::0;;28950:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;28989:11:::1;:20:::0;;;;:28;;-1:-1:-1;;28989:28:0::1;::::0;;29036:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;29036:15:0;;;;;-1:-1:-1;;;;;;29036:15:0::1;::::0;;;;;28775:327:::1;28638:471:::0;:::o;28837:254::-:1;28817:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28775:327;;;;28638:471:::0;:::o;23210:302::-;550:10;23327:4;23421:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23421:34:0;;;;;;;;;;23327:4;;23349:133;;23399:7;;23421:50;;23460:10;23421:38;:50::i;44902:152::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44973:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;44973:34:0::1;45003:4;44973:34;::::0;;45023:23;;1871:51:1;;;45023:23:0::1;::::0;1844:18:1;45023:23:0::1;;;;;;;;44902:152:::0;:::o;27352:481::-;27472:7;17355:14;27505:7;:18;;27497:62;;;;-1:-1:-1;;;27497:62:0;;10637:2:1;27497:62:0;;;10619:21:1;10676:2;10656:18;;;10649:30;10715:33;10695:18;;;10688:61;10766:18;;27497:62:0;10435:355:1;27497:62:0;27575:17;27570:256;;27610:15;27639:19;27650:7;27639:10;:19::i;:::-;-1:-1:-1;27609:49:0;;-1:-1:-1;27673:14:0;;-1:-1:-1;;;;;27673:14:0;27570:256;27723:23;27758:19;27769:7;27758:10;:19::i;:::-;-1:-1:-1;27720:57:0;;-1:-1:-1;27792:22:0;;-1:-1:-1;;;;;27792:22:0;27191:153;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;27318:18:::1;:9:::0;27330:6:::1;27318:18;:::i;:::-;27300:15;:36:::0;-1:-1:-1;27191:153:0:o;35665:304::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;35720:23:::1;35746:24;35764:4;35746:9;:24::i;:::-;35720:50:::0;-1:-1:-1;35808:13:0::1;35818:3;17355:14;35808:13;:::i;:::-;35789:15;:32;;35781:107;;;::::0;-1:-1:-1;;;35781:107:0;;11392:2:1;35781:107:0::1;::::0;::::1;11374:21:1::0;11431:2;11411:18;;;11404:30;11470:34;11450:18;;;11443:62;11541:32;11521:18;;;11514:60;11591:19;;35781:107:0::1;11190:426:1::0;35781:107:0::1;35899:10;:8;:10::i;:::-;35925:36;::::0;35945:15:::1;1662:25:1::0;;35925:36:0::1;::::0;1650:2:1;1635:18;35925:36:0::1;1516:177:1::0;28171:459:0;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28252:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;28251:21;28243:61;;;::::0;-1:-1:-1;;;28243:61:0;;11823:2:1;28243:61:0::1;::::0;::::1;11805:21:1::0;11862:2;11842:18;;;11835:30;11901:29;11881:18;;;11874:57;11948:18;;28243:61:0::1;11621:351:1::0;28243:61:0::1;28323:9;:16:::0;28347:2:::1;::::0;28323:20:::1;::::0;28342:1:::1;28323:20;:::i;:::-;:26;;28315:116;;;::::0;-1:-1:-1;;;28315:116:0;;12179:2:1;28315:116:0::1;::::0;::::1;12161:21:1::0;12218:2;12198:18;;;12191:30;12257:34;12237:18;;;12230:62;12328:34;12308:18;;;12301:62;-1:-1:-1;;;12379:19:1;;;12372:44;12433:19;;28315:116:0::1;11977:481:1::0;28315:116:0::1;-1:-1:-1::0;;;;;28446:16:0;::::1;28465:1;28446:16:::0;;;:7:::1;:16;::::0;;;;;:20;28442:109:::1;;-1:-1:-1::0;;;;;28522:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;28502:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;28483:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;28442:109:::1;-1:-1:-1::0;;;;;28561:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;28561:27:0::1;28584:4;28561:27:::0;;::::1;::::0;;;28599:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;28599:23:0::1;::::0;;::::1;::::0;;28171:459::o;46541:341::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46633:31:0;::::1;46625:81;;;::::0;-1:-1:-1;;;46625:81:0;;12665:2:1;46625:81:0::1;::::0;::::1;12647:21:1::0;12704:2;12684:18;;;12677:30;12743:34;12723:18;;;12716:62;-1:-1:-1;;;12794:18:1;;;12787:35;12839:19;;46625:81:0::1;12463:401:1::0;46625:81:0::1;46717:16;:45:::0;;-1:-1:-1;;;;;;46717:45:0::1;-1:-1:-1::0;;;;;46717:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;46773:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;46773:43:0::1;-1:-1:-1::0;46773:43:0::1;::::0;;46832:42;;1871:51:1;;;46832:42:0::1;::::0;1844:18:1;46832:42:0::1;1698:230:1::0;44746:148:0;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44820:20:0;::::1;44843:5;44820:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;44820:28:0::1;::::0;;44864:22;::::1;::::0;44843:5;44864:22:::1;44746:148:::0;:::o;21944:198::-;-1:-1:-1;;;;;22034:20:0;;22010:7;22034:20;;;:11;:20;;;;;;;;22030:49;;;-1:-1:-1;;;;;;22063:16:0;;;;;:7;:16;;;;;;;21944:198::o;22030:49::-;-1:-1:-1;;;;;22117:16:0;;;;;;:7;:16;;;;;;22097:37;;:19;:37::i;6597:148::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;6704:1:::1;6688:6:::0;;6667:40:::1;::::0;-1:-1:-1;;;;;6688:6:0;;::::1;::::0;6667:40:::1;::::0;6704:1;;6667:40:::1;6735:1;6718:19:::0;;-1:-1:-1;;;;;;6718:19:0::1;::::0;;6597:148::o;24253:192::-;24305:4;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;24321:14:0::1;:22:::0;;24354:14:::1;:22:::0;;-1:-1:-1;;24354:22:0::1;::::0;;-1:-1:-1;;24387:28:0;;;24321:14:::1;24253:192:::0;:::o;24634:144::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24724:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;24724:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24634:144::o;47106:488::-;47220:10;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47256:20:0;::::1;47248:59;;;::::0;-1:-1:-1;;;47248:59:0;;13071:2:1;47248:59:0::1;::::0;::::1;13053:21:1::0;13110:2;13090:18;;;13083:30;13149:28;13129:18;;;13122:56;13195:18;;47248:59:0::1;12869:350:1::0;47248:59:0::1;-1:-1:-1::0;;;;;47326:23:0;::::1;47344:4;47326:23;;47318:64;;;::::0;-1:-1:-1;;;47318:64:0;;13426:2:1;47318:64:0::1;::::0;::::1;13408:21:1::0;13465:2;13445:18;;;13438:30;13504;13484:18;;;13477:58;13552:18;;47318:64:0::1;13224:352:1::0;47318:64:0::1;47420:39;::::0;-1:-1:-1;;;47420:39:0;;47453:4:::1;47420:39;::::0;::::1;1871:51:1::0;47393:24:0::1;::::0;-1:-1:-1;;;;;47420:24:0;::::1;::::0;::::1;::::0;1844:18:1;;47420:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47478:46;::::0;-1:-1:-1;;;47478:46:0;;-1:-1:-1;;;;;13962:32:1;;;47478:46:0::1;::::0;::::1;13944:51:1::0;14011:18;;;14004:34;;;47393:66:0;;-1:-1:-1;47478:23:0;;::::1;::::0;::::1;::::0;13917:18:1;;47478:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47540;::::0;;-1:-1:-1;;;;;13962:32:1;;13944:51;;14026:2;14011:18;;14004:34;;;47470:54:0;;-1:-1:-1;47540:46:0::1;::::0;13917:18:1;47540:46:0::1;;;;;;;47237:357;47106:488:::0;;;;:::o;25072:1274::-;25175:4;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;25200:13:::1;::::0;-1:-1:-1;;;25200:13:0;::::1;;;25199:14;25191:70;;;::::0;-1:-1:-1;;;25191:70:0;;14501:2:1;25191:70:0::1;::::0;::::1;14483:21:1::0;14540:2;14520:18;;;14513:30;14579:34;14559:18;;;14552:62;-1:-1:-1;;;14630:18:1;;;14623:41;14681:19;;25191:70:0::1;14299:407:1::0;25191:70:0::1;25304:3;25280:14;:21;:27;25272:94;;;::::0;-1:-1:-1;;;25272:94:0;;14913:2:1;25272:94:0::1;::::0;::::1;14895:21:1::0;14952:2;14932:18;;;14925:30;14991:34;14971:18;;;14964:62;-1:-1:-1;;;15042:18:1;;;15035:52;15104:19;;25272:94:0::1;14711:418:1::0;25272:94:0::1;25382:9;25378:205;25401:14;:21;25397:1;:25;25378:205;;;25443:14;25460;25475:1;25460:17;;;;;;;;:::i;:::-;;;;;;;25443:34;;25492:14;25509:7;25517:1;25509:10;;;;;;;;:::i;:::-;;;;;;;25492:27;;25534:37;25544:10;25556:6;25564;25534:9;:37::i;:::-;25428:155;;25424:3;;;;;:::i;:::-;;;;25378:205;;;;25593:15;:13;:15::i;:::-;25676:42;25730:58;25676:42:::0;25783:4:::1;25730:25;:58::i;:::-;25799:15;:34:::0;;-1:-1:-1;;;;;;25799:34:0::1;-1:-1:-1::0;;;;;25799:34:0;::::1;::::0;;::::1;::::0;;;25844:58:::1;::::0;25861:4:::1;::::0;17355:14:::1;25844:8;:58::i;:::-;25947:16;-1:-1:-1::0;;;;;25947:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25929:56:0::1;;25994:4;26001:16;-1:-1:-1::0;;;;;26001:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25929:96;::::0;-1:-1:-1;;;;;;25929:96:0::1;::::0;;;;;;-1:-1:-1;;;;;15620:15:1;;;25929:96:0::1;::::0;::::1;15602:34:1::0;15672:15;;15652:18;;;15645:43;15537:18;;25929:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25913:13;:112:::0;;-1:-1:-1;;;;;;25913:112:0::1;-1:-1:-1::0;;;;;25913:112:0;;;::::1;::::0;;::::1;::::0;;26036:55:::1;::::0;-1:-1:-1;26036:25:0::1;:55::i;:::-;26139:13;::::0;26102:58:::1;::::0;-1:-1:-1;;;;;26139:13:0::1;::::0;26102:28:::1;:58::i;:::-;26203:1;26179:21;:25;26171:73;;;::::0;-1:-1:-1;;;26171:73:0;;15901:2:1;26171:73:0::1;::::0;::::1;15883:21:1::0;15940:2;15920:18;;;15913:30;15979:34;15959:18;;;15952:62;-1:-1:-1;;;16030:18:1;;;16023:33;16073:19;;26171:73:0::1;15699:399:1::0;26171:73:0::1;26255:61;26268:24;26286:4;26268:9;:24::i;:::-;26294:21;26255:12;:61::i;46131:398::-:0;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46225:31:0;::::1;46217:81;;;::::0;-1:-1:-1;;;46217:81:0;;16305:2:1;46217:81:0::1;::::0;::::1;16287:21:1::0;16344:2;16324:18;;;16317:30;16383:34;16363:18;;;16356:62;-1:-1:-1;;;16434:18:1;;;16427:35;16479:19;;46217:81:0::1;16103:401:1::0;46217:81:0::1;46328:16;::::0;;-1:-1:-1;;;;;46328:16:0;;::::1;46348:5;46309:36:::0;;;:18:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;46309:44:0;;::::1;::::0;;;46364:45;;-1:-1:-1;;;;;;46364:45:0::1;::::0;;::::1;::::0;;::::1;::::0;;;46420:36;;;;;;;:43;;;;::::1;-1:-1:-1::0;46420:43:0::1;::::0;;;46479:42;1871:51:1;;;46479:42:0::1;::::0;1844:18:1;46479:42:0::1;1698:230:1::0;26492:244:0;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;26599:13:::1;::::0;-1:-1:-1;;;;;26591:21:0;;::::1;26599:13:::0;::::1;26591:21;;26583:91;;;::::0;-1:-1:-1;;;26583:91:0;;16711:2:1;26583:91:0::1;::::0;::::1;16693:21:1::0;16750:2;16730:18;;;16723:30;16789:34;16769:18;;;16762:62;16860:27;16840:18;;;16833:55;16905:19;;26583:91:0::1;16509:421:1::0;26583:91:0::1;26687:41;26716:4;26722:5;26687:28;:41::i;27031:148::-:0;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;27154:17:::1;:8:::0;27165:6:::1;27154:17;:::i;:::-;27137:14;:34:::0;-1:-1:-1;27031:148:0:o;23520:402::-;23642:4;23664:228;550:10;23714:7;23736:145;23793:15;23736:145;;;;;;;;;;;;;;;;;550:10;23736:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23736:34:0;;;;;;;;;;;;:38;:145::i;22150:201::-;22257:4;22279:42;550:10;22303:9;22314:6;22279:9;:42::i;46890:171::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;46967:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;46967:32:0::1;-1:-1:-1::0;;;;46967:32:0;;::::1;;::::0;;47015:38:::1;::::0;::::1;::::0;::::1;::::0;46991:8;1237:14:1;1230:22;1212:41;;1200:2;1185:18;;1072:187;24488:134:0;24548:4;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;24564:20:0::1;:28:::0;;-1:-1:-1;;24564:28:0::1;::::0;;;24488:134;:::o;45062:149::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45131:27:0;::::1;45161:5;45131:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;45131:35:0::1;::::0;;45182:21;;1871:51:1;;;45182:21:0::1;::::0;1844:18:1;45182:21:0::1;1698:230:1::0;6753:281:0;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6856:22:0;::::1;6834:110;;;::::0;-1:-1:-1;;;6834:110:0;;17137:2:1;6834:110:0::1;::::0;::::1;17119:21:1::0;17176:2;17156:18;;;17149:30;17215:34;17195:18;;;17188:62;-1:-1:-1;;;17266:18:1;;;17259:36;17312:19;;6834:110:0::1;16935:402:1::0;6834:110:0::1;6981:6;::::0;;6960:38:::1;::::0;-1:-1:-1;;;;;6960:38:0;;::::1;::::0;6981:6;::::1;::::0;6960:38:::1;::::0;::::1;7009:6;:17:::0;;-1:-1:-1;;;;;;7009:17:0::1;-1:-1:-1::0;;;;;7009:17:0;;;::::1;::::0;;;::::1;::::0;;6753:281::o;47606:241::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;47673:13:::1;::::0;-1:-1:-1;;;47673:13:0;::::1;;;47672:14;47664:70;;;::::0;-1:-1:-1;;;47664:70:0;;17544:2:1;47664:70:0::1;::::0;::::1;17526:21:1::0;17583:2;17563:18;;;17556:30;17622:34;17602:18;;;17595:62;-1:-1:-1;;;17673:18:1;;;17666:41;17724:19;;47664:70:0::1;17342:407:1::0;47664:70:0::1;47781:58;::::0;47745:12:::1;::::0;47789:10:::1;::::0;47813:21:::1;::::0;47745:12;47781:58;47745:12;47781:58;47813:21;47789:10;47781:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;47606:241:0:o;29118:371::-;-1:-1:-1;;;;;29245:19:0;;29237:68;;;;-1:-1:-1;;;29237:68:0;;18166:2:1;29237:68:0;;;18148:21:1;18205:2;18185:18;;;18178:30;18244:34;18224:18;;;18217:62;-1:-1:-1;;;18295:18:1;;;18288:34;18339:19;;29237:68:0;17964:400:1;29237:68:0;-1:-1:-1;;;;;29324:21:0;;29316:68;;;;-1:-1:-1;;;29316:68:0;;18571:2:1;29316:68:0;;;18553:21:1;18610:2;18590:18;;;18583:30;18649:34;18629:18;;;18622:62;-1:-1:-1;;;18700:18:1;;;18693:32;18742:19;;29316:68:0;18369:398:1;29316:68:0;-1:-1:-1;;;;;29397:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29449:32;;1662:25:1;;;29449:32:0;;1635:18:1;29449:32:0;;;;;;;29118:371;;;:::o;29497:4678::-;-1:-1:-1;;;;;29621:18:0;;29613:68;;;;-1:-1:-1;;;29613:68:0;;18974:2:1;29613:68:0;;;18956:21:1;19013:2;18993:18;;;18986:30;19052:34;19032:18;;;19025:62;-1:-1:-1;;;19103:18:1;;;19096:35;19148:19;;29613:68:0;18772:401:1;29613:68:0;-1:-1:-1;;;;;29700:16:0;;29692:64;;;;-1:-1:-1;;;29692:64:0;;19380:2:1;29692:64:0;;;19362:21:1;19419:2;19399:18;;;19392:30;19458:34;19438:18;;;19431:62;-1:-1:-1;;;19509:18:1;;;19502:33;19552:19;;29692:64:0;19178:399:1;29692:64:0;29784:1;29775:6;:10;29767:64;;;;-1:-1:-1;;;29767:64:0;;19784:2:1;29767:64:0;;;19766:21:1;19823:2;19803:18;;;19796:30;19862:34;19842:18;;;19835:62;-1:-1:-1;;;19913:18:1;;;19906:39;19962:19;;29767:64:0;19582:405:1;29767:64:0;29866:13;;-1:-1:-1;;;29866:13:0;;;;29862:134;;-1:-1:-1;;;;;29903:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;29931:22:0;;;;;;:18;:22;;;;;;;;29903:50;29895:89;;;;-1:-1:-1;;;29895:89:0;;20194:2:1;29895:89:0;;;20176:21:1;20233:2;20213:18;;;20206:30;20272:28;20252:18;;;20245:56;20318:18;;29895:89:0;19992:350:1;29895:89:0;30039:14;;;;;;;30036:1942;;;6421:7;6448:6;-1:-1:-1;;;;;30091:15:0;;;6448:6;;30091:15;;;;:49;;-1:-1:-1;6421:7:0;6448:6;-1:-1:-1;;;;;30127:13:0;;;6448:6;;30127:13;;30091:49;:86;;;;-1:-1:-1;;;;;;30161:16:0;;;;30091:86;:128;;;;-1:-1:-1;;;;;;30198:21:0;;30212:6;30198:21;;30091:128;:166;;;;-1:-1:-1;30241:16:0;;-1:-1:-1;;;30241:16:0;;;;30240:17;30091:166;30069:1898;;;6421:7;6448:6;-1:-1:-1;;;;;30312:15:0;;;6448:6;;30312:15;;;;:38;;-1:-1:-1;30337:13:0;;-1:-1:-1;;;;;30331:19:0;;;30337:13;;30331:19;;30312:38;:76;;;;;30370:18;;30354:12;:34;30312:76;30309:188;;;-1:-1:-1;;;;;30412:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;30412:22:0;30430:4;30412:22;;;30462:15;;;30412;30462;30309:188;30537:14;;;;:49;;;;-1:-1:-1;;;;;;30555:31:0;;;;;;:25;:31;;;;;;;;30537:49;30533:163;;;30634:14;;30619:11;:29;;30611:64;;;;-1:-1:-1;;;30611:64:0;;20549:2:1;30611:64:0;;;20531:21:1;20588:2;20568:18;;;20561:30;-1:-1:-1;;;20607:18:1;;;20600:52;20669:18;;30611:64:0;20347:346:1;30611:64:0;30738:14;;;;:47;;;;-1:-1:-1;;;;;;30756:29:0;;;;;;:25;:29;;;;;;;;30738:47;30734:162;;;30833:15;;30818:11;:30;;30810:65;;;;-1:-1:-1;;;30810:65:0;;20549:2:1;30810:65:0;;;20531:21:1;20588:2;20568:18;;;20561:30;-1:-1:-1;;;20607:18:1;;;20600:52;20669:18;;30810:65:0;20347:346:1;30810:65:0;30954:20;;;;30950:409;;;6421:7;6448:6;-1:-1:-1;;;;;31002:13:0;;;6448:6;;31002:13;;;;:47;;-1:-1:-1;31033:15:0;;-1:-1:-1;;;;;31019:30:0;;;31033:15;;31019:30;;31002:47;:79;;;;-1:-1:-1;31067:13:0;;-1:-1:-1;;;;;31053:28:0;;;31067:13;;31053:28;;31002:79;30998:342;;;-1:-1:-1;;;;;31117:32:0;;;;;;:28;:32;;;;;;31152:12;-1:-1:-1;31109:133:0;;;;-1:-1:-1;;;31109:133:0;;20900:2:1;31109:133:0;;;20882:21:1;20939:2;20919:18;;;20912:30;20978:34;20958:18;;;20951:62;21049:34;21029:18;;;21022:62;-1:-1:-1;;;21100:19:1;;;21093:40;21150:19;;31109:133:0;20698:477:1;31109:133:0;-1:-1:-1;;;;;31269:32:0;;;;;;:28;:32;;;;;31304:12;31269:47;;30998:342;-1:-1:-1;;;;;31427:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;31463:35:0;;;;;;:31;:35;;;;;;;;31462:36;31427:71;31423:529;;;31562:20;;31552:6;31535:14;;:23;;;;:::i;:::-;:47;;31527:113;;;;-1:-1:-1;;;31527:113:0;;21382:2:1;31527:113:0;;;21364:21:1;21421:2;21401:18;;;21394:30;21460:34;21440:18;;;21433:62;-1:-1:-1;;;21511:18:1;;;21504:51;21572:19;;31527:113:0;21180:417:1;31527:113:0;31423:529;;;-1:-1:-1;;;;;31717:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;31751:37:0;;;;;;:31;:37;;;;;;;;31750:38;31717:71;31713:239;;;31853:20;;31843:6;31825:15;;:24;;;;:::i;:::-;:48;;31817:115;;;;-1:-1:-1;;;31817:115:0;;21804:2:1;31817:115:0;;;21786:21:1;21843:2;21823:18;;;21816:30;21882:34;21862:18;;;21855:62;-1:-1:-1;;;21933:18:1;;;21926:52;21995:19;;31817:115:0;21602:418:1;31817:115:0;32018:25;32046:50;32073:22;;32046;;:26;;:50;;;;:::i;:::-;32018:78;;32107:28;32138:24;32156:4;32138:9;:24::i;:::-;32228:23;;32312:16;;32107:55;;-1:-1:-1;32204:47:0;;;;-1:-1:-1;;;32312:16:0;;;;32311:17;:55;;;;-1:-1:-1;32345:21:0;;-1:-1:-1;;;32345:21:0;;;;32311:55;:100;;;;-1:-1:-1;32393:13:0;;32410:1;;32383:24;;-1:-1:-1;;;;;32393:13:0;32383:9;:24::i;:::-;:28;32311:100;:138;;;;;32448:1;32428:17;:21;32311:138;:178;;;;-1:-1:-1;;;;;;32467:22:0;;;;;;:18;:22;;;;;;;;32466:23;32311:178;:220;;;;-1:-1:-1;;;;;;32507:24:0;;;;;;:18;:24;;;;;;;;32506:25;32311:220;:266;;;;-1:-1:-1;;;;;;32548:29:0;;;;;;:25;:29;;;;;;;;32311:266;:306;;;;;32594:23;32311:306;32293:373;;;32644:10;:8;:10::i;:::-;-1:-1:-1;;;;;32714:24:0;;32678:12;32714:24;;;:18;:24;;;;;;32693:4;;32714:24;;;:50;;-1:-1:-1;;;;;;32742:22:0;;;;;;:18;:22;;;;;;;;32714:50;32710:1386;;;-1:-1:-1;17954:1:0;32811:15;:26;32791:5;32710:1386;;;-1:-1:-1;;;;;32917:31:0;;;;;;:25;:31;;;;;;;;32913:1172;;;32969:14;:12;:14::i;:::-;33012:10;;33002:7;:20;33076:16;;33057;;:35;;33076:16;33057:35;:::i;:::-;33041:13;:51;17870:1;33111:15;:21;32913:1172;;;-1:-1:-1;;;;;33193:29:0;;;;;;:25;:29;;;;;;;;33189:896;;;33243:14;:12;:14::i;:::-;33286:11;;33276:7;:21;33352:17;;33332;;:37;;33352:17;33332:37;:::i;:::-;33316:13;:53;17910:1;33388:15;:22;-1:-1:-1;;;;;33539:17:0;;-1:-1:-1;33539:17:0;;;:11;:17;;;;;;;;:57;;;;;33581:15;33560:18;;:36;33539:57;33536:181;;;33630:7;;:11;;33640:1;33630:11;:::i;:::-;33620:7;:21;33680:13;;:17;;33696:1;33680:17;:::i;:::-;33664:13;:33;33536:181;33189:896;;;-1:-1:-1;;;;;33816:17:0;;;;;;:11;:17;;;;;;;;33815:18;;:59;;;33859:15;33837:18;;:37;;33815:59;33807:161;;;;-1:-1:-1;;;33807:161:0;;22227:2:1;33807:161:0;;;22209:21:1;22266:2;22246:18;;;22239:30;22305:34;22285:18;;;22278:62;22376:34;22356:18;;;22349:62;22448:27;22427:19;;;22420:56;22493:19;;33807:161:0;22025:493:1;33807:161:0;33987:14;:12;:14::i;:::-;17954:1;34020:15;:26;33189:896;34116:41;34131:4;34137:2;34141:6;34149:7;34116:14;:41::i;:::-;29602:4573;;;;29497:4678;;;:::o;1976:226::-;2096:7;2132:12;2124:6;;;;2116:29;;;;-1:-1:-1;;;2116:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2156:9:0;2168:5;2172:1;2168;:5;:::i;:::-;2156:17;1976:226;-1:-1:-1;;;;;1976:226:0:o;42324:164::-;42366:7;42387:15;42404;42423:19;:17;:19::i;:::-;42386:56;;-1:-1:-1;42386:56:0;-1:-1:-1;42460:20:0;42386:56;;42460:11;:20::i;:::-;42453:27;;;;42324:164;:::o;2468:132::-;2526:7;2553:39;2557:1;2560;2553:39;;;;;;;;;;;;;;;;;:3;:39::i;1643:181::-;1701:7;;1733:5;1737:1;1733;:5;:::i;:::-;1721:17;;1762:1;1757;:6;;1749:46;;;;-1:-1:-1;;;1749:46:0;;22725:2:1;1749:46:0;;;22707:21:1;22764:2;22744:18;;;22737:30;22803:29;22783:18;;;22776:57;22850:18;;1749:46:0;22523:351:1;40592:742:0;40692:7;40714;40736;40758;40780;40802;40852:23;40890:12;40917:18;40949:20;40961:7;40949:11;:20::i;:::-;40837:132;;;;;;40981:15;40998:23;41023:12;41039:113;41065:7;41087:4;41106:10;41131;:8;:10::i;:::-;41039:11;:113::i;:::-;40980:172;;;;-1:-1:-1;40980:172:0;;-1:-1:-1;41256:15:0;;-1:-1:-1;41286:4:0;;-1:-1:-1;41305:10:0;;-1:-1:-1;40592:742:0;;-1:-1:-1;;;;;40592:742:0:o;34183:1412::-;20298:16;:23;;-1:-1:-1;;;;20298:23:0;-1:-1:-1;;;20298:23:0;;;;34260:24:::1;34278:4;34260:9;:24::i;:::-;34234:50;;34295:25;34348:22;;34323;;:47;;;;:::i;:::-;34295:75;;34391:26;34420:29;34447:1;34420:22;;:26;;:29;;;;:::i;:::-;34391:58:::0;-1:-1:-1;34460:26:0::1;34489:39;:15:::0;34391:58;34489:19:::1;:39::i;:::-;34460:68:::0;-1:-1:-1;34577:21:0::1;34611:36;34460:68:::0;34611:16:::1;:36::i;:::-;34669:18;34690:44;:21;34716:17:::0;34690:25:::1;:44::i;:::-;34669:65;;34755:23;34781:61;34824:17;34781:38;34796:22;;34781:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;34755:87:::0;-1:-1:-1;34863:23:0::1;34889:31;:10:::0;34755:87;34889:14:::1;:31::i;:::-;34863:57:::0;-1:-1:-1;34941:17:0::1;34982:1;34960:19;:15:::0;34978:1:::1;34960:19;:::i;:::-;:23;;;;:::i;:::-;34941:42:::0;-1:-1:-1;34995:28:0::1;34941:42:::0;34995:28;::::1;:::i;:::-;35069:1;35044:22;:26:::0;;;35081:22:::1;:26:::0;;;35154:16:::1;::::0;35146:58:::1;::::0;34995:28;;-1:-1:-1;35069:1:0;;-1:-1:-1;;;;;35154:16:0;;::::1;::::0;34995:28;;35069:1;35146:58;35069:1;35146:58;34995:28;35154:16;35146:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;35236:10:0::1;::::0;35228:46:::1;::::0;35128:76;;-1:-1:-1;;;;;;35236:10:0::1;::::0;35260:9;;35228:46:::1;::::0;;;35260:9;35236:10;35228:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35215:59;;;;;35295:49;35308:18;35328:15;35295:12;:49::i;:::-;35360:71;::::0;;8658:25:1;;;8714:2;8699:18;;8692:34;;;8742:18;;;8735:34;;;35360:71:0::1;::::0;8646:2:1;8631:18;35360:71:0::1;;;;;;;35479:4;35455:21;:28;35452:136;;;35520:16;::::0;35512:64:::1;::::0;-1:-1:-1;;;;;35520:16:0;;::::1;::::0;35550:21:::1;::::0;35512:64:::1;::::0;;;35550:21;35520:16;35512:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;35499:77:0;;-1:-1:-1;;35452:136:0::1;-1:-1:-1::0;;20344:16:0;:24;;-1:-1:-1;;;;20344:24:0;;;-1:-1:-1;;;;;;;;34183:1412:0:o;24836:224::-;6510:6;;-1:-1:-1;;;;;6510:6:0;550:10;6510:22;6502:67;;;;-1:-1:-1;;;6502:67:0;;;;;;;:::i;:::-;24891:13:::1;:20:::0;;-1:-1:-1;;;;24922:28:0;-1:-1:-1;;;24922:28:0;;;24982:12:::1;24961:18;:33:::0;25026:26:::1;:15;25044:8;25026:26;:::i;:::-;25005:18;:47:::0;24836:224::o;26744:275::-;-1:-1:-1;;;;;26827:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;26827:39:0;;;;;;;;26877:31;:37;;;;;;;:45;;;;;;;;;;;26933:35;;26943:23;26961:4;26943:17;:23::i;:::-;26982:5;26978:34;;26989:21;27005:4;26989:15;:21::i;36492:423::-;36605:15;;36573:62;;36590:4;;-1:-1:-1;;;;;36605:15:0;36623:11;36573:8;:62::i;:::-;36646:15;;36850:16;;36646:261;;-1:-1:-1;;;36646:261:0;;36718:4;36646:261;;;23228:34:1;23278:18;;;23271:34;;;36646:15:0;23321:18:1;;;23314:34;;;23364:18;;;23357:34;-1:-1:-1;;;;;36850:16:0;;;23407:19:1;;;23400:44;36881:15:0;23460:19:1;;;23453:35;36646:15:0;;;:31;;36685:9;;23162:19:1;;36646:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36492:423;;:::o;44231:235::-;44278:7;;:12;:34;;;;-1:-1:-1;44294:13:0;;:18;44278:34;44274:47;;;44231:235::o;44274:47::-;44351:7;;;44333:15;:25;44393:13;;;44369:21;:37;-1:-1:-1;44419:11:0;;;;44441:17;44231:235::o;36923:708::-;37079:7;37074:28;;37088:14;:12;:14::i;:::-;-1:-1:-1;;;;;37119:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;37143:22:0;;;;;;:11;:22;;;;;;;;37142:23;37119:46;37115:467;;;37182:48;37204:6;37212:9;37223:6;37182:21;:48::i;:::-;37115:467;;;-1:-1:-1;;;;;37253:19:0;;;;;;:11;:19;;;;;;;;37252:20;:46;;;;-1:-1:-1;;;;;;37276:22:0;;;;;;:11;:22;;;;;;;;37252:46;37248:334;;;37315:46;37335:6;37343:9;37354:6;37315:19;:46::i;37248:334::-;-1:-1:-1;;;;;37383:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;37406:22:0;;;;;;:11;:22;;;;;;;;37383:45;37379:203;;;37445:48;37467:6;37475:9;37486:6;37445:21;:48::i;37379:203::-;37526:44;37544:6;37552:9;37563:6;37526:17;:44::i;:::-;37599:7;37594:29;;37608:15;44528;;44518:7;:25;44570:21;;44554:13;:37;44474:125;42496:605;42594:7;;42547;;;;17355:14;42547:7;42648:338;42672:9;:16;42668:20;;42648:338;;;42756:7;42732;:21;42740:9;42750:1;42740:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42740:12:0;42732:21;;;;;;;;;;;;;:31;;:83;;;42808:7;42784;:21;42792:9;42802:1;42792:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42792:12:0;42784:21;;;;;;;;;;;;;:31;42732:83;42710:146;;;-1:-1:-1;;42839:7:0;;;17355:14;;-1:-1:-1;42496:605:0;-1:-1:-1;;42496:605:0:o;42710:146::-;42881:34;42893:7;:21;42901:9;42911:1;42901:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42901:12:0;42893:21;;;;;;;;;;;;;42881:7;;:11;:34::i;:::-;42871:44;;42940:34;42952:7;:21;42960:9;42970:1;42960:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42960:12:0;42952:21;;;;;;;;;;;;;42940:7;;:11;:34::i;:::-;42930:44;-1:-1:-1;42690:3:0;;;;:::i;:::-;;;;42648:338;;;-1:-1:-1;43010:7:0;;:20;;17355:14;43010:11;:20::i;:::-;43000:7;:30;42996:61;;;-1:-1:-1;;43040:7:0;;;17355:14;;-1:-1:-1;42496:605:0;-1:-1:-1;42496:605:0:o;42996:61::-;43076:7;;43085;;-1:-1:-1;42496:605:0;-1:-1:-1;42496:605:0:o;2608:264::-;2728:7;2763:12;2756:5;2748:28;;;;-1:-1:-1;;;2748:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2787:9:0;2799:5;2803:1;2799;:5;:::i;41342:412::-;41443:7;41465;41487;41522:12;41537:24;41553:7;41537:15;:24::i;:::-;41522:39;;41572:18;41593:30;41615:7;41593:21;:30::i;:::-;41572:51;-1:-1:-1;41634:23:0;41660:33;41572:51;41660:17;:7;41672:4;41660:11;:17::i;:::-;:21;;:33::i;:::-;41634:59;41729:4;;-1:-1:-1;41735:10:0;;-1:-1:-1;41342:412:0;;-1:-1:-1;;;41342:412:0:o;41762:554::-;41961:7;;;;42058:24;:7;42070:11;42058;:24::i;:::-;42040:42;-1:-1:-1;42093:12:0;42108:21;:4;42117:11;42108:8;:21::i;:::-;42093:36;-1:-1:-1;42140:18:0;42161:27;:10;42176:11;42161:14;:27::i;:::-;42140:48;-1:-1:-1;42199:23:0;42225:33;42140:48;42225:17;:7;42237:4;42225:11;:17::i;:33::-;42277:7;;;;-1:-1:-1;42303:4:0;;-1:-1:-1;41762:554:0;;-1:-1:-1;;;;;;;41762:554:0:o;1832:136::-;1890:7;1917:43;1921:1;1924;1917:43;;;;;;;;;;;;;;;;;:3;:43::i;35981:499::-;36071:16;;;36085:1;36071:16;;;;;;;;36047:21;;36071:16;;;;;;;;;;-1:-1:-1;36071:16:0;36047:40;;36116:4;36098;36103:1;36098:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36098:23:0;;;:7;;;;;;;;;;:23;;;;36142:15;;:22;;;-1:-1:-1;;;36142:22:0;;;;:15;;;;;:20;;:22;;;;;36098:7;;36142:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36132:4;36137:1;36132:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36132:32:0;;;:7;;;;;;;;;:32;36207:15;;36175:62;;36192:4;;36207:15;36225:11;36175:8;:62::i;:::-;36248:15;;:224;;-1:-1:-1;;;36248:224:0;;-1:-1:-1;;;;;36248:15:0;;;;:66;;:224;;36329:11;;36248:15;;36399:4;;36426;;36446:15;;36248:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36036:444;35981:499;:::o;2210:250::-;2268:7;2292:6;2288:47;;-1:-1:-1;2322:1:0;2315:8;;2288:47;2347:9;2359:5;2363:1;2359;:5;:::i;:::-;2347:17;-1:-1:-1;2392:1:0;2383:5;2387:1;2347:17;2383:5;:::i;:::-;:10;2375:56;;;;-1:-1:-1;;;2375:56:0;;24997:2:1;2375:56:0;;;24979:21:1;25036:2;25016:18;;;25009:30;25075:34;25055:18;;;25048:62;-1:-1:-1;;;25126:18:1;;;25119:31;25167:19;;2375:56:0;24795:397:1;38978:686:0;39129:15;39159:23;39197:12;39224:23;39262:12;39289:18;39321:19;39332:7;39321:10;:19::i;:::-;-1:-1:-1;;;;;39369:15:0;;;;;;:7;:15;;;;;;39114:226;;-1:-1:-1;39114:226:0;;-1:-1:-1;39114:226:0;;-1:-1:-1;39114:226:0;-1:-1:-1;39114:226:0;-1:-1:-1;39114:226:0;-1:-1:-1;39369:28:0;;39389:7;39369:19;:28::i;:::-;-1:-1:-1;;;;;39351:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39426:7;:15;;;;:28;;39446:7;39426:19;:28::i;:::-;-1:-1:-1;;;;;39408:15:0;;;;;;;:7;:15;;;;;;:46;;;;39486:18;;;;;;;:39;;39509:15;39486:22;:39::i;:::-;-1:-1:-1;;;;;39465:18:0;;;;;;:7;:18;;;;;:60;39536:26;39551:10;39536:14;:26::i;:::-;39573:23;39585:4;39591;39573:11;:23::i;:::-;39629:9;-1:-1:-1;;;;;39612:44:0;39621:6;-1:-1:-1;;;;;39612:44:0;;39640:15;39612:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;39612:44:0;;;;;;;;39103:561;;;;;;38978:686;;;:::o;38272:698::-;38421:15;38451:23;38489:12;38516:23;38554:12;38581:18;38613:19;38624:7;38613:10;:19::i;:::-;-1:-1:-1;;;;;38661:15:0;;;;;;:7;:15;;;;;;38406:226;;-1:-1:-1;38406:226:0;;-1:-1:-1;38406:226:0;;-1:-1:-1;38406:226:0;-1:-1:-1;38406:226:0;-1:-1:-1;38406:226:0;-1:-1:-1;38661:28:0;;38406:226;38661:19;:28::i;:::-;-1:-1:-1;;;;;38643:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38721:18;;;;;:7;:18;;;;;:39;;38744:15;38721:22;:39::i;:::-;-1:-1:-1;;;;;38700:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38792:7;:18;;;;:39;;38815:15;38792:22;:39::i;39672:757::-;39823:15;39853:23;39891:12;39918:23;39956:12;39983:18;40015:19;40026:7;40015:10;:19::i;:::-;-1:-1:-1;;;;;40063:15:0;;;;;;:7;:15;;;;;;39808:226;;-1:-1:-1;39808:226:0;;-1:-1:-1;39808:226:0;;-1:-1:-1;39808:226:0;-1:-1:-1;39808:226:0;-1:-1:-1;39808:226:0;-1:-1:-1;40063:28:0;;40083:7;40063:19;:28::i;:::-;-1:-1:-1;;;;;40045:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40120:7;:15;;;;:28;;40140:7;40120:19;:28::i;37639:625::-;37786:15;37816:23;37854:12;37881:23;37919:12;37946:18;37978:19;37989:7;37978:10;:19::i;:::-;-1:-1:-1;;;;;38026:15:0;;;;;;:7;:15;;;;;;37771:226;;-1:-1:-1;37771:226:0;;-1:-1:-1;37771:226:0;;-1:-1:-1;37771:226:0;-1:-1:-1;37771:226:0;-1:-1:-1;37771:226:0;-1:-1:-1;38026:28:0;;37771:226;38026:19;:28::i;43911:130::-;43975:7;44002:31;44027:5;44002:20;44014:7;;44002;:11;;:20;;;;:::i;44049:174::-;44146:7;44178:37;44209:5;44178:26;44190:13;;44178:7;:11;;:26;;;;:::i;43109:794::-;17870:1;43175:15;;:22;43172:429;;;43271:13;;43252:16;;43239:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;43213:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;;43357:13:0;;43338:16;;43325:29;;:10;:29;:::i;:::-;:45;;;;:::i;:::-;43299:22;;:71;;;;;;;:::i;:::-;;;;-1:-1:-1;43172:429:0;;-1:-1:-1;43172:429:0;;17910:1;43391:15;;:23;43388:213;;;43489:13;;43469:17;;43456:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;43430:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;43576:13:0;;43556:17;;43543:30;;:10;:30;:::i;:::-;:46;;;;:::i;:::-;43517:22;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;43388:213:0;43611:19;43633:10;:8;:10::i;:::-;43611:32;-1:-1:-1;43654:18:0;43675:27;:10;43611:32;43675:14;:27::i;:::-;43754:4;43738:22;;;;:7;:22;;;;;;43654:48;;-1:-1:-1;43738:38:0;;43654:48;43738:26;:38::i;:::-;43729:4;43713:22;;;;:7;:22;;;;;;;;:63;;;;43791:11;:26;;;;;;43787:108;;;43873:4;43857:22;;;;:7;:22;;;;;;:38;;43884:10;43857:26;:38::i;:::-;43848:4;43832:22;;;;:7;:22;;;;;:63;43787:108;43161:742;;43109:794;:::o;40437:147::-;40515:7;;:17;;40527:4;40515:11;:17::i;:::-;40505:7;:27;40556:10;;:20;;40571:4;40556:14;:20::i;:::-;40543:10;:33;-1:-1:-1;;40437:147:0:o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752: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;1933:316::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;-1:-1:-1;;2118:23:1;;;2188:2;2173:18;;2160:32;;-1:-1:-1;2239:2:1;2224:18;;;2211:32;;1933:316;-1:-1:-1;1933:316:1:o;2254:456::-;2331:6;2339;2347;2400:2;2388:9;2379:7;2375:23;2371:32;2368:52;;;2416:1;2413;2406:12;2368:52;2455:9;2442:23;2474:31;2499:5;2474:31;:::i;:::-;2524:5;-1:-1:-1;2581:2:1;2566:18;;2553:32;2594:33;2553:32;2594:33;:::i;:::-;2254:456;;2646:7;;-1:-1:-1;;;2700:2:1;2685:18;;;;2672:32;;2254:456::o;2715:180::-;2774:6;2827:2;2815:9;2806:7;2802:23;2798:32;2795:52;;;2843:1;2840;2833:12;2795:52;-1:-1:-1;2866:23:1;;2715:180;-1:-1:-1;2715:180:1:o;3313:118::-;3399:5;3392:13;3385:21;3378:5;3375:32;3365:60;;3421:1;3418;3411:12;3436:309;3501:6;3509;3562:2;3550:9;3541:7;3537:23;3533:32;3530:52;;;3578:1;3575;3568:12;3530:52;3614:9;3601:23;3591:33;;3674:2;3663:9;3659:18;3646:32;3687:28;3709:5;3687:28;:::i;:::-;3734:5;3724:15;;;3436:309;;;;;:::o;3958:382::-;4023:6;4031;4084:2;4072:9;4063:7;4059:23;4055:32;4052:52;;;4100:1;4097;4090:12;4052:52;4139:9;4126:23;4158:31;4183:5;4158:31;:::i;:::-;4208:5;-1:-1:-1;4265:2:1;4250:18;;4237:32;4278:30;4237:32;4278:30;:::i;4345:388::-;4413:6;4421;4474:2;4462:9;4453:7;4449:23;4445:32;4442:52;;;4490:1;4487;4480:12;4442:52;4529:9;4516:23;4548:31;4573:5;4548:31;:::i;:::-;4598:5;-1:-1:-1;4655:2:1;4640:18;;4627:32;4668:33;4627:32;4668:33;:::i;4738:127::-;4799:10;4794:3;4790:20;4787:1;4780:31;4830:4;4827:1;4820:15;4854:4;4851:1;4844:15;4870:275;4941:2;4935:9;5006:2;4987:13;;-1:-1:-1;;4983:27:1;4971:40;;5041:18;5026:34;;5062:22;;;5023:62;5020:88;;;5088:18;;:::i;:::-;5124:2;5117:22;4870:275;;-1:-1:-1;4870:275:1:o;5150:183::-;5210:4;5243:18;5235:6;5232:30;5229:56;;;5265:18;;:::i;:::-;-1:-1:-1;5310:1:1;5306:14;5322:4;5302:25;;5150:183::o;5338:662::-;5392:5;5445:3;5438:4;5430:6;5426:17;5422:27;5412:55;;5463:1;5460;5453:12;5412:55;5499:6;5486:20;5525:4;5549:60;5565:43;5605:2;5565:43;:::i;:::-;5549:60;:::i;:::-;5643:15;;;5729:1;5725:10;;;;5713:23;;5709:32;;;5674:12;;;;5753:15;;;5750:35;;;5781:1;5778;5771:12;5750:35;5817:2;5809:6;5805:15;5829:142;5845:6;5840:3;5837:15;5829:142;;;5911:17;;5899:30;;5949:12;;;;5862;;5829:142;;;-1:-1:-1;5989:5:1;5338:662;-1:-1:-1;;;;;;5338:662:1:o;6005:1215::-;6123:6;6131;6184:2;6172:9;6163:7;6159:23;6155:32;6152:52;;;6200:1;6197;6190:12;6152:52;6240:9;6227:23;6269:18;6310:2;6302:6;6299:14;6296:34;;;6326:1;6323;6316:12;6296:34;6364:6;6353:9;6349:22;6339:32;;6409:7;6402:4;6398:2;6394:13;6390:27;6380:55;;6431:1;6428;6421:12;6380:55;6467:2;6454:16;6489:4;6513:60;6529:43;6569:2;6529:43;:::i;6513:60::-;6607:15;;;6689:1;6685:10;;;;6677:19;;6673:28;;;6638:12;;;;6713:19;;;6710:39;;;6745:1;6742;6735:12;6710:39;6769:11;;;;6789:217;6805:6;6800:3;6797:15;6789:217;;;6885:3;6872:17;6902:31;6927:5;6902:31;:::i;:::-;6946:18;;6822:12;;;;6984;;;;6789:217;;;7025:5;-1:-1:-1;;7068:18:1;;7055:32;;-1:-1:-1;;7099:16:1;;;7096:36;;;7128:1;7125;7118:12;7096:36;;7151:63;7206:7;7195:8;7184:9;7180:24;7151:63;:::i;:::-;7141:73;;;6005:1215;;;;;:::o;7225:241::-;7281:6;7334:2;7322:9;7313:7;7309:23;7305:32;7302:52;;;7350:1;7347;7340:12;7302:52;7389:9;7376:23;7408:28;7430:5;7408:28;:::i;7471:356::-;7673:2;7655:21;;;7692:18;;;7685:30;7751:34;7746:2;7731:18;;7724:62;7818:2;7803:18;;7471:356::o;7832:127::-;7893:10;7888:3;7884:20;7881:1;7874:31;7924:4;7921:1;7914:15;7948:4;7945:1;7938:15;7964:128;8004:3;8035:1;8031:6;8028:1;8025:13;8022:39;;;8041:18;;:::i;:::-;-1:-1:-1;8077:9:1;;7964:128::o;9901:127::-;9962:10;9957:3;9953:20;9950:1;9943:31;9993:4;9990:1;9983:15;10017:4;10014:1;10007:15;10033:125;10073:4;10101:1;10098;10095:8;10092:34;;;10106:18;;:::i;:::-;-1:-1:-1;10143:9:1;;10033:125::o;10163:127::-;10224:10;10219:3;10215:20;10212:1;10205:31;10255:4;10252:1;10245:15;10279:4;10276:1;10269:15;10295:135;10334:3;-1:-1:-1;;10355:17:1;;10352:43;;;10375:18;;:::i;:::-;-1:-1:-1;10422:1:1;10411:13;;10295:135::o;10795:168::-;10835:7;10901:1;10897;10893:6;10889:14;10886:1;10883:21;10878:1;10871:9;10864:17;10860:45;10857:71;;;10908:18;;:::i;:::-;-1:-1:-1;10948:9:1;;10795:168::o;10968:217::-;11008:1;11034;11024:132;;11078:10;11073:3;11069:20;11066:1;11059:31;11113:4;11110:1;11103:15;11141:4;11138:1;11131:15;11024:132;-1:-1:-1;11170:9:1;;10968:217::o;13581:184::-;13651:6;13704:2;13692:9;13683:7;13679:23;13675:32;13672:52;;;13720:1;13717;13710:12;13672:52;-1:-1:-1;13743:16:1;;13581:184;-1:-1:-1;13581:184:1:o;14049:245::-;14116:6;14169:2;14157:9;14148:7;14144:23;14140:32;14137:52;;;14185:1;14182;14175:12;14137:52;14217:9;14211:16;14236:28;14258:5;14236:28;:::i;15134:251::-;15204:6;15257:2;15245:9;15236:7;15232:23;15228:32;15225:52;;;15273:1;15270;15263:12;15225:52;15305:9;15299:16;15324:31;15349:5;15324:31;:::i;23499:306::-;23587:6;23595;23603;23656:2;23644:9;23635:7;23631:23;23627:32;23624:52;;;23672:1;23669;23662:12;23624:52;23701:9;23695:16;23685:26;;23751:2;23740:9;23736:18;23730:25;23720:35;;23795:2;23784:9;23780:18;23774:25;23764:35;;23499:306;;;;;:::o;23810:980::-;24072:4;24120:3;24109:9;24105:19;24151:6;24140:9;24133:25;24177:2;24215:6;24210:2;24199:9;24195:18;24188:34;24258:3;24253:2;24242:9;24238:18;24231:31;24282:6;24317;24311:13;24348:6;24340;24333:22;24386:3;24375:9;24371:19;24364:26;;24425:2;24417:6;24413:15;24399:29;;24446:1;24456:195;24470:6;24467:1;24464:13;24456:195;;;24535:13;;-1:-1:-1;;;;;24531:39:1;24519:52;;24626:15;;;;24591:12;;;;24567:1;24485:9;24456:195;;;-1:-1:-1;;;;;;;24707:32:1;;;;24702:2;24687:18;;24680:60;-1:-1:-1;;;24771:3:1;24756:19;24749:35;24668:3;23810:980;-1:-1:-1;;;23810:980:1:o

Swarm Source

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