ETH Price: $3,389.12 (+1.63%)

Token

Fvck Cancel Culture (FCC)
 

Overview

Max Total Supply

10,000,000,000 FCC

Holders

645

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,322,372.039530382537903687 FCC

Value
$0.00
0xd71ce0e5fbc5c8f0407674d2b1da85bf81aa95c5
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:
FCC

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.9;

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // 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);
            }
        }
    }
}

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

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

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

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

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

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

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

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

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


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}


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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    address payable public marketingAddress =
        payable(0x9b107e832498F4dAE6f2EB2A08fD789C1376D670); // Marketing Address

    address payable public liquidityAddress =
        payable(0x9b107e832498F4dAE6f2EB2A08fD789C1376D670); // Liquidity Address

    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD; // dead address

    mapping(address => uint256) private _brcrOwned;
    mapping(address => uint256) private _brctOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isExcludedFromFee;

    mapping(address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _brctTotal = 10000000000 * 1e18;
    uint256 private _brcrTotal = (MAX - (MAX % _brctTotal));
    uint256 private _brctFeeTotal;

    bool public limitsInEffect = true;

    string private constant _name = "Fvck Cancel Culture";
    string private constant _symbol = "FCC";

    uint8 private constant _decimals = 18;

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

    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;

    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 private _buyTaxFee = 0;
    uint256 public _buyLiquidityFee = 3;
    uint256 public _buyMarketingFee = 4;

    uint256 private _sellTaxFee = 0;
    uint256 public _sellLiquidityFee = 3;
    uint256 public _sellMarketingFee = 4;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    mapping(address => bool) public boughtEarly;
    uint256 public earlyBuyPenaltyEnd; // determines when snipers/bots can sell without extra penalty

    uint256 private _liquidityTokensToSwap;
    uint256 private _marketingTokensToSwap;

    bool private gasLimitActive = true;
    uint256 private gasPriceLimit = 100 * 1 gwei;
    uint256 private gasMaxLimit =  50000000; // gasLeft limit

    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    uint256 private minimumTokensBeforeSwap = _brctTotal * 5 / 10000; // 0.05%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

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

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

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

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

    event SetAutomatedMarketMakerPair(address pair, bool value);

    event ExcludeFromReward(address excludedAddress);

    event IncludeInReward(address includedAddress);

    event ExcludeFromFee(address excludedAddress);

    event IncludeInFee(address includedAddress);

    event SetBuyFee(uint256 marketingFee, uint256 liquidityFee);

    event SetSellFee(uint256 marketingFee, uint256 liquidityFee);

    event TransferForeignToken(address token, uint256 amount);

    event UpdatedMarketingAddress(address marketing);

    event UpdatedLiquidityAddress(address liquidity);

    event OwnerForcedSwapBack(uint256 timestamp);

    event BoughtEarly(address indexed sniper);

    event RemovedSniper(address indexed notsnipersupposedly);

    event UpdatedRouter(address indexed newrouter);

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

    constructor() {
        _brcrOwned[_msgSender()] = _brcrTotal;

        maxTransactionAmount = _brctTotal * 5 / 1000; // 0.5% maxTransactionAmountTxn
        maxWallet = _brctTotal * 20 / 1000; // 2% maxWallet

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[liquidityAddress] = true;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        emit Transfer(address(0), _msgSender(), _brctTotal);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _brctTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _brctOwned[account];

        require(
            _brcrOwned[account] <= _brcrTotal,
            "Amount must be less than total brc"
        );
        uint256 currentRate = _getRate();
        return _brcrOwned[account].div(currentRate);
    }

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

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

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

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

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

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

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

    function totalFees() external view returns (uint256) {
        return _brctFeeTotal;
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapAndLiquifyEnabled = true;
        tradingActiveBlock = block.number;
        earlyBuyPenaltyEnd = block.timestamp + 72 hours;
    }

    function minimumTokensBeforeSwapAmount() external view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        excludeFromMaxTransaction(pair, value);
        if(value){excludeFromReward(pair);}
        if(!value){includeInReward(pair);}
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setProtectionSettings(bool antiGas) external onlyOwner() {
        gasLimitActive = antiGas;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75);
        gasPriceLimit = gas * 1 gwei;
    }

    function setGasMaxLimit(uint256 gas) external onlyOwner {
        require(gas >= 750000);
        gasMaxLimit = gas * gasPriceLimit;
    }

    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        gasLimitActive = false;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }

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

    function includeInReward(address account) public onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _brctOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function safeTransfer(address from, address to, uint256 amount) public onlyOwner {
        _tokenTransfer(from, to, amount, false);
    }

    function clearStuckBNB(uint256 amountPercentage) external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(owner()).transfer(amountBNB * amountPercentage / 100);
    }

    function clearStuckToken(IERC20 _token, uint256 amountPercentage) external onlyOwner {
        uint256 amountToken = _token.balanceOf(address(this));
         _token.transfer(owner(), amountToken * amountPercentage / 100);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!tradingActive){
            require(_isExcludedFromFee[from] || _isExcludedFromFee[to], "Trading is not active yet.");
        }

     if(limitsInEffect){
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !inSwapAndLiquify
        ){

            if(from != owner() && to != uniswapV2Pair && block.number == tradingActiveBlock){
                boughtEarly[to] = true;
                emit BoughtEarly(to);
            }

            if (gasLimitActive && automatedMarketMakerPairs[from]) {
                require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
            }

            //only on buys
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }
        }
    }

        uint256 totalTokensToSwap = _liquidityTokensToSwap + _marketingTokensToSwap;
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

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

        bool takeFee = true;

        // If any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
            buyOrSellSwitch = TRANSFER;
        } else {
            // Buy
            if (automatedMarketMakerPairs[from]) {
                removeAllFee();
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee + _buyMarketingFee;
                buyOrSellSwitch = BUY;
            }
            // Sell
            else if (automatedMarketMakerPairs[to]) {
                removeAllFee();
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee + _sellMarketingFee;
                buyOrSellSwitch = SELL;
                // triple tax if bought in the same block as trading active for 72 hours
                if(boughtEarly[from]  && earlyBuyPenaltyEnd <= block.number){
                    _taxFee = _taxFee * 3;
                    _liquidityFee = _liquidityFee * 3;
                }
            // Normal transfers do not get taxed
            } else {
                removeAllFee();
                buyOrSellSwitch = TRANSFER;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);

    }

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));

        uint256 totalTokensToSwap = _liquidityTokensToSwap.add(_marketingTokensToSwap);

        // Halve the amount of liquidity tokens
        uint256 tokensForLiquidity = _liquidityTokensToSwap.div(2);
        uint256 amountToSwapForBNB = contractBalance.sub(tokensForLiquidity);

        uint256 initialBNBBalance = address(this).balance;

        swapTokensForBNB(amountToSwapForBNB);

        uint256 bnbBalance = address(this).balance.sub(initialBNBBalance);

        uint256 bnbForMarketing = bnbBalance.mul(_marketingTokensToSwap).div(totalTokensToSwap);
        uint256 bnbForLiquidity = bnbBalance.sub(bnbForMarketing);

        _liquidityTokensToSwap = 0;
        _marketingTokensToSwap = 0;

        (bool success,) = address(marketingAddress).call{value: bnbForMarketing}("");

        addLiquidity(tokensForLiquidity, bnbForLiquidity);
        emit SwapAndLiquify(amountToSwapForBNB, bnbForLiquidity, tokensForLiquidity);

        // send leftover BNB to the marketing wallet so it doesn't get stuck on the contract.
        if(address(this).balance > 1e17){
            (success,) = address(marketingAddress).call{value: address(this).balance}("");
        }
    }

    function swapTokensForBNB(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

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

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

        restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 brctAmount
    ) private {
        (
            uint256 brcrAmount,
            uint256 brcrTransferAmount,
            uint256 brcrFee,
            uint256 brctTransferAmount,
            uint256 brctFee,
            uint256 brctLiquidity
        ) = _getValues(brctAmount);
        _brcrOwned[sender] = _brcrOwned[sender].sub(brcrAmount);
        _brcrOwned[recipient] = _brcrOwned[recipient].add(brcrTransferAmount);
        _takeLiquidity(brctLiquidity);
        _brcFee(brcrFee, brctFee);
        emit Transfer(sender, recipient, brctTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 brctAmount
    ) private {
        (
            uint256 brcrAmount,
            uint256 brcrTransferAmount,
            uint256 brcrFee,
            uint256 brctTransferAmount,
            uint256 brctFee,
            uint256 brctLiquidity
        ) = _getValues(brctAmount);
        _brcrOwned[sender] = _brcrOwned[sender].sub(brcrAmount);
        _brctOwned[recipient] = _brctOwned[recipient].add(brctTransferAmount);
        _brcrOwned[recipient] = _brcrOwned[recipient].add(brcrTransferAmount);
        _takeLiquidity(brctLiquidity);
        _brcFee(brcrFee, brctFee);
        emit Transfer(sender, recipient, brctTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 brctAmount
    ) private {
        (
            uint256 brcrAmount,
            uint256 brcrTransferAmount,
            uint256 brcrFee,
            uint256 brctTransferAmount,
            uint256 brctFee,
            uint256 brctLiquidity
        ) = _getValues(brctAmount);
        _brctOwned[sender] = _brctOwned[sender].sub(brctAmount);
        _brcrOwned[sender] = _brcrOwned[sender].sub(brcrAmount);
        _brcrOwned[recipient] = _brcrOwned[recipient].add(brcrTransferAmount);
        _takeLiquidity(brctLiquidity);
        _brcFee(brcrFee, brctFee);
        emit Transfer(sender, recipient, brctTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 brctAmount
    ) private {
        (
            uint256 brcrAmount,
            uint256 brcrTransferAmount,
            uint256 brcrFee,
            uint256 brctTransferAmount,
            uint256 brctFee,
            uint256 brctLiquidity
        ) = _getValues(brctAmount);
        _brctOwned[sender] = _brctOwned[sender].sub(brctAmount);
        _brcrOwned[sender] = _brcrOwned[sender].sub(brcrAmount);
        _brctOwned[recipient] = _brctOwned[recipient].add(brctTransferAmount);
        _brcrOwned[recipient] = _brcrOwned[recipient].add(brcrTransferAmount);
        _takeLiquidity(brctLiquidity);
        _brcFee(brcrFee, brctFee);
        emit Transfer(sender, recipient, brctTransferAmount);
    }

    function _brcFee(uint256 brcrFee, uint256 tFee) private {
        _brcrTotal = _brcrTotal.sub(brcrFee);
        _brctFeeTotal = _brctFeeTotal.add(tFee);
    }

    function _getValues(uint256 brctAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 brctTransferAmount,
            uint256 brctFee,
            uint256 brctLiquidity
        ) = _getTValues(brctAmount);
        (uint256 brcrAmount, uint256 brcrTransferAmount, uint256 brcrFee) = _getBrcRValues(
            brctAmount,
            brctFee,
            brctLiquidity,
            _getRate()
        );
        return (
            brcrAmount,
            brcrTransferAmount,
            brcrFee,
            brctTransferAmount,
            brctFee,
            brctLiquidity
        );
    }

    function _getTValues(uint256 brctAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 brctFee = calculateTaxFee(brctAmount);
        uint256 brctLiquidity = calculateLiquidityFee(brctAmount);
        uint256 tTransferAmount = brctAmount.sub(brctFee).sub(brctLiquidity);
        return (tTransferAmount, brctFee, brctLiquidity);
    }

    function _getBrcRValues(
        uint256 brctAmount,
        uint256 brctFee,
        uint256 brctLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 brcrAmount = brctAmount.mul(currentRate);
        uint256 brcrFee = brctFee.mul(currentRate);
        uint256 brcrLiquidity = brctLiquidity.mul(currentRate);
        uint256 rTransferAmount = brcrAmount.sub(brcrFee).sub(brcrLiquidity);
        return (brcrAmount, rTransferAmount, brcrFee);
    }

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 brcrSupply = _brcrTotal;
        uint256 brctSupply = _brctTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _brcrOwned[_excluded[i]] > brcrSupply ||
                _brctOwned[_excluded[i]] > brctSupply
            ) return (_brcrTotal, _brctTotal);
            brcrSupply = brcrSupply.sub(_brcrOwned[_excluded[i]]);
            brctSupply = brctSupply.sub(_brctOwned[_excluded[i]]);
        }
        if (brcrSupply < _brcrTotal.div(_brctTotal)) return (_brcrTotal, _brctTotal);
        return (brcrSupply, brctSupply);
    }

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

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

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

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

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

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

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function antiWhale(address account) external onlyOwner {
        boughtEarly[account] = false;
        emit RemovedSniper(account);
    }

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

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


    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 setLiquidityAddress(address _liquidityAddress) external onlyOwner {
        require(_liquidityAddress != address(0), "_liquidityAddress address cannot be 0");
        liquidityAddress = payable(_liquidityAddress);
        _isExcludedFromFee[liquidityAddress] = true;
        emit UpdatedLiquidityAddress(_liquidityAddress);
    }

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

    function getPairAddress() external view onlyOwner returns (address) {
        return uniswapV2Pair;
    }

    function changeRouterVersion(address _router)
        external
        onlyOwner
        returns (address _pair)
    {
        require(_router != address(0), "_router address cannot be 0");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);

        _pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );
        if (_pair == address(0)) {
            // Pair doesn't exist
            _pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            );
        }
        uniswapV2Pair = _pair;

        // Set the router of the contract variables
        uniswapV2Router = _uniswapV2Router;
        emit UpdatedRouter(_router);
    }

    // To receive ETH from uniswapV2Router when swapping
    receive() external payable {}

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _sent)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"excludedAddress","type":"address"}],"name":"ExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"includedAddress","type":"address"}],"name":"IncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"notsnipersupposedly","type":"address"}],"name":"RemovedSniper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"SetBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"SetSellFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"liquidity","type":"address"}],"name":"UpdatedLiquidityAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketing","type":"address"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newrouter","type":"address"}],"name":"UpdatedRouter","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"account","type":"address"}],"name":"antiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"boughtEarly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"_pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"safeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","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":"bool","name":"antiGas","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260038054739b107e832498f4dae6f2eb2a08fd789c1376d6706001600160a01b0319918216811790925560048054909116909117905561dead6080526200005a6b204fce5e3e2502611000000060001962000980565b6200006890600019620009ad565b600b55600d8054600160ff199182168117909255600f546010556011546012556000601381905560036014819055600460158190556016839055601791909155601855601955601e8054909116909117905564174876e800601f556302faf080602055612710620000e76b204fce5e3e250261100000006005620009c7565b620000f39190620009e9565b6025556027805461ffff60a81b191690553480156200011157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b5460056000336001600160a01b031681526020810191909152604001600020556103e8620001916b204fce5e3e250261100000006005620009c7565b6200019d9190620009e9565b6021556103e8620001bc6b204fce5e3e250261100000006014620009c7565b620001c89190620009e9565b6022819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022357600080fd5b505afa15801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e919062000a00565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a757600080fd5b505afa158015620002bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e2919062000a00565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200032b57600080fd5b505af115801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000a00565b602680546001600160a01b038086166001600160a01b03199283161790925560278054928416929091169190911790559050620003a5816001620004ae565b600160086000620003be6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526008909352818320805485166001908117909155600354821684528284208054861682179055600454909116835291208054909216179055620004466200043e6000546001600160a01b031690565b600162000548565b6200045330600162000548565b6200046261dead600162000548565b6040516b204fce5e3e25026110000000815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505062000a97565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055620004de828262000548565b8015620004f057620004f082620005c2565b80620005015762000501826200077d565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a15050565b6000546001600160a01b03163314620005975760405162461bcd60e51b8152602060048201819052602482015260008051602062004a2c83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146200060d5760405162461bcd60e51b8152602060048201819052602482015260008051602062004a2c83398151915260448201526064016200058e565b6001600160a01b03811660009081526009602052604090205460ff1615620006785760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016200058e565b600a546032906200068b90600162000a32565b1115620007175760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a4016200058e565b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b03163314620007c85760405162461bcd60e51b8152602060048201819052602482015260008051602062004a2c83398151915260448201526064016200058e565b6001600160a01b03811660009081526009602052604090205460ff16620008325760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c7564656400000000000000000060448201526064016200058e565b60005b600a548110156200096657816001600160a01b0316600a828154811062000860576200086062000a4d565b6000918252602090912001546001600160a01b031614156200095157600a80546200088e90600190620009ad565b81548110620008a157620008a162000a4d565b600091825260209091200154600a80546001600160a01b039092169183908110620008d057620008d062000a4d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a8054806200092b576200092b62000a63565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806200095d8162000a79565b91505062000835565b5050565b634e487b7160e01b600052601260045260246000fd5b6000826200099257620009926200096a565b500690565b634e487b7160e01b600052601160045260246000fd5b600082821015620009c257620009c262000997565b500390565b6000816000190483118215151615620009e457620009e462000997565b500290565b600082620009fb57620009fb6200096a565b500490565b60006020828403121562000a1357600080fd5b81516001600160a01b038116811462000a2b57600080fd5b9392505050565b6000821982111562000a485762000a4862000997565b500190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000a905762000a9062000997565b5060010190565b608051613f7962000ab360003960006105a10152613f796000f3fe6080604052600436106103c75760003560e01c80638366e79a116101f2578063bbc0c7421161010d578063dc44b6a0116100a0578063f2fde38b1161006f578063f2fde38b14610bb2578063f8b45b0514610bd2578063fb0ecfa414610be8578063fe40278314610c0857600080fd5b8063dc44b6a014610b20578063dd62ed3e14610b36578063ea2f0b3714610b7c578063ee40166e14610b9c57600080fd5b8063c8607952116100dc578063c860795214610ab4578063c8c8ebe414610aca578063d00dc58914610ae0578063d1660f9914610b0057600080fd5b8063bbc0c74214610a3d578063c18bc19514610a5e578063c49b9a8014610a7e578063c5d2418914610a9e57600080fd5b806395d89b4111610185578063a457c2d711610154578063a457c2d7146109ad578063a5ece941146109cd578063a9059cbb146109ed578063b62496f514610a0d57600080fd5b806395d89b411461092c5780639a7a23d614610958578063a0263c8914610978578063a073d37f1461099857600080fd5b80638a8c523c116101c15780638a8c523c146108c45780638d5f81e2146108d95780638da5cb5b146108ee578063906e9dd01461090c57600080fd5b80638366e79a1461082557806385ecfd281461084557806388790a681461087557806388f820201461088b57600080fd5b8063437823ec116102e25780635881f3ef11610275578063715018a611610244578063715018a6146107bb578063751039fc146107d05780637571336a146107e557806377b54bad1461080557600080fd5b80635881f3ef14610746578063602bc62b146107665780636ac9a8701461077b57806370a082311461079b57600080fd5b806352390c02116102b157806352390c02146106ba578063525fa81f146106da5780635342acb4146106fa578063557ed1ba1461073357600080fd5b8063437823ec1461063f57806349bd5a5e1461065f5780634a62bb651461067f5780634a74bb021461069957600080fd5b8063203e727e1161035a578063313ce56711610329578063313ce567146105c35780633221c93f146105df5780633685d419146105ff578063395093511461061f57600080fd5b8063203e727e1461052f5780632152e92d1461054f57806323b872dd1461056f57806327c8f8351461058f57600080fd5b806313114a9d1161039657806313114a9d146104a35780631694505e146104c257806318160ddd146104fa5780631fc851bd1461051957600080fd5b806306fdde03146103d35780630923160214610421578063095ea7b31461044357806310d5de531461047357600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506040805180820190915260138152724676636b2043616e63656c2043756c7475726560681b60208201525b6040516104189190613b3e565b60405180910390f35b34801561042d57600080fd5b5061044161043c366004613b93565b610c28565b005b34801561044f57600080fd5b5061046361045e366004613bc4565b610c7d565b6040519015158152602001610418565b34801561047f57600080fd5b5061046361048e366004613bf0565b60236020526000908152604090205460ff1681565b3480156104af57600080fd5b50600c545b604051908152602001610418565b3480156104ce57600080fd5b506026546104e2906001600160a01b031681565b6040516001600160a01b039091168152602001610418565b34801561050657600080fd5b506b204fce5e3e250261100000006104b4565b34801561052557600080fd5b506104b4601b5481565b34801561053b57600080fd5b5061044161054a366004613b93565b610c94565b34801561055b57600080fd5b5061044161056a366004613bf0565b610d74565b34801561057b57600080fd5b5061046361058a366004613c0d565b610de7565b34801561059b57600080fd5b506104e27f000000000000000000000000000000000000000000000000000000000000000081565b3480156105cf57600080fd5b5060405160128152602001610418565b3480156105eb57600080fd5b506004546104e2906001600160a01b031681565b34801561060b57600080fd5b5061044161061a366004613bf0565b610e50565b34801561062b57600080fd5b5061046361063a366004613bc4565b611007565b34801561064b57600080fd5b5061044161065a366004613bf0565b61103d565b34801561066b57600080fd5b506027546104e2906001600160a01b031681565b34801561068b57600080fd5b50600d546104639060ff1681565b3480156106a557600080fd5b5060275461046390600160a81b900460ff1681565b3480156106c657600080fd5b506104416106d5366004613bf0565b6110c2565b3480156106e657600080fd5b506104416106f5366004613bf0565b611256565b34801561070657600080fd5b50610463610715366004613bf0565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561073f57600080fd5b50426104b4565b34801561075257600080fd5b506104e2610761366004613bf0565b61134c565b34801561077257600080fd5b506002546104b4565b34801561078757600080fd5b50610441610796366004613c4e565b611726565b3480156107a757600080fd5b506104b46107b6366004613bf0565b6117ee565b3480156107c757600080fd5b506104416118d7565b3480156107dc57600080fd5b5061046361194b565b3480156107f157600080fd5b50610441610800366004613c7e565b611992565b34801561081157600080fd5b50610441610820366004613bc4565b6119e7565b34801561083157600080fd5b50610463610840366004613cb7565b611b48565b34801561085157600080fd5b50610463610860366004613bf0565b601a6020526000908152604090205460ff1681565b34801561088157600080fd5b506104b460175481565b34801561089757600080fd5b506104636108a6366004613bf0565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108d057600080fd5b50610441611d6e565b3480156108e557600080fd5b506104e2611dc3565b3480156108fa57600080fd5b506000546001600160a01b03166104e2565b34801561091857600080fd5b50610441610927366004613bf0565b611dfe565b34801561093857600080fd5b5060408051808201909152600381526246434360e81b602082015261040b565b34801561096457600080fd5b50610441610973366004613c7e565b611ef4565b34801561098457600080fd5b50610441610993366004613ce5565b611fac565b3480156109a457600080fd5b506025546104b4565b3480156109b957600080fd5b506104636109c8366004613bc4565b611fe9565b3480156109d957600080fd5b506003546104e2906001600160a01b031681565b3480156109f957600080fd5b50610463610a08366004613bc4565b612038565b348015610a1957600080fd5b50610463610a28366004613bf0565b60246020526000908152604090205460ff1681565b348015610a4957600080fd5b5060275461046390600160b01b900460ff1681565b348015610a6a57600080fd5b50610441610a79366004613b93565b612045565b348015610a8a57600080fd5b50610441610a99366004613ce5565b612119565b348015610aaa57600080fd5b506104b460155481565b348015610ac057600080fd5b506104b460185481565b348015610ad657600080fd5b506104b460215481565b348015610aec57600080fd5b50610441610afb366004613b93565b612190565b348015610b0c57600080fd5b50610441610b1b366004613c0d565b6121dd565b348015610b2c57600080fd5b506104b460145481565b348015610b4257600080fd5b506104b4610b51366004613cb7565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b8857600080fd5b50610441610b97366004613bf0565b612219565b348015610ba857600080fd5b506104b460195481565b348015610bbe57600080fd5b50610441610bcd366004613bf0565b612294565b348015610bde57600080fd5b506104b460225481565b348015610bf457600080fd5b50610441610c03366004613c4e565b61237e565b348015610c1457600080fd5b50610441610c23366004613b93565b61243e565b6000546001600160a01b03163314610c5b5760405162461bcd60e51b8152600401610c5290613d02565b60405180910390fd5b604b811015610c6957600080fd5b610c7781633b9aca00613d4d565b601f5550565b6000610c8a3384846124c5565b5060015b92915050565b6000546001600160a01b03163314610cbe5760405162461bcd60e51b8152600401610c5290613d02565b670de0b6b3a76400006103e8610ce16b204fce5e3e250261100000006001613d4d565b610ceb9190613d6c565b610cf59190613d6c565b811015610d5c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c52565b610d6e81670de0b6b3a7640000613d4d565b60215550565b6000546001600160a01b03163314610d9e5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000610df48484846125e9565b610e468433610e4185604051806060016040528060288152602001613ef7602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612ca1565b6124c5565b5060019392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b03811660009081526009602052604090205460ff16610ee25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c52565b60005b600a5481101561100357816001600160a01b0316600a8281548110610f0c57610f0c613d8e565b6000918252602090912001546001600160a01b03161415610ff157600a8054610f3790600190613da4565b81548110610f4757610f47613d8e565b600091825260209091200154600a80546001600160a01b039092169183908110610f7357610f73613d8e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610fcb57610fcb613dbb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ffb81613dd1565b915050610ee5565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c8a918590610e419086612cdb565b6000546001600160a01b031633146110675760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b03811660009081526009602052604090205460ff16156111555760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c52565b600a54603290611166906001613dec565b11156111f05760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c52565b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146112805760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0381166112e45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c52565b600480546001600160a01b0319166001600160a01b038316908117909155600081815260086020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016110b7565b600080546001600160a01b031633146113775760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0382166113cd5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610c52565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561140b57600080fd5b505afa15801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613e04565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c39190613e04565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190613e04565b91506001600160a01b0382166116c557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561158a57600080fd5b505afa15801561159e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c29190613e04565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116429190613e04565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c29190613e04565b91505b602780546001600160a01b038085166001600160a01b031992831617909255602680548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b031633146117505760405162461bcd60e51b8152600401610c5290613d02565b60178290556018819055601e6117668284613dec565b11156117b05760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772033302560381b6044820152606401610c52565b60408051828152602081018490527f11da6a628fd1b30418458d9af59f777d4f88c7d31ab2ed8dbc5ccc47b968706b91015b60405180910390a15050565b6001600160a01b03811660009081526009602052604081205460ff161561182b57506001600160a01b031660009081526006602052604090205490565b600b546001600160a01b03831660009081526005602052604090205411156118a05760405162461bcd60e51b815260206004820152602260248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c2062604482015261726360f01b6064820152608401610c52565b60006118aa612d3a565b6001600160a01b0384166000908152600560205260409020549091506118d09082612d5d565b9392505050565b6000546001600160a01b031633146119015760405162461bcd60e51b8152600401610c5290613d02565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146119765760405162461bcd60e51b8152600401610c5290613d02565b50600d805460ff19908116909155601e80549091169055600190565b6000546001600160a01b031633146119bc5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a115760405162461bcd60e51b8152600401610c5290613d02565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015611a5357600080fd5b505afa158015611a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8b9190613e21565b9050826001600160a01b031663a9059cbb611aae6000546001600160a01b031690565b6064611aba8686613d4d565b611ac49190613d6c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611b0a57600080fd5b505af1158015611b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b429190613e3a565b50505050565b600080546001600160a01b03163314611b735760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038316611bc95760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c52565b6001600160a01b038316301415611c225760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c52565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611c6457600080fd5b505afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c9190613e21565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190613e3a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611d985760405162461bcd60e51b8152600401610c5290613d02565b6027805461ffff60a81b191661010160a81b17905543601955611dbe426203f480613dec565b601b55565b600080546001600160a01b03163314611dee5760405162461bcd60e51b8152600401610c5290613d02565b506027546001600160a01b031690565b6000546001600160a01b03163314611e285760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038116611e8c5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c52565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260086020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016110b7565b6000546001600160a01b03163314611f1e5760405162461bcd60e51b8152600401610c5290613d02565b6027546001600160a01b0383811691161415611fa25760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c52565b6110038282612d9f565b6000546001600160a01b03163314611fd65760405162461bcd60e51b8152600401610c5290613d02565b601e805460ff1916911515919091179055565b6000610c8a3384610e4185604051806060016040528060258152602001613f1f602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612ca1565b6000610c8a3384846125e9565b6000546001600160a01b0316331461206f5760405162461bcd60e51b8152600401610c5290613d02565b670de0b6b3a76400006103e86120926b204fce5e3e250261100000006005613d4d565b61209c9190613d6c565b6120a69190613d6c565b8110156121015760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c52565b61211381670de0b6b3a7640000613d4d565b60225550565b6000546001600160a01b031633146121435760405162461bcd60e51b8152600401610c5290613d02565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110b790831515815260200190565b6000546001600160a01b031633146121ba5760405162461bcd60e51b8152600401610c5290613d02565b620b71b08110156121ca57600080fd5b601f546121d79082613d4d565b60205550565b6000546001600160a01b031633146122075760405162461bcd60e51b8152600401610c5290613d02565b6122148383836000612e2a565b505050565b6000546001600160a01b031633146122435760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016110b7565b6000546001600160a01b031633146122be5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0381166123235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c52565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123a85760405162461bcd60e51b8152600401610c5290613d02565b60148290556015819055601e6123be8284613dec565b11156124085760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772033302560381b6044820152606401610c52565b60408051828152602081018490527f88ead7b218b3eb6cb559c12f20f42d0a127a02303df0230094d15c4e912ed6cc91016117e2565b6000546001600160a01b031633146124685760405162461bcd60e51b8152600401610c5290613d02565b4761247b6000546001600160a01b031690565b6001600160a01b03166108fc60646124938585613d4d565b61249d9190613d6c565b6040518115909202916000818181858888f19350505050158015612214573d6000803e3d6000fd5b6001600160a01b0383166125275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c52565b6001600160a01b0382166125885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c52565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661264d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c52565b6001600160a01b0382166126af5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c52565b600081116127115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c52565b602754600160b01b900460ff166127ad576001600160a01b03831660009081526008602052604090205460ff168061276157506001600160a01b03821660009081526008602052604090205460ff165b6127ad5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c52565b600d5460ff1615612a43576000546001600160a01b038481169116148015906127e457506000546001600160a01b03838116911614155b80156127f857506001600160a01b03821615155b801561280f57506001600160a01b03821661dead14155b80156128255750602754600160a01b900460ff16155b15612a43576000546001600160a01b0384811691161480159061285657506027546001600160a01b03838116911614155b8015612863575060195443145b156128b2576001600160a01b0382166000818152601a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b601e5460ff1680156128dc57506001600160a01b03831660009081526024602052604090205460ff165b1561293357601f543a11156129335760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c52565b6001600160a01b03831660009081526024602052604090205460ff16801561297457506001600160a01b03821660009081526023602052604090205460ff16155b15612a43576021548111156129e95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c52565b6022546129f5836117ee565b6129ff9083613dec565b1115612a435760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c52565b6000601d54601c54612a559190613dec565b90506000612a62306117ee565b60255460275491925082101590600160a01b900460ff16158015612a8f5750602754600160a81b900460ff165b8015612ab05750602754600090612aae906001600160a01b03166117ee565b115b8015612abc5750600083115b8015612ae157506001600160a01b03851660009081526008602052604090205460ff16155b8015612b0657506001600160a01b03861660009081526008602052604090205460ff16155b8015612b2a57506001600160a01b03851660009081526024602052604090205460ff165b8015612b335750805b15612b4057612b40612f4a565b6001600160a01b03861660009081526008602052604090205460019060ff1680612b8257506001600160a01b03861660009081526008602052604090205460ff165b15612b9457506003600e556000612c8c565b6001600160a01b03871660009081526024602052604090205460ff1615612be057612bbd613125565b601354600f55601554601454612bd39190613dec565b6011556001600e55612c8c565b6001600160a01b03861660009081526024602052604090205460ff1615612c7e57612c09613125565b601654600f55601854601754612c1f9190613dec565b6011556002600e556001600160a01b0387166000908152601a602052604090205460ff168015612c51575043601b5411155b15612c7957600f54612c64906003613d4d565b600f55601154612c75906003613d4d565b6011555b612c8c565b612c86613125565b6003600e555b612c9887878784612e2a565b50505050505050565b60008184841115612cc55760405162461bcd60e51b8152600401610c529190613b3e565b506000612cd28486613da4565b95945050505050565b600080612ce88385613dec565b9050838110156118d05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c52565b6000806000612d47613153565b9092509050612d568282612d5d565b9250505090565b60006118d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132fb565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055612dcd8282611992565b8015612ddc57612ddc826110c2565b80612dea57612dea82610e50565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91016117e2565b80612e3757612e37613125565b6001600160a01b03841660009081526009602052604090205460ff168015612e7857506001600160a01b03831660009081526009602052604090205460ff16155b15612e8d57612e88848484613329565b612f39565b6001600160a01b03841660009081526009602052604090205460ff16158015612ece57506001600160a01b03831660009081526009602052604090205460ff165b15612ede57612e8884848461344f565b6001600160a01b03841660009081526009602052604090205460ff168015612f1e57506001600160a01b03831660009081526009602052604090205460ff165b15612f2e57612e888484846134f8565b612f3984848461356b565b611b42601054600f55601254601155565b6027805460ff60a01b1916600160a01b1790556000612f68306117ee565b90506000612f83601d54601c54612cdb90919063ffffffff16565b90506000612f9d6002601c54612d5d90919063ffffffff16565b90506000612fab84836135ab565b905047612fb7826135ed565b6000612fc347836135ab565b90506000612fe686612fe0601d548561375690919063ffffffff16565b90612d5d565b90506000612ff483836135ab565b6000601c819055601d81905560035460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114613051576040519150601f19603f3d011682016040523d82523d6000602084013e613056565b606091505b5050905061306487836137d5565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a000047111561310d576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613102576040519150601f19603f3d011682016040523d82523d6000602084013e613107565b606091505b50909150505b50506027805460ff60a01b1916905550505050505050565b600f541580156131355750601154155b1561313c57565b600f80546010556011805460125560009182905555565b600b5460009081906b204fce5e3e25026110000000825b600a548110156132b8578260056000600a848154811061318c5761318c613d8e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131f757508160066000600a84815481106131d0576131d0613d8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613216575050600b54936b204fce5e3e250261100000009350915050565b61325c60056000600a848154811061323057613230613d8e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906135ab565b92506132a460066000600a848154811061327857613278613d8e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906135ab565b9150806132b081613dd1565b91505061316a565b50600b546132d2906b204fce5e3e25026110000000612d5d565b8210156132f2575050600b54926b204fce5e3e2502611000000092509050565b90939092509050565b6000818361331c5760405162461bcd60e51b8152600401610c529190613b3e565b506000612cd28486613d6c565b60008060008060008061333b8761389c565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061336d90886135ab565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461339c90876135ab565b6001600160a01b03808b1660009081526005602052604080822093909355908a16815220546133cb9086612cdb565b6001600160a01b0389166000908152600560205260409020556133ed816138eb565b6133f78483613a50565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161343c91815260200190565b60405180910390a3505050505050505050565b6000806000806000806134618761389c565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061349390876135ab565b6001600160a01b03808b16600090815260056020908152604080832094909455918b168152600690915220546134c99084612cdb565b6001600160a01b0389166000908152600660209081526040808320939093556005905220546133cb9086612cdb565b60008060008060008061350a8761389c565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061353c90886135ab565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461349390876135ab565b60008060008060008061357d8761389c565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061339c90875b60006118d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ca1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061362257613622613d8e565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561367657600080fd5b505afa15801561368a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ae9190613e04565b816001815181106136c1576136c1613d8e565b6001600160a01b0392831660209182029290920101526026546136e791309116846124c5565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790613720908590600090869030904290600401613e57565b600060405180830381600087803b15801561373a57600080fd5b505af115801561374e573d6000803e3d6000fd5b505050505050565b60008261376557506000610c8e565b60006137718385613d4d565b90508261377e8583613d6c565b146118d05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c52565b6026546137ed9030906001600160a01b0316846124c5565b6026546004805460405163f305d71960e01b815230928101929092526024820185905260006044830181905260648301526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c4016060604051808303818588803b15801561385c57600080fd5b505af1158015613870573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138959190613ec8565b5050505050565b60008060008060008060008060006138b38a613a74565b92509250925060008060006138d18d86866138cc612d3a565b613ab6565b919f909e50909c50959a5093985091965092945050505050565b6001600e54141561395c576011546014546139069083613d4d565b6139109190613d6c565b601c60008282546139219190613dec565b90915550506011546015546139369083613d4d565b6139409190613d6c565b601d60008282546139519190613dec565b909155506139c89050565b6002600e5414156139c8576011546017546139779083613d4d565b6139819190613d6c565b601c60008282546139929190613dec565b90915550506011546018546139a79083613d4d565b6139b19190613d6c565b601d60008282546139c29190613dec565b90915550505b60006139d2612d3a565b905060006139e08383613756565b306000908152600560205260409020549091506139fd9082612cdb565b3060009081526005602090815260408083209390935560099052205460ff16156122145730600090815260066020526040902054613a3b9084612cdb565b30600090815260066020526040902055505050565b600b54613a5d90836135ab565b600b55600c54613a6d9082612cdb565b600c555050565b600080600080613a8385613b06565b90506000613a9086613b22565b90506000613aa882613aa289866135ab565b906135ab565b979296509094509092505050565b6000808080613ac58886613756565b90506000613ad38887613756565b90506000613ae18888613756565b90506000613af382613aa286866135ab565b939b939a50919850919650505050505050565b6000610c8e6064612fe0600f548561375690919063ffffffff16565b6000610c8e6064612fe06011548561375690919063ffffffff16565b600060208083528351808285015260005b81811015613b6b57858101830151858201604001528201613b4f565b81811115613b7d576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613ba557600080fd5b5035919050565b6001600160a01b0381168114613bc157600080fd5b50565b60008060408385031215613bd757600080fd5b8235613be281613bac565b946020939093013593505050565b600060208284031215613c0257600080fd5b81356118d081613bac565b600080600060608486031215613c2257600080fd5b8335613c2d81613bac565b92506020840135613c3d81613bac565b929592945050506040919091013590565b60008060408385031215613c6157600080fd5b50508035926020909101359150565b8015158114613bc157600080fd5b60008060408385031215613c9157600080fd5b8235613c9c81613bac565b91506020830135613cac81613c70565b809150509250929050565b60008060408385031215613cca57600080fd5b8235613cd581613bac565b91506020830135613cac81613bac565b600060208284031215613cf757600080fd5b81356118d081613c70565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d6757613d67613d37565b500290565b600082613d8957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613db657613db6613d37565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613de557613de5613d37565b5060010190565b60008219821115613dff57613dff613d37565b500190565b600060208284031215613e1657600080fd5b81516118d081613bac565b600060208284031215613e3357600080fd5b5051919050565b600060208284031215613e4c57600080fd5b81516118d081613c70565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ea75784516001600160a01b031683529383019391830191600101613e82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613edd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b73c94b46672e5755908c2859475417783b62958dbd8bdd8ee4f95ebd9688bbb64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103c75760003560e01c80638366e79a116101f2578063bbc0c7421161010d578063dc44b6a0116100a0578063f2fde38b1161006f578063f2fde38b14610bb2578063f8b45b0514610bd2578063fb0ecfa414610be8578063fe40278314610c0857600080fd5b8063dc44b6a014610b20578063dd62ed3e14610b36578063ea2f0b3714610b7c578063ee40166e14610b9c57600080fd5b8063c8607952116100dc578063c860795214610ab4578063c8c8ebe414610aca578063d00dc58914610ae0578063d1660f9914610b0057600080fd5b8063bbc0c74214610a3d578063c18bc19514610a5e578063c49b9a8014610a7e578063c5d2418914610a9e57600080fd5b806395d89b4111610185578063a457c2d711610154578063a457c2d7146109ad578063a5ece941146109cd578063a9059cbb146109ed578063b62496f514610a0d57600080fd5b806395d89b411461092c5780639a7a23d614610958578063a0263c8914610978578063a073d37f1461099857600080fd5b80638a8c523c116101c15780638a8c523c146108c45780638d5f81e2146108d95780638da5cb5b146108ee578063906e9dd01461090c57600080fd5b80638366e79a1461082557806385ecfd281461084557806388790a681461087557806388f820201461088b57600080fd5b8063437823ec116102e25780635881f3ef11610275578063715018a611610244578063715018a6146107bb578063751039fc146107d05780637571336a146107e557806377b54bad1461080557600080fd5b80635881f3ef14610746578063602bc62b146107665780636ac9a8701461077b57806370a082311461079b57600080fd5b806352390c02116102b157806352390c02146106ba578063525fa81f146106da5780635342acb4146106fa578063557ed1ba1461073357600080fd5b8063437823ec1461063f57806349bd5a5e1461065f5780634a62bb651461067f5780634a74bb021461069957600080fd5b8063203e727e1161035a578063313ce56711610329578063313ce567146105c35780633221c93f146105df5780633685d419146105ff578063395093511461061f57600080fd5b8063203e727e1461052f5780632152e92d1461054f57806323b872dd1461056f57806327c8f8351461058f57600080fd5b806313114a9d1161039657806313114a9d146104a35780631694505e146104c257806318160ddd146104fa5780631fc851bd1461051957600080fd5b806306fdde03146103d35780630923160214610421578063095ea7b31461044357806310d5de531461047357600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506040805180820190915260138152724676636b2043616e63656c2043756c7475726560681b60208201525b6040516104189190613b3e565b60405180910390f35b34801561042d57600080fd5b5061044161043c366004613b93565b610c28565b005b34801561044f57600080fd5b5061046361045e366004613bc4565b610c7d565b6040519015158152602001610418565b34801561047f57600080fd5b5061046361048e366004613bf0565b60236020526000908152604090205460ff1681565b3480156104af57600080fd5b50600c545b604051908152602001610418565b3480156104ce57600080fd5b506026546104e2906001600160a01b031681565b6040516001600160a01b039091168152602001610418565b34801561050657600080fd5b506b204fce5e3e250261100000006104b4565b34801561052557600080fd5b506104b4601b5481565b34801561053b57600080fd5b5061044161054a366004613b93565b610c94565b34801561055b57600080fd5b5061044161056a366004613bf0565b610d74565b34801561057b57600080fd5b5061046361058a366004613c0d565b610de7565b34801561059b57600080fd5b506104e27f000000000000000000000000000000000000000000000000000000000000dead81565b3480156105cf57600080fd5b5060405160128152602001610418565b3480156105eb57600080fd5b506004546104e2906001600160a01b031681565b34801561060b57600080fd5b5061044161061a366004613bf0565b610e50565b34801561062b57600080fd5b5061046361063a366004613bc4565b611007565b34801561064b57600080fd5b5061044161065a366004613bf0565b61103d565b34801561066b57600080fd5b506027546104e2906001600160a01b031681565b34801561068b57600080fd5b50600d546104639060ff1681565b3480156106a557600080fd5b5060275461046390600160a81b900460ff1681565b3480156106c657600080fd5b506104416106d5366004613bf0565b6110c2565b3480156106e657600080fd5b506104416106f5366004613bf0565b611256565b34801561070657600080fd5b50610463610715366004613bf0565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561073f57600080fd5b50426104b4565b34801561075257600080fd5b506104e2610761366004613bf0565b61134c565b34801561077257600080fd5b506002546104b4565b34801561078757600080fd5b50610441610796366004613c4e565b611726565b3480156107a757600080fd5b506104b46107b6366004613bf0565b6117ee565b3480156107c757600080fd5b506104416118d7565b3480156107dc57600080fd5b5061046361194b565b3480156107f157600080fd5b50610441610800366004613c7e565b611992565b34801561081157600080fd5b50610441610820366004613bc4565b6119e7565b34801561083157600080fd5b50610463610840366004613cb7565b611b48565b34801561085157600080fd5b50610463610860366004613bf0565b601a6020526000908152604090205460ff1681565b34801561088157600080fd5b506104b460175481565b34801561089757600080fd5b506104636108a6366004613bf0565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156108d057600080fd5b50610441611d6e565b3480156108e557600080fd5b506104e2611dc3565b3480156108fa57600080fd5b506000546001600160a01b03166104e2565b34801561091857600080fd5b50610441610927366004613bf0565b611dfe565b34801561093857600080fd5b5060408051808201909152600381526246434360e81b602082015261040b565b34801561096457600080fd5b50610441610973366004613c7e565b611ef4565b34801561098457600080fd5b50610441610993366004613ce5565b611fac565b3480156109a457600080fd5b506025546104b4565b3480156109b957600080fd5b506104636109c8366004613bc4565b611fe9565b3480156109d957600080fd5b506003546104e2906001600160a01b031681565b3480156109f957600080fd5b50610463610a08366004613bc4565b612038565b348015610a1957600080fd5b50610463610a28366004613bf0565b60246020526000908152604090205460ff1681565b348015610a4957600080fd5b5060275461046390600160b01b900460ff1681565b348015610a6a57600080fd5b50610441610a79366004613b93565b612045565b348015610a8a57600080fd5b50610441610a99366004613ce5565b612119565b348015610aaa57600080fd5b506104b460155481565b348015610ac057600080fd5b506104b460185481565b348015610ad657600080fd5b506104b460215481565b348015610aec57600080fd5b50610441610afb366004613b93565b612190565b348015610b0c57600080fd5b50610441610b1b366004613c0d565b6121dd565b348015610b2c57600080fd5b506104b460145481565b348015610b4257600080fd5b506104b4610b51366004613cb7565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610b8857600080fd5b50610441610b97366004613bf0565b612219565b348015610ba857600080fd5b506104b460195481565b348015610bbe57600080fd5b50610441610bcd366004613bf0565b612294565b348015610bde57600080fd5b506104b460225481565b348015610bf457600080fd5b50610441610c03366004613c4e565b61237e565b348015610c1457600080fd5b50610441610c23366004613b93565b61243e565b6000546001600160a01b03163314610c5b5760405162461bcd60e51b8152600401610c5290613d02565b60405180910390fd5b604b811015610c6957600080fd5b610c7781633b9aca00613d4d565b601f5550565b6000610c8a3384846124c5565b5060015b92915050565b6000546001600160a01b03163314610cbe5760405162461bcd60e51b8152600401610c5290613d02565b670de0b6b3a76400006103e8610ce16b204fce5e3e250261100000006001613d4d565b610ceb9190613d6c565b610cf59190613d6c565b811015610d5c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b6064820152608401610c52565b610d6e81670de0b6b3a7640000613d4d565b60215550565b6000546001600160a01b03163314610d9e5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055517fccaa6e1cfd4cf9506fa856fdc8e0a00894b2621ece1d60ab36209873305944989190a250565b6000610df48484846125e9565b610e468433610e4185604051806060016040528060288152602001613ef7602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612ca1565b6124c5565b5060019392505050565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b03811660009081526009602052604090205460ff16610ee25760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610c52565b60005b600a5481101561100357816001600160a01b0316600a8281548110610f0c57610f0c613d8e565b6000918252602090912001546001600160a01b03161415610ff157600a8054610f3790600190613da4565b81548110610f4757610f47613d8e565b600091825260209091200154600a80546001600160a01b039092169183908110610f7357610f73613d8e565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600682526040808220829055600990925220805460ff19169055600a805480610fcb57610fcb613dbb565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ffb81613dd1565b915050610ee5565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c8a918590610e419086612cdb565b6000546001600160a01b031633146110675760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038116600081815260086020908152604091829020805460ff1916600117905590519182527f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6291015b60405180910390a150565b6000546001600160a01b031633146110ec5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b03811660009081526009602052604090205460ff16156111555760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c52565b600a54603290611166906001613dec565b11156111f05760405162461bcd60e51b815260206004820152604d60248201527f43616e6e6f74206578636c756465206d6f7265207468616e203530206163636f60448201527f756e74732e2020496e636c75646520612070726576696f75736c79206578636c60648201526c3ab232b21030b2323932b9b99760991b608482015260a401610c52565b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146112805760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0381166112e45760405162461bcd60e51b815260206004820152602560248201527f5f6c69717569646974794164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c52565b600480546001600160a01b0319166001600160a01b038316908117909155600081815260086020908152604091829020805460ff1916600117905590519182527f217742673c85d2f459a37c99960c860122cdadf529374b41418d2718cae7726f91016110b7565b600080546001600160a01b031633146113775760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0382166113cd5760405162461bcd60e51b815260206004820152601b60248201527f5f726f7574657220616464726573732063616e6e6f74206265203000000000006044820152606401610c52565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561140b57600080fd5b505afa15801561141f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114439190613e04565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c39190613e04565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561150957600080fd5b505afa15801561151d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115419190613e04565b91506001600160a01b0382166116c557806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561158a57600080fd5b505afa15801561159e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c29190613e04565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561160a57600080fd5b505afa15801561161e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116429190613e04565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c29190613e04565b91505b602780546001600160a01b038085166001600160a01b031992831617909255602680548484169216919091179055604051908416907f66fc0187dfabf79860e1b18e6c175c92baf9ed88c8a01d0bfdb97d1f0450f7f790600090a250919050565b6000546001600160a01b031633146117505760405162461bcd60e51b8152600401610c5290613d02565b60178290556018819055601e6117668284613dec565b11156117b05760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772033302560381b6044820152606401610c52565b60408051828152602081018490527f11da6a628fd1b30418458d9af59f777d4f88c7d31ab2ed8dbc5ccc47b968706b91015b60405180910390a15050565b6001600160a01b03811660009081526009602052604081205460ff161561182b57506001600160a01b031660009081526006602052604090205490565b600b546001600160a01b03831660009081526005602052604090205411156118a05760405162461bcd60e51b815260206004820152602260248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c2062604482015261726360f01b6064820152608401610c52565b60006118aa612d3a565b6001600160a01b0384166000908152600560205260409020549091506118d09082612d5d565b9392505050565b6000546001600160a01b031633146119015760405162461bcd60e51b8152600401610c5290613d02565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600080546001600160a01b031633146119765760405162461bcd60e51b8152600401610c5290613d02565b50600d805460ff19908116909155601e80549091169055600190565b6000546001600160a01b031633146119bc5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b03919091166000908152602360205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611a115760405162461bcd60e51b8152600401610c5290613d02565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015611a5357600080fd5b505afa158015611a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8b9190613e21565b9050826001600160a01b031663a9059cbb611aae6000546001600160a01b031690565b6064611aba8686613d4d565b611ac49190613d6c565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015611b0a57600080fd5b505af1158015611b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b429190613e3a565b50505050565b600080546001600160a01b03163314611b735760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038316611bc95760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610c52565b6001600160a01b038316301415611c225760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e73000000006044820152606401610c52565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b158015611c6457600080fd5b505afa158015611c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9c9190613e21565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d229190613e3a565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6000546001600160a01b03163314611d985760405162461bcd60e51b8152600401610c5290613d02565b6027805461ffff60a81b191661010160a81b17905543601955611dbe426203f480613dec565b601b55565b600080546001600160a01b03163314611dee5760405162461bcd60e51b8152600401610c5290613d02565b506027546001600160a01b031690565b6000546001600160a01b03163314611e285760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038116611e8c5760405162461bcd60e51b815260206004820152602560248201527f5f6d61726b6574696e674164647265737320616464726573732063616e6e6f74604482015264020626520360dc1b6064820152608401610c52565b600380546001600160a01b0319166001600160a01b038316908117909155600081815260086020908152604091829020805460ff1916600117905590519182527fd1e7d6a3390dd5008bd1c57798817b9f806e4c417264e7d3d67e42e784dc24a991016110b7565b6000546001600160a01b03163314611f1e5760405162461bcd60e51b8152600401610c5290613d02565b6027546001600160a01b0383811691161415611fa25760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610c52565b6110038282612d9f565b6000546001600160a01b03163314611fd65760405162461bcd60e51b8152600401610c5290613d02565b601e805460ff1916911515919091179055565b6000610c8a3384610e4185604051806060016040528060258152602001613f1f602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612ca1565b6000610c8a3384846125e9565b6000546001600160a01b0316331461206f5760405162461bcd60e51b8152600401610c5290613d02565b670de0b6b3a76400006103e86120926b204fce5e3e250261100000006005613d4d565b61209c9190613d6c565b6120a69190613d6c565b8110156121015760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610c52565b61211381670de0b6b3a7640000613d4d565b60225550565b6000546001600160a01b031633146121435760405162461bcd60e51b8152600401610c5290613d02565b60278054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906110b790831515815260200190565b6000546001600160a01b031633146121ba5760405162461bcd60e51b8152600401610c5290613d02565b620b71b08110156121ca57600080fd5b601f546121d79082613d4d565b60205550565b6000546001600160a01b031633146122075760405162461bcd60e51b8152600401610c5290613d02565b6122148383836000612e2a565b505050565b6000546001600160a01b031633146122435760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b038116600081815260086020908152604091829020805460ff1916905590519182527f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e91016110b7565b6000546001600160a01b031633146122be5760405162461bcd60e51b8152600401610c5290613d02565b6001600160a01b0381166123235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c52565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123a85760405162461bcd60e51b8152600401610c5290613d02565b60148290556015819055601e6123be8284613dec565b11156124085760405162461bcd60e51b81526020600482015260196024820152784d757374206b6565702074617865732062656c6f772033302560381b6044820152606401610c52565b60408051828152602081018490527f88ead7b218b3eb6cb559c12f20f42d0a127a02303df0230094d15c4e912ed6cc91016117e2565b6000546001600160a01b031633146124685760405162461bcd60e51b8152600401610c5290613d02565b4761247b6000546001600160a01b031690565b6001600160a01b03166108fc60646124938585613d4d565b61249d9190613d6c565b6040518115909202916000818181858888f19350505050158015612214573d6000803e3d6000fd5b6001600160a01b0383166125275760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c52565b6001600160a01b0382166125885760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c52565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661264d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c52565b6001600160a01b0382166126af5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c52565b600081116127115760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c52565b602754600160b01b900460ff166127ad576001600160a01b03831660009081526008602052604090205460ff168061276157506001600160a01b03821660009081526008602052604090205460ff165b6127ad5760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610c52565b600d5460ff1615612a43576000546001600160a01b038481169116148015906127e457506000546001600160a01b03838116911614155b80156127f857506001600160a01b03821615155b801561280f57506001600160a01b03821661dead14155b80156128255750602754600160a01b900460ff16155b15612a43576000546001600160a01b0384811691161480159061285657506027546001600160a01b03838116911614155b8015612863575060195443145b156128b2576001600160a01b0382166000818152601a6020526040808220805460ff19166001179055517fb90badc1cf1c52268f4fa9afb5276aebf640bcca3300cdfc9cf37db17daa13e29190a25b601e5460ff1680156128dc57506001600160a01b03831660009081526024602052604090205460ff165b1561293357601f543a11156129335760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610c52565b6001600160a01b03831660009081526024602052604090205460ff16801561297457506001600160a01b03821660009081526023602052604090205460ff16155b15612a43576021548111156129e95760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610c52565b6022546129f5836117ee565b6129ff9083613dec565b1115612a435760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610c52565b6000601d54601c54612a559190613dec565b90506000612a62306117ee565b60255460275491925082101590600160a01b900460ff16158015612a8f5750602754600160a81b900460ff165b8015612ab05750602754600090612aae906001600160a01b03166117ee565b115b8015612abc5750600083115b8015612ae157506001600160a01b03851660009081526008602052604090205460ff16155b8015612b0657506001600160a01b03861660009081526008602052604090205460ff16155b8015612b2a57506001600160a01b03851660009081526024602052604090205460ff165b8015612b335750805b15612b4057612b40612f4a565b6001600160a01b03861660009081526008602052604090205460019060ff1680612b8257506001600160a01b03861660009081526008602052604090205460ff165b15612b9457506003600e556000612c8c565b6001600160a01b03871660009081526024602052604090205460ff1615612be057612bbd613125565b601354600f55601554601454612bd39190613dec565b6011556001600e55612c8c565b6001600160a01b03861660009081526024602052604090205460ff1615612c7e57612c09613125565b601654600f55601854601754612c1f9190613dec565b6011556002600e556001600160a01b0387166000908152601a602052604090205460ff168015612c51575043601b5411155b15612c7957600f54612c64906003613d4d565b600f55601154612c75906003613d4d565b6011555b612c8c565b612c86613125565b6003600e555b612c9887878784612e2a565b50505050505050565b60008184841115612cc55760405162461bcd60e51b8152600401610c529190613b3e565b506000612cd28486613da4565b95945050505050565b600080612ce88385613dec565b9050838110156118d05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c52565b6000806000612d47613153565b9092509050612d568282612d5d565b9250505090565b60006118d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132fb565b6001600160a01b0382166000908152602460205260409020805460ff1916821515179055612dcd8282611992565b8015612ddc57612ddc826110c2565b80612dea57612dea82610e50565b604080516001600160a01b038416815282151560208201527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91016117e2565b80612e3757612e37613125565b6001600160a01b03841660009081526009602052604090205460ff168015612e7857506001600160a01b03831660009081526009602052604090205460ff16155b15612e8d57612e88848484613329565b612f39565b6001600160a01b03841660009081526009602052604090205460ff16158015612ece57506001600160a01b03831660009081526009602052604090205460ff165b15612ede57612e8884848461344f565b6001600160a01b03841660009081526009602052604090205460ff168015612f1e57506001600160a01b03831660009081526009602052604090205460ff165b15612f2e57612e888484846134f8565b612f3984848461356b565b611b42601054600f55601254601155565b6027805460ff60a01b1916600160a01b1790556000612f68306117ee565b90506000612f83601d54601c54612cdb90919063ffffffff16565b90506000612f9d6002601c54612d5d90919063ffffffff16565b90506000612fab84836135ab565b905047612fb7826135ed565b6000612fc347836135ab565b90506000612fe686612fe0601d548561375690919063ffffffff16565b90612d5d565b90506000612ff483836135ab565b6000601c819055601d81905560035460405192935090916001600160a01b039091169084908381818185875af1925050503d8060008114613051576040519150601f19603f3d011682016040523d82523d6000602084013e613056565b606091505b5050905061306487836137d5565b60408051878152602081018490529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a167016345785d8a000047111561310d576003546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613102576040519150601f19603f3d011682016040523d82523d6000602084013e613107565b606091505b50909150505b50506027805460ff60a01b1916905550505050505050565b600f541580156131355750601154155b1561313c57565b600f80546010556011805460125560009182905555565b600b5460009081906b204fce5e3e25026110000000825b600a548110156132b8578260056000600a848154811061318c5761318c613d8e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806131f757508160066000600a84815481106131d0576131d0613d8e565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613216575050600b54936b204fce5e3e250261100000009350915050565b61325c60056000600a848154811061323057613230613d8e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906135ab565b92506132a460066000600a848154811061327857613278613d8e565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906135ab565b9150806132b081613dd1565b91505061316a565b50600b546132d2906b204fce5e3e25026110000000612d5d565b8210156132f2575050600b54926b204fce5e3e2502611000000092509050565b90939092509050565b6000818361331c5760405162461bcd60e51b8152600401610c529190613b3e565b506000612cd28486613d6c565b60008060008060008061333b8761389c565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061336d90886135ab565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461339c90876135ab565b6001600160a01b03808b1660009081526005602052604080822093909355908a16815220546133cb9086612cdb565b6001600160a01b0389166000908152600560205260409020556133ed816138eb565b6133f78483613a50565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161343c91815260200190565b60405180910390a3505050505050505050565b6000806000806000806134618761389c565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061349390876135ab565b6001600160a01b03808b16600090815260056020908152604080832094909455918b168152600690915220546134c99084612cdb565b6001600160a01b0389166000908152600660209081526040808320939093556005905220546133cb9086612cdb565b60008060008060008061350a8761389c565b6001600160a01b038f16600090815260066020526040902054959b5093995091975095509350915061353c90886135ab565b6001600160a01b038a1660009081526006602090815260408083209390935560059052205461349390876135ab565b60008060008060008061357d8761389c565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061339c90875b60006118d083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ca1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061362257613622613d8e565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561367657600080fd5b505afa15801561368a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ae9190613e04565b816001815181106136c1576136c1613d8e565b6001600160a01b0392831660209182029290920101526026546136e791309116846124c5565b60265460405163791ac94760e01b81526001600160a01b039091169063791ac94790613720908590600090869030904290600401613e57565b600060405180830381600087803b15801561373a57600080fd5b505af115801561374e573d6000803e3d6000fd5b505050505050565b60008261376557506000610c8e565b60006137718385613d4d565b90508261377e8583613d6c565b146118d05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c52565b6026546137ed9030906001600160a01b0316846124c5565b6026546004805460405163f305d71960e01b815230928101929092526024820185905260006044830181905260648301526001600160a01b0390811660848301524260a48301529091169063f305d71990839060c4016060604051808303818588803b15801561385c57600080fd5b505af1158015613870573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138959190613ec8565b5050505050565b60008060008060008060008060006138b38a613a74565b92509250925060008060006138d18d86866138cc612d3a565b613ab6565b919f909e50909c50959a5093985091965092945050505050565b6001600e54141561395c576011546014546139069083613d4d565b6139109190613d6c565b601c60008282546139219190613dec565b90915550506011546015546139369083613d4d565b6139409190613d6c565b601d60008282546139519190613dec565b909155506139c89050565b6002600e5414156139c8576011546017546139779083613d4d565b6139819190613d6c565b601c60008282546139929190613dec565b90915550506011546018546139a79083613d4d565b6139b19190613d6c565b601d60008282546139c29190613dec565b90915550505b60006139d2612d3a565b905060006139e08383613756565b306000908152600560205260409020549091506139fd9082612cdb565b3060009081526005602090815260408083209390935560099052205460ff16156122145730600090815260066020526040902054613a3b9084612cdb565b30600090815260066020526040902055505050565b600b54613a5d90836135ab565b600b55600c54613a6d9082612cdb565b600c555050565b600080600080613a8385613b06565b90506000613a9086613b22565b90506000613aa882613aa289866135ab565b906135ab565b979296509094509092505050565b6000808080613ac58886613756565b90506000613ad38887613756565b90506000613ae18888613756565b90506000613af382613aa286866135ab565b939b939a50919850919650505050505050565b6000610c8e6064612fe0600f548561375690919063ffffffff16565b6000610c8e6064612fe06011548561375690919063ffffffff16565b600060208083528351808285015260005b81811015613b6b57858101830151858201604001528201613b4f565b81811115613b7d576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613ba557600080fd5b5035919050565b6001600160a01b0381168114613bc157600080fd5b50565b60008060408385031215613bd757600080fd5b8235613be281613bac565b946020939093013593505050565b600060208284031215613c0257600080fd5b81356118d081613bac565b600080600060608486031215613c2257600080fd5b8335613c2d81613bac565b92506020840135613c3d81613bac565b929592945050506040919091013590565b60008060408385031215613c6157600080fd5b50508035926020909101359150565b8015158114613bc157600080fd5b60008060408385031215613c9157600080fd5b8235613c9c81613bac565b91506020830135613cac81613c70565b809150509250929050565b60008060408385031215613cca57600080fd5b8235613cd581613bac565b91506020830135613cac81613bac565b600060208284031215613cf757600080fd5b81356118d081613c70565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613d6757613d67613d37565b500290565b600082613d8957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600082821015613db657613db6613d37565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613de557613de5613d37565b5060010190565b60008219821115613dff57613dff613d37565b500190565b600060208284031215613e1657600080fd5b81516118d081613bac565b600060208284031215613e3357600080fd5b5051919050565b600060208284031215613e4c57600080fd5b81516118d081613c70565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613ea75784516001600160a01b031683529383019391830191600101613e82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613edd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b73c94b46672e5755908c2859475417783b62958dbd8bdd8ee4f95ebd9688bbb64736f6c63430008090033

