ETH Price: $3,274.54 (-3.98%)
Gas: 9 Gwei

Token

Doomer Girl (GURL)
 

Overview

Max Total Supply

100,000,000 GURL

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
privatepoor.eth
Balance
0.000000000039775308 GURL

Value
$0.00
0x89A500AE0097f7f2A124dcDc18d8056Bc6D856DC
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:
DoomerGirl

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.19;

interface iERC20 {
    function getOwner() external view returns (address);

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

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

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transfer(address _to, uint256 _value)
        external
        returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function approve(address _spender, uint256 _value)
        external
        returns (bool success);

    function allowance(address _owner, address _spender)
        external
        view
        returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _value
    );
}

interface IUniswapERC20 {
    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;
}

interface IUniswapFactory {
    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 IUniswapRouter01 {
    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 factory() external pure returns (address);

    function WETH() external pure returns (address);

    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 IUniswapRouter02 is IUniswapRouter01 {
    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;
}

library Listables {
    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value)
        private
        view
        returns (bool)
    {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index)
        private
        view
        returns (bytes32)
    {
        require(
            set._values.length > index,
            "Listables: index out of bounds"
        );
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return _at(set._inner, index);
    }

    struct ActorSet {
        Set _inner;
    }

    function add(ActorSet storage set, address value)
        internal
        returns (bool)
    {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(ActorSet storage set, address value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(ActorSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(ActorSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(ActorSet storage set, uint256 index)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index)
        internal
        view
        returns (uint256)
    {
        return uint256(_at(set._inner, index));
    }
}


contract Modern {
    mapping(address => bool) isAuthorized;

    function authorized(address ADDRESS) public view returns (bool) {
        return isAuthorized[ADDRESS];
    }

    function set_authorized(address ADDRESS, bool BOOLEAN) public onlyAuth {
        isAuthorized[ADDRESS] = BOOLEAN;
    }

    modifier onlyAuth() {
        require(isAuthorized[msg.sender] || msg.sender == owner, "not owner");
        _;
    }
    address owner;
    modifier onlyOwner() {
        require(msg.sender == owner, "not owner");
        _;
    }
    bool inUse;
    modifier safe() {
        require(!inUse, "reentrant");
        inUse = true;
        _;
        inUse = false;
    }

    function change_owner(address _new) public onlyAuth {
        owner = _new;
    }

    receive() external payable {}

    fallback() external payable {}
}

contract DoomerGirl is iERC20, Modern {

    // BEGINNING OF THE CONTRACT //

    using Listables for Listables.ActorSet;

    string public constant _name = "Doomer Girl";
    string public constant _symbol = "GURL";
    uint8 public constant _decimals = 18;
    uint256 public constant InitialSupply = 100 * 10**6 * 10**_decimals;

    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) public _allowances;
    Listables.ActorSet private _excluded;

    uint256 swapTreshold = InitialSupply / 200; // 0.5%

    bool isSwapPegged = true;

    uint16 public BuyBarrierDenominator = 25; // 4%

    uint8 public BalanceBarrierDenominator = 25; // 4%

    uint16 public SellBarrierDenominator = 50; // 2%

    bool public manualConversion;

    address public constant UniswapRouter =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant Dead = 0x000000000000000000000000000000000000dEaD;

    uint256 public _circulatingSupply = InitialSupply;
    uint256 public balanceBarrier = _circulatingSupply;
    uint256 public sellBarrier = _circulatingSupply;
    uint256 public buyBarrier = _circulatingSupply;

    uint8 public _buyTax = 10;
    uint8 public _sellTax = 30;
    uint8 public _transferTax = 5;

    // Shares
    uint8 public _liquidityTax = 10;
    uint8 public _marketingTax = 90;

    bool isTokenSwapManual;
    bool public botProtect;
    bool public tradingEnabled;

    address public _UniswapPairAddress;

    IUniswapRouter02 public _UniswapRouter;

    uint256 public marketingBalance;

    bool private _isSwappingContractModifier;
    
    modifier lockTheSwap() {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    constructor() {
        // Ownership
        owner = msg.sender;
        isAuthorized[msg.sender] = true;
        uint contractSupply = (InitialSupply / 100) * 10;
        uint deployerSupply = InitialSupply - contractSupply;
        _balances[msg.sender] = deployerSupply;
        emit Transfer(address(0), msg.sender, deployerSupply);
        _balances[address(this)] = contractSupply;
        emit Transfer(address(0), address(this), contractSupply);
        // Defining the Uniswap Router and the Uniswap Pair
        _UniswapRouter = IUniswapRouter02(UniswapRouter);
        _UniswapPairAddress = IUniswapFactory(_UniswapRouter.factory())
            .createPair(address(this), _UniswapRouter.WETH());

        // Barriers
        balanceBarrier = InitialSupply / BalanceBarrierDenominator;
        sellBarrier = InitialSupply / SellBarrierDenominator;
        buyBarrier = InitialSupply / BuyBarrierDenominator;

        _excluded.add(msg.sender);
    }

    // Public transfer method
    function _transfer(
        address fromaddress,
        address receiver,
        uint256 amount
    ) private {
        require(fromaddress != address(0), "Transfer from zero");

        // Check if the transfer is to be excluded from cooldown and taxes
        bool isExcluded = (_excluded.contains(fromaddress) ||
            _excluded.contains(receiver) ||
            isAuthorized[fromaddress] ||
            isAuthorized[receiver]);

        bool isContractTransfer = (fromaddress == address(this) ||
            receiver == address(this));

        bool isLiquidityTransfer = ((fromaddress == _UniswapPairAddress &&
            receiver == UniswapRouter) ||
            (receiver == _UniswapPairAddress && fromaddress == UniswapRouter));
        if (
            isContractTransfer || isLiquidityTransfer || isExcluded
        ) {
            _specialTransfer(fromaddress, receiver, amount);
        } else {
            // If not, check if trading is enabled
            if (!tradingEnabled) {
                // except for the owner
                if (fromaddress != owner && receiver != owner) {
                    // and apply anti-snipe if enabled
                    if (botProtect) {
                        emit Transfer(fromaddress, receiver, 0);
                        return;
                    } else {
                        // or revert if not
                        require(tradingEnabled, "trading not yet enabled");
                    }
                }
            }

            // If trading is enabled, check if the transfer is a buy or a sell
            bool isBuy = fromaddress == _UniswapPairAddress ||
                fromaddress == UniswapRouter;
            bool isSell = receiver == _UniswapPairAddress ||
                receiver == UniswapRouter;
            // and initiate the transfer accordingly
            _justTransfer(fromaddress, receiver, amount, isBuy, isSell);

        }
    }

    // Transfer method for everyone
    function _justTransfer(
        address fromaddress,
        address receiver,
        uint256 amount,
        bool isBuy,
        bool isSell
    ) private {

        uint256 receiverBalance = _balances[receiver];

        require(_balances[fromaddress] >= amount, "Transfer exceeds balance");

        uint8 tax;
        if (isSell) {
            // Sell limit check
            require(amount <= sellBarrier, "Dump protection");
            tax = _sellTax;
        } else if (isBuy) {
            // Balance limit check
            require(
                receiverBalance + amount <= balanceBarrier,
                "whale protection"
            );
            // Buy limit check
            require(amount <= buyBarrier, "whale protection");
            tax = _buyTax;
        } else {
            require(

                receiverBalance + amount <= balanceBarrier,
                "whale protection"
            );
            tax = _transferTax;
        }


        if (
            (fromaddress != _UniswapPairAddress) &&
            (!manualConversion) &&
            (!_isSwappingContractModifier)
        ) _swapContractToken(amount);


        uint256 contractToken = _calculateFee(
            amount,
            tax,
            _liquidityTax + _marketingTax 
        );

        uint256 taxedAmount = amount - (contractToken);
        _removeToken(fromaddress, amount);
        _addToken(address(this), contractToken);
        emit Transfer(fromaddress, address(this), contractToken);
        _addToken(receiver, taxedAmount);
        emit Transfer(fromaddress, receiver, taxedAmount);
    }

    function _specialTransfer(
        address fromaddress,
        address receiver,
        uint256 amount
    ) private {

        require(_balances[fromaddress] >= amount, "Transfer exceeds balance");

        _removeToken(fromaddress, amount);
        _addToken(receiver, amount);

        emit Transfer(fromaddress, receiver, amount);
    }


    function _calculateFee(
        uint256 amount,
        uint8 tax,
        uint8 taxPercent
    ) private pure returns (uint256) {
        require(taxPercent == 100, "Tax percent is not 100");
        return (amount * tax) / 100;
    }

    function _addToken(address addr, uint256 amount) private {
        uint256 newAmount = _balances[addr] + amount;
        _balances[addr] = newAmount;
    }

    function _removeToken(address addr, uint256 amount) private {
        uint256 newAmount = _balances[addr] - amount;
        _balances[addr] = newAmount;
    }

    // Swap tokens on sells to create liquidity
    function _swapContractToken(uint256 totalMax) private lockTheSwap {
        uint256 contractBalance = _balances[address(this)];
        // Do not swap if the contract balance is lower than the swap treshold
        if (contractBalance < swapTreshold) {
            return;
        }

        uint16 totalTaxes = _liquidityTax;
        uint256 tokenToSwap = swapTreshold;

        // PEG THE SWAP TO THE MAXIMUM IF THE MAXIMUM IS LOWER THAN THE SWAP TRESHOLD
        if (swapTreshold > totalMax) {
            if (isSwapPegged) {
                tokenToSwap = totalMax;
            }
        }
        // DO NOT SWAP WITHOUT TAXES TO SWAP
        if (totalTaxes == 0) {
            return;
        }

        uint256 tokenForLiquidity = (tokenToSwap * _liquidityTax) / totalTaxes;
        uint256 tokenFormarketing = (tokenToSwap * _marketingTax) / totalTaxes;

        uint256 liqToken = tokenForLiquidity / 2;
        uint256 liqETHToken = tokenForLiquidity - liqToken;

        uint256 swapToken = liqETHToken +
            tokenFormarketing;

        uint256 initialETHBalance = address(this).balance;
        _swapTokenForETH(swapToken);

        uint256 newETH = (address(this).balance - initialETHBalance);
        uint256 liqETH = (newETH * liqETHToken) / swapToken;

        _addLiquidity(liqToken, liqETH);

        uint256 generatedETH = (address(this).balance - initialETHBalance);
        marketingBalance += generatedETH;
    }

    // Basic swap function for swapping tokens on Uniswap-v2 compatible routers
    function _swapTokenForETH(uint256 amount) private {
        // Preapprove the router to spend the tokens
        _approve(address(this), address(_UniswapRouter), amount);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _UniswapRouter.WETH();

        _UniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    // Basic add liquidity function for adding liquidity on Uniswap-v2 compatible routers
    function _addLiquidity(uint256 tokenamount, uint256 ETHamount) private {
        // Approve the router to spend the tokens
        _approve(address(this), address(_UniswapRouter), tokenamount);

        _UniswapRouter.addLiquidityETH{value: ETHamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }

    function getBarriers()
        public
        view
        returns (uint256 balance, uint256 sell)
    {
        return (balanceBarrier, sellBarrier);
    }

    function getTaxes()
        public
        view
        returns (
            uint256 marketingShare,
            uint256 liquidityShare,
            uint256 buyTax,
            uint256 sellTax,
            uint256 transferTax
        )
    {
        return (
            _marketingTax,
            _liquidityTax,
            _buyTax,
            _sellTax,
            _transferTax
        );
    }

    // Pegged swap means that the contract won't dump when the swap treshold is reached
    function SetPeggedSwap(bool isPegged) public onlyAuth {
        isSwapPegged = isPegged;
    }

    // The token amount that triggers swap on sells
    function SetSwapTreshold(uint256 max) public onlyAuth {
        swapTreshold = max;
    }

    function ExcludeAccountFromFees(address account) public onlyAuth {
        _excluded.add(account);
    }

    function IncludeAccountToFees(address account) public onlyAuth {
        _excluded.remove(account);
    }

    function WithdrawmarketingETH() public onlyAuth {
        uint256 amount = marketingBalance;
        marketingBalance = 0;
        address fromaddress = msg.sender;
        (bool sent, ) = fromaddress.call{value: (amount)}("");
        require(sent, "withdraw failed");
    }

    function withdrawTaxes() public onlyAuth {
        uint256 amount = address(this).balance;
        address fromaddress = msg.sender;
        (bool sent, ) = fromaddress.call{value: (amount)}("");
        require(sent, "withdraw failed");
        marketingBalance = 0;
    }

    function SwitchManualETHConversion(bool manual) public onlyAuth {
        manualConversion = manual;
    }


    function SetTaxes(
        uint8 marketingTaxes,
        uint8 liquidityTaxes,
        uint8 buyTax,
        uint8 sellTax,
        uint8 transferTax
    ) public onlyAuth {
        uint8 totalTax =
            marketingTaxes +
            liquidityTaxes;
        require(totalTax == 100, "marketing + Liquidity taxes needs to equal 100%");
        _marketingTax = marketingTaxes;
        _liquidityTax = liquidityTaxes;

        _buyTax = buyTax;
        _sellTax = sellTax;
        _transferTax = transferTax;
    }

    function ManualGenerateTokenSwapBalance(uint256 _qty)
        public
        onlyAuth
    {
        _swapContractToken(_qty * 10**9);
    }

    function UpdateBarriers(uint256 newBalanceBarrier, uint256 newSellBarrier)
        public
        onlyAuth
    {
        newBalanceBarrier = newBalanceBarrier * 10**_decimals;
        newSellBarrier = newSellBarrier * 10**_decimals;
        balanceBarrier = newBalanceBarrier;
        sellBarrier = newSellBarrier;
    }

    function EnableTrading(bool BOOLEAN) public onlyAuth {
        tradingEnabled = BOOLEAN;
    }

    function LiquidityTokenAddress(address liquidityTokenAddress)
        public
        onlyAuth
    {
        _UniswapPairAddress = liquidityTokenAddress;
    }

    function RescueTokens(address tknAddress) public onlyAuth {
        iERC20 token = iERC20(tknAddress);
        uint256 ourBalance = token.balanceOf(address(this));
        require(ourBalance > 0, "No tokens in our balance");
        token.transfer(msg.sender, ourBalance);
    }

    function setContractTokenSwapManual(bool manual) public onlyAuth {
        isTokenSwapManual = manual;
    }

    function getFeesValue() public onlyAuth {
        (bool sent, ) = msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }

    function getOwner() external view override returns (address) {
        return owner;
    }

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

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

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

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }

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

    function transfer(address receiver, uint256 amount)
        external
        override
        returns (bool)
    {
        _transfer(msg.sender, receiver, 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(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address _owner,
        address spender,
        uint256 amount
    ) private {
        require(_owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

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

    function transferFrom(
        address fromaddress,
        address receiver,
        uint256 amount
    ) external override returns (bool) {
        _transfer(fromaddress, receiver, amount);

        uint256 currentAllowance = _allowances[fromaddress][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(fromaddress, msg.sender, currentAllowance - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        returns (bool)
    {
        _approve(
            msg.sender,
            spender,
            _allowances[msg.sender][spender] + addedValue
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool)
    {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

}

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":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"BalanceBarrierDenominator","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyBarrierDenominator","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Dead","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"BOOLEAN","type":"bool"}],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"LiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"ManualGenerateTokenSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tknAddress","type":"address"}],"name":"RescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"SellBarrierDenominator","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isPegged","type":"bool"}],"name":"SetPeggedSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"SetSwapTreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"SetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"SwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UniswapRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceBarrier","type":"uint256"},{"internalType":"uint256","name":"newSellBarrier","type":"uint256"}],"name":"UpdateBarriers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawmarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_UniswapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UniswapRouter","outputs":[{"internalType":"contract IUniswapRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ADDRESS","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceBarrier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botProtect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBarrier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"change_owner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBarriers","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeesValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"marketingShare","type":"uint256"},{"internalType":"uint256","name":"liquidityShare","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","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":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","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":"sellBarrier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"setContractTokenSwapManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ADDRESS","type":"address"},{"internalType":"bool","name":"BOOLEAN","type":"bool"}],"name":"set_authorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromaddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260c8620000146012600a620005ab565b62000024906305f5e100620005bc565b620000309190620005d6565b6006556007805465ffffffffffff1916643219001901179055620000576012600a620005ab565b62000067906305f5e100620005bc565b60088190556009819055600a819055600b55600c805464ffffffffff1916645a0a051e0a1790553480156200009b57600080fd5b50600180546001600160a01b0319163390811782556000908152602081905260408120805460ff19169092179091556064620000da6012600a620005ab565b620000ea906305f5e100620005bc565b620000f69190620005d6565b6200010390600a620005bc565b9050600081620001166012600a620005ab565b62000126906305f5e100620005bc565b620001329190620005f9565b3360008181526002602052604080822084905551929350909160008051602062002f82833981519152906200016a9085815260200190565b60405180910390a33060008181526002602090815260408083208690555185815260008051602062002f82833981519152910160405180910390a3600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200020a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023091906200060f565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b991906200060f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d91906200060f565b600c80546001600160a01b03929092166801000000000000000002600160401b600160e01b031990921691909117905560075460ff630100000090910416620003796012600a620005ab565b62000389906305f5e100620005bc565b620003959190620005d6565b600955600754640100000000900461ffff16620003b56012600a620005ab565b620003c5906305f5e100620005bc565b620003d19190620005d6565b600a908155600754610100900461ffff1690620003f190601290620005ab565b62000401906305f5e100620005bc565b6200040d9190620005d6565b600b556200041d60043362000426565b50505062000641565b60006200043d836001600160a01b03841662000446565b90505b92915050565b60008181526001830160205260408120546200048f5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000440565b50600062000440565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004ef578160001904821115620004d357620004d362000498565b80851615620004e157918102915b93841c9390800290620004b3565b509250929050565b600082620005085750600162000440565b81620005175750600062000440565b81600181146200053057600281146200053b576200055b565b600191505062000440565b60ff8411156200054f576200054f62000498565b50506001821b62000440565b5060208310610133831016604e8410600b841016171562000580575081810a62000440565b6200058c8383620004ae565b8060001904821115620005a357620005a362000498565b029392505050565b60006200043d60ff841683620004f7565b808202811582820484141762000440576200044062000498565b600082620005f457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111562000440576200044062000498565b6000602082840312156200062257600080fd5b81516001600160a01b03811681146200063a57600080fd5b9392505050565b61293180620006516000396000f3fe6080604052600436106103555760003560e01c80636ebcf607116101b9578063a9059cbb116100f6578063d28d88521161009a578063de6593681161006c578063de65936814610b0f578063decf23e314610b2f578063e6aaaeea14610b52578063fe48183c14610b7257005b8063d28d885214610a3e578063d698620f14610a75578063dbac53a314610a96578063dd62ed3e14610ac957005b8063c7639d80116100d3578063c7639d80146109b9578063c7aba282146109e1578063c7d6917114610a09578063ca9ec19914610a1f57005b8063a9059cbb14610930578063b09f126614610950578063b91816111461098057005b8063954ea6651161015d5780639f0d93291161013a5780639f0d9329146108ce578063a253c06e146108e4578063a3371aa3146108fa578063a457c2d71461091057005b8063954ea6651461086157806395d89b411461088157806397832bc7146108ae57005b80638352c7c2116101965780638352c7c2146107ed57806386d0ada814610802578063893d20e81461082357806394ceecef1461084157005b80636ebcf6071461077457806370a08231146107a157806382c4767b146107d757005b80632bfe8742116102925780633eca0abe1161023657806349a760421161020857806349a76042146106fd5780634ada218b1461071d57806358e553651461073e5780635d159b7b1461075457005b80633eca0abe1461068e578063409d96ae146106ae57806342a11095146106ce57806346829831146106e857005b806331f1b2db1161026f57806331f1b2db1461061857806332424aa314610638578063382e329a1461064d578063395093511461066e57005b80632bfe8742146105c25780632d882863146105e2578063313ce5671461060457005b8063224f7e5a116102f957806325ce9b7c116102d657806325ce9b7c146104f25780632973ef2d146105135780632a211ae81461056e5780632a24e0641461058357005b8063224f7e5a1461049257806323b872dd146104b2578063253c8bd4146104d257005b8063095ea7b311610332578063095ea7b31461040657806317391e491461043657806318160ddd146104685780631eb25d131461047d57005b8063024c2ddd1461035e57806302a89e02146103a957806306fdde03146103c957005b3661035c57005b005b34801561036a57600080fd5b506103966103793660046123cf565b600360209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156103b557600080fd5b5061035c6103c4366004612416565b610b92565b3480156103d557600080fd5b5060408051808201909152600b81526a111bdbdb595c8811da5c9b60aa1b60208201525b6040516103a09190612433565b34801561041257600080fd5b50610426610421366004612481565b610c01565b60405190151581526020016103a0565b34801561044257600080fd5b50600c546104569062010000900460ff1681565b60405160ff90911681526020016103a0565b34801561047457600080fd5b50600854610396565b34801561048957600080fd5b50610396610c18565b34801561049e57600080fd5b5061035c6104ad3660046124ad565b610c35565b3480156104be57600080fd5b506104266104cd3660046124ca565b610c88565b3480156104de57600080fd5b5061035c6104ed3660046124ad565b610d1f565b3480156104fe57600080fd5b50600c5461042690600160301b900460ff1681565b34801561051f57600080fd5b50600c546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a0016103a0565b34801561057a57600080fd5b5061035c610d85565b34801561058f57600080fd5b50600c546105aa90600160401b90046001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156105ce57600080fd5b5061035c6105dd36600461250b565b610e21565b3480156105ee57600080fd5b50600c5461045690640100000000900460ff1681565b34801561061057600080fd5b506012610456565b34801561062457600080fd5b5061035c610633366004612539565b610e90565b34801561064457600080fd5b50610456601281565b34801561065957600080fd5b50600c54610456906301000000900460ff1681565b34801561067a57600080fd5b50610426610689366004612481565b610eea565b34801561069a57600080fd5b5061035c6106a9366004612568565b610f21565b3480156106ba57600080fd5b5061035c6106c93660046124ad565b611048565b3480156106da57600080fd5b50600c546104569060ff1681565b3480156106f457600080fd5b5061035c6111c2565b34801561070957600080fd5b5061035c6107183660046124ad565b61129e565b34801561072957600080fd5b50600c5461042690600160381b900460ff1681565b34801561074a57600080fd5b50610396600e5481565b34801561076057600080fd5b5061035c61076f366004612416565b6112ed565b34801561078057600080fd5b5061039661078f3660046124ad565b60026020526000908152604090205481565b3480156107ad57600080fd5b506103966107bc3660046124ad565b6001600160a01b031660009081526002602052604090205490565b3480156107e357600080fd5b506105aa61dead81565b3480156107f957600080fd5b5061035c611344565b34801561080e57600080fd5b5060075461042690600160301b900460ff1681565b34801561082f57600080fd5b506001546001600160a01b03166105aa565b34801561084d57600080fd5b5061035c61085c366004612416565b611422565b34801561086d57600080fd5b50600d546105aa906001600160a01b031681565b34801561088d57600080fd5b5060408051808201909152600481526311d5549360e21b60208201526103f9565b3480156108ba57600080fd5b5061035c6108c9366004612416565b611488565b3480156108da57600080fd5b50610396600b5481565b3480156108f057600080fd5b5061039660085481565b34801561090657600080fd5b50610396600a5481565b34801561091c57600080fd5b5061042661092b366004612481565b6114ed565b34801561093c57600080fd5b5061042661094b366004612481565b611569565b34801561095c57600080fd5b506103f96040518060400160405280600481526020016311d5549360e21b81525081565b34801561098c57600080fd5b5061042661099b3660046124ad565b6001600160a01b031660009081526020819052604090205460ff1690565b3480156109c557600080fd5b506105aa737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109ed57600080fd5b50600954600a54604080519283526020830191909152016103a0565b348015610a1557600080fd5b5061039660095481565b348015610a2b57600080fd5b50600c5461045690610100900460ff1681565b348015610a4a57600080fd5b506103f96040518060400160405280600b81526020016a111bdbdb595c8811da5c9b60aa1b81525081565b348015610a8157600080fd5b50600754610456906301000000900460ff1681565b348015610aa257600080fd5b50600754610ab690610100900461ffff1681565b60405161ffff90911681526020016103a0565b348015610ad557600080fd5b50610396610ae43660046123cf565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b1b57600080fd5b5061035c610b2a366004612539565b611576565b348015610b3b57600080fd5b50600754610ab690640100000000900461ffff1681565b348015610b5e57600080fd5b5061035c610b6d3660046125cd565b6115bf565b348015610b7e57600080fd5b5061035c610b8d3660046124ad565b61163d565b3360009081526020819052604090205460ff1680610bba57506001546001600160a01b031633145b610bdf5760405162461bcd60e51b8152600401610bd6906125ef565b60405180910390fd5b600c8054911515650100000000000265ff000000000019909216919091179055565b6000610c0e3384846116b2565b5060015b92915050565b610c246012600a61270c565b610c32906305f5e10061271b565b81565b3360009081526020819052604090205460ff1680610c5d57506001546001600160a01b031633145b610c795760405162461bcd60e51b8152600401610bd6906125ef565b610c846004826117a6565b5050565b6000610c958484846117c2565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d005760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610bd6565b610d148533610d0f8685612732565b6116b2565b506001949350505050565b3360009081526020819052604090205460ff1680610d4757506001546001600160a01b031633145b610d635760405162461bcd60e51b8152600401610bd6906125ef565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff1680610dad57506001546001600160a01b031633145b610dc95760405162461bcd60e51b8152600401610bd6906125ef565b604051600090339047908381818185875af1925050503d8060008114610e0b576040519150601f19603f3d011682016040523d82523d6000602084013e610e10565b606091505b5050905080610e1e57600080fd5b50565b3360009081526020819052604090205460ff1680610e4957506001546001600160a01b031633145b610e655760405162461bcd60e51b8152600401610bd6906125ef565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff1680610eb857506001546001600160a01b031633145b610ed45760405162461bcd60e51b8152600401610bd6906125ef565b610e1e610ee582633b9aca0061271b565b611ada565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c0e918590610d0f908690612745565b3360009081526020819052604090205460ff1680610f4957506001546001600160a01b031633145b610f655760405162461bcd60e51b8152600401610bd6906125ef565b6000610f718587612758565b90508060ff16606414610fde5760405162461bcd60e51b815260206004820152602f60248201527f6d61726b6574696e67202b204c6971756964697479207461786573206e65656460448201526e7320746f20657175616c203130302560881b6064820152608401610bd6565b50600c805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061107057506001546001600160a01b031633145b61108c5760405162461bcd60e51b8152600401610bd6906125ef565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190612771565b90506000811161114b5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610bd6565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc919061278a565b50505050565b3360009081526020819052604090205460ff16806111ea57506001546001600160a01b031633145b6112065760405162461bcd60e51b8152600401610bd6906125ef565b60405147903390600090829084908381818185875af1925050503d806000811461124c576040519150601f19603f3d011682016040523d82523d6000602084013e611251565b606091505b50509050806112945760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610bd6565b50506000600e5550565b3360009081526020819052604090205460ff16806112c657506001546001600160a01b031633145b6112e25760405162461bcd60e51b8152600401610bd6906125ef565b610c84600482611c42565b3360009081526020819052604090205460ff168061131557506001546001600160a01b031633145b6113315760405162461bcd60e51b8152600401610bd6906125ef565b6007805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061136c57506001546001600160a01b031633145b6113885760405162461bcd60e51b8152600401610bd6906125ef565b600e805460009182905560405190913391829084908381818185875af1925050503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b505090508061141d5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610bd6565b505050565b3360009081526020819052604090205460ff168061144a57506001546001600160a01b031633145b6114665760405162461bcd60e51b8152600401610bd6906125ef565b600c8054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806114b057506001546001600160a01b031633145b6114cc5760405162461bcd60e51b8152600401610bd6906125ef565b60078054911515600160301b0266ff00000000000019909216919091179055565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156115505760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610bd6565b61155f3385610d0f8685612732565b5060019392505050565b6000610c0e3384846117c2565b3360009081526020819052604090205460ff168061159e57506001546001600160a01b031633145b6115ba5760405162461bcd60e51b8152600401610bd6906125ef565b600655565b3360009081526020819052604090205460ff16806115e757506001546001600160a01b031633145b6116035760405162461bcd60e51b8152600401610bd6906125ef565b61160f6012600a61270c565b611619908361271b565b91506116276012600a61270c565b611631908261271b565b60099290925550600a55565b3360009081526020819052604090205460ff168061166557506001546001600160a01b031633145b6116815760405162461bcd60e51b8152600401610bd6906125ef565b600c80546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6001600160a01b0383166116fc5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610bd6565b6001600160a01b0382166117445760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610bd6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006117bb836001600160a01b038416611c57565b9392505050565b6001600160a01b03831661180d5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610bd6565b600061181a600485611d44565b8061182b575061182b600484611d44565b8061184e57506001600160a01b03841660009081526020819052604090205460ff165b8061187157506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b03851630148061189457506001600160a01b03841630145b600c549091506000906001600160a01b03878116600160401b909204161480156118da57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b806119205750600c546001600160a01b03868116600160401b9092041614801561192057506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061192b5750805b806119335750825b1561194857611943868686611d66565b611ad2565b600c54600160381b900460ff16611a39576001546001600160a01b0387811691161480159061198557506001546001600160a01b03868116911614155b15611a3957600c54600160301b900460ff16156119e057846001600160a01b0316866001600160a01b03166000805160206128dc83398151915260006040516119d091815260200190565b60405180910390a3505050505050565b600c54600160381b900460ff16611a395760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610bd6565b600c546000906001600160a01b03888116600160401b909204161480611a7b57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b600c549091506000906001600160a01b03888116600160401b909204161480611ac057506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050611acf8888888585611e10565b50505b505050505050565b600f805460ff1916600117905530600090815260026020526040902054600654811015611b075750611c35565b600c54600654630100000090910460ff169083811115611b2f5760075460ff1615611b2f5750825b8161ffff16600003611b4357505050611c35565b600c5460009061ffff841690611b63906301000000900460ff168461271b565b611b6d91906127a7565b600c5490915060009061ffff851690611b9190640100000000900460ff168561271b565b611b9b91906127a7565b90506000611baa6002846127a7565b90506000611bb88285612732565b90506000611bc68483612745565b905047611bd282612091565b6000611bde8247612732565b9050600083611bed868461271b565b611bf791906127a7565b9050611c0386826121e2565b6000611c0f8447612732565b905080600e6000828254611c239190612745565b90915550505050505050505050505050505b50600f805460ff19169055565b60006117bb836001600160a01b038416612293565b60008181526001830160205260408120548015611d3a576000611c7b600183612732565b8554909150600090611c8f90600190612732565b90506000866000018281548110611ca857611ca86127c9565b9060005260206000200154905080876000018481548110611ccb57611ccb6127c9565b600091825260208083209091019290925582815260018901909152604090208490558654879080611cfe57611cfe6127df565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610c12565b6000915050610c12565b6001600160a01b038116600090815260018301602052604081205415156117bb565b6001600160a01b038316600090815260026020526040902054811115611dc95760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bd6565b611dd383826122e2565b611ddd8282612327565b816001600160a01b0316836001600160a01b03166000805160206128dc8339815191528360405161179991815260200190565b6001600160a01b03808516600090815260026020526040808220549288168252902054841115611e7d5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bd6565b60008215611eda57600a54851115611ec95760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610bd6565b50600c54610100900460ff16611f72565b8315611f3957600954611eed8684612745565b1115611f0b5760405162461bcd60e51b8152600401610bd6906127f5565b600b54851115611f2d5760405162461bcd60e51b8152600401610bd6906127f5565b50600c5460ff16611f72565b600954611f468684612745565b1115611f645760405162461bcd60e51b8152600401610bd6906127f5565b50600c5462010000900460ff165b600c546001600160a01b03888116600160401b9092041614801590611fa15750600754600160301b900460ff16155b8015611fb05750600f5460ff16155b15611fbe57611fbe85611ada565b600c54600090611fef9087908490611fea9060ff64010000000082048116916301000000900416612758565b61234b565b90506000611ffd8288612732565b905061200989886122e2565b6120133083612327565b60405182815230906001600160a01b038b16906000805160206128dc8339815191529060200160405180910390a361204b8882612327565b876001600160a01b0316896001600160a01b03166000805160206128dc8339815191528360405161207e91815260200190565b60405180910390a3505050505050505050565b600d546120a99030906001600160a01b0316836116b2565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120de576120de6127c9565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b919061281f565b8160018151811061216e5761216e6127c9565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac947906121b490859060009086903090429060040161283c565b600060405180830381600087803b1580156121ce57600080fd5b505af1158015611ad2573d6000803e3d6000fd5b600d546121fa9030906001600160a01b0316846116b2565b600d5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612267573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061228c91906128ad565b5050505050565b60008181526001830160205260408120546122da57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c12565b506000610c12565b6001600160a01b038216600090815260026020526040812054612306908390612732565b6001600160a01b039093166000908152600260205260409020929092555050565b6001600160a01b038216600090815260026020526040812054612306908390612745565b60008160ff166064146123995760405162461bcd60e51b815260206004820152601660248201527505461782070657263656e74206973206e6f74203130360541b6044820152606401610bd6565b60646123a860ff85168661271b565b6123b291906127a7565b949350505050565b6001600160a01b0381168114610e1e57600080fd5b600080604083850312156123e257600080fd5b82356123ed816123ba565b915060208301356123fd816123ba565b809150509250929050565b8015158114610e1e57600080fd5b60006020828403121561242857600080fd5b81356117bb81612408565b600060208083528351808285015260005b8181101561246057858101830151858201604001528201612444565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561249457600080fd5b823561249f816123ba565b946020939093013593505050565b6000602082840312156124bf57600080fd5b81356117bb816123ba565b6000806000606084860312156124df57600080fd5b83356124ea816123ba565b925060208401356124fa816123ba565b929592945050506040919091013590565b6000806040838503121561251e57600080fd5b8235612529816123ba565b915060208301356123fd81612408565b60006020828403121561254b57600080fd5b5035919050565b803560ff8116811461256357600080fd5b919050565b600080600080600060a0868803121561258057600080fd5b61258986612552565b945061259760208701612552565b93506125a560408701612552565b92506125b360608701612552565b91506125c160808701612552565b90509295509295909350565b600080604083850312156125e057600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561266357816000190482111561264957612649612612565b8085161561265657918102915b93841c939080029061262d565b509250929050565b60008261267a57506001610c12565b8161268757506000610c12565b816001811461269d57600281146126a7576126c3565b6001915050610c12565b60ff8411156126b8576126b8612612565b50506001821b610c12565b5060208310610133831016604e8410600b84101617156126e6575081810a610c12565b6126f08383612628565b806000190482111561270457612704612612565b029392505050565b60006117bb60ff84168361266b565b8082028115828204841417610c1257610c12612612565b81810381811115610c1257610c12612612565b80820180821115610c1257610c12612612565b60ff8181168382160190811115610c1257610c12612612565b60006020828403121561278357600080fd5b5051919050565b60006020828403121561279c57600080fd5b81516117bb81612408565b6000826127c457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561283157600080fd5b81516117bb816123ba565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561288c5784516001600160a01b031683529383019391830191600101612867565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128c257600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206b356252fd4119a3fa92e1492821a66757209b72d9c21099420a55b3269c2fe864736f6c63430008130033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x6080604052600436106103555760003560e01c80636ebcf607116101b9578063a9059cbb116100f6578063d28d88521161009a578063de6593681161006c578063de65936814610b0f578063decf23e314610b2f578063e6aaaeea14610b52578063fe48183c14610b7257005b8063d28d885214610a3e578063d698620f14610a75578063dbac53a314610a96578063dd62ed3e14610ac957005b8063c7639d80116100d3578063c7639d80146109b9578063c7aba282146109e1578063c7d6917114610a09578063ca9ec19914610a1f57005b8063a9059cbb14610930578063b09f126614610950578063b91816111461098057005b8063954ea6651161015d5780639f0d93291161013a5780639f0d9329146108ce578063a253c06e146108e4578063a3371aa3146108fa578063a457c2d71461091057005b8063954ea6651461086157806395d89b411461088157806397832bc7146108ae57005b80638352c7c2116101965780638352c7c2146107ed57806386d0ada814610802578063893d20e81461082357806394ceecef1461084157005b80636ebcf6071461077457806370a08231146107a157806382c4767b146107d757005b80632bfe8742116102925780633eca0abe1161023657806349a760421161020857806349a76042146106fd5780634ada218b1461071d57806358e553651461073e5780635d159b7b1461075457005b80633eca0abe1461068e578063409d96ae146106ae57806342a11095146106ce57806346829831146106e857005b806331f1b2db1161026f57806331f1b2db1461061857806332424aa314610638578063382e329a1461064d578063395093511461066e57005b80632bfe8742146105c25780632d882863146105e2578063313ce5671461060457005b8063224f7e5a116102f957806325ce9b7c116102d657806325ce9b7c146104f25780632973ef2d146105135780632a211ae81461056e5780632a24e0641461058357005b8063224f7e5a1461049257806323b872dd146104b2578063253c8bd4146104d257005b8063095ea7b311610332578063095ea7b31461040657806317391e491461043657806318160ddd146104685780631eb25d131461047d57005b8063024c2ddd1461035e57806302a89e02146103a957806306fdde03146103c957005b3661035c57005b005b34801561036a57600080fd5b506103966103793660046123cf565b600360209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156103b557600080fd5b5061035c6103c4366004612416565b610b92565b3480156103d557600080fd5b5060408051808201909152600b81526a111bdbdb595c8811da5c9b60aa1b60208201525b6040516103a09190612433565b34801561041257600080fd5b50610426610421366004612481565b610c01565b60405190151581526020016103a0565b34801561044257600080fd5b50600c546104569062010000900460ff1681565b60405160ff90911681526020016103a0565b34801561047457600080fd5b50600854610396565b34801561048957600080fd5b50610396610c18565b34801561049e57600080fd5b5061035c6104ad3660046124ad565b610c35565b3480156104be57600080fd5b506104266104cd3660046124ca565b610c88565b3480156104de57600080fd5b5061035c6104ed3660046124ad565b610d1f565b3480156104fe57600080fd5b50600c5461042690600160301b900460ff1681565b34801561051f57600080fd5b50600c546040805160ff6401000000008404811682526301000000840481166020830152808416928201929092526101008304821660608201526201000090920416608082015260a0016103a0565b34801561057a57600080fd5b5061035c610d85565b34801561058f57600080fd5b50600c546105aa90600160401b90046001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156105ce57600080fd5b5061035c6105dd36600461250b565b610e21565b3480156105ee57600080fd5b50600c5461045690640100000000900460ff1681565b34801561061057600080fd5b506012610456565b34801561062457600080fd5b5061035c610633366004612539565b610e90565b34801561064457600080fd5b50610456601281565b34801561065957600080fd5b50600c54610456906301000000900460ff1681565b34801561067a57600080fd5b50610426610689366004612481565b610eea565b34801561069a57600080fd5b5061035c6106a9366004612568565b610f21565b3480156106ba57600080fd5b5061035c6106c93660046124ad565b611048565b3480156106da57600080fd5b50600c546104569060ff1681565b3480156106f457600080fd5b5061035c6111c2565b34801561070957600080fd5b5061035c6107183660046124ad565b61129e565b34801561072957600080fd5b50600c5461042690600160381b900460ff1681565b34801561074a57600080fd5b50610396600e5481565b34801561076057600080fd5b5061035c61076f366004612416565b6112ed565b34801561078057600080fd5b5061039661078f3660046124ad565b60026020526000908152604090205481565b3480156107ad57600080fd5b506103966107bc3660046124ad565b6001600160a01b031660009081526002602052604090205490565b3480156107e357600080fd5b506105aa61dead81565b3480156107f957600080fd5b5061035c611344565b34801561080e57600080fd5b5060075461042690600160301b900460ff1681565b34801561082f57600080fd5b506001546001600160a01b03166105aa565b34801561084d57600080fd5b5061035c61085c366004612416565b611422565b34801561086d57600080fd5b50600d546105aa906001600160a01b031681565b34801561088d57600080fd5b5060408051808201909152600481526311d5549360e21b60208201526103f9565b3480156108ba57600080fd5b5061035c6108c9366004612416565b611488565b3480156108da57600080fd5b50610396600b5481565b3480156108f057600080fd5b5061039660085481565b34801561090657600080fd5b50610396600a5481565b34801561091c57600080fd5b5061042661092b366004612481565b6114ed565b34801561093c57600080fd5b5061042661094b366004612481565b611569565b34801561095c57600080fd5b506103f96040518060400160405280600481526020016311d5549360e21b81525081565b34801561098c57600080fd5b5061042661099b3660046124ad565b6001600160a01b031660009081526020819052604090205460ff1690565b3480156109c557600080fd5b506105aa737a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156109ed57600080fd5b50600954600a54604080519283526020830191909152016103a0565b348015610a1557600080fd5b5061039660095481565b348015610a2b57600080fd5b50600c5461045690610100900460ff1681565b348015610a4a57600080fd5b506103f96040518060400160405280600b81526020016a111bdbdb595c8811da5c9b60aa1b81525081565b348015610a8157600080fd5b50600754610456906301000000900460ff1681565b348015610aa257600080fd5b50600754610ab690610100900461ffff1681565b60405161ffff90911681526020016103a0565b348015610ad557600080fd5b50610396610ae43660046123cf565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b1b57600080fd5b5061035c610b2a366004612539565b611576565b348015610b3b57600080fd5b50600754610ab690640100000000900461ffff1681565b348015610b5e57600080fd5b5061035c610b6d3660046125cd565b6115bf565b348015610b7e57600080fd5b5061035c610b8d3660046124ad565b61163d565b3360009081526020819052604090205460ff1680610bba57506001546001600160a01b031633145b610bdf5760405162461bcd60e51b8152600401610bd6906125ef565b60405180910390fd5b600c8054911515650100000000000265ff000000000019909216919091179055565b6000610c0e3384846116b2565b5060015b92915050565b610c246012600a61270c565b610c32906305f5e10061271b565b81565b3360009081526020819052604090205460ff1680610c5d57506001546001600160a01b031633145b610c795760405162461bcd60e51b8152600401610bd6906125ef565b610c846004826117a6565b5050565b6000610c958484846117c2565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610d005760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610bd6565b610d148533610d0f8685612732565b6116b2565b506001949350505050565b3360009081526020819052604090205460ff1680610d4757506001546001600160a01b031633145b610d635760405162461bcd60e51b8152600401610bd6906125ef565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526020819052604090205460ff1680610dad57506001546001600160a01b031633145b610dc95760405162461bcd60e51b8152600401610bd6906125ef565b604051600090339047908381818185875af1925050503d8060008114610e0b576040519150601f19603f3d011682016040523d82523d6000602084013e610e10565b606091505b5050905080610e1e57600080fd5b50565b3360009081526020819052604090205460ff1680610e4957506001546001600160a01b031633145b610e655760405162461bcd60e51b8152600401610bd6906125ef565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b3360009081526020819052604090205460ff1680610eb857506001546001600160a01b031633145b610ed45760405162461bcd60e51b8152600401610bd6906125ef565b610e1e610ee582633b9aca0061271b565b611ada565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610c0e918590610d0f908690612745565b3360009081526020819052604090205460ff1680610f4957506001546001600160a01b031633145b610f655760405162461bcd60e51b8152600401610bd6906125ef565b6000610f718587612758565b90508060ff16606414610fde5760405162461bcd60e51b815260206004820152602f60248201527f6d61726b6574696e67202b204c6971756964697479207461786573206e65656460448201526e7320746f20657175616c203130302560881b6064820152608401610bd6565b50600c805460ff928316620100000262ff0000199484166101000261ffff1997851663010000000263ff00000019998616640100000000029990991664ffff0000001990931692909217979097179590951693909116929092179290921791909116919091179055565b3360009081526020819052604090205460ff168061107057506001546001600160a01b031633145b61108c5760405162461bcd60e51b8152600401610bd6906125ef565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156110d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f99190612771565b90506000811161114b5760405162461bcd60e51b815260206004820152601860248201527f4e6f20746f6b656e7320696e206f75722062616c616e636500000000000000006044820152606401610bd6565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015611198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bc919061278a565b50505050565b3360009081526020819052604090205460ff16806111ea57506001546001600160a01b031633145b6112065760405162461bcd60e51b8152600401610bd6906125ef565b60405147903390600090829084908381818185875af1925050503d806000811461124c576040519150601f19603f3d011682016040523d82523d6000602084013e611251565b606091505b50509050806112945760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610bd6565b50506000600e5550565b3360009081526020819052604090205460ff16806112c657506001546001600160a01b031633145b6112e25760405162461bcd60e51b8152600401610bd6906125ef565b610c84600482611c42565b3360009081526020819052604090205460ff168061131557506001546001600160a01b031633145b6113315760405162461bcd60e51b8152600401610bd6906125ef565b6007805460ff1916911515919091179055565b3360009081526020819052604090205460ff168061136c57506001546001600160a01b031633145b6113885760405162461bcd60e51b8152600401610bd6906125ef565b600e805460009182905560405190913391829084908381818185875af1925050503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b505090508061141d5760405162461bcd60e51b815260206004820152600f60248201526e1dda5d1a191c985dc819985a5b1959608a1b6044820152606401610bd6565b505050565b3360009081526020819052604090205460ff168061144a57506001546001600160a01b031633145b6114665760405162461bcd60e51b8152600401610bd6906125ef565b600c8054911515600160381b0267ff0000000000000019909216919091179055565b3360009081526020819052604090205460ff16806114b057506001546001600160a01b031633145b6114cc5760405162461bcd60e51b8152600401610bd6906125ef565b60078054911515600160301b0266ff00000000000019909216919091179055565b3360009081526003602090815260408083206001600160a01b0386168452909152812054828110156115505760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610bd6565b61155f3385610d0f8685612732565b5060019392505050565b6000610c0e3384846117c2565b3360009081526020819052604090205460ff168061159e57506001546001600160a01b031633145b6115ba5760405162461bcd60e51b8152600401610bd6906125ef565b600655565b3360009081526020819052604090205460ff16806115e757506001546001600160a01b031633145b6116035760405162461bcd60e51b8152600401610bd6906125ef565b61160f6012600a61270c565b611619908361271b565b91506116276012600a61270c565b611631908261271b565b60099290925550600a55565b3360009081526020819052604090205460ff168061166557506001546001600160a01b031633145b6116815760405162461bcd60e51b8152600401610bd6906125ef565b600c80546001600160a01b03909216600160401b0268010000000000000000600160e01b0319909216919091179055565b6001600160a01b0383166116fc5760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610bd6565b6001600160a01b0382166117445760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610bd6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006117bb836001600160a01b038416611c57565b9392505050565b6001600160a01b03831661180d5760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610bd6565b600061181a600485611d44565b8061182b575061182b600484611d44565b8061184e57506001600160a01b03841660009081526020819052604090205460ff165b8061187157506001600160a01b03831660009081526020819052604090205460ff165b905060006001600160a01b03851630148061189457506001600160a01b03841630145b600c549091506000906001600160a01b03878116600160401b909204161480156118da57506001600160a01b038516737a250d5630b4cf539739df2c5dacb4c659f2488d145b806119205750600c546001600160a01b03868116600160401b9092041614801561192057506001600160a01b038616737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050818061192b5750805b806119335750825b1561194857611943868686611d66565b611ad2565b600c54600160381b900460ff16611a39576001546001600160a01b0387811691161480159061198557506001546001600160a01b03868116911614155b15611a3957600c54600160301b900460ff16156119e057846001600160a01b0316866001600160a01b03166000805160206128dc83398151915260006040516119d091815260200190565b60405180910390a3505050505050565b600c54600160381b900460ff16611a395760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610bd6565b600c546000906001600160a01b03888116600160401b909204161480611a7b57506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b600c549091506000906001600160a01b03888116600160401b909204161480611ac057506001600160a01b038716737a250d5630b4cf539739df2c5dacb4c659f2488d145b9050611acf8888888585611e10565b50505b505050505050565b600f805460ff1916600117905530600090815260026020526040902054600654811015611b075750611c35565b600c54600654630100000090910460ff169083811115611b2f5760075460ff1615611b2f5750825b8161ffff16600003611b4357505050611c35565b600c5460009061ffff841690611b63906301000000900460ff168461271b565b611b6d91906127a7565b600c5490915060009061ffff851690611b9190640100000000900460ff168561271b565b611b9b91906127a7565b90506000611baa6002846127a7565b90506000611bb88285612732565b90506000611bc68483612745565b905047611bd282612091565b6000611bde8247612732565b9050600083611bed868461271b565b611bf791906127a7565b9050611c0386826121e2565b6000611c0f8447612732565b905080600e6000828254611c239190612745565b90915550505050505050505050505050505b50600f805460ff19169055565b60006117bb836001600160a01b038416612293565b60008181526001830160205260408120548015611d3a576000611c7b600183612732565b8554909150600090611c8f90600190612732565b90506000866000018281548110611ca857611ca86127c9565b9060005260206000200154905080876000018481548110611ccb57611ccb6127c9565b600091825260208083209091019290925582815260018901909152604090208490558654879080611cfe57611cfe6127df565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610c12565b6000915050610c12565b6001600160a01b038116600090815260018301602052604081205415156117bb565b6001600160a01b038316600090815260026020526040902054811115611dc95760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bd6565b611dd383826122e2565b611ddd8282612327565b816001600160a01b0316836001600160a01b03166000805160206128dc8339815191528360405161179991815260200190565b6001600160a01b03808516600090815260026020526040808220549288168252902054841115611e7d5760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610bd6565b60008215611eda57600a54851115611ec95760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610bd6565b50600c54610100900460ff16611f72565b8315611f3957600954611eed8684612745565b1115611f0b5760405162461bcd60e51b8152600401610bd6906127f5565b600b54851115611f2d5760405162461bcd60e51b8152600401610bd6906127f5565b50600c5460ff16611f72565b600954611f468684612745565b1115611f645760405162461bcd60e51b8152600401610bd6906127f5565b50600c5462010000900460ff165b600c546001600160a01b03888116600160401b9092041614801590611fa15750600754600160301b900460ff16155b8015611fb05750600f5460ff16155b15611fbe57611fbe85611ada565b600c54600090611fef9087908490611fea9060ff64010000000082048116916301000000900416612758565b61234b565b90506000611ffd8288612732565b905061200989886122e2565b6120133083612327565b60405182815230906001600160a01b038b16906000805160206128dc8339815191529060200160405180910390a361204b8882612327565b876001600160a01b0316896001600160a01b03166000805160206128dc8339815191528360405161207e91815260200190565b60405180910390a3505050505050505050565b600d546120a99030906001600160a01b0316836116b2565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120de576120de6127c9565b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215b919061281f565b8160018151811061216e5761216e6127c9565b6001600160a01b039283166020918202929092010152600d5460405163791ac94760e01b815291169063791ac947906121b490859060009086903090429060040161283c565b600060405180830381600087803b1580156121ce57600080fd5b505af1158015611ad2573d6000803e3d6000fd5b600d546121fa9030906001600160a01b0316846116b2565b600d5460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612267573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061228c91906128ad565b5050505050565b60008181526001830160205260408120546122da57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c12565b506000610c12565b6001600160a01b038216600090815260026020526040812054612306908390612732565b6001600160a01b039093166000908152600260205260409020929092555050565b6001600160a01b038216600090815260026020526040812054612306908390612745565b60008160ff166064146123995760405162461bcd60e51b815260206004820152601660248201527505461782070657263656e74206973206e6f74203130360541b6044820152606401610bd6565b60646123a860ff85168661271b565b6123b291906127a7565b949350505050565b6001600160a01b0381168114610e1e57600080fd5b600080604083850312156123e257600080fd5b82356123ed816123ba565b915060208301356123fd816123ba565b809150509250929050565b8015158114610e1e57600080fd5b60006020828403121561242857600080fd5b81356117bb81612408565b600060208083528351808285015260005b8181101561246057858101830151858201604001528201612444565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561249457600080fd5b823561249f816123ba565b946020939093013593505050565b6000602082840312156124bf57600080fd5b81356117bb816123ba565b6000806000606084860312156124df57600080fd5b83356124ea816123ba565b925060208401356124fa816123ba565b929592945050506040919091013590565b6000806040838503121561251e57600080fd5b8235612529816123ba565b915060208301356123fd81612408565b60006020828403121561254b57600080fd5b5035919050565b803560ff8116811461256357600080fd5b919050565b600080600080600060a0868803121561258057600080fd5b61258986612552565b945061259760208701612552565b93506125a560408701612552565b92506125b360608701612552565b91506125c160808701612552565b90509295509295909350565b600080604083850312156125e057600080fd5b50508035926020909101359150565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561266357816000190482111561264957612649612612565b8085161561265657918102915b93841c939080029061262d565b509250929050565b60008261267a57506001610c12565b8161268757506000610c12565b816001811461269d57600281146126a7576126c3565b6001915050610c12565b60ff8411156126b8576126b8612612565b50506001821b610c12565b5060208310610133831016604e8410600b84101617156126e6575081810a610c12565b6126f08383612628565b806000190482111561270457612704612612565b029392505050565b60006117bb60ff84168361266b565b8082028115828204841417610c1257610c12612612565b81810381811115610c1257610c12612612565b80820180821115610c1257610c12612612565b60ff8181168382160190811115610c1257610c12612612565b60006020828403121561278357600080fd5b5051919050565b60006020828403121561279c57600080fd5b81516117bb81612408565b6000826127c457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60208082526010908201526f3bb430b63290383937ba32b1ba34b7b760811b604082015260600190565b60006020828403121561283157600080fd5b81516117bb816123ba565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561288c5784516001600160a01b031683529383019391830191600101612867565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156128c257600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212206b356252fd4119a3fa92e1492821a66757209b72d9c21099420a55b3269c2fe864736f6c63430008130033

Deployed Bytecode Sourcemap

14053:16641:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14453:66;;;;;;;;;;-1:-1:-1;14453:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;689:25:1;;;677:2;662:18;14453:66:0;;;;;;;;27667:110;;;;;;;;;;-1:-1:-1;27667:110:0;;;;;:::i;:::-;;:::i;28043:94::-;;;;;;;;;;-1:-1:-1;28124:5:0;;;;;;;;;;;;-1:-1:-1;;;28124:5:0;;;;28043:94;;;;;;;:::i;29040:193::-;;;;;;;;;;-1:-1:-1;29040:193:0;;;;;:::i;:::-;;:::i;:::-;;;2132:14:1;;2125:22;2107:41;;2095:2;2080:18;29040:193:0;1967:187:1;15336:29:0;;;;;;;;;;-1:-1:-1;15336:29:0;;;;;;;;;;;;;;2331:4:1;2319:17;;;2301:36;;2289:2;2274:18;15336:29:0;2159:184:1;28353:108:0;;;;;;;;;;-1:-1:-1;28435:18:0;;28353:108;;14326:67;;;;;;;;;;;;;:::i;25262:107::-;;;;;;;;;;-1:-1:-1;25262:107:0;;;;;:::i;:::-;;:::i;29586:444::-;;;;;;;;;;-1:-1:-1;29586:444:0;;;;;:::i;:::-;;:::i;13888:83::-;;;;;;;;;;-1:-1:-1;13888:83:0;;;;;:::i;:::-;;:::i;15496:22::-;;;;;;;;;;-1:-1:-1;15496:22:0;;;;-1:-1:-1;;;15496:22:0;;;;;;24379:416;;;;;;;;;;-1:-1:-1;24663:13:0;;24379:416;;;24663:13;;;;;;3320:25:1;;24691:13:0;;;;;3376:2:1;3361:18;;3354:34;24719:7:0;;;3404:18:1;;;3397:34;;;;24663:13:0;24741:8;;;;3462:2:1;3447:18;;3440:34;24764:12:0;;;;;3505:3:1;3490:19;;3483:35;3307:3;3292:19;24379:416:0;3061:463:1;27785:150:0;;;;;;;;;;;;;:::i;15560:34::-;;;;;;;;;;-1:-1:-1;15560:34:0;;;;-1:-1:-1;;;15560:34:0;;-1:-1:-1;;;;;15560:34:0;;;;;;-1:-1:-1;;;;;3693:32:1;;;3675:51;;3663:2;3648:18;15560:34:0;3529:203:1;13367:121:0;;;;;;;;;;-1:-1:-1;13367:121:0;;;;;:::i;:::-;;:::i;15427:31::-;;;;;;;;;;-1:-1:-1;15427:31:0;;;;;;;;;;;28251:94;;;;;;;;;;-1:-1:-1;14317:2:0;28251:94;;26613:144;;;;;;;;;;-1:-1:-1;26613:144:0;;;;;:::i;:::-;;:::i;14283:36::-;;;;;;;;;;;;14317:2;14283:36;;15389:31;;;;;;;;;;-1:-1:-1;15389:31:0;;;;;;;;;;;30038:278;;;;;;;;;;-1:-1:-1;30038:278:0;;;;;:::i;:::-;;:::i;26071:534::-;;;;;;;;;;-1:-1:-1;26071:534:0;;;;;:::i;:::-;;:::i;27376:283::-;;;;;;;;;;-1:-1:-1;27376:283:0;;;;;:::i;:::-;;:::i;15271:25::-;;;;;;;;;;-1:-1:-1;15271:25:0;;;;;;;;25666:279;;;;;;;;;;;;;:::i;25148:106::-;;;;;;;;;;-1:-1:-1;25148:106:0;;;;;:::i;:::-;;:::i;15525:26::-;;;;;;;;;;-1:-1:-1;15525:26:0;;;;-1:-1:-1;;;15525:26:0;;;;;;15650:31;;;;;;;;;;;;;;;;24892:96;;;;;;;;;;-1:-1:-1;24892:96:0;;;;;:::i;:::-;;:::i;14402:44::-;;;;;;;;;;-1:-1:-1;14402:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;28469:162;;;;;;;;;;-1:-1:-1;28469:162:0;;;;;:::i;:::-;-1:-1:-1;;;;;28605:18:0;28573:7;28605:18;;;:9;:18;;;;;;;28469:162;14967:73;;;;;;;;;;;;14998:42;14967:73;;25377:281;;;;;;;;;;;;;:::i;14832:28::-;;;;;;;;;;-1:-1:-1;14832:28:0;;;;-1:-1:-1;;;14832:28:0;;;;;;27943:92;;;;;;;;;;-1:-1:-1;28022:5:0;;-1:-1:-1;;;;;28022:5:0;27943:92;;27101:96;;;;;;;;;;-1:-1:-1;27101:96:0;;;;;:::i;:::-;;:::i;15603:38::-;;;;;;;;;;-1:-1:-1;15603:38:0;;;;-1:-1:-1;;;;;15603:38:0;;;28145:98;;;;;;;;;;-1:-1:-1;28228:7:0;;;;;;;;;;;;-1:-1:-1;;;28228:7:0;;;;28145:98;;25953:108;;;;;;;;;;-1:-1:-1;25953:108:0;;;;;:::i;:::-;;:::i;15216:46::-;;;;;;;;;;;;;;;;15049:49;;;;;;;;;;;;;;;;15162:47;;;;;;;;;;;;;;;;30324:365;;;;;;;;;;-1:-1:-1;30324:365:0;;;;;:::i;:::-;;:::i;28639:197::-;;;;;;;;;;-1:-1:-1;28639:197:0;;;;;:::i;:::-;;:::i;14237:39::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14237:39:0;;;;;13248:111;;;;;;;;;;-1:-1:-1;13248:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;13330:21:0;13306:4;13330:21;;;;;;;;;;;;;;13248:111;14869:91;;;;;;;;;;;;14918:42;14869:91;;24209:162;;;;;;;;;;-1:-1:-1;24335:14:0;;24351:11;;24209:162;;;5345:25:1;;;5401:2;5386:18;;5379:34;;;;5318:18;24209:162:0;5171:248:1;15105:50:0;;;;;;;;;;;;;;;;15303:26;;;;;;;;;;-1:-1:-1;15303:26:0;;;;;;;;;;;14186:44;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14186:44:0;;;;;14718:43;;;;;;;;;;-1:-1:-1;14718:43:0;;;;;;;;;;;14663:40;;;;;;;;;;-1:-1:-1;14663:40:0;;;;;;;;;;;;;;5598:6:1;5586:19;;;5568:38;;5556:2;5541:18;14663:40:0;5424:188:1;28844::0;;;;;;;;;;-1:-1:-1;28844:188:0;;;;;:::i;:::-;-1:-1:-1;;;;;28996:19:0;;;28964:7;28996:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;28844:188;25049:91;;;;;;;;;;-1:-1:-1;25049:91:0;;;;;:::i;:::-;;:::i;14776:41::-;;;;;;;;;;-1:-1:-1;14776:41:0;;;;;;;;;;;26765:328;;;;;;;;;;-1:-1:-1;26765:328:0;;;;;:::i;:::-;;:::i;27205:163::-;;;;;;;;;;-1:-1:-1;27205:163:0;;;;;:::i;:::-;;:::i;27667:110::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;;;;;;;;;27743:17:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27743:26:0;;::::1;::::0;;;::::1;::::0;;27667:110::o;29040:193::-;29144:4;29166:37;29175:10;29187:7;29196:6;29166:8;:37::i;:::-;-1:-1:-1;29221:4:0;29040:193;;;;;:::o;14326:67::-;14380:13;14317:2;14380;:13;:::i;:::-;14366:27;;:11;:27;:::i;:::-;14326:67;:::o;25262:107::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;25336:25:::1;:9;25353:7:::0;25336:16:::1;:25::i;:::-;;25262:107:::0;:::o;29586:444::-;29724:4;29741:40;29751:11;29764:8;29774:6;29741:9;:40::i;:::-;-1:-1:-1;;;;;29821:24:0;;29794;29821;;;:11;:24;;;;;;;;29846:10;29821:36;;;;;;;;29876:26;;;;29868:59;;;;-1:-1:-1;;;29868:59:0;;8097:2:1;29868:59:0;;;8079:21:1;8136:2;8116:18;;;8109:30;-1:-1:-1;;;8155:18:1;;;8148:50;8215:18;;29868:59:0;7895:344:1;29868:59:0;29940:60;29949:11;29962:10;29974:25;29993:6;29974:16;:25;:::i;:::-;29940:8;:60::i;:::-;-1:-1:-1;30018:4:0;;29586:444;-1:-1:-1;;;;29586:444:0:o;13888:83::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;13951:5:::1;:12:::0;;-1:-1:-1;;;;;;13951:12:0::1;-1:-1:-1::0;;;;;13951:12:0;;;::::1;::::0;;;::::1;::::0;;13888:83::o;27785:150::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;27852:51:::1;::::0;27837:9:::1;::::0;27852:10:::1;::::0;27876:21:::1;::::0;27837:9;27852:51;27837:9;27852:51;27876:21;27852:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27836:67;;;27922:4;27914:13;;;::::0;::::1;;27825:110;27785:150::o:0;13367:121::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13449:21:0;;;::::1;:12;:21:::0;;;::::1;::::0;;;;;;:31;;-1:-1:-1;;13449:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;13367:121::o;26613:144::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;26717:32:::1;26736:12;:4:::0;26743:5:::1;26736:12;:::i;:::-;26717:18;:32::i;30038:278::-:0;30183:10;30138:4;30230:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;30230:32:0;;;;;;;;;;30138:4;;30160:126;;30208:7;;30230:45;;30265:10;;30230:45;:::i;26071:534::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;26260:14:::1;26290:44;26320:14:::0;26290;:44:::1;:::i;:::-;26260:74;;26353:8;:15;;26365:3;26353:15;26345:75;;;::::0;-1:-1:-1;;;26345:75:0;;9072:2:1;26345:75:0::1;::::0;::::1;9054:21:1::0;9111:2;9091:18;;;9084:30;9150:34;9130:18;;;9123:62;-1:-1:-1;;;9201:18:1;;;9194:45;9256:19;;26345:75:0::1;8870:411:1::0;26345:75:0::1;-1:-1:-1::0;26431:13:0::1;:30:::0;;::::1;26571:26:::0;;::::1;::::0;::::1;-1:-1:-1::0;;26542:18:0;;::::1;26431:30;26542:18;-1:-1:-1::0;;26472:30:0;;::::1;::::0;::::1;-1:-1:-1::0;;26431:30:0;;::::1;::::0;::::1;26472::::0;;;;-1:-1:-1;;26472:30:0;;;;;;;;;;::::1;26542:18:::0;;;;26515:16;;;::::1;26542:18:::0;;;;;;;::::1;26571:26:::0;;;::::1;::::0;;;::::1;::::0;;26071:534::o;27376:283::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;27510:30:::1;::::0;-1:-1:-1;;;27510:30:0;;27534:4:::1;27510:30;::::0;::::1;3675:51:1::0;27467:10:0;;27445:12:::1;::::0;-1:-1:-1;;;;;27510:15:0;::::1;::::0;::::1;::::0;3648:18:1;;27510:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27489:51;;27572:1;27559:10;:14;27551:51;;;::::0;-1:-1:-1;;;27551:51:0;;9677:2:1;27551:51:0::1;::::0;::::1;9659:21:1::0;9716:2;9696:18;;;9689:30;9755:26;9735:18;;;9728:54;9799:18;;27551:51:0::1;9475:348:1::0;27551:51:0::1;27613:38;::::0;-1:-1:-1;;;27613:38:0;;27628:10:::1;27613:38;::::0;::::1;10002:51:1::0;10069:18;;;10062:34;;;-1:-1:-1;;;;;27613:14:0;::::1;::::0;::::1;::::0;9975:18:1;;27613:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27434:225;;27376:283:::0;:::o;25666:279::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;25826:37:::1;::::0;25735:21:::1;::::0;25789:10:::1;::::0;25718:14:::1;::::0;25789:10;;25735:21;;25718:14;25826:37;25718:14;25826:37;25735:21;25789:10;25826:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25810:53;;;25882:4;25874:32;;;::::0;-1:-1:-1;;;25874:32:0;;10559:2:1;25874:32:0::1;::::0;::::1;10541:21:1::0;10598:2;10578:18;;;10571:30;-1:-1:-1;;;10617:18:1;;;10610:45;10672:18;;25874:32:0::1;10357:339:1::0;25874:32:0::1;-1:-1:-1::0;;25936:1:0::1;25917:16;:20:::0;-1:-1:-1;25666:279:0:o;25148:106::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;25224:22:::1;:9;25238:7:::0;25224:13:::1;:22::i;24892:96::-:0;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;24957:12:::1;:23:::0;;-1:-1:-1;;24957:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24892:96::o;25377:281::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;25453:16:::1;::::0;;25436:14:::1;25480:20:::0;;;;25570:37:::1;::::0;25453:16;;25533:10:::1;::::0;;;25453:16;;25436:14;25570:37;25436:14;25570:37;25453:16;25533:10;25570:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25554:53;;;25626:4;25618:32;;;::::0;-1:-1:-1;;;25618:32:0;;10559:2:1;25618:32:0::1;::::0;::::1;10541:21:1::0;10598:2;10578:18;;;10571:30;-1:-1:-1;;;10617:18:1;;;10610:45;10672:18;;25618:32:0::1;10357:339:1::0;25618:32:0::1;25425:233;;;25377:281::o:0;27101:96::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;27165:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;27165:24:0::1;-1:-1:-1::0;;27165:24:0;;::::1;::::0;;;::::1;::::0;;27101:96::o;25953:108::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;26028:16:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;26028:25:0::1;-1:-1:-1::0;;26028:25:0;;::::1;::::0;;;::::1;::::0;;25953:108::o;30324:365::-;30490:10;30429:4;30478:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;30478:32:0;;;;;;;;;;30529:35;;;;30521:60;;;;-1:-1:-1;;;30521:60:0;;10903:2:1;30521:60:0;;;10885:21:1;10942:2;10922:18;;;10915:30;-1:-1:-1;;;10961:18:1;;;10954:42;11013:18;;30521:60:0;10701:336:1;30521:60:0;30594:65;30603:10;30615:7;30624:34;30643:15;30624:16;:34;:::i;30594:65::-;-1:-1:-1;30677:4:0;;30324:365;-1:-1:-1;;;30324:365:0:o;28639:197::-;28745:4;28767:39;28777:10;28789:8;28799:6;28767:9;:39::i;25049:91::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;25114:12:::1;:18:::0;25049:91::o;26765:328::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;26930:13:::1;14317:2;26930;:13;:::i;:::-;26910:33;::::0;:17;:33:::1;:::i;:::-;26890:53:::0;-1:-1:-1;26988:13:0::1;14317:2;26988;:13;:::i;:::-;26971:30;::::0;:14;:30:::1;:::i;:::-;27012:14;:34:::0;;;;-1:-1:-1;27057:11:0::1;:28:::0;26765:328::o;27205:163::-;13548:10;13535:12;:24;;;;;;;;;;;;;;:47;;-1:-1:-1;13577:5:0;;-1:-1:-1;;;;;13577:5:0;13563:10;:19;13535:47;13527:69;;;;-1:-1:-1;;;13527:69:0;;;;;;;:::i;:::-;27317:19:::1;:43:::0;;-1:-1:-1;;;;;27317:43:0;;::::1;-1:-1:-1::0;;;27317:43:0::1;-1:-1:-1::0;;;;;;27317:43:0;;::::1;::::0;;;::::1;::::0;;27205:163::o;29241:337::-;-1:-1:-1;;;;;29369:20:0;;29361:50;;;;-1:-1:-1;;;29361:50:0;;11244:2:1;29361:50:0;;;11226:21:1;11283:2;11263:18;;;11256:30;-1:-1:-1;;;11302:18:1;;;11295:47;11359:18;;29361:50:0;11042:341:1;29361:50:0;-1:-1:-1;;;;;29430:21:0;;29422:49;;;;-1:-1:-1;;;29422:49:0;;11590:2:1;29422:49:0;;;11572:21:1;11629:2;11609:18;;;11602:30;-1:-1:-1;;;11648:18:1;;;11641:45;11703:18;;29422:49:0;11388:339:1;29422:49:0;-1:-1:-1;;;;;29484:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;29537:33;;689:25:1;;;29537:33:0;;662:18:1;29537:33:0;;;;;;;;29241:337;;;:::o;11623:179::-;11712:4;11741:53;11749:3;-1:-1:-1;;;;;11769:23:0;;11741:7;:53::i;:::-;11734:60;11623:179;-1:-1:-1;;;11623:179:0:o;16904:1984::-;-1:-1:-1;;;;;17039:25:0;;17031:56;;;;-1:-1:-1;;;17031:56:0;;11934:2:1;17031:56:0;;;11916:21:1;11973:2;11953:18;;;11946:30;-1:-1:-1;;;11992:18:1;;;11985:48;12050:18;;17031:56:0;11732:342:1;17031:56:0;17176:15;17195:31;:9;17214:11;17195:18;:31::i;:::-;:76;;;-1:-1:-1;17243:28:0;:9;17262:8;17243:18;:28::i;:::-;17195:118;;;-1:-1:-1;;;;;;17288:25:0;;:12;:25;;;;;;;;;;;;;17195:118;:157;;;-1:-1:-1;;;;;;17330:22:0;;:12;:22;;;;;;;;;;;;;17195:157;17176:177;-1:-1:-1;17366:23:0;-1:-1:-1;;;;;17393:28:0;;17416:4;17393:28;;:70;;-1:-1:-1;;;;;;17438:25:0;;17458:4;17438:25;17393:70;17521:19;;17366:98;;-1:-1:-1;17477:24:0;;-1:-1:-1;;;;;17506:34:0;;;-1:-1:-1;;;17521:19:0;;;;17506:34;:76;;;;-1:-1:-1;;;;;;17557:25:0;;14918:42;17557:25;17506:76;17505:160;;;-1:-1:-1;17613:19:0;;-1:-1:-1;;;;;17601:31:0;;;-1:-1:-1;;;17613:19:0;;;;17601:31;:63;;;;-1:-1:-1;;;;;;17636:28:0;;14918:42;17636:28;17601:63;17477:189;;17695:18;:41;;;;17717:19;17695:41;:55;;;;17740:10;17695:55;17677:1204;;;17777:47;17794:11;17807:8;17817:6;17777:16;:47::i;:::-;17677:1204;;;17914:14;;-1:-1:-1;;;17914:14:0;;;;17909:532;;18009:5;;-1:-1:-1;;;;;17994:20:0;;;18009:5;;17994:20;;;;:41;;-1:-1:-1;18030:5:0;;-1:-1:-1;;;;;18018:17:0;;;18030:5;;18018:17;;17994:41;17990:436;;;18120:10;;-1:-1:-1;;;18120:10:0;;;;18116:291;;;18186:8;-1:-1:-1;;;;;18164:34:0;18173:11;-1:-1:-1;;;;;18164:34:0;-1:-1:-1;;;;;;;;;;;18196:1:0;18164:34;;;;689:25:1;;677:2;662:18;;543:177;18164:34:0;;;;;;;;18225:7;;;16904:1984;;;:::o;18116:291::-;18341:14;;-1:-1:-1;;;18341:14:0;;;;18333:50;;;;-1:-1:-1;;;18333:50:0;;12471:2:1;18333:50:0;;;12453:21:1;12510:2;12490:18;;;12483:30;12549:25;12529:18;;;12522:53;12592:18;;18333:50:0;12269:347:1;18333:50:0;18565:19;;18537:10;;-1:-1:-1;;;;;18550:34:0;;;-1:-1:-1;;;18565:19:0;;;;18550:34;;:83;;-1:-1:-1;;;;;;18605:28:0;;14918:42;18605:28;18550:83;18674:19;;18537:96;;-1:-1:-1;18648:11:0;;-1:-1:-1;;;;;18662:31:0;;;-1:-1:-1;;;18674:19:0;;;;18662:31;;:77;;-1:-1:-1;;;;;;18714:25:0;;14918:42;18714:25;18662:77;18648:91;;18808:59;18822:11;18835:8;18845:6;18853:5;18860:6;18808:13;:59::i;:::-;17842:1039;;17677:1204;17020:1868;;;16904:1984;;;:::o;21604:1480::-;15777:27;:34;;-1:-1:-1;;15777:34:0;15807:4;15777:34;;;21725:4:::1;15777:27:::0;21707:24;;;:9:::1;:24;::::0;;;;;21844:12:::1;::::0;21826:30;::::1;21822:69;;;21873:7;;;21822:69;21923:13;::::0;21969:12:::1;::::0;21923:13;;;::::1;;;::::0;22085:23;;::::1;22081:130;;;22129:12;::::0;::::1;;22125:75;;;-1:-1:-1::0;22176:8:0;22125:75:::1;22271:10;:15;;22285:1;22271:15:::0;22267:54:::1;;22303:7;;;;;22267:54;22376:13;::::0;22333:25:::1;::::0;22361:42:::1;::::0;::::1;::::0;22362:27:::1;::::0;22376:13;;::::1;;;22362:11:::0;:27:::1;:::i;:::-;22361:42;;;;:::i;:::-;22457:13;::::0;22333:70;;-1:-1:-1;22414:25:0::1;::::0;22442:42:::1;::::0;::::1;::::0;22443:27:::1;::::0;22457:13;;::::1;;;22443:11:::0;:27:::1;:::i;:::-;22442:42;;;;:::i;:::-;22414:70:::0;-1:-1:-1;22497:16:0::1;22516:21;22536:1;22516:17:::0;:21:::1;:::i;:::-;22497:40:::0;-1:-1:-1;22548:19:0::1;22570:28;22497:40:::0;22570:17;:28:::1;:::i;:::-;22548:50:::0;-1:-1:-1;22611:17:0::1;22631:44;22658:17:::0;22548:50;22631:44:::1;:::i;:::-;22611:64:::0;-1:-1:-1;22716:21:0::1;22748:27;22611:64:::0;22748:16:::1;:27::i;:::-;22788:14;22806:41;22830:17:::0;22806:21:::1;:41;:::i;:::-;22788:60:::0;-1:-1:-1;22859:14:0::1;22901:9:::0;22877:20:::1;22886:11:::0;22788:60;22877:20:::1;:::i;:::-;22876:34;;;;:::i;:::-;22859:51;;22923:31;22937:8;22947:6;22923:13;:31::i;:::-;22967:20;22991:41;23015:17:::0;22991:21:::1;:41;:::i;:::-;22967:66;;23064:12;23044:16;;:32;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;;;;;;;;15822:1:0::1;-1:-1:-1::0;15834:27:0;:35;;-1:-1:-1;;15834:35:0;;;21604:1480::o;11442:173::-;11528:4;11557:50;11562:3;-1:-1:-1;;;;;11582:23:0;;11557:4;:50::i;9368:601::-;9434:4;9472:19;;;:12;;;:19;;;;;;9508:15;;9504:458;;9540:21;9564:14;9577:1;9564:10;:14;:::i;:::-;9613:18;;9540:38;;-1:-1:-1;9593:17:0;;9613:22;;9634:1;;9613:22;:::i;:::-;9593:42;;9652:17;9672:3;:11;;9684:9;9672:22;;;;;;;;:::i;:::-;;;;;;;;;9652:42;;9740:9;9711:3;:11;;9723:13;9711:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;9764:23;;;:12;;;:23;;;;;;:36;;;9817:17;;9764:3;;9817:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9858:3;:12;;:19;9871:5;9858:19;;;;;;;;;;;9851:26;;;9901:4;9894:11;;;;;;;;9504:458;9945:5;9938:12;;;;;11810:197;-1:-1:-1;;;;;11974:23:0;;11915:4;10106:19;;;:12;;;:19;;;;;;:24;;11944:55;9977:161;20606:354;-1:-1:-1;;;;;20750:22:0;;;;;;:9;:22;;;;;;:32;-1:-1:-1;20750:32:0;20742:69;;;;-1:-1:-1;;;20742:69:0;;13309:2:1;20742:69:0;;;13291:21:1;13348:2;13328:18;;;13321:30;-1:-1:-1;;;13367:18:1;;;13360:54;13431:18;;20742:69:0;13107:348:1;20742:69:0;20824:33;20837:11;20850:6;20824:12;:33::i;:::-;20868:27;20878:8;20888:6;20868:9;:27::i;:::-;20935:8;-1:-1:-1;;;;;20913:39:0;20922:11;-1:-1:-1;;;;;20913:39:0;-1:-1:-1;;;;;;;;;;;20945:6:0;20913:39;;;;689:25:1;;677:2;662:18;;543:177;18933:1665:0;-1:-1:-1;;;;;19135:19:0;;;19109:23;19135:19;;;:9;:19;;;;;;;19175:22;;;;;;;;:32;-1:-1:-1;19175:32:0;19167:69;;;;-1:-1:-1;;;19167:69:0;;13309:2:1;19167:69:0;;;13291:21:1;13348:2;13328:18;;;13321:30;-1:-1:-1;;;13367:18:1;;;13360:54;13431:18;;19167:69:0;13107:348:1;19167:69:0;19249:9;19273:6;19269:662;;;19347:11;;19337:6;:21;;19329:49;;;;-1:-1:-1;;;19329:49:0;;13662:2:1;19329:49:0;;;13644:21:1;13701:2;13681:18;;;13674:30;-1:-1:-1;;;13720:18:1;;;13713:45;13775:18;;19329:49:0;13460:339:1;19329:49:0;-1:-1:-1;19399:8:0;;;;;;;19269:662;;;19429:5;19425:506;;;19541:14;;19513:24;19531:6;19513:15;:24;:::i;:::-;:42;;19487:120;;;;-1:-1:-1;;;19487:120:0;;;;;;;:::i;:::-;19672:10;;19662:6;:20;;19654:49;;;;-1:-1:-1;;;19654:49:0;;;;;;;:::i;:::-;-1:-1:-1;19724:7:0;;;;19425:506;;;19820:14;;19792:24;19810:6;19792:15;:24;:::i;:::-;:42;;19764:122;;;;-1:-1:-1;;;19764:122:0;;;;;;;:::i;:::-;-1:-1:-1;19907:12:0;;;;;;;19425:506;19979:19;;-1:-1:-1;;;;;19964:34:0;;;-1:-1:-1;;;19979:19:0;;;;19964:34;;;;19963:72;;-1:-1:-1;20018:16:0;;-1:-1:-1;;;20018:16:0;;;;20017:17;19963:72;:119;;;;-1:-1:-1;20054:27:0;;;;20053:28;19963:119;19945:175;;;20094:26;20113:6;20094:18;:26::i;:::-;20242:13;;20135:21;;20159:108;;20187:6;;20208:3;;20226:29;;20242:13;;;;;;;20226;;;;:29;:::i;:::-;20159:13;:108::i;:::-;20135:132;-1:-1:-1;20280:19:0;20302:24;20135:132;20302:6;:24;:::i;:::-;20280:46;;20337:33;20350:11;20363:6;20337:12;:33::i;:::-;20381:39;20399:4;20406:13;20381:9;:39::i;:::-;20436:51;;689:25:1;;;20466:4:0;;-1:-1:-1;;;;;20436:51:0;;;-1:-1:-1;;;;;;;;;;;20436:51:0;677:2:1;662:18;20436:51:0;;;;;;;20498:32;20508:8;20518:11;20498:9;:32::i;:::-;20568:8;-1:-1:-1;;;;;20546:44:0;20555:11;-1:-1:-1;;;;;20546:44:0;-1:-1:-1;;;;;;;;;;;20578:11:0;20546:44;;;;689:25:1;;677:2;662:18;;543:177;20546:44:0;;;;;;;;19096:1502;;;;18933:1665;;;;;:::o;23173:511::-;23320:14;;23288:56;;23305:4;;-1:-1:-1;;;;;23320:14:0;23337:6;23288:8;:56::i;:::-;23381:16;;;23395:1;23381:16;;;;;;;;23357:21;;23381:16;;;;;;;;;;-1:-1:-1;23381:16:0;23357:40;;23426:4;23408;23413:1;23408:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23408:23:0;;;:7;;;;;;;;;;:23;;;;23452:14;;:21;;;-1:-1:-1;;;23452:21:0;;;;:14;;;;;:19;;:21;;;;;23408:7;;23452:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23442:4;23447:1;23442:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;23442:31:0;;;:7;;;;;;;;;:31;23486:14;;:190;;-1:-1:-1;;;23486:190:0;;:14;;;:65;;:190;;23566:6;;23486:14;;23603:4;;23630;;23650:15;;23486:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23783:418;23948:14;;23916:61;;23933:4;;-1:-1:-1;;;;;23948:14:0;23965:11;23916:8;:61::i;:::-;23990:14;;:203;;-1:-1:-1;;;23990:203:0;;24061:4;23990:203;;;15863:34:1;;;15913:18;;;15906:34;;;23990:14:0;15956:18:1;;;15949:34;;;15999:18;;;15992:34;16042:19;;;16035:44;24167:15:0;16095:19:1;;;16088:35;-1:-1:-1;;;;;23990:14:0;;;;:30;;24028:9;;15797:19:1;;23990:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23783:418;;:::o;9069:291::-;9132:4;10106:19;;;:12;;;:19;;;;;;9149:204;;-1:-1:-1;9192:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;9252:18;;9230:19;;;:12;;;:19;;;;;;:40;;;;9285:11;;9149:204;-1:-1:-1;9336:5:0;9329:12;;21386:161;-1:-1:-1;;;;;21477:15:0;;21457:17;21477:15;;;:9;:15;;;;;;:24;;21495:6;;21477:24;:::i;:::-;-1:-1:-1;;;;;21512:15:0;;;;;;;:9;:15;;;;;:27;;;;-1:-1:-1;;21386:161:0:o;21220:158::-;-1:-1:-1;;;;;21308:15:0;;21288:17;21308:15;;;:9;:15;;;;;;:24;;21326:6;;21308:24;:::i;20970:242::-;21094:7;21122:10;:17;;21136:3;21122:17;21114:52;;;;-1:-1:-1;;;21114:52:0;;16647:2:1;21114:52:0;;;16629:21:1;16686:2;16666:18;;;16659:30;-1:-1:-1;;;16705:18:1;;;16698:52;16767:18;;21114:52:0;16445:346:1;21114:52:0;21201:3;21185:12;;;;:6;:12;:::i;:::-;21184:20;;;;:::i;:::-;21177:27;20970:242;-1:-1:-1;;;;20970:242:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:388;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;725:118::-;811:5;804:13;797:21;790:5;787:32;777:60;;833:1;830;823:12;848:241;904:6;957:2;945:9;936:7;932:23;928:32;925:52;;;973:1;970;963:12;925:52;1012:9;999:23;1031:28;1053:5;1031:28;:::i;1094:548::-;1206:4;1235:2;1264;1253:9;1246:21;1296:6;1290:13;1339:6;1334:2;1323:9;1319:18;1312:34;1364:1;1374:140;1388:6;1385:1;1382:13;1374:140;;;1483:14;;;1479:23;;1473:30;1449:17;;;1468:2;1445:26;1438:66;1403:10;;1374:140;;;1378:3;1563:1;1558:2;1549:6;1538:9;1534:22;1530:31;1523:42;1633:2;1626;1622:7;1617:2;1609:6;1605:15;1601:29;1590:9;1586:45;1582:54;1574:62;;;;1094:548;;;;:::o;1647:315::-;1715:6;1723;1776:2;1764:9;1755:7;1751:23;1747:32;1744:52;;;1792:1;1789;1782:12;1744:52;1831:9;1818:23;1850:31;1875:5;1850:31;:::i;:::-;1900:5;1952:2;1937:18;;;;1924:32;;-1:-1:-1;;;1647:315:1:o;2348:247::-;2407:6;2460:2;2448:9;2439:7;2435:23;2431:32;2428:52;;;2476:1;2473;2466:12;2428:52;2515:9;2502:23;2534:31;2559:5;2534:31;:::i;2600:456::-;2677:6;2685;2693;2746:2;2734:9;2725:7;2721:23;2717:32;2714:52;;;2762:1;2759;2752:12;2714:52;2801:9;2788:23;2820:31;2845:5;2820:31;:::i;:::-;2870:5;-1:-1:-1;2927:2:1;2912:18;;2899:32;2940:33;2899:32;2940:33;:::i;:::-;2600:456;;2992:7;;-1:-1:-1;;;3046:2:1;3031:18;;;;3018:32;;2600:456::o;3737:382::-;3802:6;3810;3863:2;3851:9;3842:7;3838:23;3834:32;3831:52;;;3879:1;3876;3869:12;3831:52;3918:9;3905:23;3937:31;3962:5;3937:31;:::i;:::-;3987:5;-1:-1:-1;4044:2:1;4029:18;;4016:32;4057:30;4016:32;4057:30;:::i;4124:180::-;4183:6;4236:2;4224:9;4215:7;4211:23;4207:32;4204:52;;;4252:1;4249;4242:12;4204:52;-1:-1:-1;4275:23:1;;4124:180;-1:-1:-1;4124:180:1:o;4309:156::-;4375:20;;4435:4;4424:16;;4414:27;;4404:55;;4455:1;4452;4445:12;4404:55;4309:156;;;:::o;4470:464::-;4555:6;4563;4571;4579;4587;4640:3;4628:9;4619:7;4615:23;4611:33;4608:53;;;4657:1;4654;4647:12;4608:53;4680:27;4697:9;4680:27;:::i;:::-;4670:37;;4726:36;4758:2;4747:9;4743:18;4726:36;:::i;:::-;4716:46;;4781:36;4813:2;4802:9;4798:18;4781:36;:::i;:::-;4771:46;;4836:36;4868:2;4857:9;4853:18;4836:36;:::i;:::-;4826:46;;4891:37;4923:3;4912:9;4908:19;4891:37;:::i;:::-;4881:47;;4470:464;;;;;;;;:::o;5617:248::-;5685:6;5693;5746:2;5734:9;5725:7;5721:23;5717:32;5714:52;;;5762:1;5759;5752:12;5714:52;-1:-1:-1;;5785:23:1;;;5855:2;5840:18;;;5827:32;;-1:-1:-1;5617:248:1:o;5870:332::-;6072:2;6054:21;;;6111:1;6091:18;;;6084:29;-1:-1:-1;;;6144:2:1;6129:18;;6122:39;6193:2;6178:18;;5870:332::o;6207:127::-;6268:10;6263:3;6259:20;6256:1;6249:31;6299:4;6296:1;6289:15;6323:4;6320:1;6313:15;6339:422;6428:1;6471:5;6428:1;6485:270;6506:7;6496:8;6493:21;6485:270;;;6565:4;6561:1;6557:6;6553:17;6547:4;6544:27;6541:53;;;6574:18;;:::i;:::-;6624:7;6614:8;6610:22;6607:55;;;6644:16;;;;6607:55;6723:22;;;;6683:15;;;;6485:270;;;6489:3;6339:422;;;;;:::o;6766:806::-;6815:5;6845:8;6835:80;;-1:-1:-1;6886:1:1;6900:5;;6835:80;6934:4;6924:76;;-1:-1:-1;6971:1:1;6985:5;;6924:76;7016:4;7034:1;7029:59;;;;7102:1;7097:130;;;;7009:218;;7029:59;7059:1;7050:10;;7073:5;;;7097:130;7134:3;7124:8;7121:17;7118:43;;;7141:18;;:::i;:::-;-1:-1:-1;;7197:1:1;7183:16;;7212:5;;7009:218;;7311:2;7301:8;7298:16;7292:3;7286:4;7283:13;7279:36;7273:2;7263:8;7260:16;7255:2;7249:4;7246:12;7242:35;7239:77;7236:159;;;-1:-1:-1;7348:19:1;;;7380:5;;7236:159;7427:34;7452:8;7446:4;7427:34;:::i;:::-;7497:6;7493:1;7489:6;7485:19;7476:7;7473:32;7470:58;;;7508:18;;:::i;:::-;7546:20;;6766:806;-1:-1:-1;;;6766:806:1:o;7577:140::-;7635:5;7664:47;7705:4;7695:8;7691:19;7685:4;7664:47;:::i;7722:168::-;7795:9;;;7826;;7843:15;;;7837:22;;7823:37;7813:71;;7864:18;;:::i;8244:128::-;8311:9;;;8332:11;;;8329:37;;;8346:18;;:::i;8587:125::-;8652:9;;;8673:10;;;8670:36;;;8686:18;;:::i;8717:148::-;8805:4;8784:12;;;8798;;;8780:31;;8823:13;;8820:39;;;8839:18;;:::i;9286:184::-;9356:6;9409:2;9397:9;9388:7;9384:23;9380:32;9377:52;;;9425:1;9422;9415:12;9377:52;-1:-1:-1;9448:16:1;;9286:184;-1:-1:-1;9286:184:1:o;10107:245::-;10174:6;10227:2;10215:9;10206:7;10202:23;10198:32;10195:52;;;10243:1;10240;10233:12;10195:52;10275:9;10269:16;10294:28;10316:5;10294:28;:::i;12621:217::-;12661:1;12687;12677:132;;12731:10;12726:3;12722:20;12719:1;12712:31;12766:4;12763:1;12756:15;12794:4;12791:1;12784:15;12677:132;-1:-1:-1;12823:9:1;;12621:217::o;12843:127::-;12904:10;12899:3;12895:20;12892:1;12885:31;12935:4;12932:1;12925:15;12959:4;12956:1;12949:15;12975:127;13036:10;13031:3;13027:20;13024:1;13017:31;13067:4;13064:1;13057:15;13091:4;13088:1;13081:15;13804:340;14006:2;13988:21;;;14045:2;14025:18;;;14018:30;-1:-1:-1;;;14079:2:1;14064:18;;14057:46;14135:2;14120:18;;13804:340::o;14281:251::-;14351:6;14404:2;14392:9;14383:7;14379:23;14375:32;14372:52;;;14420:1;14417;14410:12;14372:52;14452:9;14446:16;14471:31;14496:5;14471:31;:::i;14537:980::-;14799:4;14847:3;14836:9;14832:19;14878:6;14867:9;14860:25;14904:2;14942:6;14937:2;14926:9;14922:18;14915:34;14985:3;14980:2;14969:9;14965:18;14958:31;15009:6;15044;15038:13;15075:6;15067;15060:22;15113:3;15102:9;15098:19;15091:26;;15152:2;15144:6;15140:15;15126:29;;15173:1;15183:195;15197:6;15194:1;15191:13;15183:195;;;15262:13;;-1:-1:-1;;;;;15258:39:1;15246:52;;15353:15;;;;15318:12;;;;15294:1;15212:9;15183:195;;;-1:-1:-1;;;;;;;15434:32:1;;;;15429:2;15414:18;;15407:60;-1:-1:-1;;;15498:3:1;15483:19;15476:35;15395:3;14537:980;-1:-1:-1;;;14537:980:1:o;16134:306::-;16222:6;16230;16238;16291:2;16279:9;16270:7;16266:23;16262:32;16259:52;;;16307:1;16304;16297:12;16259:52;16336:9;16330:16;16320:26;;16386:2;16375:9;16371:18;16365:25;16355:35;;16430:2;16419:9;16415:18;16409:25;16399:35;;16134:306;;;;;:::o

Swarm Source

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