ETH Price: $2,520.60 (+2.71%)

Token

KEIKO (KEIKO)
 

Overview

Max Total Supply

10,000,000,000,000 KEIKO

Holders

130

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
9,741,010,530.781478715196135818 KEIKO

Value
$0.00
0xb0446838256dc0faf2bfe5f8de404a6d63f7192a
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:
KEIKOv2

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-04
*/

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;
contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
}
contract ERC20Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "ERC20Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "ERC20Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

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

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

contract KEIKOv2 is Context, IERC20, ERC20Ownable {
    using SafeMath for uint256;
    using Address for address;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    mapping(address => bool) private _isMaxWalletExclude;
    mapping (address => bool) public isBot;
	mapping(address => bool) public boughtEarly;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    address[] private _excluded;
    uint256 public earlyBuyPenaltyEnd;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e13 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private maximumTokens;
	uint256 private minimumTokensForTaxSwap;
    uint256 private constant BUY = 1;
    uint256 private constant SELL = 2;
    uint256 private constant TRANSFER = 3;
    uint256 private buyOrSellSwitch;
    uint256 private _marketingTax = 10;
    uint256 private _previousMarketingTax = _marketingTax;
    uint256 private _charityTax = 1;
    uint256 private _previousCharityTax = _charityTax;
    uint256 private _liquidityTax = 4;
    uint256 private _previousLiquidityTax = _liquidityTax;
    uint256 private _reflectionsTax = 0;
    uint256 private _previousReflectionsTax = _reflectionsTax;
    uint256 private _divForLiq = _marketingTax + _charityTax + _liquidityTax;
    uint256 private taxBuyMarketing = 10;
    uint256 private taxBuyCharity = 1;
    uint256 private taxBuyLiquidity = 4;
    uint256 private taxBuyReflections = 0;
    uint256 private taxSellMarketing = 10;
    uint256 private taxSellCharity = 1;
    uint256 private taxSellLiquidity = 4;
    uint256 private taxSellReflections = 0;
    uint256 private TradingActiveBlock = 0;
    uint256 private tokensForLiquidity;
    uint256 private tokensForMarketing;
    uint256 private tokensForCharity;
    uint256 private totalBurnedTokens;
    address dead = 0x000000000000000000000000000000000000dEaD;
    address payable public MarketingAddress;
    address payable public CharityAddress;
    address payable private DevAddress;
    address payable public LiquidityAddress;
    IUniswapV2Router02 public uniV2Router;
    address public uniV2Pair;
    bool public limitsOn = false;
    bool public maxWalletOn = false;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    bool public tradingActive = false;
    string private constant _name = "KEIKO";
    string private constant _symbol = "KEIKO";
    uint8 private constant _decimal = 18;
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);
    event UpdatedLiquidityAddress(address liquidity);
    event UpdatedMarketingAddress(address marketing);
    event UpdatedCharityAddress(address charity);
    event BoughtEarly(address indexed sniper);
    event RemovedSniper(address indexed notsnipersupposedly);
    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    constructor() payable {
        _rOwned[_msgSender()] = _rTotal.div(10000000000000000000000000000000).mul(1296371181837000000000000000000);
        _rOwned[address(this)] = _rTotal.div(10000000000000000000000000000000).mul(8703628818163000000000000000000);
        maximumTokens = _tTotal.mul(15).div(1000);
        minimumTokensForTaxSwap = _tTotal.mul(5).div(10000);
        MarketingAddress = payable(0x72EbBE130B7d9Cb9631925D6adC44430aCF963C1);
        CharityAddress = payable(0x2C3A2Eac5682e22C1A01986Cb93BB312eCD74536);
        DevAddress = payable(0xE2b3E66D940213e2d329435FddB4D502380E258e);
        LiquidityAddress = payable(owner());
        _isExcluded[dead] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[dead] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[MarketingAddress] = true;
        _isExcludedFromFee[CharityAddress] = true;
        _isExcludedFromFee[DevAddress] = true;
        _isMaxWalletExclude[address(this)] = true;
        _isMaxWalletExclude[_msgSender()] = true;
        _isMaxWalletExclude[dead] = true;
        _isMaxWalletExclude[MarketingAddress] = true;
        _isMaxWalletExclude[CharityAddress] = true;
        _isMaxWalletExclude[DevAddress] = true;

        BotAdd(0x41B0320bEb1563A048e2431c8C1cC155A0DFA967);
        BotAdd(0x91B305F0890Fd0534B66D8d479da6529C35A3eeC);
        BotAdd(0x7F5622afb5CEfbA39f96CA3b2814eCF0E383AAA4);
        BotAdd(0xfcf6a3d7eb8c62a5256a020e48f153c6D5Dd6909);
        BotAdd(0x74BC89a9e831ab5f33b90607Dd9eB5E01452A064);
        BotAdd(0x1F53592C3aA6b827C64C4a3174523182c52Ece84);
        BotAdd(0x460545C01c4246194C2e511F166D84bbC8a07608);
        BotAdd(0x2E5d67a1d15ccCF65152B3A8ec5315E73461fBcd);
        BotAdd(0xEd3e444A30Bd440FBab5933dCCC652959DfCB5Ba);
        BotAdd(0xEC366bbA6266ac8960198075B14FC1D38ea7de88);
        BotAdd(0x10Bf6836600D7cFE1c06b145A8Ac774F8Ba91FDD);
        BotAdd(0x44ae54e28d082C98D53eF5593CE54bB231e565E7);
        BotAdd(0xa3e820006F8553d5AC9F64A2d2B581501eE24FcF);
		BotAdd(0x2228476AC5242e38d5864068B8c6aB61d6bA2222);
		BotAdd(0xcC7e3c4a8208172CA4c4aB8E1b8B4AE775Ebd5a8);
		BotAdd(0x5b3EE79BbBDb5B032eEAA65C689C119748a7192A);
		BotAdd(0x4ddA45d3E9BF453dc95fcD7c783Fe6ff9192d1BA);

        emit Transfer(address(0), _msgSender(), 1296371181837000000000000000000);
        emit Transfer(address(0), address(this), 8703628818163000000000000000000);
    }
    receive() external payable {}
    function name() public pure override returns (string memory) {
        return _name;
    }
    function symbol() public pure override returns (string memory) {
        return _symbol;
    }
    function decimals() public pure override returns (uint8) {
        return _decimal;
    }
    function totalSupply() public 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) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender,address recipient,uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender,_msgSender(),
        _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")
        );
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")
        );
        return true;
    }
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amt 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, "Amt must be less than tot refl");
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    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){
            tokensForMarketing += tLiquidity.mul(taxBuyMarketing).div(_divForLiq);
            tokensForCharity += tLiquidity.mul(taxBuyCharity).div(_divForLiq);
            tokensForLiquidity += tLiquidity.mul(taxBuyLiquidity).div(_divForLiq);
        } else if(buyOrSellSwitch == SELL){
            tokensForMarketing += tLiquidity.mul(taxSellMarketing).div(_divForLiq);
            tokensForCharity += tLiquidity.mul(taxSellCharity).div(_divForLiq);
            tokensForLiquidity += tLiquidity.mul(taxSellLiquidity).div(_divForLiq);
        }
        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(_reflectionsTax).div(10**2);
    }
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityTax.add(_marketingTax).add(_charityTax)).div(10**2);
    }
    function _approve(address owner,address spender,uint256 amount) private {
        require(owner != address(0), "ERC20: approve from zero address");
        require(spender != address(0), "ERC20: approve to zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function enableTrading() internal onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        limitsOn = true;
        maxWalletOn = true;
        TradingActiveBlock = block.number;
        earlyBuyPenaltyEnd = block.timestamp.add(96 hours);
    }
    function AirdropsAndLaunch(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner returns (bool){
        require(!tradingActive, "Trading already active!");
        require(airdropWallets.length < 100, "Can only airdrop 100 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 _uniV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniV2Router = _uniV2Router;
        _isMaxWalletExclude[address(uniV2Router)] = true;
        _approve(address(this), address(uniV2Router), _tTotal);
        uniV2Pair = IUniswapV2Factory(_uniV2Router.factory()).createPair(address(this), _uniV2Router.WETH());
        _isMaxWalletExclude[address(uniV2Pair)] = true;
        require(address(this).balance > 0, "Must have ETH on contract to launch");
        addLiquidity(balanceOf(address(this)), address(this).balance);
        setLiquidityAddress(dead);
        return true;
    }
    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");
        require(!isBot[from]);
        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }
        if (maxWalletOn && ! _isMaxWalletExclude[to]) {
            require(balanceOf(to) + amount <= maximumTokens, "Max amount of tokens for wallet reached");
        }
        if(limitsOn){
            if (from != owner() && to != owner() && to != address(0) && to != dead && !inSwapAndLiquify) {
                if(from != owner() && to != uniV2Pair && block.number == TradingActiveBlock){
                    for (uint x = 0; x < 3; x++) {
                        if(block.number == TradingActiveBlock + x) {
                            boughtEarly[to] = true;
                            emit BoughtEarly(to);
                        }
                    }
                }
            }
        }
        uint256 totalTokensToSwap = tokensForLiquidity.add(tokensForMarketing);
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensForTaxSwap;
        if (!inSwapAndLiquify && swapAndLiquifyEnabled && balanceOf(uniV2Pair) > 0 && totalTokensToSwap > 0 && !_isExcludedFromFee[to] && !_isExcludedFromFee[from] && to == uniV2Pair && overMinimumTokenBalance) {
            swapTokens();
            }
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER;
        } else {
            if (from == uniV2Pair) {
                removeAllFee();
                _marketingTax = taxBuyMarketing;
                _charityTax = taxBuyCharity;
                _reflectionsTax = taxBuyReflections;
                _liquidityTax = taxBuyLiquidity;
                buyOrSellSwitch = BUY;
            } 
            else if (to == uniV2Pair) {
                removeAllFee();
                _marketingTax = taxSellMarketing;
                _charityTax = taxSellCharity;
                _reflectionsTax = taxSellReflections;
                _liquidityTax = taxSellLiquidity;
                buyOrSellSwitch = SELL;
                if(boughtEarly[from] && earlyBuyPenaltyEnd > block.timestamp){
                    _marketingTax = 95;
                    _charityTax = 1;
                    _liquidityTax = 2;
                    _reflectionsTax = 0;
                }
            } 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;
            }
        }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function swapTokens() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForCharity;
        uint256 swapLiquidityTokens = tokensForLiquidity.div(2); //Halve the amount of liquidity tokens
        uint256 amountToSwapForETH = contractBalance.sub(swapLiquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        swapTokensForETH(amountToSwapForETH); 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForCharity = ethBalance.mul(tokensForCharity).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance.sub(ethForMarketing).sub(ethForCharity);
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForCharity = 0;
        (bool success,) = address(MarketingAddress).call{value: ethForMarketing}("");
        (success,) = address(CharityAddress).call{value: ethForCharity}("");
        addLiquidity(swapLiquidityTokens, ethForLiquidity);
        if(address(this).balance > 5 * 10**17){
            (success,) = address(DevAddress).call{value: address(this).balance}("");
        }
    }
    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniV2Router.WETH();
        _approve(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniV2Router), tokenAmount);
        uniV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            LiquidityAddress,
            block.timestamp
        );
    }
    function removeAllFee() private {
        if (_marketingTax == 0 && _charityTax == 0 && _liquidityTax == 0 && _reflectionsTax == 0) return;
        _previousMarketingTax = _marketingTax;
        _previousCharityTax = _charityTax;
        _previousLiquidityTax = _liquidityTax;
        _previousReflectionsTax = _reflectionsTax;

        _marketingTax = 0;
        _charityTax = 0;
        _liquidityTax = 0;
        _reflectionsTax = 0;
    }
    function restoreAllFee() private {
        _marketingTax = _previousMarketingTax;
        _charityTax = _previousCharityTax;
        _liquidityTax = _previousLiquidityTax;
        _reflectionsTax = _previousReflectionsTax;
    }
    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]) {
            _transferStandard(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 _tokenTransferNoFee(address sender,address recipient,uint256 amount) private {
        _rOwned[sender] = _rOwned[sender].sub(amount);
        _rOwned[recipient] = _rOwned[recipient].add(amount);

        if (_isExcluded[sender]) {
            _tOwned[sender] = _tOwned[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient].add(amount);
        }
        emit Transfer(sender, recipient, amount);
    }
    function excludeFromFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function includeInFee(address account) external onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    function excludeFromMaxWallet(address account) external onlyOwner {
        _isMaxWalletExclude[account] = true;
    }
    function includeInMaxWallet(address account) external onlyOwner {
        _isMaxWalletExclude[account] = false;
    }
    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isMaxWalletExclude[account];
    }
    function BotAdd(address _user) public onlyOwner {
        require(_user != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        require(!isBot[_user]);
        isBot[_user] = true;
    }
	function BotRemove(address _user) public onlyOwner {
        require(isBot[_user]);
        isBot[_user] = false;
    }
	function removeSniper(address account) external onlyOwner {
        boughtEarly[account] = false;
    }
    function LimitsOn() external onlyOwner {
        limitsOn = true;
    }
    function LimitsOff() external onlyOwner {
        limitsOn = false;
    }
    function TaxSwapEnable() external onlyOwner {
        swapAndLiquifyEnabled = true;
    }
    function TaxSwapDisable() external onlyOwner {
        swapAndLiquifyEnabled = false;
    }
    function enableMaxWallet() external onlyOwner {
        maxWalletOn = true;
    }
    function disableMaxWallet() external onlyOwner {
        maxWalletOn = false;
    }
    function setBuyTax(uint256 _buyMarketingTax, uint256 _buyCharityTax, uint256 _buyLiquidityTax, uint256 _buyReflectionsTax) external onlyOwner {
        taxBuyMarketing = _buyMarketingTax;
        taxBuyCharity = _buyCharityTax;
        taxBuyLiquidity = _buyLiquidityTax;
        taxBuyReflections = _buyReflectionsTax;
    }
    function setSellTax(uint256 _sellMarketingTax, uint256 _sellCharityTax, uint256 _sellLiquidityTax, uint256 _sellReflectionsTax) external onlyOwner {
        taxSellMarketing = _sellMarketingTax;
        taxSellCharity = _sellCharityTax;
        taxSellLiquidity = _sellLiquidityTax;
        taxSellReflections = _sellReflectionsTax;
    }
    function setMarketingAddress(address _marketingAddress) external onlyOwner {
        require(_marketingAddress != address(0), "_marketingAddress address cannot be 0");
        MarketingAddress = payable(_marketingAddress);
        _isExcludedFromFee[MarketingAddress] = true;
        emit UpdatedMarketingAddress(_marketingAddress);
    }
    function setCharityAddress(address _charityAddress) public onlyOwner {
        require(_charityAddress != address(0), "_liquidityAddress address cannot be 0");
        CharityAddress = payable(_charityAddress);
        emit UpdatedCharityAddress(_charityAddress);
    }
    function setLiquidityAddress(address _liquidityAddress) public onlyOwner {
        LiquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[LiquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }
    function setMaxWallet(uint256 _percent, uint256 _divider) external onlyOwner {
        maximumTokens = _tTotal * _percent / _divider;
        require(maximumTokens <= _tTotal * 3 / 100, "Cannot set max wallet to more then 3% of total supply");
    }
    function viewBuyTaxes() public view returns(uint BuyMarketing,uint BuyCharity,uint BuyLiquidity,uint BuyReflections) {
        return (taxBuyMarketing, taxBuyCharity, taxBuyLiquidity, taxBuyReflections);
    }
    function viewSellTaxes() public view returns(uint SellMarketing,uint SellCharity,uint SellLiquidity,uint SellReflections) {
        return (taxSellMarketing, taxSellCharity, taxSellLiquidity, taxSellReflections);
    }
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= _tTotal * 5 / 10000, "Can only swap back if more than 0.05% of tokens stuck on contract");
        swapTokens();
    }
    function withdrawTokens(uint256 _percent) public onlyOwner {
        require(!tradingActive, "Trading is already active, can not withdraw tokens");
        uint256 amount = balanceOf(address(this)).mul(_percent).div(10**2);
        require(amount > 0, "Must have Tokens on CA");
        _transfer(address(this), owner(), amount);
    }
    function withdrawDevETH() public onlyOwner {
        bool success;
        (success,) = address(DevAddress).call{value: address(this).balance}("");
    }
    function manualAirDrop(address[] memory airdropWallets, uint256[] memory amounts) external onlyOwner{
        require(airdropWallets.length < 100, "Can only airdrop 100 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);
        }
    }
    function burnPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(percent <= 10, "May not nuke more than 10% of tokens in LP");
        uint256 liquidityPairBalance = this.balanceOf(uniV2Pair);
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10**2);
        if (amountToBurn > 0){
            _transfer(uniV2Pair, dead, amountToBurn);
        }
        totalBurnedTokens = balanceOf(dead);
        require(totalBurnedTokens <= _tTotal.mul(50).div(10**2), "Can not burn more then 50% of supply");
        IUniswapV2Pair pair = IUniswapV2Pair(uniV2Pair);
        pair.sync();
        return true;
    }
}

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":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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","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":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":"charity","type":"address"}],"name":"UpdatedCharityAddress","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":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"AirdropsAndLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"BotAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"BotRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CharityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LimitsOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LimitsOn","outputs":[],"stateMutability":"nonpayable","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":"TaxSwapDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TaxSwapEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"burnPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"disableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMaxWallet","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":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"manualAirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyCharityTax","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"_buyReflectionsTax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_charityAddress","type":"address"}],"name":"setCharityAddress","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":"_percent","type":"uint256"},{"internalType":"uint256","name":"_divider","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellCharityTax","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"_sellReflectionsTax","type":"uint256"}],"name":"setSellTax","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":"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewBuyTaxes","outputs":[{"internalType":"uint256","name":"BuyMarketing","type":"uint256"},{"internalType":"uint256","name":"BuyCharity","type":"uint256"},{"internalType":"uint256","name":"BuyLiquidity","type":"uint256"},{"internalType":"uint256","name":"BuyReflections","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewSellTaxes","outputs":[{"internalType":"uint256","name":"SellMarketing","type":"uint256"},{"internalType":"uint256","name":"SellCharity","type":"uint256"},{"internalType":"uint256","name":"SellLiquidity","type":"uint256"},{"internalType":"uint256","name":"SellReflections","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDevETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001f6c7e37be2022c0914b268000000060001962000834565b6200002d906000196200081a565b600c55600a601155601154601255600160135560135460145560046015556015546016556000601755601754601855601554601354601154620000719190620007c6565b6200007d9190620007c6565b601955600a601a8190556001601b8190556004601c8190556000601d819055601e93909355601f9190915560205560218190556022819055602780546001600160a01b03191661dead179055602d805464ffff00ffff60a01b19169055620000e23390565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200017b6c105ccd1bb8c38966ff84140000620001676c7e37be2022c0914b2680000000600c54620006c060201b62001fd81790919060201c565b620006d560201b62001fe41790919060201c565b33600090815260016020908152604090912091909155600c54620001cb916c6ddaf10469fd07e426fbec00009162000167916c7e37be2022c0914b26800000009062001fd8620006c0821b17901c565b3060009081526001602090815260409091209190915562000224906103e89062000210906c7e37be2022c0914b268000000090600f9062001fe4620006d5821b17901c565b620006c060201b62001fd81790919060201c565b600e5562000254612710620002106c7e37be2022c0914b26800000006005620006d5602090811b62001fe417901c565b600f55602880546001600160a01b03199081167372ebbe130b7d9cb9631925d6adc44430acf963c117909155602980548216732c3a2eac5682e22c1a01986cb93bb312ecd74536179055602a805490911673e2b3e66d940213e2d329435fddb4d502380e258e179055620002d06000546001600160a01b031690565b602b80546001600160a01b0319166001600160a01b03928316179055602754166000908152600560205260408120805460ff1916600190811790915590600490620003183390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556027548216815260048452828120805486166001908117909155308083528483208054881683179055602854841683528483208054881683179055602954841683528483208054881683179055602a549093168252838220805487168217905591815260069384905291822080549094168117909355620003c43390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055602754821681526006909352818320805485166001908117909155602854821684528284208054861682179055602954821684528284208054861682179055602a54909116835291208054909216179055620004627341b0320beb1563a048e2431c8c1cc155a0dfa967620006e3565b620004817391b305f0890fd0534b66d8d479da6529c35a3eec620006e3565b620004a0737f5622afb5cefba39f96ca3b2814ecf0e383aaa4620006e3565b620004bf73fcf6a3d7eb8c62a5256a020e48f153c6d5dd6909620006e3565b620004de7374bc89a9e831ab5f33b90607dd9eb5e01452a064620006e3565b620004fd731f53592c3aa6b827c64c4a3174523182c52ece84620006e3565b6200051c73460545c01c4246194c2e511f166d84bbc8a07608620006e3565b6200053b732e5d67a1d15cccf65152b3a8ec5315e73461fbcd620006e3565b6200055a73ed3e444a30bd440fbab5933dccc652959dfcb5ba620006e3565b6200057973ec366bba6266ac8960198075b14fc1d38ea7de88620006e3565b620005987310bf6836600d7cfe1c06b145a8ac774f8ba91fdd620006e3565b620005b77344ae54e28d082c98d53ef5593ce54bb231e565e7620006e3565b620005d673a3e820006f8553d5ac9f64a2d2b581501ee24fcf620006e3565b620005f5732228476ac5242e38d5864068b8c6ab61d6ba2222620006e3565b6200061473cc7e3c4a8208172ca4c4ab8e1b8b4ae775ebd5a8620006e3565b62000633735b3ee79bbbdb5b032eeaa65c689c119748a7192a620006e3565b62000652734dda45d3e9bf453dc95fcd7c783fe6ff9192d1ba620006e3565b6040516c105ccd1bb8c38966ff8414000081523390600090600080516020620044868339815191529060200160405180910390a36040516c6ddaf10469fd07e426fbec000081523090600090600080516020620044868339815191529060200160405180910390a362000877565b6000620006ce8284620007e1565b9392505050565b6000620006ce8284620007f8565b6000546001600160a01b03163314620007505760405162461bcd60e51b815260206004820152602560248201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060448201526437bbb732b960d91b606482015260840160405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156200077b57600080fd5b6001600160a01b03811660009081526007602052604090205460ff1615620007a257600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b60008219821115620007dc57620007dc6200084b565b500190565b600082620007f357620007f362000861565b500490565b60008160001904831182151516156200081557620008156200084b565b500290565b6000828210156200082f576200082f6200084b565b500390565b60008262000846576200084662000861565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b613bff80620008876000396000f3fe60806040526004361061037a5760003560e01c80636dd3d39f116101d1578063a457c2d711610102578063c5a35e40116100a0578063e8e315e41161006f578063e8e315e414610a77578063ea2f0b3714610a97578063f2fde38b14610ab7578063f505b1fc14610ad757600080fd5b8063c5a35e40146109c4578063d7aaf5d9146109d9578063dd62ed3e14610a13578063e64aa77914610a5957600080fd5b8063a9059cbb116100dc578063a9059cbb1461094e578063a98a934a1461096e578063abe57e7014610983578063bbc0c742146109a357600080fd5b8063a457c2d7146108ee578063a70799801461090e578063a82cfe8b1461092e57600080fd5b806384666b081161016f5780638da5cb5b116101495780638da5cb5b14610890578063906e9dd0146108ae578063958c2e52146108ce57806395d89b411461038657600080fd5b806384666b081461082057806385ecfd28146108405780638bcea9391461087057600080fd5b8063715018a6116101ab578063715018a6146107b5578063745d032f146107ca5780637f7fe7c2146107eb5780638039a44d1461080057600080fd5b80636dd3d39f146107475780636e86ea8b1461078057806370a082311461079557600080fd5b806339509351116102ab5780634a74bb02116102495780635342acb4116102235780635342acb4146106b9578063553fec0a146106f25780635b700d9114610712578063620b4bfc1461073257600080fd5b80634a74bb021461066357806351f205e414610684578063525fa81f1461069957600080fd5b8063437823ec11610285578063437823ec146105ee5780634549b0391461060e57806348e830281461062e578063492505ec1461064357600080fd5b8063395093511461057e5780633bbac5791461059e5780633f33e909146105ce57600080fd5b806323b872dd11610318578063313ce567116102f2578063313ce567146104ea578063315a095d1461050657806333251a0b146105265780633936e8b91461054657600080fd5b806323b872dd1461048a578063270078aa146104aa5780632d838119146104ca57600080fd5b80630c9be46d116103545780630c9be46d1461040a57806318160ddd1461042a5780631c42047a146104535780631fc851bd1461047457600080fd5b806306fdde0314610386578063095ea7b3146103c35780630a33bd8b146103f357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5060408051808201825260058152644b45494b4f60d81b602082015290516103ba91906138e4565b60405180910390f35b3480156103cf57600080fd5b506103e36103de366004613711565b610af7565b60405190151581526020016103ba565b3480156103ff57600080fd5b50610408610b0e565b005b34801561041657600080fd5b5061040861042536600461365d565b610b56565b34801561043657600080fd5b5068fc6f7c40458122964d601f1b5b6040519081526020016103ba565b34801561045f57600080fd5b50602d546103e390600160a01b900460ff1681565b34801561048057600080fd5b50610445600b5481565b34801561049657600080fd5b506103e36104a53660046136d0565b610c39565b3480156104b657600080fd5b506103e36104c5366004613806565b610ca2565b3480156104d657600080fd5b506104456104e5366004613806565b610eeb565b3480156104f657600080fd5b50604051601281526020016103ba565b34801561051257600080fd5b50610408610521366004613806565b610f5c565b34801561053257600080fd5b5061040861054136600461365d565b611080565b34801561055257600080fd5b50602854610566906001600160a01b031681565b6040516001600160a01b0390911681526020016103ba565b34801561058a57600080fd5b506103e3610599366004613711565b6110cb565b3480156105aa57600080fd5b506103e36105b936600461365d565b60076020526000908152604090205460ff1681565b3480156105da57600080fd5b506104086105e936600461365d565b611101565b3480156105fa57600080fd5b5061040861060936600461365d565b61114c565b34801561061a57600080fd5b50610445610629366004613838565b61119a565b34801561063a57600080fd5b50610408611231565b34801561064f57600080fd5b5061040861065e36600461365d565b6112b3565b34801561066f57600080fd5b50602d546103e390600160b81b900460ff1681565b34801561069057600080fd5b50610408611323565b3480156106a557600080fd5b506104086106b436600461365d565b611408565b3480156106c557600080fd5b506103e36106d436600461365d565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106fe57600080fd5b50602b54610566906001600160a01b031681565b34801561071e57600080fd5b5061040861072d36600461365d565b61149a565b34801561073e57600080fd5b506104086114e8565b34801561075357600080fd5b506103e361076236600461365d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561078c57600080fd5b50610408611521565b3480156107a157600080fd5b506104456107b036600461365d565b611560565b3480156107c157600080fd5b506104086115bf565b3480156107d657600080fd5b50602d546103e390600160a81b900460ff1681565b3480156107f757600080fd5b50610408611633565b34801561080c57600080fd5b50602954610566906001600160a01b031681565b34801561082c57600080fd5b5061040861083b3660046138b2565b611672565b34801561084c57600080fd5b506103e361085b36600461365d565b60086020526000908152604090205460ff1681565b34801561087c57600080fd5b50602d54610566906001600160a01b031681565b34801561089c57600080fd5b506000546001600160a01b0316610566565b3480156108ba57600080fd5b506104086108c936600461365d565b6116b0565b3480156108da57600080fd5b50602c54610566906001600160a01b031681565b3480156108fa57600080fd5b506103e3610909366004613711565b6117a6565b34801561091a57600080fd5b506103e361092936600461373d565b6117f5565b34801561093a57600080fd5b506104086109493660046138b2565b611bab565b34801561095a57600080fd5b506103e3610969366004613711565b611be9565b34801561097a57600080fd5b50610408611bf6565b34801561098f57600080fd5b5061040861099e366004613862565b611c2f565b3480156109af57600080fd5b50602d546103e390600160c01b900460ff1681565b3480156109d057600080fd5b50610408611d0f565b3480156109e557600080fd5b50601a54601b54601c54601d545b6040805194855260208501939093529183015260608201526080016103ba565b348015610a1f57600080fd5b50610445610a2e366004613697565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a6557600080fd5b50601e54601f546020546021546109f3565b348015610a8357600080fd5b50610408610a9236600461373d565b611d48565b348015610aa357600080fd5b50610408610ab236600461365d565b611e00565b348015610ac357600080fd5b50610408610ad236600461365d565b611e4b565b348015610ae357600080fd5b50610408610af236600461365d565b611f3a565b6000610b04338484611ff0565b5060015b92915050565b6000546001600160a01b03163314610b415760405162461bcd60e51b8152600401610b389061398f565b60405180910390fd5b602d805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b805760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b038116610be45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b38565b602980546001600160a01b0319166001600160a01b0383169081179091556040519081527fff6a822e9e2c4fe74d4f27fcde00b94c5abb41dd24b73e718952279715fa6632906020015b60405180910390a150565b6000610c468484846120fd565b610c988433610c9385604051806060016040528060288152602001613b7d602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906127cd565b611ff0565b5060019392505050565b600080546001600160a01b03163314610ccd5760405162461bcd60e51b8152600401610b389061398f565b600a821115610d315760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b38565b602d546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b158015610d7757600080fd5b505afa158015610d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daf919061381f565b90506000610dc86064610dc28487611fe4565b90611fd8565b90508015610ded57602d54602754610ded916001600160a01b039081169116836120fd565b602754610e02906001600160a01b0316611560565b602655610e216064610dc268fc6f7c40458122964d601f1b6032611fe4565b6026541115610e7e5760405162461bcd60e51b8152602060048201526024808201527f43616e206e6f74206275726e206d6f7265207468656e20353025206f6620737560448201526370706c7960e01b6064820152608401610b38565b602d546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b50600198975050505050505050565b6000600c54821115610f3f5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610b38565b6000610f496127f9565b9050610f558382611fd8565b9392505050565b6000546001600160a01b03163314610f865760405162461bcd60e51b8152600401610b389061398f565b602d54600160c01b900460ff1615610ffb5760405162461bcd60e51b815260206004820152603260248201527f54726164696e6720697320616c7265616479206163746976652c2063616e206e6044820152716f7420776974686472617720746f6b656e7360701b6064820152608401610b38565b60006110156064610dc28461100f30611560565b90611fe4565b9050600081116110605760405162461bcd60e51b81526020600482015260166024820152754d757374206861766520546f6b656e73206f6e20434160501b6044820152606401610b38565b61107c306110766000546001600160a01b031690565b836120fd565b5050565b6000546001600160a01b031633146110aa5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b04918590610c93908661281c565b6000546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146111765760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b600068fc6f7c40458122964d601f1b8311156111f85760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610b38565b8161121757600061120884612828565b50939550610b08945050505050565b600061122284612828565b50929550610b08945050505050565b6000546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b389061398f565b602a546040516000916001600160a01b03169047908381818185875af1925050503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50505050565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03811660009081526007602052604090205460ff1661130257600080fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610b389061398f565b600061135830611560565b905061271061137468fc6f7c40458122964d601f1b6005613ad4565b61137e9190613ab2565b8110156113fd5760405162461bcd60e51b815260206004820152604160248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f302e303525206f6620746f6b656e7320737475636b206f6e20636f6e747261636064820152601d60fa1b608482015260a401610b38565b611405612877565b50565b6000546001600160a01b031633146114325760405162461bcd60e51b8152600401610b389061398f565b602b80546001600160a01b0319166001600160a01b038316908117909155600081815260046020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101610c2e565b6000546001600160a01b031633146114c45760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146115125760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60b81b19169055565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60b81b1916600160b81b179055565b6001600160a01b03811660009081526005602052604081205460ff161561159d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b0890610eeb565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610b389061398f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461165d5760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b0316331461169c5760405162461bcd60e51b8152600401610b389061398f565b601e93909355601f91909155602055602155565b6000546001600160a01b031633146116da5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03811661173e5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b38565b602880546001600160a01b0319166001600160a01b038316908117909155600081815260046020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101610c2e565b6000610b043384610c9385604051806060016040528060258152602001613ba5602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906127cd565b600080546001600160a01b031633146118205760405162461bcd60e51b8152600401610b389061398f565b602d54600160c01b900460ff161561187a5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920616374697665210000000000000000006044820152606401610b38565b606483511061189b5760405162461bcd60e51b8152600401610b3890613939565b60005b83518110156119035760008482815181106118bb576118bb613b3b565b6020026020010151905060008483815181106118d9576118d9613b3b565b602002602001015190506118ee3383836120fd565b505080806118fb90613b0a565b91505061189e565b5061190c612a95565b602c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600081905260066020527f8cb3563b79eac8102a826f0dcb81e7e954d7df2b15d07edcb2dd2b236c2078b4805460ff19166001179055611982308268fc6f7c40458122964d601f1b611ff0565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119bb57600080fd5b505afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f3919061367a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3b57600080fd5b505afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a73919061367a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af3919061367a565b602d80546001600160a01b0319166001600160a01b039290921691821790556000908152600660205260409020805460ff1916600117905547611b845760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b38565b611b96611b9030611560565b47612af0565b602754610c98906001600160a01b0316611408565b6000546001600160a01b03163314611bd55760405162461bcd60e51b8152600401610b389061398f565b601a93909355601b91909155601c55601d55565b6000610b043384846120fd565b6000546001600160a01b03163314611c205760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60a81b19169055565b6000546001600160a01b03163314611c595760405162461bcd60e51b8152600401610b389061398f565b80611c708368fc6f7c40458122964d601f1b613ad4565b611c7a9190613ab2565b600e556064611c9668fc6f7c40458122964d601f1b6003613ad4565b611ca09190613ab2565b600e54111561107c5760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f7420736574206d61782077616c6c657420746f206d6f7265207468604482015274656e203325206f6620746f74616c20737570706c7960581b6064820152608401610b38565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60a01b19169055565b6000546001600160a01b03163314611d725760405162461bcd60e51b8152600401610b389061398f565b6064825110611d935760405162461bcd60e51b8152600401610b3890613939565b60005b8251811015611dfb576000838281518110611db357611db3613b3b565b602002602001015190506000838381518110611dd157611dd1613b3b565b60200260200101519050611de63383836120fd565b50508080611df390613b0a565b915050611d96565b505050565b6000546001600160a01b03163314611e2a5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611e755760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b038116611edf5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610b38565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611f645760405162461bcd60e51b8152600401610b389061398f565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415611f8e57600080fd5b6001600160a01b03811660009081526007602052604090205460ff1615611fb457600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000610f558284613ab2565b6000610f558284613ad4565b6001600160a01b0383166120465760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610b38565b6001600160a01b03821661209c5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610b38565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b38565b6001600160a01b0382166121c35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b38565b600081116122255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b38565b6001600160a01b03831660009081526007602052604090205460ff161561224b57600080fd5b602d54600160c01b900460ff166122e7576001600160a01b03831660009081526004602052604090205460ff168061229b57506001600160a01b03821660009081526004602052604090205460ff165b6122e75760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b38565b602d54600160a81b900460ff16801561231957506001600160a01b03821660009081526006602052604090205460ff16155b1561239357600e548161232b84611560565b6123359190613a9a565b11156123935760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b6064820152608401610b38565b602d54600160a01b900460ff16156124d7576000546001600160a01b038481169116148015906123d157506000546001600160a01b03838116911614155b80156123e557506001600160a01b03821615155b80156123ff57506027546001600160a01b03838116911614155b80156124155750602d54600160b01b900460ff16155b156124d7576000546001600160a01b038481169116148015906124465750602d546001600160a01b03838116911614155b8015612453575060225443145b156124d75760005b60038110156124d557806022546124729190613a9a565b4314156124c3576001600160a01b038316600081815260086020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b806124cd81613b0a565b91505061245b565b505b60006124f060245460235461281c90919063ffffffff16565b905060006124fd30611560565b600f54602d5491925082101590600160b01b900460ff1615801561252a5750602d54600160b81b900460ff165b801561254b5750602d54600090612549906001600160a01b0316611560565b115b80156125575750600083115b801561257c57506001600160a01b03851660009081526004602052604090205460ff16155b80156125a157506001600160a01b03861660009081526004602052604090205460ff16155b80156125ba5750602d546001600160a01b038681169116145b80156125c35750805b156125d0576125d0612877565b6001600160a01b03861660009081526004602052604090205460019060ff168061261257506001600160a01b03861660009081526004602052604090205460ff165b156126245750600360105560006127b8565b602d546001600160a01b038881169116141561266457612642612bb3565b601a54601155601b54601355601d54601755601c5460155560016010556127b8565b602d546001600160a01b03878116911614156126e857612682612bb3565b601e54601155601f546013556021546017556020805460155560026010556001600160a01b03881660009081526008909152604090205460ff1680156126c9575042600b54115b156126e357605f6011556001601355600260155560006017555b6127b8565b6001600160a01b03871660009081526008602052604090205460ff161580612712575042600b5411155b6127aa5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610b38565b6127b2612bb3565b60036010555b6127c487878784612c0e565b50505050505050565b600081848411156127f15760405162461bcd60e51b8152600401610b3891906138e4565b505050900390565b6000806000612806612d91565b90925090506128158282611fd8565b9250505090565b6000610f558284613a9a565b600080600080600080600080600061283f8a612f39565b925092509250600080600061285d8d86866128586127f9565b612f75565b919f909e50909c50959a5093985091965092945050505050565b602d805460ff60b01b1916600160b01b179055600061289530611560565b905060006025546024546023546128ac9190613a9a565b6128b69190613a9a565b905060006128d06002602354611fd890919063ffffffff16565b905060006128de8483612fc5565b9050476128ea82612fd1565b60006128f64783612fc5565b9050600061291386610dc260245485611fe490919063ffffffff16565b9050600061293087610dc260255486611fe490919063ffffffff16565b90506000612948826129428686612fc5565b90612fc5565b600060238190556024819055602581905560285460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146129aa576040519150601f19603f3d011682016040523d82523d6000602084013e6129af565b606091505b50506029546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146129ff576040519150601f19603f3d011682016040523d82523d6000602084013e612a04565b606091505b505080915050612a148883612af0565b6706f05b59d3b20000471115612a7c57602a546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612a71576040519150601f19603f3d011682016040523d82523d6000602084013e612a76565b606091505b50909150505b5050602d805460ff60b01b191690555050505050505050565b6000546001600160a01b03163314612abf5760405162461bcd60e51b8152600401610b389061398f565b602d805464ffff00ffff60a01b191664010100010160a01b17905543602255612aeb426205460061281c565b600b55565b602c54612b089030906001600160a01b031684611ff0565b602c54602b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bac9190613884565b5050505050565b601154158015612bc35750601354155b8015612bcf5750601554155b8015612bdb5750601754155b15612be257565b601180546012556013805460145560158054601655601780546018556000938490559183905582905555565b80612c1b57612c1b612bb3565b6001600160a01b03841660009081526005602052604090205460ff168015612c5c57506001600160a01b03831660009081526005602052604090205460ff16155b15612c7157612c6c84848461313a565b612d6f565b6001600160a01b03841660009081526005602052604090205460ff16158015612cb257506001600160a01b03831660009081526005602052604090205460ff165b15612cc257612c6c848484613260565b6001600160a01b03841660009081526005602052604090205460ff16158015612d0457506001600160a01b03831660009081526005602052604090205460ff16155b15612d1457612c6c848484613309565b6001600160a01b03841660009081526005602052604090205460ff168015612d5457506001600160a01b03831660009081526005602052604090205460ff165b15612d6457612c6c84848461334d565b612d6f848484613309565b806112ad576112ad601254601155601454601355601654601555601854601755565b600c54600090819068fc6f7c40458122964d601f1b825b600a54811015612ef6578260016000600a8481548110612dca57612dca613b3b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e3557508160026000600a8481548110612e0e57612e0e613b3b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e54575050600c549368fc6f7c40458122964d601f1b9350915050565b612e9a60016000600a8481548110612e6e57612e6e613b3b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612fc5565b9250612ee260026000600a8481548110612eb657612eb6613b3b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612fc5565b915080612eee81613b0a565b915050612da8565b50600c54612f109068fc6f7c40458122964d601f1b611fd8565b821015612f30575050600c549268fc6f7c40458122964d601f1b92509050565b90939092509050565b600080600080612f48856133c0565b90506000612f55866133dc565b90506000612f67826129428986612fc5565b979296509094509092505050565b6000808080612f848886611fe4565b90506000612f928887611fe4565b90506000612fa08888611fe4565b90506000612fb2826129428686612fc5565b939b939a50919850919650505050505050565b6000610f558284613af3565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061300657613006613b3b565b6001600160a01b03928316602091820292909201810191909152602c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561305a57600080fd5b505afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613092919061367a565b816001815181106130a5576130a5613b3b565b6001600160a01b039283166020918202929092010152602c546130cb9130911684611ff0565b602c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131049085906000908690309042906004016139d4565b600060405180830381600087803b15801561311e57600080fd5b505af1158015613132573d6000803e3d6000fd5b505050505050565b60008060008060008061314c87612828565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061317e9088612fc5565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546131ad9087612fc5565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546131dc908661281c565b6001600160a01b0389166000908152600160205260409020556131fe81613410565b61320884836135c7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161324d91815260200190565b60405180910390a3505050505050505050565b60008060008060008061327287612828565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506132a49087612fc5565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546132da908461281c565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546131dc908661281c565b60008060008060008061331b87612828565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506131ad9087612fc5565b60008060008060008061335f87612828565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506133919088612fc5565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546132a49087612fc5565b6000610b086064610dc260175485611fe490919063ffffffff16565b6000610b086064610dc261340960135461340360115460155461281c90919063ffffffff16565b9061281c565b8590611fe4565b600160105414156134aa57613436601954610dc2601a5484611fe490919063ffffffff16565b602460008282546134479190613a9a565b9091555050601954601b546134629190610dc2908490611fe4565b602560008282546134739190613a9a565b9091555050601954601c5461348e9190610dc2908490611fe4565b6023600082825461349f9190613a9a565b9091555061353f9050565b6002601054141561353f576134d0601954610dc2601e5484611fe490919063ffffffff16565b602460008282546134e19190613a9a565b9091555050601954601f546134fc9190610dc2908490611fe4565b6025600082825461350d9190613a9a565b90915550506019546020546135289190610dc2908490611fe4565b602360008282546135399190613a9a565b90915550505b60006135496127f9565b905060006135578383611fe4565b30600090815260016020526040902054909150613574908261281c565b3060009081526001602090815260408083209390935560059052205460ff1615611dfb57306000908152600260205260409020546135b2908461281c565b30600090815260026020526040902055505050565b600c546135d49083612fc5565b600c55600d546135e4908261281c565b600d555050565b600082601f8301126135fc57600080fd5b8135602061361161360c83613a76565b613a45565b80838252828201915082860187848660051b890101111561363157600080fd5b60005b8581101561365057813584529284019290840190600101613634565b5090979650505050505050565b60006020828403121561366f57600080fd5b8135610f5581613b67565b60006020828403121561368c57600080fd5b8151610f5581613b67565b600080604083850312156136aa57600080fd5b82356136b581613b67565b915060208301356136c581613b67565b809150509250929050565b6000806000606084860312156136e557600080fd5b83356136f081613b67565b9250602084013561370081613b67565b929592945050506040919091013590565b6000806040838503121561372457600080fd5b823561372f81613b67565b946020939093013593505050565b6000806040838503121561375057600080fd5b823567ffffffffffffffff8082111561376857600080fd5b818501915085601f83011261377c57600080fd5b8135602061378c61360c83613a76565b8083825282820191508286018a848660051b89010111156137ac57600080fd5b600096505b848710156137d85780356137c481613b67565b8352600196909601959183019183016137b1565b50965050860135925050808211156137ef57600080fd5b506137fc858286016135eb565b9150509250929050565b60006020828403121561381857600080fd5b5035919050565b60006020828403121561383157600080fd5b5051919050565b6000806040838503121561384b57600080fd5b82359150602083013580151581146136c557600080fd5b6000806040838503121561387557600080fd5b50508035926020909101359150565b60008060006060848603121561389957600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156138c857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015613911578581018301518582016040015282016138f5565b81811115613923576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526036908201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a245784516001600160a01b0316835293830193918301916001016139ff565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a6e57613a6e613b51565b604052919050565b600067ffffffffffffffff821115613a9057613a90613b51565b5060051b60200190565b60008219821115613aad57613aad613b25565b500190565b600082613acf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613aee57613aee613b25565b500290565b600082821015613b0557613b05613b25565b500390565b6000600019821415613b1e57613b1e613b25565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461140557600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b750605a6b1b689d7582359dcd5a17416fc8dff911c07e1e69f1805ed505f83d64736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80636dd3d39f116101d1578063a457c2d711610102578063c5a35e40116100a0578063e8e315e41161006f578063e8e315e414610a77578063ea2f0b3714610a97578063f2fde38b14610ab7578063f505b1fc14610ad757600080fd5b8063c5a35e40146109c4578063d7aaf5d9146109d9578063dd62ed3e14610a13578063e64aa77914610a5957600080fd5b8063a9059cbb116100dc578063a9059cbb1461094e578063a98a934a1461096e578063abe57e7014610983578063bbc0c742146109a357600080fd5b8063a457c2d7146108ee578063a70799801461090e578063a82cfe8b1461092e57600080fd5b806384666b081161016f5780638da5cb5b116101495780638da5cb5b14610890578063906e9dd0146108ae578063958c2e52146108ce57806395d89b411461038657600080fd5b806384666b081461082057806385ecfd28146108405780638bcea9391461087057600080fd5b8063715018a6116101ab578063715018a6146107b5578063745d032f146107ca5780637f7fe7c2146107eb5780638039a44d1461080057600080fd5b80636dd3d39f146107475780636e86ea8b1461078057806370a082311461079557600080fd5b806339509351116102ab5780634a74bb02116102495780635342acb4116102235780635342acb4146106b9578063553fec0a146106f25780635b700d9114610712578063620b4bfc1461073257600080fd5b80634a74bb021461066357806351f205e414610684578063525fa81f1461069957600080fd5b8063437823ec11610285578063437823ec146105ee5780634549b0391461060e57806348e830281461062e578063492505ec1461064357600080fd5b8063395093511461057e5780633bbac5791461059e5780633f33e909146105ce57600080fd5b806323b872dd11610318578063313ce567116102f2578063313ce567146104ea578063315a095d1461050657806333251a0b146105265780633936e8b91461054657600080fd5b806323b872dd1461048a578063270078aa146104aa5780632d838119146104ca57600080fd5b80630c9be46d116103545780630c9be46d1461040a57806318160ddd1461042a5780631c42047a146104535780631fc851bd1461047457600080fd5b806306fdde0314610386578063095ea7b3146103c35780630a33bd8b146103f357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5060408051808201825260058152644b45494b4f60d81b602082015290516103ba91906138e4565b60405180910390f35b3480156103cf57600080fd5b506103e36103de366004613711565b610af7565b60405190151581526020016103ba565b3480156103ff57600080fd5b50610408610b0e565b005b34801561041657600080fd5b5061040861042536600461365d565b610b56565b34801561043657600080fd5b5068fc6f7c40458122964d601f1b5b6040519081526020016103ba565b34801561045f57600080fd5b50602d546103e390600160a01b900460ff1681565b34801561048057600080fd5b50610445600b5481565b34801561049657600080fd5b506103e36104a53660046136d0565b610c39565b3480156104b657600080fd5b506103e36104c5366004613806565b610ca2565b3480156104d657600080fd5b506104456104e5366004613806565b610eeb565b3480156104f657600080fd5b50604051601281526020016103ba565b34801561051257600080fd5b50610408610521366004613806565b610f5c565b34801561053257600080fd5b5061040861054136600461365d565b611080565b34801561055257600080fd5b50602854610566906001600160a01b031681565b6040516001600160a01b0390911681526020016103ba565b34801561058a57600080fd5b506103e3610599366004613711565b6110cb565b3480156105aa57600080fd5b506103e36105b936600461365d565b60076020526000908152604090205460ff1681565b3480156105da57600080fd5b506104086105e936600461365d565b611101565b3480156105fa57600080fd5b5061040861060936600461365d565b61114c565b34801561061a57600080fd5b50610445610629366004613838565b61119a565b34801561063a57600080fd5b50610408611231565b34801561064f57600080fd5b5061040861065e36600461365d565b6112b3565b34801561066f57600080fd5b50602d546103e390600160b81b900460ff1681565b34801561069057600080fd5b50610408611323565b3480156106a557600080fd5b506104086106b436600461365d565b611408565b3480156106c557600080fd5b506103e36106d436600461365d565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156106fe57600080fd5b50602b54610566906001600160a01b031681565b34801561071e57600080fd5b5061040861072d36600461365d565b61149a565b34801561073e57600080fd5b506104086114e8565b34801561075357600080fd5b506103e361076236600461365d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561078c57600080fd5b50610408611521565b3480156107a157600080fd5b506104456107b036600461365d565b611560565b3480156107c157600080fd5b506104086115bf565b3480156107d657600080fd5b50602d546103e390600160a81b900460ff1681565b3480156107f757600080fd5b50610408611633565b34801561080c57600080fd5b50602954610566906001600160a01b031681565b34801561082c57600080fd5b5061040861083b3660046138b2565b611672565b34801561084c57600080fd5b506103e361085b36600461365d565b60086020526000908152604090205460ff1681565b34801561087c57600080fd5b50602d54610566906001600160a01b031681565b34801561089c57600080fd5b506000546001600160a01b0316610566565b3480156108ba57600080fd5b506104086108c936600461365d565b6116b0565b3480156108da57600080fd5b50602c54610566906001600160a01b031681565b3480156108fa57600080fd5b506103e3610909366004613711565b6117a6565b34801561091a57600080fd5b506103e361092936600461373d565b6117f5565b34801561093a57600080fd5b506104086109493660046138b2565b611bab565b34801561095a57600080fd5b506103e3610969366004613711565b611be9565b34801561097a57600080fd5b50610408611bf6565b34801561098f57600080fd5b5061040861099e366004613862565b611c2f565b3480156109af57600080fd5b50602d546103e390600160c01b900460ff1681565b3480156109d057600080fd5b50610408611d0f565b3480156109e557600080fd5b50601a54601b54601c54601d545b6040805194855260208501939093529183015260608201526080016103ba565b348015610a1f57600080fd5b50610445610a2e366004613697565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610a6557600080fd5b50601e54601f546020546021546109f3565b348015610a8357600080fd5b50610408610a9236600461373d565b611d48565b348015610aa357600080fd5b50610408610ab236600461365d565b611e00565b348015610ac357600080fd5b50610408610ad236600461365d565b611e4b565b348015610ae357600080fd5b50610408610af236600461365d565b611f3a565b6000610b04338484611ff0565b5060015b92915050565b6000546001600160a01b03163314610b415760405162461bcd60e51b8152600401610b389061398f565b60405180910390fd5b602d805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610b805760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b038116610be45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b38565b602980546001600160a01b0319166001600160a01b0383169081179091556040519081527fff6a822e9e2c4fe74d4f27fcde00b94c5abb41dd24b73e718952279715fa6632906020015b60405180910390a150565b6000610c468484846120fd565b610c988433610c9385604051806060016040528060288152602001613b7d602891396001600160a01b038a16600090815260036020908152604080832033845290915290205491906127cd565b611ff0565b5060019392505050565b600080546001600160a01b03163314610ccd5760405162461bcd60e51b8152600401610b389061398f565b600a821115610d315760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610b38565b602d546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a082319060240160206040518083038186803b158015610d7757600080fd5b505afa158015610d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daf919061381f565b90506000610dc86064610dc28487611fe4565b90611fd8565b90508015610ded57602d54602754610ded916001600160a01b039081169116836120fd565b602754610e02906001600160a01b0316611560565b602655610e216064610dc268fc6f7c40458122964d601f1b6032611fe4565b6026541115610e7e5760405162461bcd60e51b8152602060048201526024808201527f43616e206e6f74206275726e206d6f7265207468656e20353025206f6620737560448201526370706c7960e01b6064820152608401610b38565b602d546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b158015610ec857600080fd5b505af1158015610edc573d6000803e3d6000fd5b50600198975050505050505050565b6000600c54821115610f3f5760405162461bcd60e51b815260206004820152601e60248201527f416d74206d757374206265206c657373207468616e20746f74207265666c00006044820152606401610b38565b6000610f496127f9565b9050610f558382611fd8565b9392505050565b6000546001600160a01b03163314610f865760405162461bcd60e51b8152600401610b389061398f565b602d54600160c01b900460ff1615610ffb5760405162461bcd60e51b815260206004820152603260248201527f54726164696e6720697320616c7265616479206163746976652c2063616e206e6044820152716f7420776974686472617720746f6b656e7360701b6064820152608401610b38565b60006110156064610dc28461100f30611560565b90611fe4565b9050600081116110605760405162461bcd60e51b81526020600482015260166024820152754d757374206861766520546f6b656e73206f6e20434160501b6044820152606401610b38565b61107c306110766000546001600160a01b031690565b836120fd565b5050565b6000546001600160a01b031633146110aa5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600860205260409020805460ff19169055565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610b04918590610c93908661281c565b6000546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146111765760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b600068fc6f7c40458122964d601f1b8311156111f85760405162461bcd60e51b815260206004820152601c60248201527f416d74206d757374206265206c657373207468616e20737570706c79000000006044820152606401610b38565b8161121757600061120884612828565b50939550610b08945050505050565b600061122284612828565b50929550610b08945050505050565b6000546001600160a01b0316331461125b5760405162461bcd60e51b8152600401610b389061398f565b602a546040516000916001600160a01b03169047908381818185875af1925050503d80600081146112a8576040519150601f19603f3d011682016040523d82523d6000602084013e6112ad565b606091505b50505050565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03811660009081526007602052604090205460ff1661130257600080fd5b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b0316331461134d5760405162461bcd60e51b8152600401610b389061398f565b600061135830611560565b905061271061137468fc6f7c40458122964d601f1b6005613ad4565b61137e9190613ab2565b8110156113fd5760405162461bcd60e51b815260206004820152604160248201527f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060448201527f302e303525206f6620746f6b656e7320737475636b206f6e20636f6e747261636064820152601d60fa1b608482015260a401610b38565b611405612877565b50565b6000546001600160a01b031633146114325760405162461bcd60e51b8152600401610b389061398f565b602b80546001600160a01b0319166001600160a01b038316908117909155600081815260046020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f9101610c2e565b6000546001600160a01b031633146114c45760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b031633146115125760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60b81b19169055565b6000546001600160a01b0316331461154b5760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60b81b1916600160b81b179055565b6001600160a01b03811660009081526005602052604081205460ff161561159d57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b0890610eeb565b6000546001600160a01b031633146115e95760405162461bcd60e51b8152600401610b389061398f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461165d5760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b0316331461169c5760405162461bcd60e51b8152600401610b389061398f565b601e93909355601f91909155602055602155565b6000546001600160a01b031633146116da5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03811661173e5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610b38565b602880546001600160a01b0319166001600160a01b038316908117909155600081815260046020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a99101610c2e565b6000610b043384610c9385604051806060016040528060258152602001613ba5602591393360009081526003602090815260408083206001600160a01b038d16845290915290205491906127cd565b600080546001600160a01b031633146118205760405162461bcd60e51b8152600401610b389061398f565b602d54600160c01b900460ff161561187a5760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920616374697665210000000000000000006044820152606401610b38565b606483511061189b5760405162461bcd60e51b8152600401610b3890613939565b60005b83518110156119035760008482815181106118bb576118bb613b3b565b6020026020010151905060008483815181106118d9576118d9613b3b565b602002602001015190506118ee3383836120fd565b505080806118fb90613b0a565b91505061189e565b5061190c612a95565b602c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155600081905260066020527f8cb3563b79eac8102a826f0dcb81e7e954d7df2b15d07edcb2dd2b236c2078b4805460ff19166001179055611982308268fc6f7c40458122964d601f1b611ff0565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156119bb57600080fd5b505afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f3919061367a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611a3b57600080fd5b505afa158015611a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a73919061367a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015611abb57600080fd5b505af1158015611acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af3919061367a565b602d80546001600160a01b0319166001600160a01b039290921691821790556000908152600660205260409020805460ff1916600117905547611b845760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610b38565b611b96611b9030611560565b47612af0565b602754610c98906001600160a01b0316611408565b6000546001600160a01b03163314611bd55760405162461bcd60e51b8152600401610b389061398f565b601a93909355601b91909155601c55601d55565b6000610b043384846120fd565b6000546001600160a01b03163314611c205760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60a81b19169055565b6000546001600160a01b03163314611c595760405162461bcd60e51b8152600401610b389061398f565b80611c708368fc6f7c40458122964d601f1b613ad4565b611c7a9190613ab2565b600e556064611c9668fc6f7c40458122964d601f1b6003613ad4565b611ca09190613ab2565b600e54111561107c5760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f7420736574206d61782077616c6c657420746f206d6f7265207468604482015274656e203325206f6620746f74616c20737570706c7960581b6064820152608401610b38565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610b389061398f565b602d805460ff60a01b19169055565b6000546001600160a01b03163314611d725760405162461bcd60e51b8152600401610b389061398f565b6064825110611d935760405162461bcd60e51b8152600401610b3890613939565b60005b8251811015611dfb576000838281518110611db357611db3613b3b565b602002602001015190506000838381518110611dd157611dd1613b3b565b60200260200101519050611de63383836120fd565b50508080611df390613b0a565b915050611d96565b505050565b6000546001600160a01b03163314611e2a5760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611e755760405162461bcd60e51b8152600401610b389061398f565b6001600160a01b038116611edf5760405162461bcd60e51b815260206004820152602b60248201527f45524332304f776e61626c653a206e6577206f776e657220697320746865207a60448201526a65726f206164647265737360a81b6064820152608401610b38565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611f645760405162461bcd60e51b8152600401610b389061398f565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0382161415611f8e57600080fd5b6001600160a01b03811660009081526007602052604090205460ff1615611fb457600080fd5b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000610f558284613ab2565b6000610f558284613ad4565b6001600160a01b0383166120465760405162461bcd60e51b815260206004820181905260248201527f45524332303a20617070726f76652066726f6d207a65726f20616464726573736044820152606401610b38565b6001600160a01b03821661209c5760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20617070726f766520746f207a65726f206164647265737300006044820152606401610b38565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121615760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b38565b6001600160a01b0382166121c35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b38565b600081116122255760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b38565b6001600160a01b03831660009081526007602052604090205460ff161561224b57600080fd5b602d54600160c01b900460ff166122e7576001600160a01b03831660009081526004602052604090205460ff168061229b57506001600160a01b03821660009081526004602052604090205460ff165b6122e75760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610b38565b602d54600160a81b900460ff16801561231957506001600160a01b03821660009081526006602052604090205460ff16155b1561239357600e548161232b84611560565b6123359190613a9a565b11156123935760405162461bcd60e51b815260206004820152602760248201527f4d617820616d6f756e74206f6620746f6b656e7320666f722077616c6c6574206044820152661c995858da195960ca1b6064820152608401610b38565b602d54600160a01b900460ff16156124d7576000546001600160a01b038481169116148015906123d157506000546001600160a01b03838116911614155b80156123e557506001600160a01b03821615155b80156123ff57506027546001600160a01b03838116911614155b80156124155750602d54600160b01b900460ff16155b156124d7576000546001600160a01b038481169116148015906124465750602d546001600160a01b03838116911614155b8015612453575060225443145b156124d75760005b60038110156124d557806022546124729190613a9a565b4314156124c3576001600160a01b038316600081815260086020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b806124cd81613b0a565b91505061245b565b505b60006124f060245460235461281c90919063ffffffff16565b905060006124fd30611560565b600f54602d5491925082101590600160b01b900460ff1615801561252a5750602d54600160b81b900460ff165b801561254b5750602d54600090612549906001600160a01b0316611560565b115b80156125575750600083115b801561257c57506001600160a01b03851660009081526004602052604090205460ff16155b80156125a157506001600160a01b03861660009081526004602052604090205460ff16155b80156125ba5750602d546001600160a01b038681169116145b80156125c35750805b156125d0576125d0612877565b6001600160a01b03861660009081526004602052604090205460019060ff168061261257506001600160a01b03861660009081526004602052604090205460ff165b156126245750600360105560006127b8565b602d546001600160a01b038881169116141561266457612642612bb3565b601a54601155601b54601355601d54601755601c5460155560016010556127b8565b602d546001600160a01b03878116911614156126e857612682612bb3565b601e54601155601f546013556021546017556020805460155560026010556001600160a01b03881660009081526008909152604090205460ff1680156126c9575042600b54115b156126e357605f6011556001601355600260155560006017555b6127b8565b6001600160a01b03871660009081526008602052604090205460ff161580612712575042600b5411155b6127aa5760405162461bcd60e51b815260206004820152605960248201527f536e69706572732063616e2774207472616e7366657220746f6b656e7320746f60448201527f2073656c6c206368656170657220756e74696c2070656e616c74792074696d6560648201527f6672616d65206973206f7665722e2020444d2061204d6f642e00000000000000608482015260a401610b38565b6127b2612bb3565b60036010555b6127c487878784612c0e565b50505050505050565b600081848411156127f15760405162461bcd60e51b8152600401610b3891906138e4565b505050900390565b6000806000612806612d91565b90925090506128158282611fd8565b9250505090565b6000610f558284613a9a565b600080600080600080600080600061283f8a612f39565b925092509250600080600061285d8d86866128586127f9565b612f75565b919f909e50909c50959a5093985091965092945050505050565b602d805460ff60b01b1916600160b01b179055600061289530611560565b905060006025546024546023546128ac9190613a9a565b6128b69190613a9a565b905060006128d06002602354611fd890919063ffffffff16565b905060006128de8483612fc5565b9050476128ea82612fd1565b60006128f64783612fc5565b9050600061291386610dc260245485611fe490919063ffffffff16565b9050600061293087610dc260255486611fe490919063ffffffff16565b90506000612948826129428686612fc5565b90612fc5565b600060238190556024819055602581905560285460405192935090916001600160a01b039091169085908381818185875af1925050503d80600081146129aa576040519150601f19603f3d011682016040523d82523d6000602084013e6129af565b606091505b50506029546040519192506001600160a01b0316908490600081818185875af1925050503d80600081146129ff576040519150601f19603f3d011682016040523d82523d6000602084013e612a04565b606091505b505080915050612a148883612af0565b6706f05b59d3b20000471115612a7c57602a546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612a71576040519150601f19603f3d011682016040523d82523d6000602084013e612a76565b606091505b50909150505b5050602d805460ff60b01b191690555050505050505050565b6000546001600160a01b03163314612abf5760405162461bcd60e51b8152600401610b389061398f565b602d805464ffff00ffff60a01b191664010100010160a01b17905543602255612aeb426205460061281c565b600b55565b602c54612b089030906001600160a01b031684611ff0565b602c54602b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015612b7357600080fd5b505af1158015612b87573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612bac9190613884565b5050505050565b601154158015612bc35750601354155b8015612bcf5750601554155b8015612bdb5750601754155b15612be257565b601180546012556013805460145560158054601655601780546018556000938490559183905582905555565b80612c1b57612c1b612bb3565b6001600160a01b03841660009081526005602052604090205460ff168015612c5c57506001600160a01b03831660009081526005602052604090205460ff16155b15612c7157612c6c84848461313a565b612d6f565b6001600160a01b03841660009081526005602052604090205460ff16158015612cb257506001600160a01b03831660009081526005602052604090205460ff165b15612cc257612c6c848484613260565b6001600160a01b03841660009081526005602052604090205460ff16158015612d0457506001600160a01b03831660009081526005602052604090205460ff16155b15612d1457612c6c848484613309565b6001600160a01b03841660009081526005602052604090205460ff168015612d5457506001600160a01b03831660009081526005602052604090205460ff165b15612d6457612c6c84848461334d565b612d6f848484613309565b806112ad576112ad601254601155601454601355601654601555601854601755565b600c54600090819068fc6f7c40458122964d601f1b825b600a54811015612ef6578260016000600a8481548110612dca57612dca613b3b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612e3557508160026000600a8481548110612e0e57612e0e613b3b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612e54575050600c549368fc6f7c40458122964d601f1b9350915050565b612e9a60016000600a8481548110612e6e57612e6e613b3b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612fc5565b9250612ee260026000600a8481548110612eb657612eb6613b3b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612fc5565b915080612eee81613b0a565b915050612da8565b50600c54612f109068fc6f7c40458122964d601f1b611fd8565b821015612f30575050600c549268fc6f7c40458122964d601f1b92509050565b90939092509050565b600080600080612f48856133c0565b90506000612f55866133dc565b90506000612f67826129428986612fc5565b979296509094509092505050565b6000808080612f848886611fe4565b90506000612f928887611fe4565b90506000612fa08888611fe4565b90506000612fb2826129428686612fc5565b939b939a50919850919650505050505050565b6000610f558284613af3565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061300657613006613b3b565b6001600160a01b03928316602091820292909201810191909152602c54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561305a57600080fd5b505afa15801561306e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613092919061367a565b816001815181106130a5576130a5613b3b565b6001600160a01b039283166020918202929092010152602c546130cb9130911684611ff0565b602c5460405163791ac94760e01b81526001600160a01b039091169063791ac947906131049085906000908690309042906004016139d4565b600060405180830381600087803b15801561311e57600080fd5b505af1158015613132573d6000803e3d6000fd5b505050505050565b60008060008060008061314c87612828565b6001600160a01b038f16600090815260026020526040902054959b5093995091975095509350915061317e9088612fc5565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546131ad9087612fc5565b6001600160a01b03808b1660009081526001602052604080822093909355908a16815220546131dc908661281c565b6001600160a01b0389166000908152600160205260409020556131fe81613410565b61320884836135c7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161324d91815260200190565b60405180910390a3505050505050505050565b60008060008060008061327287612828565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506132a49087612fc5565b6001600160a01b03808b16600090815260016020908152604080832094909455918b168152600290915220546132da908461281c565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546131dc908661281c565b60008060008060008061331b87612828565b6001600160a01b038f16600090815260016020526040902054959b509399509197509550935091506131ad9087612fc5565b60008060008060008061335f87612828565b6001600160a01b038f16600090815260026020526040902054959b509399509197509550935091506133919088612fc5565b6001600160a01b038a166000908152600260209081526040808320939093556001905220546132a49087612fc5565b6000610b086064610dc260175485611fe490919063ffffffff16565b6000610b086064610dc261340960135461340360115460155461281c90919063ffffffff16565b9061281c565b8590611fe4565b600160105414156134aa57613436601954610dc2601a5484611fe490919063ffffffff16565b602460008282546134479190613a9a565b9091555050601954601b546134629190610dc2908490611fe4565b602560008282546134739190613a9a565b9091555050601954601c5461348e9190610dc2908490611fe4565b6023600082825461349f9190613a9a565b9091555061353f9050565b6002601054141561353f576134d0601954610dc2601e5484611fe490919063ffffffff16565b602460008282546134e19190613a9a565b9091555050601954601f546134fc9190610dc2908490611fe4565b6025600082825461350d9190613a9a565b90915550506019546020546135289190610dc2908490611fe4565b602360008282546135399190613a9a565b90915550505b60006135496127f9565b905060006135578383611fe4565b30600090815260016020526040902054909150613574908261281c565b3060009081526001602090815260408083209390935560059052205460ff1615611dfb57306000908152600260205260409020546135b2908461281c565b30600090815260026020526040902055505050565b600c546135d49083612fc5565b600c55600d546135e4908261281c565b600d555050565b600082601f8301126135fc57600080fd5b8135602061361161360c83613a76565b613a45565b80838252828201915082860187848660051b890101111561363157600080fd5b60005b8581101561365057813584529284019290840190600101613634565b5090979650505050505050565b60006020828403121561366f57600080fd5b8135610f5581613b67565b60006020828403121561368c57600080fd5b8151610f5581613b67565b600080604083850312156136aa57600080fd5b82356136b581613b67565b915060208301356136c581613b67565b809150509250929050565b6000806000606084860312156136e557600080fd5b83356136f081613b67565b9250602084013561370081613b67565b929592945050506040919091013590565b6000806040838503121561372457600080fd5b823561372f81613b67565b946020939093013593505050565b6000806040838503121561375057600080fd5b823567ffffffffffffffff8082111561376857600080fd5b818501915085601f83011261377c57600080fd5b8135602061378c61360c83613a76565b8083825282820191508286018a848660051b89010111156137ac57600080fd5b600096505b848710156137d85780356137c481613b67565b8352600196909601959183019183016137b1565b50965050860135925050808211156137ef57600080fd5b506137fc858286016135eb565b9150509250929050565b60006020828403121561381857600080fd5b5035919050565b60006020828403121561383157600080fd5b5051919050565b6000806040838503121561384b57600080fd5b82359150602083013580151581146136c557600080fd5b6000806040838503121561387557600080fd5b50508035926020909101359150565b60008060006060848603121561389957600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156138c857600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015613911578581018301518582016040015282016138f5565b81811115613923576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526036908201527f43616e206f6e6c792061697264726f70203130302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b60208082526025908201527f45524332304f776e61626c653a2063616c6c6572206973206e6f74207468652060408201526437bbb732b960d91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613a245784516001600160a01b0316835293830193918301916001016139ff565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a6e57613a6e613b51565b604052919050565b600067ffffffffffffffff821115613a9057613a90613b51565b5060051b60200190565b60008219821115613aad57613aad613b25565b500190565b600082613acf57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613aee57613aee613b25565b500290565b600082821015613b0557613b05613b25565b500390565b6000600019821415613b1e57613b1e613b25565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461140557600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b750605a6b1b689d7582359dcd5a17416fc8dff911c07e1e69f1805ed505f83d64736f6c63430008070033

Deployed Bytecode Sourcemap

18120:29577:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23988:92;;;;;;;;;;-1:-1:-1;24067:5:0;;;;;;;;;;;-1:-1:-1;;;24067:5:0;;;;23988:92;;;;24067:5;23988:92;:::i;:::-;;;;;;;;24912:161;;;;;;;;;;-1:-1:-1;24912:161:0;;;;;:::i;:::-;;:::i;:::-;;;7015:14:1;;7008:22;6990:41;;6978:2;6963:18;24912:161:0;6850:187:1;43019:73:0;;;;;;;;;;;;;:::i;:::-;;44589:273;;;;;;;;;;-1:-1:-1;44589:273:0;;;;;:::i;:::-;;:::i;24285:95::-;;;;;;;;;;-1:-1:-1;;;;24285:95:0;;;17233:25:1;;;17221:2;17206:18;24285:95:0;17087:177:1;20598:28:0;;;;;;;;;;-1:-1:-1;20598:28:0;;;;-1:-1:-1;;;20598:28:0;;;;;;18781:33;;;;;;;;;;;;;;;;25079:329;;;;;;;;;;-1:-1:-1;25079:329:0;;;;;:::i;:::-;;:::i;47035:659::-;;;;;;;;;;-1:-1:-1;47035:659:0;;;;;:::i;:::-;;:::i;26413:241::-;;;;;;;;;;-1:-1:-1;26413:241:0;;;;;:::i;:::-;;:::i;24188:91::-;;;;;;;;;;-1:-1:-1;24188:91:0;;20915:2;18792:36:1;;18780:2;18765:18;24188:91:0;18650:184:1;46093:340:0;;;;;;;;;;-1:-1:-1;46093:340:0;;;;;:::i;:::-;;:::i;42908:105::-;;;;;;;;;;-1:-1:-1;42908:105:0;;;;;:::i;:::-;;:::i;20346:39::-;;;;;;;;;;-1:-1:-1;20346:39:0;;;;-1:-1:-1;;;;;20346:39:0;;;;;;-1:-1:-1;;;;;5653:32:1;;;5635:51;;5623:2;5608:18;20346:39:0;5489:203:1;25414:218:0;;;;;;;;;;-1:-1:-1;25414:218:0;;;;;:::i;:::-;;:::i;18584:38::-;;;;;;;;;;-1:-1:-1;18584:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42328:119;;;;;;;;;;-1:-1:-1;42328:119:0;;;;;:::i;:::-;;:::i;41835:113::-;;;;;;;;;;-1:-1:-1;41835:113:0;;;;;:::i;:::-;;:::i;25963:444::-;;;;;;;;;;-1:-1:-1;25963:444:0;;;;;:::i;:::-;;:::i;46439:156::-;;;;;;;;;;;;;:::i;42783:122::-;;;;;;;;;;-1:-1:-1;42783:122:0;;;;;:::i;:::-;;:::i;20699:41::-;;;;;;;;;;-1:-1:-1;20699:41:0;;;;-1:-1:-1;;;20699:41:0;;;;;;45824:263;;;;;;;;;;;;;:::i;44868:249::-;;;;;;;;;;-1:-1:-1;44868:249:0;;;;;:::i;:::-;;:::i;42072:124::-;;;;;;;;;;-1:-1:-1;42072:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;42161:27:0;42137:4;42161:27;;;:18;:27;;;;;;;;;42072:124;20477:39;;;;;;;;;;-1:-1:-1;20477:39:0;;;;-1:-1:-1;;;;;20477:39:0;;;42202:120;;;;;;;;;;-1:-1:-1;42202:120:0;;;;;:::i;:::-;;:::i;43276:93::-;;;;;;;;;;;;;:::i;42453:131::-;;;;;;;;;;-1:-1:-1;42453:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;42548:28:0;42524:4;42548:28;;;:19;:28;;;;;;;;;42453:131;43179:91;;;;;;;;;;;;;:::i;24386:198::-;;;;;;;;;;-1:-1:-1;24386:198:0;;;;;:::i;:::-;;:::i;734:148::-;;;;;;;;;;;;;:::i;20633:31::-;;;;;;;;;;-1:-1:-1;20633:31:0;;;;-1:-1:-1;;;20633:31:0;;;;;;43375:83;;;;;;;;;;;;;:::i;20392:37::-;;;;;;;;;;-1:-1:-1;20392:37:0;;;;-1:-1:-1;;;;;20392:37:0;;;43891:343;;;;;;;;;;-1:-1:-1;43891:343:0;;;;;:::i;:::-;;:::i;18626:43::-;;;;;;;;;;-1:-1:-1;18626:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20567:24;;;;;;;;;;-1:-1:-1;20567:24:0;;;;-1:-1:-1;;;;;20567:24:0;;;510:87;;;;;;;;;;-1:-1:-1;556:7:0;583:6;-1:-1:-1;;;;;583:6:0;510:87;;44240:343;;;;;;;;;;-1:-1:-1;44240:343:0;;;;;:::i;:::-;;:::i;20523:37::-;;;;;;;;;;-1:-1:-1;20523:37:0;;;;-1:-1:-1;;;;;20523:37:0;;;25638:319;;;;;;;;;;-1:-1:-1;25638:319:0;;;;;:::i;:::-;;:::i;30628:1184::-;;;;;;;;;;-1:-1:-1;30628:1184:0;;;;;:::i;:::-;;:::i;43555:330::-;;;;;;;;;;-1:-1:-1;43555:330:0;;;;;:::i;:::-;;:::i;24590:167::-;;;;;;;;;;-1:-1:-1;24590:167:0;;;;;:::i;:::-;;:::i;43464:85::-;;;;;;;;;;;;;:::i;45123:252::-;;;;;;;;;;-1:-1:-1;45123:252:0;;;;;:::i;:::-;;:::i;20747:33::-;;;;;;;;;;-1:-1:-1;20747:33:0;;;;-1:-1:-1;;;20747:33:0;;;;;;43098:75;;;;;;;;;;;;;:::i;45381:211::-;;;;;;;;;;-1:-1:-1;45517:15:0;;45534:13;;45549:15;;45566:17;;45381:211;;;;18485:25:1;;;18541:2;18526:18;;18519:34;;;;18569:18;;;18562:34;18627:2;18612:18;;18605:34;18472:3;18457:19;45381:211:0;18254:391:1;24763:143:0;;;;;;;;;;-1:-1:-1;24763:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24871:18:0;;;24844:7;24871:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24763:143;45598:220;;;;;;;;;;-1:-1:-1;45739:16:0;;45757:14;;45773:16;;45791:18;;45598:220;;46601:428;;;;;;;;;;-1:-1:-1;46601:428:0;;;;;:::i;:::-;;:::i;41954:112::-;;;;;;;;;;-1:-1:-1;41954:112:0;;;;;:::i;:::-;;:::i;888:249::-;;;;;;;;;;-1:-1:-1;888:249:0;;;;;:::i;:::-;;:::i;42590:190::-;;;;;;;;;;-1:-1:-1;42590:190:0;;;;;:::i;:::-;;:::i;24912:161::-;24987:4;25004:39;169:10;25027:7;25036:6;25004:8;:39::i;:::-;-1:-1:-1;25061:4:0;24912:161;;;;;:::o;43019:73::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;;;;;;;;;43069:8:::1;:15:::0;;-1:-1:-1;;;;43069:15:0::1;-1:-1:-1::0;;;43069:15:0::1;::::0;;43019:73::o;44589:273::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44677:29:0;::::1;44669:79;;;::::0;-1:-1:-1;;;44669:79:0;;11751:2:1;44669:79:0::1;::::0;::::1;11733:21:1::0;11790:2;11770:18;;;11763:30;11829:34;11809:18;;;11802:62;-1:-1:-1;;;11880:18:1;;;11873:35;11925:19;;44669:79:0::1;11549:401:1::0;44669:79:0::1;44759:14;:41:::0;;-1:-1:-1;;;;;;44759:41:0::1;-1:-1:-1::0;;;;;44759:41:0;::::1;::::0;;::::1;::::0;;;44816:38:::1;::::0;5635:51:1;;;44816:38:0::1;::::0;5623:2:1;5608:18;44816:38:0::1;;;;;;;;44589:273:::0;:::o;25079:329::-;25175:4;25192:36;25202:6;25210:9;25221:6;25192:9;:36::i;:::-;25239:139;25248:6;169:10;25278:89;25316:6;25278:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25278:19:0;;;;;;:11;:19;;;;;;;;169:10;25278:33;;;;;;;;;;:37;:89::i;:::-;25239:8;:139::i;:::-;-1:-1:-1;25396:4:0;25079:329;;;;;:::o;47035:659::-;47104:4;583:6;;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;47139:2:::1;47128:7;:13;;47120:68;;;::::0;-1:-1:-1;;;47120:68:0;;15258:2:1;47120:68:0::1;::::0;::::1;15240:21:1::0;15297:2;15277:18;;;15270:30;15336:34;15316:18;;;15309:62;-1:-1:-1;;;15387:18:1;;;15380:40;15437:19;;47120:68:0::1;15056:406:1::0;47120:68:0::1;47245:9;::::0;47230:25:::1;::::0;-1:-1:-1;;;47230:25:0;;-1:-1:-1;;;;;47245:9:0;;::::1;47230:25;::::0;::::1;5635:51:1::0;47199:28:0::1;::::0;47230:4:::1;::::0;:14:::1;::::0;5608:18:1;;47230:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47199:56:::0;-1:-1:-1;47266:20:0::1;47289:44;47327:5;47289:33;47199:56:::0;47314:7;47289:24:::1;:33::i;:::-;:37:::0;::::1;:44::i;:::-;47266:67:::0;-1:-1:-1;47348:16:0;;47344:88:::1;;47390:9;::::0;47401:4:::1;::::0;47380:40:::1;::::0;-1:-1:-1;;;;;47390:9:0;;::::1;::::0;47401:4:::1;47407:12:::0;47380:9:::1;:40::i;:::-;47472:4;::::0;47462:15:::1;::::0;-1:-1:-1;;;;;47472:4:0::1;47462:9;:15::i;:::-;47442:17;:35:::0;47517:26:::1;47537:5;47517:15;-1:-1:-1::0;;;47529:2:0::1;47517:11;:15::i;:26::-;47496:17;;:47;;47488:96;;;::::0;-1:-1:-1;;;47488:96:0;;13334:2:1;47488:96:0::1;::::0;::::1;13316:21:1::0;13373:2;13353:18;;;13346:30;13412:34;13392:18;;;13385:62;-1:-1:-1;;;13463:18:1;;;13456:34;13507:19;;47488:96:0::1;13132:400:1::0;47488:96:0::1;47632:9;::::0;47653:11:::1;::::0;;-1:-1:-1;;;;;;47653:11:0;;;;-1:-1:-1;;;;;47632:9:0;;::::1;::::0;;;47653::::1;::::0;:11:::1;::::0;;::::1;::::0;47595:19:::1;::::0;47653:11;;;;;;;47595:19;47632:9;47653:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;47682:4:0::1;::::0;47035:659;-1:-1:-1;;;;;;;;47035:659:0:o;26413:241::-;26480:7;26519;;26508;:18;;26500:61;;;;-1:-1:-1;;;26500:61:0;;12157:2:1;26500:61:0;;;12139:21:1;12196:2;12176:18;;;12169:30;12235:32;12215:18;;;12208:60;12285:18;;26500:61:0;11955:354:1;26500:61:0;26572:19;26594:10;:8;:10::i;:::-;26572:32;-1:-1:-1;26622:24:0;:7;26572:32;26622:11;:24::i;:::-;26615:31;26413:241;-1:-1:-1;;;26413:241:0:o;46093:340::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;46172:13:::1;::::0;-1:-1:-1;;;46172:13:0;::::1;;;46171:14;46163:77;;;::::0;-1:-1:-1;;;46163:77:0;;9605:2:1;46163:77:0::1;::::0;::::1;9587:21:1::0;9644:2;9624:18;;;9617:30;9683:34;9663:18;;;9656:62;-1:-1:-1;;;9734:18:1;;;9727:48;9792:19;;46163:77:0::1;9403:414:1::0;46163:77:0::1;46251:14;46268:49;46311:5;46268:38;46297:8;46268:24;46286:4;46268:9;:24::i;:::-;:28:::0;::::1;:38::i;:49::-;46251:66;;46345:1;46336:6;:10;46328:45;;;::::0;-1:-1:-1;;;46328:45:0;;14497:2:1;46328:45:0::1;::::0;::::1;14479:21:1::0;14536:2;14516:18;;;14509:30;-1:-1:-1;;;14555:18:1;;;14548:52;14617:18;;46328:45:0::1;14295:346:1::0;46328:45:0::1;46384:41;46402:4;46409:7;556::::0;583:6;-1:-1:-1;;;;;583:6:0;;510:87;46409:7:::1;46418:6;46384:9;:41::i;:::-;46152:281;46093:340:::0;:::o;42908:105::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42977:20:0::1;43000:5;42977:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;42977:28:0::1;::::0;;42908:105::o;25414:218::-;169:10;25502:4;25551:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25551:34:0;;;;;;;;;;25502:4;;25519:83;;25542:7;;25551:50;;25590:10;25551:38;:50::i;42328:119::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42403:28:0::1;42434:5;42403:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;42403:36:0::1;::::0;;42328:119::o;41835:113::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41906:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;41906:34:0::1;41936:4;41906:34;::::0;;41835:113::o;25963:444::-;26054:7;-1:-1:-1;;;26082:7:0;:18;;26074:59;;;;-1:-1:-1;;;26074:59:0;;8844:2:1;26074:59:0;;;8826:21:1;8883:2;8863:18;;;8856:30;8922;8902:18;;;8895:58;8970:18;;26074:59:0;8642:352:1;26074:59:0;26149:17;26144:256;;26184:15;26213:19;26224:7;26213:10;:19::i;:::-;-1:-1:-1;26183:49:0;;-1:-1:-1;26247:14:0;;-1:-1:-1;;;;;26247:14:0;26144:256;26297:23;26332:19;26343:7;26332:10;:19::i;:::-;-1:-1:-1;26294:57:0;;-1:-1:-1;26366:22:0;;-1:-1:-1;;;;;26366:22:0;46439:156;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;46537:10:::1;::::0;46529:58:::1;::::0;46493:12:::1;::::0;-1:-1:-1;;;;;46537:10:0::1;::::0;46561:21:::1;::::0;46493:12;46529:58;46493:12;46529:58;46561:21;46537:10;46529:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;46439:156:0:o;42783:122::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42853:12:0;::::1;;::::0;;;:5:::1;:12;::::0;;;;;::::1;;42845:21;;;::::0;::::1;;-1:-1:-1::0;;;;;42877:12:0::1;42892:5;42877:12:::0;;;:5:::1;:12;::::0;;;;:20;;-1:-1:-1;;42877:20:0::1;::::0;;42783:122::o;45824:263::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;45879:23:::1;45905:24;45923:4;45905:9;:24::i;:::-;45879:50:::0;-1:-1:-1;45981:5:0::1;45967:11;-1:-1:-1::0;;;45977:1:0::1;45967:11;:::i;:::-;:19;;;;:::i;:::-;45948:15;:38;;45940:116;;;::::0;-1:-1:-1;;;45940:116:0;;10447:2:1;45940:116:0::1;::::0;::::1;10429:21:1::0;10486:2;10466:18;;;10459:30;10525:34;10505:18;;;10498:62;10596:34;10576:18;;;10569:62;-1:-1:-1;;;10647:19:1;;;10640:32;10689:19;;45940:116:0::1;10245:469:1::0;45940:116:0::1;46067:12;:10;:12::i;:::-;45868:219;45824:263::o:0;44868:249::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;44952:16:::1;:45:::0;;-1:-1:-1;;;;;;44952:45:0::1;-1:-1:-1::0;;;;;44952:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;45008:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;45008:43:0::1;-1:-1:-1::0;45008:43:0::1;::::0;;45067:42;;5635:51:1;;;45067:42:0::1;::::0;5608:18:1;45067:42:0::1;5489:203:1::0;42202:120:0;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42279:28:0::1;;::::0;;;:19:::1;:28;::::0;;;;:35;;-1:-1:-1;;42279:35:0::1;42310:4;42279:35;::::0;;42202:120::o;43276:93::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;43332:21:::1;:29:::0;;-1:-1:-1;;;;43332:29:0::1;::::0;;43276:93::o;43179:91::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;43234:21:::1;:28:::0;;-1:-1:-1;;;;43234:28:0::1;-1:-1:-1::0;;;43234:28:0::1;::::0;;43179:91::o;24386:198::-;-1:-1:-1;;;;;24476:20:0;;24452:7;24476:20;;;:11;:20;;;;;;;;24472:49;;;-1:-1:-1;;;;;;24505:16:0;;;;;:7;:16;;;;;;;24386:198::o;24472:49::-;-1:-1:-1;;;;;24559:16:0;;;;;;:7;:16;;;;;;24539:37;;:19;:37::i;734:148::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;841:1:::1;825:6:::0;;804:40:::1;::::0;-1:-1:-1;;;;;825:6:0;;::::1;::::0;804:40:::1;::::0;841:1;;804:40:::1;872:1;855:19:::0;;-1:-1:-1;;;;;;855:19:0::1;::::0;;734:148::o;43375:83::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;43432:11:::1;:18:::0;;-1:-1:-1;;;;43432:18:0::1;-1:-1:-1::0;;;43432:18:0::1;::::0;;43375:83::o;43891:343::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;44049:16:::1;:36:::0;;;;44096:14:::1;:32:::0;;;;44139:16:::1;:36:::0;44186:18:::1;:40:::0;43891:343::o;44240:::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44334:31:0;::::1;44326:81;;;::::0;-1:-1:-1;;;44326:81:0;;12516:2:1;44326:81:0::1;::::0;::::1;12498:21:1::0;12555:2;12535:18;;;12528:30;12594:34;12574:18;;;12567:62;-1:-1:-1;;;12645:18:1;;;12638:35;12690:19;;44326:81:0::1;12314:401:1::0;44326:81:0::1;44418:16;:45:::0;;-1:-1:-1;;;;;;44418:45:0::1;-1:-1:-1::0;;;;;44418:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44474:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;44474:43:0::1;-1:-1:-1::0;44474:43:0::1;::::0;;44533:42;;5635:51:1;;;44533:42:0::1;::::0;5608:18:1;44533:42:0::1;5489:203:1::0;25638:319:0;25731:4;25748:179;169:10;25798:7;25820:96;25859:15;25820:96;;;;;;;;;;;;;;;;;169:10;25820:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25820:34:0;;;;;;;;;;;;:38;:96::i;30628:1184::-;30742:4;583:6;;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;30767:13:::1;::::0;-1:-1:-1;;;30767:13:0;::::1;;;30766:14;30758:50;;;::::0;-1:-1:-1;;;30758:50:0;;13739:2:1;30758:50:0::1;::::0;::::1;13721:21:1::0;13778:2;13758:18;;;13751:30;13817:25;13797:18;;;13790:53;13860:18;;30758:50:0::1;13537:347:1::0;30758:50:0::1;30851:3;30827:14;:21;:27;30819:94;;;;-1:-1:-1::0;;;30819:94:0::1;;;;;;;:::i;:::-;30928:9;30924:205;30947:14;:21;30943:1;:25;30924:205;;;30989:14;31006;31021:1;31006:17;;;;;;;;:::i;:::-;;;;;;;30989:34;;31038:14;31055:7;31063:1;31055:10;;;;;;;;:::i;:::-;;;;;;;31038:27;;31080:37;31090:10;31102:6;31110;31080:9;:37::i;:::-;30974:155;;30970:3;;;;;:::i;:::-;;;;30924:205;;;;31139:15;:13;:15::i;:::-;31272:11;:26:::0;;-1:-1:-1;;;;;;31272:26:0::1;31218:42;31272:26:::0;;::::1;::::0;;;31165:31:::1;31309:41:::0;;;:19:::1;:41;::::0;;:48;;-1:-1:-1;;31309:48:0::1;31272:26:::0;31309:48:::1;::::0;;31368:54:::1;31385:4;31218:42:::0;-1:-1:-1;;;31368:8:0::1;:54::i;:::-;31463:12;-1:-1:-1::0;;;;;31463:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31445:52:0::1;;31506:4;31513:12;-1:-1:-1::0;;;;;31513:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31445:88;::::0;-1:-1:-1;;;;;;31445:88:0::1;::::0;;;;;;-1:-1:-1;;;;;6151:15:1;;;31445:88:0::1;::::0;::::1;6133:34:1::0;6203:15;;6183:18;;;6176:43;6068:18;;31445:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31433:9;:100:::0;;-1:-1:-1;;;;;;31433:100:0::1;-1:-1:-1::0;;;;;31433:100:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;31544:39:0;;;:19:::1;:39;::::0;;;;:46;;-1:-1:-1;;31544:46:0::1;-1:-1:-1::0;31544:46:0::1;::::0;;31609:21:::1;31601:73;;;::::0;-1:-1:-1;;;31601:73:0;;9201:2:1;31601:73:0::1;::::0;::::1;9183:21:1::0;9240:2;9220:18;;;9213:30;9279:34;9259:18;;;9252:62;-1:-1:-1;;;9330:18:1;;;9323:33;9373:19;;31601:73:0::1;8999:399:1::0;31601:73:0::1;31685:61;31698:24;31716:4;31698:9;:24::i;:::-;31724:21;31685:12;:61::i;:::-;31777:4;::::0;31757:25:::1;::::0;-1:-1:-1;;;;;31777:4:0::1;31757:19;:25::i;43555:330::-:0;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;43708:15:::1;:34:::0;;;;43753:13:::1;:30:::0;;;;43794:15:::1;:34:::0;43839:17:::1;:38:::0;43555:330::o;24590:167::-;24668:4;24685:42;169:10;24709:9;24720:6;24685:9;:42::i;43464:85::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;43522:11:::1;:19:::0;;-1:-1:-1;;;;43522:19:0::1;::::0;;43464:85::o;45123:252::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;45248:8;45227:18:::1;45237:8:::0;-1:-1:-1;;;45227:18:0::1;:::i;:::-;:29;;;;:::i;:::-;45211:13;:45:::0;45306:3:::1;45292:11;-1:-1:-1::0;;;45302:1:0::1;45292:11;:::i;:::-;:17;;;;:::i;:::-;45275:13;;:34;;45267:100;;;::::0;-1:-1:-1;;;45267:100:0;;10921:2:1;45267:100:0::1;::::0;::::1;10903:21:1::0;10960:2;10940:18;;;10933:30;10999:34;10979:18;;;10972:62;-1:-1:-1;;;11050:18:1;;;11043:51;11111:19;;45267:100:0::1;10719:417:1::0;43098:75:0;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;43149:8:::1;:16:::0;;-1:-1:-1;;;;43149:16:0::1;::::0;;43098:75::o;46601:428::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;46744:3:::1;46720:14;:21;:27;46712:94;;;;-1:-1:-1::0;;;46712:94:0::1;;;;;;;:::i;:::-;46821:9;46817:205;46840:14;:21;46836:1;:25;46817:205;;;46882:14;46899;46914:1;46899:17;;;;;;;;:::i;:::-;;;;;;;46882:34;;46931:14;46948:7;46956:1;46948:10;;;;;;;;:::i;:::-;;;;;;;46931:27;;46973:37;46983:10;46995:6;47003;46973:9;:37::i;:::-;46867:155;;46863:3;;;;;:::i;:::-;;;;46817:205;;;;46601:428:::0;;:::o;41954:112::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42023:27:0::1;42053:5;42023:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;42023:35:0::1;::::0;;41954:112::o;888:249::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;977:22:0;::::1;969:78;;;::::0;-1:-1:-1;;;969:78:0;;12922:2:1;969:78:0::1;::::0;::::1;12904:21:1::0;12961:2;12941:18;;;12934:30;13000:34;12980:18;;;12973:62;-1:-1:-1;;;13051:18:1;;;13044:41;13102:19;;969:78:0::1;12720:407:1::0;969:78:0::1;1084:6;::::0;;1063:38:::1;::::0;-1:-1:-1;;;;;1063:38:0;;::::1;::::0;1084:6;::::1;::::0;1063:38:::1;::::0;::::1;1112:6;:17:::0;;-1:-1:-1;;;;;;1112:17:0::1;-1:-1:-1::0;;;;;1112:17:0;;;::::1;::::0;;;::::1;::::0;;888:249::o;42590:190::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;42666:42:::1;-1:-1:-1::0;;;;;42657:51:0;::::1;;;42649:60;;;::::0;::::1;;-1:-1:-1::0;;;;;42729:12:0;::::1;;::::0;;;:5:::1;:12;::::0;;;;;::::1;;42728:13;42720:22;;;::::0;::::1;;-1:-1:-1::0;;;;;42753:12:0::1;;::::0;;;:5:::1;:12;::::0;;;;:19;;-1:-1:-1;;42753:19:0::1;42768:4;42753:19;::::0;;42590:190::o;2817:98::-;2875:7;2902:5;2906:1;2902;:5;:::i;2713:98::-;2771:7;2798:5;2802:1;2798;:5;:::i;30009:325::-;-1:-1:-1;;;;;30100:19:0;;30092:64;;;;-1:-1:-1;;;30092:64:0;;16573:2:1;30092:64:0;;;16555:21:1;;;16592:18;;;16585:30;16651:34;16631:18;;;16624:62;16703:18;;30092:64:0;16371:356:1;30092:64:0;-1:-1:-1;;;;;30175:21:0;;30167:64;;;;-1:-1:-1;;;30167:64:0;;8485:2:1;30167:64:0;;;8467:21:1;8524:2;8504:18;;;8497:30;8563:32;8543:18;;;8536:60;8613:18;;30167:64:0;8283:354:1;30167:64:0;-1:-1:-1;;;;;30242:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30294:32;;17233:25:1;;;30294:32:0;;17206:18:1;30294:32:0;;;;;;;30009:325;;;:::o;31818:3142::-;-1:-1:-1;;;;;31903:18:0;;31895:68;;;;-1:-1:-1;;;31895:68:0;;15669:2:1;31895:68:0;;;15651:21:1;15708:2;15688:18;;;15681:30;15747:34;15727:18;;;15720:62;-1:-1:-1;;;15798:18:1;;;15791:35;15843:19;;31895:68:0;15467:401:1;31895:68:0;-1:-1:-1;;;;;31982:16:0;;31974:64;;;;-1:-1:-1;;;31974:64:0;;8081:2:1;31974:64:0;;;8063:21:1;8120:2;8100:18;;;8093:30;8159:34;8139:18;;;8132:62;-1:-1:-1;;;8210:18:1;;;8203:33;8253:19;;31974:64:0;7879:399:1;31974:64:0;32066:1;32057:6;:10;32049:64;;;;-1:-1:-1;;;32049:64:0;;14848:2:1;32049:64:0;;;14830:21:1;14887:2;14867:18;;;14860:30;14926:34;14906:18;;;14899:62;-1:-1:-1;;;14977:18:1;;;14970:39;15026:19;;32049:64:0;14646:405:1;32049:64:0;-1:-1:-1;;;;;32133:11:0;;;;;;:5;:11;;;;;;;;32132:12;32124:21;;;;;;32160:13;;-1:-1:-1;;;32160:13:0;;;;32156:134;;-1:-1:-1;;;;;32197:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;32225:22:0;;;;;;:18;:22;;;;;;;;32197:50;32189:89;;;;-1:-1:-1;;;32189:89:0;;16934:2:1;32189:89:0;;;16916:21:1;16973:2;16953:18;;;16946:30;17012:28;16992:18;;;16985:56;17058:18;;32189:89:0;16732:350:1;32189:89:0;32304:11;;-1:-1:-1;;;32304:11:0;;;;:40;;;;-1:-1:-1;;;;;;32321:23:0;;;;;;:19;:23;;;;;;;;32319:25;32304:40;32300:164;;;32395:13;;32385:6;32369:13;32379:2;32369:9;:13::i;:::-;:22;;;;:::i;:::-;:39;;32361:91;;;;-1:-1:-1;;;32361:91:0;;11343:2:1;32361:91:0;;;11325:21:1;11382:2;11362:18;;;11355:30;11421:34;11401:18;;;11394:62;-1:-1:-1;;;11472:18:1;;;11465:37;11519:19;;32361:91:0;11141:403:1;32361:91:0;32477:8;;-1:-1:-1;;;32477:8:0;;;;32474:537;;;556:7;583:6;-1:-1:-1;;;;;32505:15:0;;;583:6;;32505:15;;;;:32;;-1:-1:-1;556:7:0;583:6;-1:-1:-1;;;;;32524:13:0;;;583:6;;32524:13;;32505:32;:52;;;;-1:-1:-1;;;;;;32541:16:0;;;;32505:52;:66;;;;-1:-1:-1;32567:4:0;;-1:-1:-1;;;;;32561:10:0;;;32567:4;;32561:10;;32505:66;:87;;;;-1:-1:-1;32576:16:0;;-1:-1:-1;;;32576:16:0;;;;32575:17;32505:87;32501:499;;;556:7;583:6;-1:-1:-1;;;;;32616:15:0;;;583:6;;32616:15;;;;:34;;-1:-1:-1;32641:9:0;;-1:-1:-1;;;;;32635:15:0;;;32641:9;;32635:15;;32616:34;:72;;;;;32670:18;;32654:12;:34;32616:72;32613:372;;;32717:6;32712:254;32733:1;32729;:5;32712:254;;;32808:1;32787:18;;:22;;;;:::i;:::-;32771:12;:38;32768:175;;;-1:-1:-1;;;;;32842:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;32842:22:0;32860:4;32842:22;;;32900:15;;;32842;32900;32768:175;32736:3;;;;:::i;:::-;;;;32712:254;;;;32613:372;33021:25;33049:42;33072:18;;33049;;:22;;:42;;;;:::i;:::-;33021:70;;33102:28;33133:24;33151:4;33133:9;:24::i;:::-;33223:23;;33262:16;;33102:55;;-1:-1:-1;33199:47:0;;;;-1:-1:-1;;;33262:16:0;;;;33261:17;:42;;;;-1:-1:-1;33282:21:0;;-1:-1:-1;;;33282:21:0;;;;33261:42;:70;;;;-1:-1:-1;33317:9:0;;33330:1;;33307:20;;-1:-1:-1;;;;;33317:9:0;33307;:20::i;:::-;:24;33261:70;:95;;;;;33355:1;33335:17;:21;33261:95;:122;;;;-1:-1:-1;;;;;;33361:22:0;;;;;;:18;:22;;;;;;;;33360:23;33261:122;:151;;;;-1:-1:-1;;;;;;33388:24:0;;;;;;:18;:24;;;;;;;;33387:25;33261:151;:170;;;;-1:-1:-1;33422:9:0;;-1:-1:-1;;;;;33416:15:0;;;33422:9;;33416:15;33261:170;:197;;;;;33435:23;33261:197;33257:246;;;33475:12;:10;:12::i;:::-;-1:-1:-1;;;;;33547:24:0;;33513:12;33547:24;;;:18;:24;;;;;;33528:4;;33547:24;;;:50;;-1:-1:-1;;;;;;33575:22:0;;;;;;:18;:22;;;;;;;;33547:50;33543:1358;;;-1:-1:-1;19208:1:0;33644:15;:26;33624:5;33543:1358;;;33715:9;;-1:-1:-1;;;;;33707:17:0;;;33715:9;;33707:17;33703:1187;;;33745:14;:12;:14::i;:::-;33794:15;;33778:13;:31;33842:13;;33828:11;:27;33892:17;;33874:15;:35;33944:15;;33928:13;:31;19124:1;33978:15;:21;33703:1187;;;34045:9;;-1:-1:-1;;;;;34039:15:0;;;34045:9;;34039:15;34035:855;;;34075:14;:12;:14::i;:::-;34124:16;;34108:13;:32;34173:14;;34159:11;:28;34224:18;;34206:15;:36;34277:16;;;34261:13;:32;-1:-1:-1;34312:15:0;:22;-1:-1:-1;;;;;34356:17:0;;-1:-1:-1;34356:17:0;;;-1:-1:-1;34356:17:0;;;;;;;;;:57;;;;;34398:15;34377:18;;:36;34356:57;34353:242;;;34453:2;34437:13;:18;34492:1;34478:11;:15;34532:1;34516:13;:17;-1:-1:-1;34556:15:0;:19;34353:242;34035:855;;;-1:-1:-1;;;;;34644:17:0;;;;;;:11;:17;;;;;;;;34643:18;;:59;;;34687:15;34665:18;;:37;;34643:59;34635:161;;;;-1:-1:-1;;;34635:161:0;;16075:2:1;34635:161:0;;;16057:21:1;16114:2;16094:18;;;16087:30;16153:34;16133:18;;;16126:62;16224:34;16204:18;;;16197:62;16296:27;16275:19;;;16268:56;16341:19;;34635:161:0;15873:493:1;34635:161:0;34815:14;:12;:14::i;:::-;19208:1;34848:15;:26;34035:855;34911:41;34926:4;34932:2;34936:6;34944:7;34911:14;:41::i;:::-;31885:3075;;;;31818:3142;;;:::o;3025:206::-;3111:7;3172:12;3164:6;;;;3156:29;;;;-1:-1:-1;;;3156:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;3207:5:0;;;3025:206::o;27996:164::-;28038:7;28059:15;28076;28095:19;:17;:19::i;:::-;28058:56;;-1:-1:-1;28058:56:0;-1:-1:-1;28132:20:0;28058:56;;28132:11;:20::i;:::-;28125:27;;;;27996:164;:::o;2505:98::-;2563:7;2590:5;2594:1;2590;:5;:::i;26813:414::-;26872:7;26880;26888;26896;26904;26912;26933:23;26958:12;26972:18;26994:20;27006:7;26994:11;:20::i;:::-;26932:82;;;;;;27026:15;27043:23;27068:12;27084:50;27096:7;27105:4;27111:10;27123;:8;:10::i;:::-;27084:11;:50::i;:::-;27025:109;;;;-1:-1:-1;27025:109:0;;-1:-1:-1;27185:15:0;;-1:-1:-1;27202:4:0;;-1:-1:-1;27208:10:0;;-1:-1:-1;26813:414:0;;-1:-1:-1;;;;;26813:414:0:o;34966:1317::-;21384:16;:23;;-1:-1:-1;;;;21384:23:0;-1:-1:-1;;;21384:23:0;;;;35045:24:::1;35063:4;35045:9;:24::i;:::-;35019:50;;35080:25;35150:16;;35129:18;;35108;;:39;;;;:::i;:::-;:58;;;;:::i;:::-;35080:86;;35177:27;35207:25;35230:1;35207:18;;:22;;:25;;;;:::i;:::-;35177:55:::0;-1:-1:-1;35282:26:0::1;35311:40;:15:::0;35177:55;35311:19:::1;:40::i;:::-;35282:69:::0;-1:-1:-1;35390:21:0::1;35422:36;35282:69:::0;35422:16:::1;:36::i;:::-;35470:18;35491:44;:21;35517:17:::0;35491:25:::1;:44::i;:::-;35470:65;;35546:23;35572:57;35611:17;35572:34;35587:18;;35572:10;:14;;:34;;;;:::i;:57::-;35546:83;;35640:21;35664:55;35701:17;35664:32;35679:16;;35664:10;:14;;:32;;;;:::i;:55::-;35640:79:::0;-1:-1:-1;35730:23:0::1;35756:50;35640:79:::0;35756:31:::1;:10:::0;35771:15;35756:14:::1;:31::i;:::-;:35:::0;::::1;:50::i;:::-;35838:1;35817:18;:22:::0;;;35850:18:::1;:22:::0;;;35883:16:::1;:20:::0;;;35940:16:::1;::::0;35932:58:::1;::::0;35730:76;;-1:-1:-1;35838:1:0;;-1:-1:-1;;;;;35940:16:0;;::::1;::::0;35970:15;;35838:1;35932:58;35838:1;35932:58;35970:15;35940:16;35932:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;36022:14:0::1;::::0;36014:54:::1;::::0;35914:76;;-1:-1:-1;;;;;;36022:14:0::1;::::0;36050:13;;36014:54:::1;::::0;;;36050:13;36022:14;36014:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36001:67;;;;;36079:50;36092:19;36113:15;36079:12;:50::i;:::-;36167:10;36143:21;:34;36140:136;;;36214:10;::::0;36206:58:::1;::::0;-1:-1:-1;;;;;36214:10:0;;::::1;::::0;36238:21:::1;::::0;36206:58:::1;::::0;;;36238:21;36214:10;36206:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;36193:71:0;;-1:-1:-1;;36140:136:0::1;-1:-1:-1::0;;21430:16:0;:24;;-1:-1:-1;;;;21430:24:0;;;-1:-1:-1;;;;;;;;34966:1317:0:o;30340:282::-;556:7;583:6;-1:-1:-1;;;;;583:6:0;169:10;643:23;635:73;;;;-1:-1:-1;;;635:73:0;;;;;;;:::i;:::-;30395:13:::1;:20:::0;;-1:-1:-1;;;;30491:18:0;-1:-1:-1;;;30491:18:0;;;30541:12:::1;30520:18;:33:::0;30585:29:::1;:15;30605:8;30585:19;:29::i;:::-;30564:18;:50:::0;30340:282::o;36782:415::-;36895:11;;36863:58;;36880:4;;-1:-1:-1;;;;;36895:11:0;36909;36863:8;:58::i;:::-;36932:11;;37132:16;;36932:257;;-1:-1:-1;;;36932:257:0;;37000:4;36932:257;;;6579:34:1;6629:18;;;6622:34;;;36932:11:0;6672:18:1;;;6665:34;;;6715:18;;;6708:34;-1:-1:-1;;;;;37132:16:0;;;6758:19:1;;;6751:44;37163:15:0;6811:19:1;;;6804:35;36932:11:0;;;:27;;36967:9;;6513:19:1;;36932:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36782:415;;:::o;37203:453::-;37250:13;;:18;:38;;;;-1:-1:-1;37272:11:0;;:16;37250:38;:60;;;;-1:-1:-1;37292:13:0;;:18;37250:60;:84;;;;-1:-1:-1;37314:15:0;;:20;37250:84;37246:97;;;37203:453::o;37246:97::-;37377:13;;;37353:21;:37;37423:11;;;37401:19;:33;37469:13;;;37445:21;:37;37519:15;;;37493:23;:41;-1:-1:-1;37547:17:0;;;;37575:15;;;;37601:17;;;37629:19;37203:453::o;37901:788::-;38011:7;38006:28;;38020:14;:12;:14::i;:::-;-1:-1:-1;;;;;38049:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;38073:22:0;;;;;;:11;:22;;;;;;;;38072:23;38049:46;38045:597;;;38112:48;38134:6;38142:9;38153:6;38112:21;:48::i;:::-;38045:597;;;-1:-1:-1;;;;;38183:19:0;;;;;;:11;:19;;;;;;;;38182:20;:46;;;;-1:-1:-1;;;;;;38206:22:0;;;;;;:11;:22;;;;;;;;38182:46;38178:464;;;38245:46;38265:6;38273:9;38284:6;38245:19;:46::i;38178:464::-;-1:-1:-1;;;;;38314:19:0;;;;;;:11;:19;;;;;;;;38313:20;:47;;;;-1:-1:-1;;;;;;38338:22:0;;;;;;:11;:22;;;;;;;;38337:23;38313:47;38309:333;;;38377:44;38395:6;38403:9;38414:6;38377:17;:44::i;38309:333::-;-1:-1:-1;;;;;38443:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;38466:22:0;;;;;;:11;:22;;;;;;;;38443:45;38439:203;;;38505:48;38527:6;38535:9;38546:6;38505:21;:48::i;38439:203::-;38586:44;38604:6;38612:9;38623:6;38586:17;:44::i;:::-;38657:7;38652:29;;38666:15;37722:21;;37706:13;:37;37768:19;;37754:11;:33;37814:21;;37798:13;:37;37864:23;;37846:15;:41;37662:233;28166:556;28264:7;;28217;;;;-1:-1:-1;;;28217:7:0;28318:289;28342:9;:16;28338:20;;28318:289;;;28408:7;28384;:21;28392:9;28402:1;28392:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28392:12:0;28384:21;;;;;;;;;;;;;:31;;:66;;;28443:7;28419;:21;28427:9;28437:1;28427:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28427:12:0;28419:21;;;;;;;;;;;;;:31;28384:66;28380:97;;;-1:-1:-1;;28460:7:0;;;-1:-1:-1;;;18905:13:0;-1:-1:-1;28166:556:0;-1:-1:-1;;28166:556:0:o;28380:97::-;28502:34;28514:7;:21;28522:9;28532:1;28522:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28522:12:0;28514:21;;;;;;;;;;;;;28502:7;;:11;:34::i;:::-;28492:44;;28561:34;28573:7;:21;28581:9;28591:1;28581:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28581:12:0;28573:21;;;;;;;;;;;;;28561:7;;:11;:34::i;:::-;28551:44;-1:-1:-1;28360:3:0;;;;:::i;:::-;;;;28318:289;;;-1:-1:-1;28631:7:0;;:20;;-1:-1:-1;;;28631:11:0;:20::i;:::-;28621:7;:30;28617:61;;;-1:-1:-1;;28661:7:0;;;-1:-1:-1;;;18905:13:0;-1:-1:-1;28166:556:0;-1:-1:-1;28166:556:0:o;28617:61::-;28697:7;;28706;;-1:-1:-1;28166:556:0;-1:-1:-1;28166:556:0:o;27233:327::-;27292:7;27300;27308;27328:12;27343:24;27359:7;27343:15;:24::i;:::-;27328:39;;27378:18;27399:30;27421:7;27399:21;:30::i;:::-;27378:51;-1:-1:-1;27440:23:0;27466:33;27378:51;27466:17;:7;27478:4;27466:11;:17::i;:33::-;27440:59;27535:4;;-1:-1:-1;27541:10:0;;-1:-1:-1;27233:327:0;;-1:-1:-1;;;27233:327:0:o;27566:424::-;27678:7;;;;27732:24;:7;27744:11;27732;:24::i;:::-;27714:42;-1:-1:-1;27767:12:0;27782:21;:4;27791:11;27782:8;:21::i;:::-;27767:36;-1:-1:-1;27814:18:0;27835:27;:10;27850:11;27835:14;:27::i;:::-;27814:48;-1:-1:-1;27873:23:0;27899:33;27814:48;27899:17;:7;27911:4;27899:11;:17::i;:33::-;27951:7;;;;-1:-1:-1;27977:4:0;;-1:-1:-1;27566:424:0;;-1:-1:-1;;;;;;;27566:424:0:o;2609:98::-;2667:7;2694:5;2698:1;2694;:5;:::i;36289:487::-;36379:16;;;36393:1;36379:16;;;;;;;;36355:21;;36379:16;;;;;;;;;;-1:-1:-1;36379:16:0;36355:40;;36424:4;36406;36411:1;36406:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36406:23:0;;;:7;;;;;;;;;;:23;;;;36450:11;;:18;;;-1:-1:-1;;;36450:18:0;;;;:11;;;;;:16;;:18;;;;;36406:7;;36450:18;;;;;:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36440:4;36445:1;36440:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36440:28:0;;;:7;;;;;;;;;:28;36511:11;;36479:58;;36496:4;;36511:11;36525;36479:8;:58::i;:::-;36548:11;;:220;;-1:-1:-1;;;36548:220:0;;-1:-1:-1;;;;;36548:11:0;;;;:62;;:220;;36625:11;;36548;;36695:4;;36722;;36742:15;;36548:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36344:432;36289:487;:::o;39958:650::-;40073:15;40103:23;40141:12;40168:23;40206:12;40233:18;40265:19;40276:7;40265:10;:19::i;:::-;-1:-1:-1;;;;;40313:15:0;;;;;;:7;:15;;;;;;40058:226;;-1:-1:-1;40058:226:0;;-1:-1:-1;40058:226:0;;-1:-1:-1;40058:226:0;-1:-1:-1;40058:226:0;-1:-1:-1;40058:226:0;-1:-1:-1;40313:28:0;;40333:7;40313:19;:28::i;:::-;-1:-1:-1;;;;;40295:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40370:7;:15;;;;:28;;40390:7;40370:19;:28::i;:::-;-1:-1:-1;;;;;40352:15:0;;;;;;;:7;:15;;;;;;:46;;;;40430:18;;;;;;;:39;;40453:15;40430:22;:39::i;:::-;-1:-1:-1;;;;;40409:18:0;;;;;;:7;:18;;;;;:60;40480:26;40495:10;40480:14;:26::i;:::-;40517:23;40529:4;40535;40517:11;:23::i;:::-;40573:9;-1:-1:-1;;;;;40556:44:0;40565:6;-1:-1:-1;;;;;40556:44:0;;40584:15;40556:44;;;;17233:25:1;;17221:2;17206:18;;17087:177;40556:44:0;;;;;;;;40047:561;;;;;;39958:650;;;:::o;39290:662::-;39403:15;39433:23;39471:12;39498:23;39536:12;39563:18;39595:19;39606:7;39595:10;:19::i;:::-;-1:-1:-1;;;;;39643:15:0;;;;;;:7;:15;;;;;;39388:226;;-1:-1:-1;39388:226:0;;-1:-1:-1;39388:226:0;;-1:-1:-1;39388:226:0;-1:-1:-1;39388:226:0;-1:-1:-1;39388:226:0;-1:-1:-1;39643:28:0;;39388:226;39643:19;:28::i;:::-;-1:-1:-1;;;;;39625:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;39703:18;;;;;:7;:18;;;;;:39;;39726:15;39703:22;:39::i;:::-;-1:-1:-1;;;;;39682:18:0;;;;;;:7;:18;;;;;;;;:60;;;;39774:7;:18;;;;:39;;39797:15;39774:22;:39::i;38695:589::-;38806:15;38836:23;38874:12;38901:23;38939:12;38966:18;38998:19;39009:7;38998:10;:19::i;:::-;-1:-1:-1;;;;;39046:15:0;;;;;;:7;:15;;;;;;38791:226;;-1:-1:-1;38791:226:0;;-1:-1:-1;38791:226:0;;-1:-1:-1;38791:226:0;-1:-1:-1;38791:226:0;-1:-1:-1;38791:226:0;-1:-1:-1;39046:28:0;;38791:226;39046:19;:28::i;40614:721::-;40729:15;40759:23;40797:12;40824:23;40862:12;40889:18;40921:19;40932:7;40921:10;:19::i;:::-;-1:-1:-1;;;;;40969:15:0;;;;;;:7;:15;;;;;;40714:226;;-1:-1:-1;40714:226:0;;-1:-1:-1;40714:226:0;;-1:-1:-1;40714:226:0;-1:-1:-1;40714:226:0;-1:-1:-1;40714:226:0;-1:-1:-1;40969:28:0;;40989:7;40969:19;:28::i;:::-;-1:-1:-1;;;;;40951:15:0;;;;;;:7;:15;;;;;;;;:46;;;;41026:7;:15;;;;:28;;41046:7;41026:19;:28::i;29681:138::-;29745:7;29772:39;29805:5;29772:28;29784:15;;29772:7;:11;;:28;;;;:::i;29825:178::-;29895:7;29922:73;29989:5;29922:62;29934:49;29971:11;;29934:32;29952:13;;29934;;:17;;:32;;;;:::i;:::-;:36;;:49::i;:::-;29922:7;;:11;:62::i;28728:947::-;19124:1;28794:15;;:22;28791:582;;;28854:47;28890:10;;28854:31;28869:15;;28854:10;:14;;:31;;;;:::i;:47::-;28832:18;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;28970:10:0;;28951:13;;28936:45;;28970:10;28936:29;;:10;;:14;:29::i;:45::-;28916:16;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;29054:10:0;;29033:15;;29018:47;;29054:10;29018:31;;:10;;:14;:31::i;:47::-;28996:18;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;28791:582:0;;-1:-1:-1;28791:582:0;;19164:1;29086:15;;:23;29083:290;;;29147:48;29184:10;;29147:32;29162:16;;29147:10;:14;;:32;;;;:::i;:48::-;29125:18;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;;29265:10:0;;29245:14;;29230:46;;29265:10;29230:30;;:10;;:14;:30::i;:46::-;29210:16;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;29350:10:0;;29328:16;;29313:48;;29350:10;29313:32;;:10;;:14;:32::i;:48::-;29291:18;;:70;;;;;;;:::i;:::-;;;;-1:-1:-1;;29083:290:0;29383:19;29405:10;:8;:10::i;:::-;29383:32;-1:-1:-1;29426:18:0;29447:27;:10;29383:32;29447:14;:27::i;:::-;29526:4;29510:22;;;;:7;:22;;;;;;29426:48;;-1:-1:-1;29510:38:0;;29426:48;29510:26;:38::i;:::-;29501:4;29485:22;;;;:7;:22;;;;;;;;:63;;;;29563:11;:26;;;;;;29559:108;;;29645:4;29629:22;;;;:7;:22;;;;;;:38;;29656:10;29629:26;:38::i;:::-;29620:4;29604:22;;;;:7;:22;;;;;:63;28780:895;;28728:947;:::o;26660:147::-;26738:7;;:17;;26750:4;26738:11;:17::i;:::-;26728:7;:27;26779:10;;:20;;26794:4;26779:14;:20::i;:::-;26766:10;:33;-1:-1:-1;;26660:147:0:o;14:673:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:247::-;751:6;804:2;792:9;783:7;779:23;775:32;772:52;;;820:1;817;810:12;772:52;859:9;846:23;878:31;903:5;878:31;:::i;944:251::-;1014:6;1067:2;1055:9;1046:7;1042:23;1038:32;1035:52;;;1083:1;1080;1073:12;1035:52;1115:9;1109:16;1134:31;1159:5;1134:31;:::i;1200:388::-;1268:6;1276;1329:2;1317:9;1308:7;1304:23;1300:32;1297:52;;;1345:1;1342;1335:12;1297:52;1384:9;1371:23;1403:31;1428:5;1403:31;:::i;:::-;1453:5;-1:-1:-1;1510:2:1;1495:18;;1482:32;1523:33;1482:32;1523:33;:::i;:::-;1575:7;1565:17;;;1200:388;;;;;:::o;1593:456::-;1670:6;1678;1686;1739:2;1727:9;1718:7;1714:23;1710:32;1707:52;;;1755:1;1752;1745:12;1707:52;1794:9;1781:23;1813:31;1838:5;1813:31;:::i;:::-;1863:5;-1:-1:-1;1920:2:1;1905:18;;1892:32;1933:33;1892:32;1933:33;:::i;:::-;1593:456;;1985:7;;-1:-1:-1;;;2039:2:1;2024:18;;;;2011:32;;1593:456::o;2054:315::-;2122:6;2130;2183:2;2171:9;2162:7;2158:23;2154:32;2151:52;;;2199:1;2196;2189:12;2151:52;2238:9;2225:23;2257:31;2282:5;2257:31;:::i;:::-;2307:5;2359:2;2344:18;;;;2331:32;;-1:-1:-1;;;2054:315:1:o;2374:1226::-;2492:6;2500;2553:2;2541:9;2532:7;2528:23;2524:32;2521:52;;;2569:1;2566;2559:12;2521:52;2609:9;2596:23;2638:18;2679:2;2671:6;2668:14;2665:34;;;2695:1;2692;2685:12;2665:34;2733:6;2722:9;2718:22;2708:32;;2778:7;2771:4;2767:2;2763:13;2759:27;2749:55;;2800:1;2797;2790:12;2749:55;2836:2;2823:16;2858:4;2882:60;2898:43;2938:2;2898:43;:::i;2882:60::-;2964:3;2988:2;2983:3;2976:15;3016:2;3011:3;3007:12;3000:19;;3047:2;3043;3039:11;3095:7;3090:2;3084;3081:1;3077:10;3073:2;3069:19;3065:28;3062:41;3059:61;;;3116:1;3113;3106:12;3059:61;3138:1;3129:10;;3148:238;3162:2;3159:1;3156:9;3148:238;;;3233:3;3220:17;3250:31;3275:5;3250:31;:::i;:::-;3294:18;;3180:1;3173:9;;;;;3332:12;;;;3364;;3148:238;;;-1:-1:-1;3405:5:1;-1:-1:-1;;3448:18:1;;3435:32;;-1:-1:-1;;3479:16:1;;;3476:36;;;3508:1;3505;3498:12;3476:36;;3531:63;3586:7;3575:8;3564:9;3560:24;3531:63;:::i;:::-;3521:73;;;2374:1226;;;;;:::o;3605:180::-;3664:6;3717:2;3705:9;3696:7;3692:23;3688:32;3685:52;;;3733:1;3730;3723:12;3685:52;-1:-1:-1;3756:23:1;;3605:180;-1:-1:-1;3605:180:1:o;3790:184::-;3860:6;3913:2;3901:9;3892:7;3888:23;3884:32;3881:52;;;3929:1;3926;3919:12;3881:52;-1:-1:-1;3952:16:1;;3790:184;-1:-1:-1;3790:184:1:o;3979:341::-;4044:6;4052;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;4157:9;4144:23;4134:33;;4217:2;4206:9;4202:18;4189:32;4264:5;4257:13;4250:21;4243:5;4240:32;4230:60;;4286:1;4283;4276:12;4325:248;4393:6;4401;4454:2;4442:9;4433:7;4429:23;4425:32;4422:52;;;4470:1;4467;4460:12;4422:52;-1:-1:-1;;4493:23:1;;;4563:2;4548:18;;;4535:32;;-1:-1:-1;4325:248:1:o;4578:306::-;4666:6;4674;4682;4735:2;4723:9;4714:7;4710:23;4706:32;4703:52;;;4751:1;4748;4741:12;4703:52;4780:9;4774:16;4764:26;;4830:2;4819:9;4815:18;4809:25;4799:35;;4874:2;4863:9;4859:18;4853:25;4843:35;;4578:306;;;;;:::o;4889:385::-;4975:6;4983;4991;4999;5052:3;5040:9;5031:7;5027:23;5023:33;5020:53;;;5069:1;5066;5059:12;5020:53;-1:-1:-1;;5092:23:1;;;5162:2;5147:18;;5134:32;;-1:-1:-1;5213:2:1;5198:18;;5185:32;;5264:2;5249:18;5236:32;;-1:-1:-1;4889:385:1;-1:-1:-1;4889:385:1:o;7277:597::-;7389:4;7418:2;7447;7436:9;7429:21;7479:6;7473:13;7522:6;7517:2;7506:9;7502:18;7495:34;7547:1;7557:140;7571:6;7568:1;7565:13;7557:140;;;7666:14;;;7662:23;;7656:30;7632:17;;;7651:2;7628:26;7621:66;7586:10;;7557:140;;;7715:6;7712:1;7709:13;7706:91;;;7785:1;7780:2;7771:6;7760:9;7756:22;7752:31;7745:42;7706:91;-1:-1:-1;7858:2:1;7837:15;-1:-1:-1;;7833:29:1;7818:45;;;;7865:2;7814:54;;7277:597;-1:-1:-1;;;7277:597:1:o;9822:418::-;10024:2;10006:21;;;10063:2;10043:18;;;10036:30;10102:34;10097:2;10082:18;;10075:62;-1:-1:-1;;;10168:2:1;10153:18;;10146:52;10230:3;10215:19;;9822:418::o;13889:401::-;14091:2;14073:21;;;14130:2;14110:18;;;14103:30;14169:34;14164:2;14149:18;;14142:62;-1:-1:-1;;;14235:2:1;14220:18;;14213:35;14280:3;14265:19;;13889:401::o;17269:980::-;17531:4;17579:3;17568:9;17564:19;17610:6;17599:9;17592:25;17636:2;17674:6;17669:2;17658:9;17654:18;17647:34;17717:3;17712:2;17701:9;17697:18;17690:31;17741:6;17776;17770:13;17807:6;17799;17792:22;17845:3;17834:9;17830:19;17823:26;;17884:2;17876:6;17872:15;17858:29;;17905:1;17915:195;17929:6;17926:1;17923:13;17915:195;;;17994:13;;-1:-1:-1;;;;;17990:39:1;17978:52;;18085:15;;;;18050:12;;;;18026:1;17944:9;17915:195;;;-1:-1:-1;;;;;;;18166:32:1;;;;18161:2;18146:18;;18139:60;-1:-1:-1;;;18230:3:1;18215:19;18208:35;18127:3;17269:980;-1:-1:-1;;;17269:980:1:o;18839:275::-;18910:2;18904:9;18975:2;18956:13;;-1:-1:-1;;18952:27:1;18940:40;;19010:18;18995:34;;19031:22;;;18992:62;18989:88;;;19057:18;;:::i;:::-;19093:2;19086:22;18839:275;;-1:-1:-1;18839:275:1:o;19119:183::-;19179:4;19212:18;19204:6;19201:30;19198:56;;;19234:18;;:::i;:::-;-1:-1:-1;19279:1:1;19275:14;19291:4;19271:25;;19119:183::o;19307:128::-;19347:3;19378:1;19374:6;19371:1;19368:13;19365:39;;;19384:18;;:::i;:::-;-1:-1:-1;19420:9:1;;19307:128::o;19440:217::-;19480:1;19506;19496:132;;19550:10;19545:3;19541:20;19538:1;19531:31;19585:4;19582:1;19575:15;19613:4;19610:1;19603:15;19496:132;-1:-1:-1;19642:9:1;;19440:217::o;19662:168::-;19702:7;19768:1;19764;19760:6;19756:14;19753:1;19750:21;19745:1;19738:9;19731:17;19727:45;19724:71;;;19775:18;;:::i;:::-;-1:-1:-1;19815:9:1;;19662:168::o;19835:125::-;19875:4;19903:1;19900;19897:8;19894:34;;;19908:18;;:::i;:::-;-1:-1:-1;19945:9:1;;19835:125::o;19965:135::-;20004:3;-1:-1:-1;;20025:17:1;;20022:43;;;20045:18;;:::i;:::-;-1:-1:-1;20092:1:1;20081:13;;19965:135::o;20105:127::-;20166:10;20161:3;20157:20;20154:1;20147:31;20197:4;20194:1;20187:15;20221:4;20218:1;20211:15;20237:127;20298:10;20293:3;20289:20;20286:1;20279:31;20329:4;20326:1;20319:15;20353:4;20350:1;20343:15;20369:127;20430:10;20425:3;20421:20;20418:1;20411:31;20461:4;20458:1;20451:15;20485:4;20482:1;20475:15;20501:131;-1:-1:-1;;;;;20576:31:1;;20566:42;;20556:70;;20622:1;20619;20612:12

Swarm Source

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