Deployed Bytecode Sourcemap

16391:29576:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21535:85;;;;;;;;;;-1:-1:-1;21607:5:0;;;;;;;;;;;;-1:-1:-1;;;21607:5:0;;;;21535:85;;;;;;;:::i;:::-;;;;;;;;25460:134;;;;;;;;;;-1:-1:-1;25460:134:0;;;;;:::i;:::-;;:::i;:::-;;22708:195;;;;;;;;;;-1:-1:-1;22708:195:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;22708:195:0;1257:187:1;18766:64:0;;;;;;;;;;-1:-1:-1;18766:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24249:92;;;;;;;;;;-1:-1:-1;24320:13:0;;24249:92;;;1847:25:1;;;1835:2;1820:18;24249:92:0;1701:177:1;18988:41:0;;;;;;;;;;-1:-1:-1;18988:41:0;;;;-1:-1:-1;;;;;18988:41:0;;;;;;-1:-1:-1;;;;;2074:32:1;;;2056:51;;2044:2;2029:18;18988:41:0;1883:230:1;21818:98:0;;;;;;;;;;-1:-1:-1;17301:18:0;21818:98;;18339:33;;;;;;;;;;;;;;;;25912:234;;;;;;;;;;-1:-1:-1;25912:234:0;;;;;:::i;:::-;;:::i;42633:140::-;;;;;;;;;;-1:-1:-1;42633:140:0;;;;;:::i;:::-;;:::i;22911:448::-;;;;;;;;;;-1:-1:-1;22911:448:0;;;;;:::i;:::-;;:::i;16770:90::-;;;;;;;;;;;;;;;21725:85;;;;;;;;;;-1:-1:-1;21725:85:0;;17611:2;2929:36:1;;2917:2;2902:18;21725:85:0;2787:184:1;16638:102:0;;;;;;;;;;-1:-1:-1;16638:102:0;;;;-1:-1:-1;;;;;16638:102:0;;;26725:474;;;;;;;;;;-1:-1:-1;26725:474:0;;;;;:::i;:::-;;:::i;23367:302::-;;;;;;;;;;-1:-1:-1;23367:302:0;;;;;:::i;:::-;;:::i;42316:152::-;;;;;;;;;;-1:-1:-1;42316:152:0;;;;;:::i;:::-;;:::i;19036:28::-;;;;;;;;;;-1:-1:-1;19036:28:0;;;;-1:-1:-1;;;;;19036:28:0;;;17426:33;;;;;;;;;;-1:-1:-1;17426:33:0;;;;;;;;19101:41;;;;;;;;;;-1:-1:-1;19101:41:0;;;;-1:-1:-1;;;19101:41:0;;;;;;26377:340;;;;;;;;;;-1:-1:-1;26377:340:0;;;;;:::i;:::-;;:::i;43878:343::-;;;;;;;;;;-1:-1:-1;43878:343:0;;;;;:::i;:::-;;:::i;42182:126::-;;;;;;;;;;-1:-1:-1;42182:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;42273:27:0;42249:4;42273:27;;;:18;:27;;;;;;;;;42182:126;7093:90;;;;;;;;;;-1:-1:-1;7160:15:0;7093:90;;44523:848;;;;;;;;;;-1:-1:-1;44523:848:0;;;;;:::i;:::-;;:::i;6995:90::-;;;;;;;;;;-1:-1:-1;7068:9:0;;6995:90;;43147:370;;;;;;;;;;-1:-1:-1;43147:370:0;;;;;:::i;:::-;;:::i;21924:373::-;;;;;;;;;;-1:-1:-1;21924:373:0;;;;;:::i;:::-;;:::i;6546:150::-;;;;;;;;;;;;;:::i;25751:153::-;;;;;;;;;;;;;:::i;27207:144::-;;;;;;;;;;-1:-1:-1;27207:144:0;;;;;:::i;:::-;;:::i;27714:231::-;;;;;;;;;;-1:-1:-1;27714:231:0;;;;;:::i;:::-;;:::i;45474:488::-;;;;;;;;;;-1:-1:-1;45474:488:0;;;;;:::i;:::-;;:::i;18289:43::-;;;;;;;;;;-1:-1:-1;18289:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18124:36;;;;;;;;;;;;;;;;24087:154;;;;;;;;;;-1:-1:-1;24087:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24213:20:0;24184:4;24213:20;;;:11;:20;;;;;;;;;24087:154;24395:224;;;;;;;;;;;;;:::i;44408:107::-;;;;;;;;;;;;;:::i;6332:79::-;;;;;;;;;;-1:-1:-1;6370:7:0;6397:6;-1:-1:-1;;;;;6397:6:0;6332:79;;43527:343;;;;;;;;;;-1:-1:-1;43527:343:0;;;;;:::i;:::-;;:::i;21628:89::-;;;;;;;;;;-1:-1:-1;21702:7:0;;;;;;;;;;;;-1:-1:-1;;;21702:7:0;;;;21628:89;;24757:246;;;;;;;;;;-1:-1:-1;24757:246:0;;;;;:::i;:::-;;:::i;25343:109::-;;;;;;;;;;-1:-1:-1;25343:109:0;;;;;:::i;:::-;;:::i;24627:122::-;;;;;;;;;;-1:-1:-1;24718:23:0;;24627:122;;23677:402;;;;;;;;;;-1:-1:-1;23677:402:0;;;;;:::i;:::-;;:::i;16506:102::-;;;;;;;;;;-1:-1:-1;16506:102:0;;;;-1:-1:-1;;;;;16506:102:0;;;22305:201;;;;;;;;;;-1:-1:-1;22305:201:0;;;;;:::i;:::-;;:::i;18839:58::-;;;;;;;;;;-1:-1:-1;18839:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19149:33;;;;;;;;;;-1:-1:-1;19149:33:0;;;;-1:-1:-1;;;19149:33:0;;;;;;26154:215;;;;;;;;;;-1:-1:-1;26154:215:0;;;;;:::i;:::-;;:::i;44229:171::-;;;;;;;;;;-1:-1:-1;44229:171:0;;;;;:::i;:::-;;:::i;18042:35::-;;;;;;;;;;;;;;;;18167:36;;;;;;;;;;;;;;;;18693:35;;;;;;;;;;;;;;;;25602:141;;;;;;;;;;-1:-1:-1;25602:141:0;;;;;:::i;:::-;;:::i;27359:139::-;;;;;;;;;;-1:-1:-1;27359:139:0;;;;;:::i;:::-;;:::i;18000:35::-;;;;;;;;;;;;;;;;22514:186;;;;;;;;;;-1:-1:-1;22514:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;22665:18:0;;;22633:7;22665:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22514:186;42476:149;;;;;;;;;;-1:-1:-1;42476:149:0;;;;;:::i;:::-;;:::i;18212:37::-;;;;;;;;;;;;;;;;6704:283;;;;;;;;;;-1:-1:-1;6704:283:0;;;;;:::i;:::-;;:::i;18735:24::-;;;;;;;;;;;;;;;;42781:358;;;;;;;;;;-1:-1:-1;42781:358:0;;;;;:::i;:::-;;:::i;27506:200::-;;;;;;;;;;-1:-1:-1;27506:200:0;;;;;:::i;:::-;;:::i;25460:134::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;;;;;;;;;25544:2:::1;25537:3;:9;;25529:18;;;::::0;::::1;;25574:12;:3:::0;25580:6:::1;25574:12;:::i;:::-;25558:13;:28:::0;-1:-1:-1;25460:134:0:o;22708:195::-;22812:4;22834:39;190:10;22857:7;22866:6;22834:8;:39::i;:::-;-1:-1:-1;22891:4:0;22708:195;;;;;:::o;25912:234::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;26031:4:::1;26025;26005:17;17301:18:::0;26021:1:::1;26005:17;:::i;:::-;:24;;;;:::i;:::-;26004:31;;;;:::i;:::-;25994:6;:41;;25986:101;;;::::0;-1:-1:-1;;;25986:101:0;;6025:2:1;25986:101:0::1;::::0;::::1;6007:21:1::0;6064:2;6044:18;;;6037:30;6103:34;6083:18;;;6076:62;-1:-1:-1;;;6154:18:1;;;6147:45;6209:19;;25986:101:0::1;5823:411:1::0;25986:101:0::1;26121:17;:6:::0;26131::::1;26121:17;:::i;:::-;26098:20;:40:::0;-1:-1:-1;25912:234:0:o;42633:140::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42699:20:0;::::1;42722:5;42699:20:::0;;;:11:::1;:20;::::0;;;;;:28;;-1:-1:-1;;42699:28:0::1;::::0;;42743:22;::::1;::::0;42722:5;42743:22:::1;42633:140:::0;:::o;22911:448::-;23045:4;23062:36;23072:6;23080:9;23091:6;23062:9;:36::i;:::-;23109:220;23132:6;190:10;23180:138;23236:6;23180:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23180:19:0;;;;;;:11;:19;;;;;;;;190:10;23180:33;;;;;;;;;;:37;:138::i;:::-;23109:8;:220::i;:::-;-1:-1:-1;23347:4:0;22911:448;;;;;:::o;26725:474::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26803:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26795:56;;;::::0;-1:-1:-1;;;26795:56:0;;6441:2:1;26795:56:0::1;::::0;::::1;6423:21:1::0;6480:2;6460:18;;;6453:30;6519:25;6499:18;;;6492:53;6562:18;;26795:56:0::1;6239:347:1::0;26795:56:0::1;26867:9;26862:330;26886:9;:16:::0;26882:20;::::1;26862:330;;;26944:7;-1:-1:-1::0;;;;;26928:23:0::1;:9;26938:1;26928:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26928:12:0::1;:23;26924:257;;;26987:9;26997:16:::0;;:20:::1;::::0;27016:1:::1;::::0;26997:20:::1;:::i;:::-;26987:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;26972:9:::1;:12:::0;;-1:-1:-1;;;;;26987:31:0;;::::1;::::0;26982:1;;26972:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;26972:46:0::1;-1:-1:-1::0;;;;;26972:46:0;;::::1;;::::0;;27037:19;;::::1;::::0;;:10:::1;:19:::0;;;;;;:23;;;27079:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27079:28:0::1;::::0;;27126:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27126:15:0;;;;;-1:-1:-1;;;;;;27126:15:0::1;::::0;;;;;26862:330:::1;26725:474:::0;:::o;26924:257::-:1;26904:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26862:330;;;;26725:474:::0;:::o;23367:302::-;190:10;23484:4;23578:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23578:34:0;;;;;;;;;;23484:4;;23506:133;;23556:7;;23578:50;;23617:10;23578:38;:50::i;42316:152::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42387:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;42387:34:0::1;42417:4;42387:34;::::0;;42437:23;;2056:51:1;;;42437:23:0::1;::::0;2029:18:1;42437:23:0::1;;;;;;;;42316:152:::0;:::o;26377:340::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26458:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26457:21;26449:61;;;::::0;-1:-1:-1;;;26449:61:0;;7327:2:1;26449:61:0::1;::::0;::::1;7309:21:1::0;7366:2;7346:18;;;7339:30;7405:29;7385:18;;;7378:57;7452:18;;26449:61:0::1;7125:351:1::0;26449:61:0::1;26529:9;:16:::0;26553:2:::1;::::0;26529:20:::1;::::0;26548:1:::1;26529:20;:::i;:::-;:26;;26521:116;;;::::0;-1:-1:-1;;;26521:116:0;;7816:2:1;26521:116:0::1;::::0;::::1;7798:21:1::0;7855:2;7835:18;;;7828:30;7894:34;7874:18;;;7867:62;7965:34;7945:18;;;7938:62;-1:-1:-1;;;8016:19:1;;;8009:44;8070:19;;26521:116:0::1;7614:481:1::0;26521:116:0::1;-1:-1:-1::0;;;;;26648:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26648:27:0::1;26671:4;26648:27:::0;;::::1;::::0;;;26686:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26686:23:0::1;::::0;;::::1;::::0;;26377:340::o;43878:343::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43972:31:0;::::1;43964:81;;;::::0;-1:-1:-1;;;43964:81:0;;8302:2:1;43964:81:0::1;::::0;::::1;8284:21:1::0;8341:2;8321:18;;;8314:30;8380:34;8360:18;;;8353:62;-1:-1:-1;;;8431:18:1;;;8424:35;8476:19;;43964:81:0::1;8100:401:1::0;43964:81:0::1;44056:16;:45:::0;;-1:-1:-1;;;;;;44056:45:0::1;-1:-1:-1::0;;;;;44056:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;44112:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;44112:43:0::1;-1:-1:-1::0;44112:43:0::1;::::0;;44171:42;;2056:51:1;;;44171:42:0::1;::::0;2029:18:1;44171:42:0::1;1883:230:1::0;44523:848:0;44624:13;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44663:21:0;::::1;44655:61;;;::::0;-1:-1:-1;;;44655:61:0;;8708:2:1;44655:61:0::1;::::0;::::1;8690:21:1::0;8747:2;8727:18;;;8720:30;8786:29;8766:18;;;8759:57;8833:18;;44655:61:0::1;8506:351:1::0;44655:61:0::1;44727:35;44784:7;44727:65;;44831:16;-1:-1:-1::0;;;;;44831:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44813:53:0::1;;44889:4;44909:16;-1:-1:-1::0;;;;;44909:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44813:130;::::0;-1:-1:-1;;;;;;44813:130:0::1;::::0;;;;;;-1:-1:-1;;;;;9348:15:1;;;44813:130:0::1;::::0;::::1;9330:34:1::0;9400:15;;9380:18;;;9373:43;9265:18;;44813:130:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44805:138:::0;-1:-1:-1;;;;;;44958:19:0;::::1;44954:240;;45055:16;-1:-1:-1::0;;;;;45055:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45037:56:0::1;;45120:4;45144:16;-1:-1:-1::0;;;;;45144:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45037:145;::::0;-1:-1:-1;;;;;;45037:145:0::1;::::0;;;;;;-1:-1:-1;;;;;9348:15:1;;;45037:145:0::1;::::0;::::1;9330:34:1::0;9400:15;;9380:18;;;9373:43;9265:18;;45037:145:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45029:153;;44954:240;45204:13;:21:::0;;-1:-1:-1;;;;;45204:21:0;;::::1;-1:-1:-1::0;;;;;;45204:21:0;;::::1;;::::0;;;45291:15:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;45341:22:::1;::::0;;;::::1;::::0;::::1;::::0;45204:13:::1;::::0;45341:22:::1;44644:727;44523:848:::0;;;:::o;43147:370::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;43272:17:::1;:36:::0;;;43319:17:::1;:36:::0;;;43415:2:::1;43374:37;43339:16:::0;43292;43374:37:::1;:::i;:::-;:43;;43366:81;;;::::0;-1:-1:-1;;;43366:81:0;;9629:2:1;43366:81:0::1;::::0;::::1;9611:21:1::0;9668:2;9648:18;;;9641:30;-1:-1:-1;;;9687:18:1;;;9680:55;9752:18;;43366:81:0::1;9427:349:1::0;43366:81:0::1;43463:46;::::0;;9955:25:1;;;10011:2;9996:18;;9989:34;;;43463:46:0::1;::::0;9928:18:1;43463:46:0::1;;;;;;;;43147:370:::0;;:::o;21924:373::-;-1:-1:-1;;;;;22014:20:0;;21990:7;22014:20;;;:11;:20;;;;;;;;22010:52;;;-1:-1:-1;;;;;;22043:19:0;;;;;:10;:19;;;;;;;21924:373::o;22010:52::-;22120:10;;-1:-1:-1;;;;;22097:19:0;;;;;;:10;:19;;;;;;:33;;22075:117;;;;-1:-1:-1;;;22075:117:0;;10236:2:1;22075:117:0;;;10218:21:1;10275:2;10255:18;;;10248:30;10314:34;10294:18;;;10287:62;-1:-1:-1;;;10365:18:1;;;10358:32;10407:19;;22075:117:0;10034:398:1;22075:117:0;22203:19;22225:10;:8;:10::i;:::-;-1:-1:-1;;;;;22253:19:0;;;;;;:10;:19;;;;;;22203:32;;-1:-1:-1;22253:36:0;;22203:32;22253:23;:36::i;:::-;22246:43;21924:373;-1:-1:-1;;;21924:373:0:o;6546:150::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;6655:1:::1;6639:6:::0;;6618:40:::1;::::0;-1:-1:-1;;;;;6639:6:0;;::::1;::::0;6618:40:::1;::::0;6655:1;;6618:40:::1;6686:1;6669:19:::0;;-1:-1:-1;;;;;;6669:19:0::1;::::0;;6546:150::o;25751:153::-;25803:4;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;25819:14:0::1;:22:::0;;-1:-1:-1;;25819:22:0;;::::1;::::0;;;25852:14:::1;:22:::0;;;;::::1;::::0;;25819;25751:153;:::o;27207:144::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27297:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;27297:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27207:144::o;27714:231::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;27832:31:::1;::::0;-1:-1:-1;;;27832:31:0;;27857:4:::1;27832:31;::::0;::::1;2056:51:1::0;27810:19:0::1;::::0;-1:-1:-1;;;;;27832:16:0;::::1;::::0;::::1;::::0;2029:18:1;;27832:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27810:53;;27875:6;-1:-1:-1::0;;;;;27875:15:0::1;;27891:7;6370::::0;6397:6;-1:-1:-1;;;;;6397:6:0;;6332:79;27891:7:::1;27933:3;27900:30;27914:16:::0;27900:11;:30:::1;:::i;:::-;:36;;;;:::i;:::-;27875:62;::::0;-1:-1:-1;;;;;;27875:62:0::1;::::0;;;;;;-1:-1:-1;;;;;10818:32:1;;;27875:62:0::1;::::0;::::1;10800:51:1::0;10867:18;;;10860:34;10773:18;;27875:62:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27799:146;27714:231:::0;;:::o;45474:488::-;45588:10;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45624:20:0;::::1;45616:59;;;::::0;-1:-1:-1;;;45616:59:0;;11357:2:1;45616:59:0::1;::::0;::::1;11339:21:1::0;11396:2;11376:18;;;11369:30;11435:28;11415:18;;;11408:56;11481:18;;45616:59:0::1;11155:350:1::0;45616:59:0::1;-1:-1:-1::0;;;;;45694:23:0;::::1;45712:4;45694:23;;45686:64;;;::::0;-1:-1:-1;;;45686:64:0;;11712:2:1;45686:64:0::1;::::0;::::1;11694:21:1::0;11751:2;11731:18;;;11724:30;11790;11770:18;;;11763:58;11838:18;;45686:64:0::1;11510:352:1::0;45686:64:0::1;45788:39;::::0;-1:-1:-1;;;45788:39:0;;45821:4:::1;45788:39;::::0;::::1;2056:51:1::0;45761:24:0::1;::::0;-1:-1:-1;;;;;45788:24:0;::::1;::::0;::::1;::::0;2029:18:1;;45788:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45846:46;::::0;-1:-1:-1;;;45846:46:0;;-1:-1:-1;;;;;10818:32:1;;;45846:46:0::1;::::0;::::1;10800:51:1::0;10867:18;;;10860:34;;;45761:66:0;;-1:-1:-1;45846:23:0;;::::1;::::0;::::1;::::0;10773:18:1;;45846:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45908;::::0;;-1:-1:-1;;;;;10818:32:1;;10800:51;;10882:2;10867:18;;10860:34;;;45838:54:0;;-1:-1:-1;45908:46:0::1;::::0;10773:18:1;45908:46:0::1;;;;;;;45605:357;45474:488:::0;;;;:::o;24395:224::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;24450:13:::1;:20:::0;;-1:-1:-1;;;;24481:28:0;-1:-1:-1;;;24481:28:0;;;24541:12:::1;24520:18;:33:::0;24585:26:::1;:15;24603:8;24585:26;:::i;:::-;24564:18;:47:::0;24395:224::o;44408:107::-;44467:7;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;44494:13:0::1;::::0;-1:-1:-1;;;;;44494:13:0::1;44408:107:::0;:::o;43527:343::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43621:31:0;::::1;43613:81;;;::::0;-1:-1:-1;;;43613:81:0;;12069:2:1;43613:81:0::1;::::0;::::1;12051:21:1::0;12108:2;12088:18;;;12081:30;12147:34;12127:18;;;12120:62;-1:-1:-1;;;12198:18:1;;;12191:35;12243:19;;43613:81:0::1;11867:401:1::0;43613:81:0::1;43705:16;:45:::0;;-1:-1:-1;;;;;;43705:45:0::1;-1:-1:-1::0;;;;;43705:45:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;43761:36:0;;;:18:::1;:36;::::0;;;;;;;;:43;;-1:-1:-1;;43761:43:0::1;-1:-1:-1::0;43761:43:0::1;::::0;;43820:42;;2056:51:1;;;43820:42:0::1;::::0;2029:18:1;43820:42:0::1;1883:230:1::0;24757:246:0;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;24866:13:::1;::::0;-1:-1:-1;;;;;24858:21:0;;::::1;24866:13:::0;::::1;24858:21;;24850:91;;;::::0;-1:-1:-1;;;24850:91:0;;12475:2:1;24850:91:0::1;::::0;::::1;12457:21:1::0;12514:2;12494:18;;;12487:30;12553:34;12533:18;;;12526:62;12624:27;12604:18;;;12597:55;12669:19;;24850:91:0::1;12273:421:1::0;24850:91:0::1;24954:41;24983:4;24989:5;24954:28;:41::i;25343:109::-:0;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;25420:14:::1;:24:::0;;-1:-1:-1;;25420:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25343:109::o;23677:402::-;23799:4;23821:228;190:10;23871:7;23893:145;23950:15;23893:145;;;;;;;;;;;;;;;;;190:10;23893:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23893:34:0;;;;;;;;;;;;:38;:145::i;22305:201::-;22412:4;22434:42;190:10;22458:9;22469:6;22434:9;:42::i;26154:215::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;26276:4:::1;26270;26250:17;17301:18:::0;26266:1:::1;26250:17;:::i;:::-;:24;;;;:::i;:::-;26249:31;;;;:::i;:::-;26239:6;:41;;26231:90;;;::::0;-1:-1:-1;;;26231:90:0;;12901:2:1;26231:90:0::1;::::0;::::1;12883:21:1::0;12940:2;12920:18;;;12913:30;12979:34;12959:18;;;12952:62;-1:-1:-1;;;13030:18:1;;;13023:34;13074:19;;26231:90:0::1;12699:400:1::0;26231:90:0::1;26344:17;:6:::0;26354::::1;26344:17;:::i;:::-;26332:9;:29:::0;-1:-1:-1;26154:215:0:o;44229:171::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;44306:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;44306:32:0::1;-1:-1:-1::0;;;;44306:32:0;;::::1;;::::0;;44354:38:::1;::::0;::::1;::::0;::::1;::::0;44330:8;1422:14:1;1415:22;1397:41;;1385:2;1370:18;;1257:187;25602:141:0;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;25684:6:::1;25677:3;:13;;25669:22;;;::::0;::::1;;25722:13;::::0;25716:19:::1;::::0;:3;:19:::1;:::i;:::-;25702:11;:33:::0;-1:-1:-1;25602:141:0:o;27359:139::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;27451:39:::1;27466:4;27472:2;27476:6;27484:5;27451:14;:39::i;:::-;27359:139:::0;;;:::o;42476:149::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42545:27:0;::::1;42575:5;42545:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;42545:35:0::1;::::0;;42596:21;;2056:51:1;;;42596:21:0::1;::::0;2029:18:1;42596:21:0::1;1883:230:1::0;6704:283:0;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6809:22:0;::::1;6787:110;;;::::0;-1:-1:-1;;;6787:110:0;;13306:2:1;6787:110:0::1;::::0;::::1;13288:21:1::0;13345:2;13325:18;;;13318:30;13384:34;13364:18;;;13357:62;-1:-1:-1;;;13435:18:1;;;13428:36;13481:19;;6787:110:0::1;13104:402:1::0;6787:110:0::1;6934:6;::::0;;6913:38:::1;::::0;-1:-1:-1;;;;;6913:38:0;;::::1;::::0;6934:6;::::1;::::0;6913:38:::1;::::0;::::1;6962:6;:17:::0;;-1:-1:-1;;;;;;6962:17:0::1;-1:-1:-1::0;;;;;6962:17:0;;;::::1;::::0;;;::::1;::::0;;6704:283::o;42781:358::-;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;42903:16:::1;:34:::0;;;42948:16:::1;:34:::0;;;43040:2:::1;43001:35;42967:15:::0;42922;43001:35:::1;:::i;:::-;:41;;42993:79;;;::::0;-1:-1:-1;;;42993:79:0;;9629:2:1;42993:79:0::1;::::0;::::1;9611:21:1::0;9668:2;9648:18;;;9641:30;-1:-1:-1;;;9687:18:1;;;9680:55;9752:18;;42993:79:0::1;9427:349:1::0;42993:79:0::1;43088:43;::::0;;9955:25:1;;;10011:2;9996:18;;9989:34;;;43088:43:0::1;::::0;9928:18:1;43088:43:0::1;9781:248:1::0;27506:200:0;6459:6;;-1:-1:-1;;;;;6459:6:0;190:10;6459:22;6451:67;;;;-1:-1:-1;;;6451:67:0;;;;;;;:::i;:::-;27605:21:::1;27645:7;6370::::0;6397:6;-1:-1:-1;;;;;6397:6:0;;6332:79;27645:7:::1;-1:-1:-1::0;;;;;27637:25:0::1;:61;27694:3;27663:28;27675:16:::0;27663:9;:28:::1;:::i;:::-;:34;;;;:::i;:::-;27637:61;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;27953:371:::0;-1:-1:-1;;;;;28080:19:0;;28072:68;;;;-1:-1:-1;;;28072:68:0;;13713:2:1;28072:68:0;;;13695:21:1;13752:2;13732:18;;;13725:30;13791:34;13771:18;;;13764:62;-1:-1:-1;;;13842:18:1;;;13835:34;13886:19;;28072:68:0;13511:400:1;28072:68:0;-1:-1:-1;;;;;28159:21:0;;28151:68;;;;-1:-1:-1;;;28151:68:0;;14118:2:1;28151:68:0;;;14100:21:1;14157:2;14137:18;;;14130:30;14196:34;14176:18;;;14169:62;-1:-1:-1;;;14247:18:1;;;14240:32;14289:19;;28151:68:0;13916:398:1;28151:68:0;-1:-1:-1;;;;;28232:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28284:32;;1847:25:1;;;28284:32:0;;1820:18:1;28284:32:0;;;;;;;27953:371;;;:::o;28332:3414::-;-1:-1:-1;;;;;28454:18:0;;28446:68;;;;-1:-1:-1;;;28446:68:0;;14521:2:1;28446:68:0;;;14503:21:1;14560:2;14540:18;;;14533:30;14599:34;14579:18;;;14572:62;-1:-1:-1;;;14650:18:1;;;14643:35;14695:19;;28446:68:0;14319:401:1;28446:68:0;-1:-1:-1;;;;;28533:16:0;;28525:64;;;;-1:-1:-1;;;28525:64:0;;14927:2:1;28525:64:0;;;14909:21:1;14966:2;14946:18;;;14939:30;15005:34;14985:18;;;14978:62;-1:-1:-1;;;15056:18:1;;;15049:33;15099:19;;28525:64:0;14725:399:1;28525:64:0;28617:1;28608:6;:10;28600:64;;;;-1:-1:-1;;;28600:64:0;;15331:2:1;28600:64:0;;;15313:21:1;15370:2;15350:18;;;15343:30;15409:34;15389:18;;;15382:62;-1:-1:-1;;;15460:18:1;;;15453:39;15509:19;;28600:64:0;15129:405:1;28600:64:0;28681:13;;-1:-1:-1;;;28681:13:0;;;;28677:134;;-1:-1:-1;;;;;28718:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;28746:22:0;;;;;;:18;:22;;;;;;;;28718:50;28710:89;;;;-1:-1:-1;;;28710:89:0;;15741:2:1;28710:89:0;;;15723:21:1;15780:2;15760:18;;;15753:30;15819:28;15799:18;;;15792:56;15865:18;;28710:89:0;15539:350:1;28710:89:0;28823:14;;;;28820:936;;;6370:7;6397:6;-1:-1:-1;;;;;28867:15:0;;;6397:6;;28867:15;;;;:45;;-1:-1:-1;6370:7:0;6397:6;-1:-1:-1;;;;;28899:13:0;;;6397:6;;28899:13;;28867:45;:78;;;;-1:-1:-1;;;;;;28929:16:0;;;;28867:78;:116;;;;-1:-1:-1;;;;;;28962:21:0;;28976:6;28962:21;;28867:116;:150;;;;-1:-1:-1;29001:16:0;;-1:-1:-1;;;29001:16:0;;;;29000:17;28867:150;28849:900;;;6370:7;6397:6;-1:-1:-1;;;;;29048:15:0;;;6397:6;;29048:15;;;;:38;;-1:-1:-1;29073:13:0;;-1:-1:-1;;;;;29067:19:0;;;29073:13;;29067:19;;29048:38;:76;;;;;29106:18;;29090:12;:34;29048:76;29045:176;;;-1:-1:-1;;;;;29144:15:0;;;;;;:11;:15;;;;;;:22;;-1:-1:-1;;29144:22:0;29162:4;29144:22;;;29190:15;;;29144;29190;29045:176;29241:14;;;;:49;;;;-1:-1:-1;;;;;;29259:31:0;;;;;;:25;:31;;;;;;;;29241:49;29237:155;;;29334:13;;29319:11;:28;;29311:65;;;;-1:-1:-1;;;29311:65:0;;16096:2:1;29311:65:0;;;16078:21:1;16135:2;16115:18;;;16108:30;16174:26;16154:18;;;16147:54;16218:18;;29311:65:0;15894:348:1;29311:65:0;-1:-1:-1;;;;;29440:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;29476:35:0;;;;;;:31;:35;;;;;;;;29475:36;29440:71;29436:302;;;29554:20;;29544:6;:30;;29536:96;;;;-1:-1:-1;;;29536:96:0;;16449:2:1;29536:96:0;;;16431:21:1;16488:2;16468:18;;;16461:30;16527:34;16507:18;;;16500:62;-1:-1:-1;;;16578:18:1;;;16571:51;16639:19;;29536:96:0;16247:417:1;29536:96:0;29689:9;;29672:13;29682:2;29672:9;:13::i;:::-;29663:22;;:6;:22;:::i;:::-;:35;;29655:67;;;;-1:-1:-1;;;29655:67:0;;16871:2:1;29655:67:0;;;16853:21:1;16910:2;16890:18;;;16883:30;-1:-1:-1;;;16929:18:1;;;16922:49;16988:18;;29655:67:0;16669:343:1;29655:67:0;29768:25;29821:22;;29796;;:47;;;;:::i;:::-;29768:75;;29854:28;29885:24;29903:4;29885:9;:24::i;:::-;29975:23;;30059:16;;29854:55;;-1:-1:-1;29951:47:0;;;;-1:-1:-1;;;30059:16:0;;;;30058:17;:55;;;;-1:-1:-1;30092:21:0;;-1:-1:-1;;;30092:21:0;;;;30058:55;:100;;;;-1:-1:-1;30140:13:0;;30157:1;;30130:24;;-1:-1:-1;;;;;30140:13:0;30130:9;:24::i;:::-;:28;30058:100;:138;;;;;30195:1;30175:17;:21;30058:138;:178;;;;-1:-1:-1;;;;;;30214:22:0;;;;;;:18;:22;;;;;;;;30213:23;30058:178;:220;;;;-1:-1:-1;;;;;;30254:24:0;;;;;;:18;:24;;;;;;;;30253:25;30058:220;:266;;;;-1:-1:-1;;;;;;30295:29:0;;;;;;:25;:29;;;;;;;;30058:266;:306;;;;;30341:23;30058:306;30040:373;;;30391:10;:8;:10::i;:::-;-1:-1:-1;;;;;30546:24:0;;30425:12;30546:24;;;:18;:24;;;;;;30440:4;;30546:24;;;:50;;-1:-1:-1;;;;;;30574:22:0;;;;;;:18;:22;;;;;;;;30546:50;30542:1141;;;-1:-1:-1;17737:1:0;30643:15;:26;30623:5;30542:1141;;;-1:-1:-1;;;;;30726:31:0;;;;;;:25;:31;;;;;;;;30722:950;;;30778:14;:12;:14::i;:::-;30821:10;;30811:7;:20;30885:16;;30866;;:35;;30885:16;30866:35;:::i;:::-;30850:13;:51;17653:1;30920:15;:21;30722:950;;;-1:-1:-1;;;;;31001:29:0;;;;;;:25;:29;;;;;;;;30997:675;;;31051:14;:12;:14::i;:::-;31094:11;;31084:7;:21;31160:17;;31140;;:37;;31160:17;31140:37;:::i;:::-;31124:13;:53;17693:1;31196:15;:22;-1:-1:-1;;;;;31330:17:0;;-1:-1:-1;31330:17:0;;;:11;:17;;;;;;;;:56;;;;;31374:12;31352:18;;:34;;31330:56;31327:180;;;31420:7;;:11;;31430:1;31420:11;:::i;:::-;31410:7;:21;31470:13;;:17;;31486:1;31470:17;:::i;:::-;31454:13;:33;31327:180;30997:675;;;31597:14;:12;:14::i;:::-;17737:1;31630:15;:26;30997:675;31695:41;31710:4;31716:2;31720:6;31728:7;31695:14;:41::i;:::-;28435:3311;;;;28332:3414;;;:::o;1497:226::-;1617:7;1653:12;1645:6;;;;1637:29;;;;-1:-1:-1;;;1637:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1677:9:0;1689:5;1693:1;1689;:5;:::i;:::-;1677:17;1497:226;-1:-1:-1;;;;;1497:226:0:o;1164:181::-;1222:7;;1254:5;1258:1;1254;:5;:::i;:::-;1242:17;;1283:1;1278;:6;;1270:46;;;;-1:-1:-1;;;1270:46:0;;17219:2:1;1270:46:0;;;17201:21:1;17258:2;17238:18;;;17231:30;17297:29;17277:18;;;17270:57;17344:18;;1270:46:0;17017:351:1;39779:176:0;39821:7;39842:18;39862;39884:19;:17;:19::i;:::-;39841:62;;-1:-1:-1;39841:62:0;-1:-1:-1;39921:26:0;39841:62;;39921:14;:26::i;:::-;39914:33;;;;39779:176;:::o;1989:132::-;2047:7;2074:39;2078:1;2081;2074:39;;;;;;;;;;;;;;;;;:3;:39::i;25011:324::-;-1:-1:-1;;;;;25094:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25094:39:0;;;;;;;25144:38;25094:31;:39;25144:25;:38::i;:::-;25196:5;25193:35;;;25203:23;25221:4;25203:17;:23::i;:::-;25242:5;25238:34;;25249:21;25265:4;25249:15;:21::i;:::-;25287:40;;;-1:-1:-1;;;;;17559:32:1;;17541:51;;17635:14;;17628:22;17623:2;17608:18;;17601:50;25287:40:0;;17514:18:1;25287:40:0;17373:284:1;34013:694:0;34169:7;34164:28;;34178:14;:12;:14::i;:::-;-1:-1:-1;;;;;34209:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;34233:22:0;;;;;;:11;:22;;;;;;;;34232:23;34209:46;34205:467;;;34272:48;34294:6;34302:9;34313:6;34272:21;:48::i;:::-;34205:467;;;-1:-1:-1;;;;;34343:19:0;;;;;;:11;:19;;;;;;;;34342:20;:46;;;;-1:-1:-1;;;;;;34366:22:0;;;;;;:11;:22;;;;;;;;34342:46;34338:334;;;34405:46;34425:6;34433:9;34444:6;34405:19;:46::i;34338:334::-;-1:-1:-1;;;;;34473:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;34496:22:0;;;;;;:11;:22;;;;;;;;34473:45;34469:203;;;34535:48;34557:6;34565:9;34576:6;34535:21;:48::i;34469:203::-;34616:44;34634:6;34642:9;34653:6;34616:17;:44::i;:::-;34684:15;42103;;42093:7;:25;42145:21;;42129:13;:37;42049:125;31754:1313;20372:16;:23;;-1:-1:-1;;;;20372:23:0;-1:-1:-1;;;20372:23:0;;;;31831:24:::1;31849:4;31831:9;:24::i;:::-;31805:50;;31868:25;31896:50;31923:22;;31896;;:26;;:50;;;;:::i;:::-;31868:78;;32008:26;32037:29;32064:1;32037:22;;:26;;:29;;;;:::i;:::-;32008:58:::0;-1:-1:-1;32077:26:0::1;32106:39;:15:::0;32008:58;32106:19:::1;:39::i;:::-;32077:68:::0;-1:-1:-1;32186:21:0::1;32220:36;32077:68:::0;32220:16:::1;:36::i;:::-;32269:18;32290:44;:21;32316:17:::0;32290:25:::1;:44::i;:::-;32269:65;;32347:23;32373:61;32416:17;32373:38;32388:22;;32373:10;:14;;:38;;;;:::i;:::-;:42:::0;::::1;:61::i;:::-;32347:87:::0;-1:-1:-1;32445:23:0::1;32471:31;:10:::0;32347:87;32471:14:::1;:31::i;:::-;32540:1;32515:22;:26:::0;;;32552:22:::1;:26:::0;;;32617:16:::1;::::0;32609:58:::1;::::0;32445:57;;-1:-1:-1;32540:1:0;;-1:-1:-1;;;;;32617:16:0;;::::1;::::0;32647:15;;32540:1;32609:58;32540:1;32609:58;32647:15;32617:16;32609:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32591:76;;;32680:49;32693:18;32713:15;32680:12;:49::i;:::-;32745:71;::::0;;18074:25:1;;;18130:2;18115:18;;18108:34;;;18158:18;;;18151:34;;;32745:71:0::1;::::0;18062:2:1;18047:18;32745:71:0::1;;;;;;;32951:4;32927:21;:28;32924:136;;;32992:16;::::0;32984:64:::1;::::0;-1:-1:-1;;;;;32992:16:0;;::::1;::::0;33022:21:::1;::::0;32984:64:::1;::::0;;;33022:21;32992:16;32984:64:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;32971:77:0;;-1:-1:-1;;32924:136:0::1;-1:-1:-1::0;;20418:16:0;:24;;-1:-1:-1;;;;20418:24:0;;;-1:-1:-1;;;;;;;31754:1313:0:o;41806:235::-;41853:7;;:12;:34;;;;-1:-1:-1;41869:13:0;;:18;41853:34;41849:47;;;41806:235::o;41849:47::-;41926:7;;;41908:15;:25;41968:13;;;41944:21;:37;-1:-1:-1;41994:11:0;;;;42016:17;41806:235::o;39963:674::-;40064:10;;40014:7;;;;17301:18;40014:7;40127:374;40151:9;:16;40147:20;;40127:374;;;40238:10;40211;:24;40222:9;40232:1;40222:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40222:12:0;40211:24;;;;;;;;;;;;;:37;;:95;;;40296:10;40269;:24;40280:9;40290:1;40280:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40280:12:0;40269:24;;;;;;;;;;;;;:37;40211:95;40189:164;;;-1:-1:-1;;40330:10:0;;;17301:18;;-1:-1:-1;39963:674:0;-1:-1:-1;;39963:674:0:o;40189:164::-;40381:40;40396:10;:24;40407:9;40417:1;40407:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40407:12:0;40396:24;;;;;;;;;;;;;40381:10;;:14;:40::i;:::-;40368:53;;40449:40;40464:10;:24;40475:9;40485:1;40475:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40475:12:0;40464:24;;;;;;;;;;;;;40449:10;;:14;:40::i;:::-;40436:53;-1:-1:-1;40169:3:0;;;;:::i;:::-;;;;40127:374;;;-1:-1:-1;40528:10:0;;:26;;17301:18;40528:14;:26::i;:::-;40515:10;:39;40511:76;;;-1:-1:-1;;40564:10:0;;;17301:18;;-1:-1:-1;39963:674:0;-1:-1:-1;39963:674:0:o;40511:76::-;40606:10;;40618;;-1:-1:-1;39963:674:0;-1:-1:-1;39963:674:0:o;2129:312::-;2249:7;2284:12;2277:5;2269:28;;;;-1:-1:-1;;;2269:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2308:9:0;2320:5;2324:1;2320;:5;:::i;36163:745::-;36317:18;36350:26;36391:15;36421:26;36462:15;36492:21;36527:22;36538:10;36527;:22::i;:::-;-1:-1:-1;;;;;36581:18:0;;;;;;:10;:18;;;;;;36302:247;;-1:-1:-1;36302:247:0;;-1:-1:-1;36302:247:0;;-1:-1:-1;36302:247:0;-1:-1:-1;36302:247:0;-1:-1:-1;36302:247:0;-1:-1:-1;36581:34:0;;36604:10;36581:22;:34::i;:::-;-1:-1:-1;;;;;36560:18:0;;;;;;:10;:18;;;;;;;;:55;;;;36647:10;:18;;;;:34;;36670:10;36647:22;:34::i;:::-;-1:-1:-1;;;;;36626:18:0;;;;;;;:10;:18;;;;;;:55;;;;36716:21;;;;;;;:45;;36742:18;36716:25;:45::i;:::-;-1:-1:-1;;;;;36692:21:0;;;;;;:10;:21;;;;;:69;36772:29;36787:13;36772:14;:29::i;:::-;36812:25;36820:7;36829;36812;:25::i;:::-;36870:9;-1:-1:-1;;;;;36853:47:0;36862:6;-1:-1:-1;;;;;36853:47:0;;36881:18;36853:47;;;;1847:25:1;;1835:2;1820:18;;1701:177;36853:47:0;;;;;;;;36291:617;;;;;;36163:745;;;:::o;35398:757::-;35550:18;35583:26;35624:15;35654:26;35695:15;35725:21;35760:22;35771:10;35760;:22::i;:::-;-1:-1:-1;;;;;35814:18:0;;;;;;:10;:18;;;;;;35535:247;;-1:-1:-1;35535:247:0;;-1:-1:-1;35535:247:0;;-1:-1:-1;35535:247:0;-1:-1:-1;35535:247:0;-1:-1:-1;35535:247:0;-1:-1:-1;35814:34:0;;35535:247;35814:22;:34::i;:::-;-1:-1:-1;;;;;35793:18:0;;;;;;;:10;:18;;;;;;;;:55;;;;35883:21;;;;;:10;:21;;;;;:45;;35909:18;35883:25;:45::i;:::-;-1:-1:-1;;;;;35859:21:0;;;;;;:10;:21;;;;;;;;:69;;;;35963:10;:21;;;;:45;;35989:18;35963:25;:45::i;36916:825::-;37070:18;37103:26;37144:15;37174:26;37215:15;37245:21;37280:22;37291:10;37280;:22::i;:::-;-1:-1:-1;;;;;37334:18:0;;;;;;:10;:18;;;;;;37055:247;;-1:-1:-1;37055:247:0;;-1:-1:-1;37055:247:0;;-1:-1:-1;37055:247:0;-1:-1:-1;37055:247:0;-1:-1:-1;37055:247:0;-1:-1:-1;37334:34:0;;37357:10;37334:22;:34::i;:::-;-1:-1:-1;;;;;37313:18:0;;;;;;:10;:18;;;;;;;;:55;;;;37400:10;:18;;;;:34;;37423:10;37400:22;:34::i;34715:675::-;34865:18;34898:26;34939:15;34969:26;35010:15;35040:21;35075:22;35086:10;35075;:22::i;:::-;-1:-1:-1;;;;;35129:18:0;;;;;;:10;:18;;;;;;34850:247;;-1:-1:-1;34850:247:0;;-1:-1:-1;34850:247:0;;-1:-1:-1;34850:247:0;-1:-1:-1;34850:247:0;-1:-1:-1;34850:247:0;-1:-1:-1;35129:34:0;;34850:247;1353:136;1411:7;1438:43;1442:1;1445;1438:43;;;;;;;;;;;;;;;;;:3;:43::i;33075:499::-;33165:16;;;33179:1;33165:16;;;;;;;;33141:21;;33165:16;;;;;;;;;;-1:-1:-1;33165:16:0;33141:40;;33210:4;33192;33197:1;33192:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33192:23:0;;;:7;;;;;;;;;;:23;;;;33236:15;;:22;;;-1:-1:-1;;;33236:22:0;;;;:15;;;;;:20;;:22;;;;;33192:7;;33236:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33226:4;33231:1;33226:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33226:32:0;;;:7;;;;;;;;;:32;33301:15;;33269:62;;33286:4;;33301:15;33319:11;33269:8;:62::i;:::-;33342:15;;:224;;-1:-1:-1;;;33342:224:0;;-1:-1:-1;;;;;33342:15:0;;;;:66;;:224;;33423:11;;33342:15;;33493:4;;33520;;33540:15;;33342:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33130:444;33075:499;:::o;1731:250::-;1789:7;1813:6;1809:47;;-1:-1:-1;1843:1:0;1836:8;;1809:47;1868:9;1880:5;1884:1;1880;:5;:::i;:::-;1868:17;-1:-1:-1;1913:1:0;1904:5;1908:1;1868:17;1904:5;:::i;:::-;:10;1896:56;;;;-1:-1:-1;;;1896:56:0;;19515:2:1;1896:56:0;;;19497:21:1;19554:2;19534:18;;;19527:30;19593:34;19573:18;;;19566:62;-1:-1:-1;;;19644:18:1;;;19637:31;19685:19;;1896:56:0;19313:397:1;33582:423:0;33695:15;;33663:62;;33680:4;;-1:-1:-1;;;;;33695:15:0;33713:11;33663:8;:62::i;:::-;33736:15;;33940:16;;;33736:261;;-1:-1:-1;;;33736:261:0;;33808:4;33736:261;;;20064:34:1;;;;20114:18;;;20107:34;;;33736:15:0;20157:18:1;;;20150:34;;;20200:18;;;20193:34;-1:-1:-1;;;;;33940:16:0;;;20243:19:1;;;20236:44;33971:15:0;20296:19:1;;;20289:35;33736:15:0;;;;:31;;33775:9;;19998:19:1;;33736:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33582:423;;:::o;37918:796::-;38021:7;38043;38065;38087;38109;38131;38181:26;38222:15;38252:21;38287:23;38299:10;38287:11;:23::i;:::-;38166:144;;;;;;38322:18;38342:26;38370:15;38389:125;38418:10;38443:7;38465:13;38493:10;:8;:10::i;:::-;38389:14;:125::i;:::-;38321:193;;;;-1:-1:-1;38321:193:0;;-1:-1:-1;38627:18:0;;-1:-1:-1;38660:7:0;;-1:-1:-1;38682:13:0;;-1:-1:-1;37918:796:0;;-1:-1:-1;;;;;37918:796:0:o;40645:833::-;17653:1;40714:15;;:22;40711:441;;;40813:13;;40794:16;;40778:32;;:13;:32;:::i;:::-;:48;;;;:::i;:::-;40752:22;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;;40902:13:0;;40883:16;;40867:32;;:13;:32;:::i;:::-;:48;;;;:::i;:::-;40841:22;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;40711:441:0;;-1:-1:-1;40711:441:0;;17693:1;40936:15;;:23;40933:219;;;41037:13;;41017:17;;41001:33;;:13;:33;:::i;:::-;:49;;;;:::i;:::-;40975:22;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;41127:13:0;;41107:17;;41091:33;;:13;:33;:::i;:::-;:49;;;;:::i;:::-;41065:22;;:75;;;;;;;:::i;:::-;;;;-1:-1:-1;;40933:219:0;41162:19;41184:10;:8;:10::i;:::-;41162:32;-1:-1:-1;41205:21:0;41229:30;:13;41162:32;41229:17;:30::i;:::-;41317:4;41298:25;;;;:10;:25;;;;;;41205:54;;-1:-1:-1;41298:44:0;;41205:54;41298:29;:44::i;:::-;41289:4;41270:25;;;;:10;:25;;;;;;;;:72;;;;41357:11;:26;;;;;;41353:117;;;41445:4;41426:25;;;;:10;:25;;;;;;:44;;41456:13;41426:29;:44::i;:::-;41417:4;41398:25;;;;:10;:25;;;;;:72;40700:778;;40645:833;:::o;37749:161::-;37829:10;;:23;;37844:7;37829:14;:23::i;:::-;37816:10;:36;37879:13;;:23;;37897:4;37879:17;:23::i;:::-;37863:13;:39;-1:-1:-1;;37749:161:0:o;38722:442::-;38826:7;38848;38870;38905:15;38923:27;38939:10;38923:15;:27::i;:::-;38905:45;;38961:21;38985:33;39007:10;38985:21;:33::i;:::-;38961:57;-1:-1:-1;39029:23:0;39055:42;38961:57;39055:23;:10;39070:7;39055:14;:23::i;:::-;:27;;:42::i;:::-;39029:68;39133:7;;-1:-1:-1;39142:13:0;;-1:-1:-1;38722:442:0;;-1:-1:-1;;;38722:442:0:o;39172:599::-;39383:7;;;;39483:27;:10;39498:11;39483:14;:27::i;:::-;39462:48;-1:-1:-1;39521:15:0;39539:24;:7;39551:11;39539;:24::i;:::-;39521:42;-1:-1:-1;39574:21:0;39598:30;:13;39616:11;39598:17;:30::i;:::-;39574:54;-1:-1:-1;39639:23:0;39665:42;39574:54;39665:23;:10;39680:7;39665:14;:23::i;:42::-;39726:10;;;;-1:-1:-1;39755:7:0;;-1:-1:-1;39172:599:0;;-1:-1:-1;;;;;;;39172:599:0:o;41486:130::-;41550:7;41577:31;41602:5;41577:20;41589:7;;41577;:11;;:20;;;;:::i;41624:174::-;41721:7;41753:37;41784:5;41753:26;41765:13;;41753:7;:11;;:26;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:180::-;675:6;728:2;716:9;707:7;703:23;699:32;696:52;;;744:1;741;734:12;696:52;-1:-1:-1;767:23:1;;616:180;-1:-1:-1;616:180:1:o;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;856:70;801:131;:::o;937:315::-;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1449:247::-;1508:6;1561:2;1549:9;1540:7;1536:23;1532:32;1529:52;;;1577:1;1574;1567:12;1529:52;1616:9;1603:23;1635:31;1660:5;1635:31;:::i;2118:456::-;2195:6;2203;2211;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:31;2363:5;2338:31;:::i;:::-;2388:5;-1:-1:-1;2445:2:1;2430:18;;2417:32;2458:33;2417:32;2458:33;:::i;:::-;2118:456;;2510:7;;-1:-1:-1;;;2564:2:1;2549:18;;;;2536:32;;2118:456::o;3200:248::-;3268:6;3276;3329:2;3317:9;3308:7;3304:23;3300:32;3297:52;;;3345:1;3342;3335:12;3297:52;-1:-1:-1;;3368:23:1;;;3438:2;3423:18;;;3410:32;;-1:-1:-1;3200:248:1:o;3453:118::-;3539:5;3532:13;3525:21;3518:5;3515:32;3505:60;;3561:1;3558;3551:12;3576:382;3641:6;3649;3702:2;3690:9;3681:7;3677:23;3673:32;3670:52;;;3718:1;3715;3708:12;3670:52;3757:9;3744:23;3776:31;3801:5;3776:31;:::i;:::-;3826:5;-1:-1:-1;3883:2:1;3868:18;;3855:32;3896:30;3855:32;3896:30;:::i;:::-;3945:7;3935:17;;;3576:382;;;;;:::o;4296:388::-;4364:6;4372;4425:2;4413:9;4404:7;4400:23;4396:32;4393:52;;;4441:1;4438;4431:12;4393:52;4480:9;4467:23;4499:31;4524:5;4499:31;:::i;:::-;4549:5;-1:-1:-1;4606:2:1;4591:18;;4578:32;4619:33;4578:32;4619:33;:::i;4689:241::-;4745:6;4798:2;4786:9;4777:7;4773:23;4769:32;4766:52;;;4814:1;4811;4804:12;4766:52;4853:9;4840:23;4872:28;4894:5;4872:28;:::i;4935:356::-;5137:2;5119:21;;;5156:18;;;5149:30;5215:34;5210:2;5195:18;;5188:62;5282:2;5267:18;;4935:356::o;5296:127::-;5357:10;5352:3;5348:20;5345:1;5338:31;5388:4;5385:1;5378:15;5412:4;5409:1;5402:15;5428:168;5468:7;5534:1;5530;5526:6;5522:14;5519:1;5516:21;5511:1;5504:9;5497:17;5493:45;5490:71;;;5541:18;;:::i;:::-;-1:-1:-1;5581:9:1;;5428:168::o;5601:217::-;5641:1;5667;5657:132;;5711:10;5706:3;5702:20;5699:1;5692:31;5746:4;5743:1;5736:15;5774:4;5771:1;5764:15;5657:132;-1:-1:-1;5803:9:1;;5601:217::o;6591:127::-;6652:10;6647:3;6643:20;6640:1;6633:31;6683:4;6680:1;6673:15;6707:4;6704:1;6697:15;6723:125;6763:4;6791:1;6788;6785:8;6782:34;;;6796:18;;:::i;:::-;-1:-1:-1;6833:9:1;;6723:125::o;6853:127::-;6914:10;6909:3;6905:20;6902:1;6895:31;6945:4;6942:1;6935:15;6969:4;6966:1;6959:15;6985:135;7024:3;-1:-1:-1;;7045:17:1;;7042:43;;;7065:18;;:::i;:::-;-1:-1:-1;7112:1:1;7101:13;;6985:135::o;7481:128::-;7521:3;7552:1;7548:6;7545:1;7542:13;7539:39;;;7558:18;;:::i;:::-;-1:-1:-1;7594:9:1;;7481:128::o;8862:251::-;8932:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:52;;;9001:1;8998;8991:12;8953:52;9033:9;9027:16;9052:31;9077:5;9052:31;:::i;10437:184::-;10507:6;10560:2;10548:9;10539:7;10535:23;10531:32;10528:52;;;10576:1;10573;10566:12;10528:52;-1:-1:-1;10599:16:1;;10437:184;-1:-1:-1;10437:184:1:o;10905:245::-;10972:6;11025:2;11013:9;11004:7;11000:23;10996:32;10993:52;;;11041:1;11038;11031:12;10993:52;11073:9;11067:16;11092:28;11114:5;11092:28;:::i;18328:980::-;18590:4;18638:3;18627:9;18623:19;18669:6;18658:9;18651:25;18695:2;18733:6;18728:2;18717:9;18713:18;18706:34;18776:3;18771:2;18760:9;18756:18;18749:31;18800:6;18835;18829:13;18866:6;18858;18851:22;18904:3;18893:9;18889:19;18882:26;;18943:2;18935:6;18931:15;18917:29;;18964:1;18974:195;18988:6;18985:1;18982:13;18974:195;;;19053:13;;-1:-1:-1;;;;;19049:39:1;19037:52;;19144:15;;;;19109:12;;;;19085:1;19003:9;18974:195;;;-1:-1:-1;;;;;;;19225:32:1;;;;19220:2;19205:18;;19198:60;-1:-1:-1;;;19289:3:1;19274:19;19267:35;19186:3;18328:980;-1:-1:-1;;;18328:980:1:o;20335:306::-;20423:6;20431;20439;20492:2;20480:9;20471:7;20467:23;20463:32;20460:52;;;20508:1;20505;20498:12;20460:52;20537:9;20531:16;20521:26;;20587:2;20576:9;20572:18;20566:25;20556:35;;20631:2;20620:9;20616:18;20610:25;20600:35;;20335:306;;;;;:::o

Swarm Source

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