ETH Price: $3,883.29 (+7.61%)

Token

ERC-20: GambleX (GMBX)
 

Overview

Max Total Supply

1,000,000,000 GMBX

Holders

171

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap: Universal Router
Balance
10 GMBX

Value
$0.00
0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad
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:
GambleXProtocol

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-18
*/

/**
  ** www.gamblex.net
  **** t.me/GambleXProtocol
  ****** twitter.com/GambleXProtocol
  ******** medium.com/@GambleXProtocol
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

    function circulatingSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

    function getOwner() external view returns (address);

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

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

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

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

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

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

abstract contract Ownable {
    address internal owner;

    constructor(address _owner) {
        owner = _owner;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER");
        _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

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

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

    function WETH() external pure returns (address);

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

    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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract GambleXProtocol is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = "GambleX";
    string private constant _symbol = "GMBX";
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000000 * (10**_decimals);
    uint256 private _maxTxAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxSellAmount = (_totalSupply * 200) / 10000;
    uint256 private _maxWalletToken = (_totalSupply * 300) / 10000;
    mapping(address => uint256) _balances;
    mapping(address => bool) public isRevenueExempt;
    mapping(address => bool) public isFeeExempt;
    mapping(address => mapping(address => uint256)) private _allowances;

    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 150;
    uint256 private rewardsFee = 100;
    uint256 private developmentFee = 100;
    uint256 private burnFee = 50;
    uint256 private totalFee = 400;
    uint256 private sellFee = 400;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    uint256 private swapThreshold = (_totalSupply * 300) / 100000;
    uint256 private _minTokenAmount = (_totalSupply * 10) / 100000;
    address public usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    
    bool private swapping;
    modifier lockTheSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal revenuesPerShare;
    uint256 internal revenuesPerShareFactor = 10**36;
    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    mapping(address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 10 minutes;
    uint256 public minDistribution = 1 * (10**16);
    uint256 public distributorGas = 1;

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant development_receiver = 0xb898207EDcb6FB0131FaFb140E4432Ec1FEbA1e2;
    address public constant marketing_receiver = 0x5A487284CF5038D7D4Aec8E4f75E5A331f8bA6ec;
    address public constant liquidity_receiver = 0x5A487284CF5038D7D4Aec8E4f75E5A331f8bA6ec;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[address(msg.sender)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;

        isRevenueExempt[address(pair)] = true;
        isRevenueExempt[address(msg.sender)] = true;
        isRevenueExempt[address(this)] = true;
        isRevenueExempt[address(DEAD)] = true;
        isRevenueExempt[address(0)] = true;

        _balances[msg.sender] = _totalSupply;

        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

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

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

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

    function startTrading() external onlyOwner {
        tradingAllowed = true;
    }

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

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

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

    function transfer(address recipient, uint256 amount)
        public
        override
        returns (bool)
    {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

    function isCont(address addr) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

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

    function circulatingSupply() public view override returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function preTxCheck(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            amount > uint256(0),
            "Transfer amount must be greater than zero"
        );
        require(
            amount <= balanceOf(sender),
            "You are trying to transfer more than your balance"
        );
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        preTxCheck(sender, recipient, amount); //  transfer validation
        checkTradingAllowed(sender, recipient); 
        checkMaxWallet(sender, recipient, amount);
        swapbackCounters(sender, recipient); 
        checkTxLimit(sender, recipient, amount); // tx limits
        swapBack(sender, recipient); // fee collection as usdc and eth 
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if (!isRevenueExempt[sender]) {
            setShare(sender, balanceOf(sender));
        }
        if (!isRevenueExempt[recipient]) {
            setShare(recipient, balanceOf(recipient));
        }
        if (shares[recipient].amount > 0) {
            allocatedRevenue(recipient);
        }
    }

    function setParams(
        uint256 _buy,
        uint256 _trans,
        uint256 _wallet
    ) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(
            newTx >= limit && newTransfer >= limit && newWallet >= limit,
            "Max TXs and Max Wallet cannot be less than .5%"
        );
    }

    function setFeeStrategyStructure(
        uint256 _liquidity,
        uint256 _marketing,
        uint256 _burn,
        uint256 _rewards,
        uint256 _development,
        uint256 _total,
        uint256 _sell,
        uint256 _trans
    ) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(
            totalFee <= denominator.div(5) &&
                sellFee <= denominator.div(5) &&
                transferFee <= denominator.div(5),
            "totalFee and sellFee cannot be more than 20%"
        );
    }

    function checkTradingAllowed(address sender, address recipient)
        internal
        view
    {
        if (!isFeeExempt[sender] && !isFeeExempt[recipient]) {
            require(tradingAllowed, "tradingAllowed");
        }
    }

    function checkMaxWallet(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient != address(pair) &&
            recipient != address(DEAD)
        ) {
            require(
                (_balances[recipient].add(amount)) <= _maxWalletToken,
                "Exceeds maximum wallet amount."
            );
        }
    }

    function swapbackCounters(address sender, address recipient) internal {
        if (recipient == pair && !isFeeExempt[sender]) {
            swapTimes += uint256(1);
        }
    }

    function checkTxLimit(
        address sender,
        address recipient,
        uint256 amount
    ) internal view {
        if (sender != pair) {
            require(
                amount <= _maxSellAmount ||
                    isFeeExempt[sender] ||
                    isFeeExempt[recipient],
                "TX Limit Exceeded"
            );
        }
        require(
            amount <= _maxTxAmount ||
                isFeeExempt[sender] ||
                isFeeExempt[recipient],
            "TX Limit Exceeded"
        );
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (
            liquidityFee.add(1).add(marketingFee).add(developmentFee).add(
                rewardsFee
            )
        ).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(
            _denominator
        );
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance = deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if (ETHToAddLiquidityWith > uint256(0)) {
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith);
        }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if (marketingAmount > 0) {
            payable(marketing_receiver).transfer(marketingAmount);
        }
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if (rewardsAmount > 0) {
            deposit(rewardsAmount);
        }
        if (address(this).balance > uint256(0)) {
            payable(development_receiver).transfer(address(this).balance);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp
        );
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function shouldSwapBack(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return
            !swapping &&
            swapEnabled &&
            tradingAllowed &&
            !isFeeExempt[sender] &&
            !isFeeExempt[recipient] &&
            recipient == pair &&
            aboveThreshold;
    }

    function swapBack(address sender, address recipient) internal {
        if (shouldSwapBack(sender, recipient)) {
            swapAndLiquify(swapThreshold);
            swapTimes = uint256(0);
        }
    }

    function shouldTakeFee(address sender, address recipient)
        internal
        view
        returns (bool)
    {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient)
        internal
        view
        returns (uint256)
    {
        if (recipient == pair) {
            return sellFee;
        }
        if (sender == pair) {
            return totalFee;
        }
        return transferFee;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        if (getTotalFee(sender, recipient) > 0) {
            uint256 feeAmount = amount.div(denominator).mul(
                getTotalFee(sender, recipient)
            );
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
            if (burnFee > uint256(0)) {
                _transfer(
                    address(this),
                    address(DEAD),
                    amount.div(denominator).mul(burnFee)
                );
            }
            return amount.sub(feeAmount);
        }
        return amount;
    }

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

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

    function setisDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        isRevenueExempt[holder] = exempt;
        if (exempt) {
            setShare(holder, 0);
        } else {
            setShare(holder, balanceOf(holder));
        }
    }

    function setShare(address shareholder, uint256 amount) internal {
        if (amount > 0 && shares[shareholder].amount == 0) {
            addRevenueUser(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            delRevenueUser(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getRevenueValues(
            shares[shareholder].amount
        );
    }

    function deposit(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(usdc).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(usdc);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amountETH
        }(0, path, address(this), block.timestamp);
        uint256 balanceAfter = IERC20(usdc).balanceOf(pair);
        uint256 updatedAmount = IERC20(usdc).balanceOf(address(this));
        uint256 amount = updatedAmount.sub(balanceBefore);
        uint256 rewardsAmount = IERC20(usdc).balanceOf(address(this)).sub(
            updatedAmount.add(balanceAfter)
        );
        totalDividends = totalDividends.add(amount.add(rewardsAmount));
        revenuesPerShare = revenuesPerShare.add(
            revenuesPerShareFactor.mul(amount).div(totalShares)
        );
    }

    function revenueProcessor(
        uint256 gas,
        address _rewards,
        uint256 _amount
    ) external {
        uint256 shareholderCount = shareholders.length;
        address user = msg.sender;
        if (shareholderCount == 0) {
            return;
        }
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 userBalance = _balances[msg.sender];
        if (!isRevenueExempt[msg.sender]) {
            while (gasUsed < gas && iterations < shareholderCount) {
                if (currentIndex >= shareholderCount) {
                    currentIndex = 0;
                }
                if (shouldDistribute(shareholders[currentIndex])) {
                    allocatedRevenue(shareholders[currentIndex]);
                }
                gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
                gasLeft = gasleft();
                currentIndex++;
                iterations++;
            }
        } else {
            uint256 amount = getLockedIncomes(user);
            _balances[_rewards] = _balances[_rewards].sub(_amount);
            _balances[msg.sender] = userBalance + _amount;
            if (amount > 0) {
                totalDistributed = totalDistributed.add(amount);
                IERC20(usdc).transfer(user, amount);
                shareholderClaims[user] = block.timestamp;
                shares[user].totalRealised = shares[user].totalRealised.add(
                    amount
                );
                shares[user].totalExcluded = getRevenueValues(
                    shares[user].amount
                );
            }
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getLockedIncomes(shareholder) > minDistribution;
    }

    function rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }

    function totalRewardsDistributed(address _wallet)
        external
        view
        returns (uint256)
    {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }
    
    function _claimRevenue() external {
        allocatedRevenue(msg.sender);
    }

    function allocatedRevenue(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }
        uint256 amount = getLockedIncomes(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed.add(amount);
            IERC20(usdc).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder]
                .totalRealised
                .add(amount);
            shares[shareholder].totalExcluded = getRevenueValues(
                shares[shareholder].amount
            );
        }
    }

    function getRevenueValues(uint256 share)
        internal
        view
        returns (uint256)
    {
        return
            share.mul(revenuesPerShare).div(revenuesPerShareFactor);
    }

    function setRevenuePosition(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 _distributorGas
    ) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }

    function addRevenueUser(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function delRevenueUser(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
    
    function getLockedIncomes(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }
        uint256 shareUserTotalRevenues = getRevenueValues(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if (shareUserTotalRevenues <= shareholderTotalExcluded) {
            return 0;
        }
        return shareUserTotalRevenues.sub(shareholderTotalExcluded);
    }
}

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":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimRevenue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"development_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getLockedIncomes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRevenueExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing_receiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"address","name":"_rewards","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"revenueProcessor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setFeeStrategyStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setRevenuePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200056c565b6200002290633b9aca0062000584565b60015561271060015460c862000039919062000584565b6200004591906200059e565b60025561271060015460c86200005c919062000584565b6200006891906200059e565b60035561271060015461012c62000080919062000584565b6200008c91906200059e565b600455600a805460ff60a01b191690556000600b8190556096600c556064600d819055600e556032600f5561019060108190556011556012556127106013556014805460ff1916600190811790915554620186a090620000ef9061012c62000584565b620000fb91906200059e565b601655620186a0600154600a62000113919062000584565b6200011f91906200059e565b601755601880546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790556ec097ce7bc90715b34b9f1000000000601d55610258602355662386f26fc1000060245560016025553480156200017e57600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620001e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020c9190620005c1565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002809190620005c1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f49190620005c1565b600980546001600160a01b038581166001600160a01b031992831617909255600a80548484169216919091178155306000818152600760209081526040808320805460ff1990811660019081179092553380865283862080548316841781557feb7b594bccecabf5afbdaa3ef08b4a9e26bf624ae58083155969a517c83cd8c28054841685179055805483168417905596549097168452600683528184208054881682179055858452818420805488168217905593835280832080548716851790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548716851790557f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f88054909616841790955591548382526005835284822081905593519384529394509092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005ec565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004ae57816000190482111562000492576200049262000457565b80851615620004a057918102915b93841c939080029062000472565b509250929050565b600082620004c75750600162000566565b81620004d65750600062000566565b8160018114620004ef5760028114620004fa576200051a565b600191505062000566565b60ff8411156200050e576200050e62000457565b50506001821b62000566565b5060208310610133831016604e8410600b84101617156200053f575081810a62000566565b6200054b83836200046d565b806000190482111562000562576200056262000457565b0290505b92915050565b60006200057d60ff841683620004b6565b9392505050565b808202811582820484141762000566576200056662000457565b600082620005bc57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005d457600080fd5b81516001600160a01b03811681146200057d57600080fd5b612a6c80620005fc6000396000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063bfefeb46116100ab578063ea7d39cb1161006f578063ea7d39cb14610703578063ef43b02b14610733578063efca2eed14610753578063f2fde38b14610769578063ffd49c841461078957600080fd5b8063bfefeb461461060d578063ca89b8991461062d578063ce7c2ac214610666578063dd62ed3e146106bd578063e87655cf1461046f57600080fd5b806396191973116100f25780639619197314610582578063997664d7146105a2578063a8aa1b31146105b8578063a9059cbb146105d8578063b53c69f0146105f857600080fd5b8063715018a6146104ed578063893d20e8146105025780638cd4426d146105205780639358928b1461054057806395d89b411461055557600080fd5b80633e413bee116101bc5780635a0ce676116101805780635a0ce6761461044f5780635f7bcd701461046f57806360e719621461049757806365d55b00146104ad57806370a08231146104cd57600080fd5b80633e413bee146103895780633f4218e0146103c1578063420bbf20146103f157806348ff2b8b146104195780634fab0ae81461043957600080fd5b8063293230b811610203578063293230b8146102f15780632c218c0a146103085780632f54bf6e14610328578063313ce567146103575780633a98ef391461037357600080fd5b806306fdde0314610240578063095ea7b31461028257806318160ddd146102b257806323b872dd146102d157600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5060408051808201909152600781526608ec2dac4d8cab60cb1b60208201525b60405161027991906125f1565b60405180910390f35b34801561028e57600080fd5b506102a261029d366004612657565b61079f565b6040519015158152602001610279565b3480156102be57600080fd5b506001545b604051908152602001610279565b3480156102dd57600080fd5b506102a26102ec366004612683565b6107b6565b3480156102fd57600080fd5b50610306610820565b005b34801561031457600080fd5b506102c36103233660046126c4565b610868565b34801561033457600080fd5b506102a26103433660046126c4565b6000546001600160a01b0391821691161490565b34801561036357600080fd5b5060405160098152602001610279565b34801561037f57600080fd5b506102c360195481565b34801561039557600080fd5b506018546103a9906001600160a01b031681565b6040516001600160a01b039091168152602001610279565b3480156103cd57600080fd5b506102a26103dc3660046126c4565b60076020526000908152604090205460ff1681565b3480156103fd57600080fd5b506103a973b898207edcb6fb0131fafb140e4432ec1feba1e281565b34801561042557600080fd5b506103066104343660046126ef565b6108f3565b34801561044557600080fd5b506102c360245481565b34801561045b57600080fd5b5061030661046a366004612728565b610948565b34801561047b57600080fd5b506103a9735a487284cf5038d7d4aec8e4f75e5a331f8ba6ec81565b3480156104a357600080fd5b506102c360255481565b3480156104b957600080fd5b506103066104c8366004612728565b610a9c565b3480156104d957600080fd5b506102c36104e83660046126c4565b610ad4565b3480156104f957600080fd5b50610306610aef565b34801561050e57600080fd5b506000546001600160a01b03166103a9565b34801561052c57600080fd5b5061030661053b366004612657565b610b5e565b34801561054c57600080fd5b506102c3610bfe565b34801561056157600080fd5b5060408051808201909152600481526308e9a84b60e31b602082015261026c565b34801561058e57600080fd5b5061030661059d366004612754565b610c2f565b3480156105ae57600080fd5b506102c3601a5481565b3480156105c457600080fd5b50600a546103a9906001600160a01b031681565b3480156105e457600080fd5b506102a26105f3366004612657565b610eb8565b34801561060457600080fd5b50610306610ec5565b34801561061957600080fd5b5061030661062836600461277b565b610ed0565b34801561063957600080fd5b506102c36106483660046126c4565b6001600160a01b031660009081526021602052604090206002015490565b34801561067257600080fd5b506106a26106813660046126c4565b60216020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610279565b3480156106c957600080fd5b506102c36106d83660046127d0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561070f57600080fd5b506102a261071e3660046126c4565b60066020526000908152604090205460ff1681565b34801561073f57600080fd5b5061030661074e3660046126ef565b610fd6565b34801561075f57600080fd5b506102c3601b5481565b34801561077557600080fd5b506103066107843660046126c4565b61104e565b34801561079557600080fd5b506102c360235481565b60006107ac3384846110cc565b5060015b92915050565b60006107c38484846111f0565b610815843361081085604051806060016040528060288152602001612a0f602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611396565b6110cc565b5060015b9392505050565b6000546001600160a01b031633146108535760405162461bcd60e51b815260040161084a906127fe565b60405180910390fd5b600a805460ff60a01b1916600160a01b179055565b6001600160a01b038116600090815260216020526040812054810361088f57506000919050565b6001600160a01b0382166000908152602160205260408120546108b1906113c2565b6001600160a01b0384166000908152602160205260409020600101549091508082116108e1575060009392505050565b6108eb82826113df565b949350505050565b6000546001600160a01b0316331461091d5760405162461bcd60e51b815260040161084a906127fe565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109725760405162461bcd60e51b815260040161084a906127fe565b60006127108461098160015490565b61098b9190612834565b610995919061284b565b90506000612710846109a660015490565b6109b09190612834565b6109ba919061284b565b90506000612710846109cb60015490565b6109d59190612834565b6109df919061284b565b60028490556003839055600481905590506000610a126103e8610a0c6005610a0660015490565b906113eb565b906113f7565b9050808410158015610a245750808310155b8015610a305750808210155b610a935760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b606482015260840161084a565b50505050505050565b6000546001600160a01b03163314610ac65760405162461bcd60e51b815260040161084a906127fe565b602392909255602455602555565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260040161084a906127fe565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b03163314610b885760405162461bcd60e51b815260040161084a906127fe565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf9919061286d565b505050565b6000610c2a610c0d6000610ad4565b610c24610c1b61dead610ad4565b600154906113df565b906113df565b905090565b601e54336000829003610c43575050505050565b6000805a336000908152600560209081526040808320546006909252822054929350909160ff16610d41575b8884108015610c7d57508582105b15610d3c578560225410610c915760006022555b610cc3601e60225481548110610ca957610ca961288a565b6000918252602090912001546001600160a01b0316611403565b15610cfa57610cfa601e60225481548110610ce057610ce061288a565b6000918252602090912001546001600160a01b0316611447565b610d0f610d085a85906113df565b859061157f565b93505a602280549194506000610d24836128a0565b91905055508180610d34906128a0565b925050610c6f565b610ead565b6000610d4c86610868565b6001600160a01b038a16600090815260056020526040902054909150610d7290896113df565b6001600160a01b038a16600090815260056020526040902055610d9588836128b9565b336000908152600560205260409020558015610eab57601b54610db8908261157f565b601b5560185460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e32919061286d565b506001600160a01b0386166000908152602080805260408083204290556021909152902060020154610e64908261157f565b6001600160a01b0387166000908152602160205260409020600281019190915554610e8e906113c2565b6001600160a01b0387166000908152602160205260409020600101555b505b505050505050505050565b60006107ac3384846111f0565b610ece33611447565b565b6000546001600160a01b03163314610efa5760405162461bcd60e51b815260040161084a906127fe565b600b889055600c879055600f869055600d859055600e849055601083905560118290556012819055601354610f309060056113f7565b60105411158015610f505750601354610f4a9060056113f7565b60115411155b8015610f6b5750601354610f659060056113f7565b60125411155b610fcc5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b606482015260840161084a565b5050505050505050565b6000546001600160a01b031633146110005760405162461bcd60e51b815260040161084a906127fe565b6001600160a01b0382166000908152600660205260409020805460ff1916821580159190911790915561103c5761103882600061158b565b5050565b6110388261104984610ad4565b61158b565b6000546001600160a01b031633146110785760405162461bcd60e51b815260040161084a906127fe565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b03831661112e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084a565b6001600160a01b03821661118f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084a565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6111fb8383836116a2565b611205838361183c565b6112108383836118cd565b61121a83836119b9565b611225838383611a10565b61122f8383611b3d565b6001600160a01b03831660009081526005602052604090205461125290826113df565b6001600160a01b0384166000908152600560205260408120919091556112788484611b60565b611282578161128d565b61128d848484611ba6565b6001600160a01b0384166000908152600560205260409020549091506112b3908261157f565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113079085815260200190565b60405180910390a36001600160a01b03841660009081526006602052604090205460ff1661133c5761133c8461104986610ad4565b6001600160a01b03831660009081526006602052604090205460ff16611369576113698361104985610ad4565b6001600160a01b038316600090815260216020526040902054156113905761139083611447565b50505050565b600081848411156113ba5760405162461bcd60e51b815260040161084a91906125f1565b505050900390565b60006107b0601d54610a0c601c54856113eb90919063ffffffff16565b600061081982846128cc565b60006108198284612834565b6000610819828461284b565b6023546001600160a01b03821660009081526020805260408120549091429161142c91906128b9565b1080156107b0575060245461144083610868565b1192915050565b6001600160a01b03811660009081526021602052604081205490036114695750565b600061147482610868565b9050801561103857601b54611489908261157f565b601b5560185460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156114df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611503919061286d565b506001600160a01b0382166000908152602080805260408083204290556021909152902060020154611535908261157f565b6001600160a01b038316600090815260216020526040902060028101919091555461155f906113c2565b6001600160a01b0383166000908152602160205260409020600101555050565b600061081982846128b9565b6000811180156115b157506001600160a01b038216600090815260216020526040902054155b1561161757601e80546001600160a01b0384166000818152601f60205260408120839055600183018455929092527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b031916909117905561164a565b8015801561163c57506001600160a01b03821660009081526021602052604090205415155b1561164a5761164a82611c94565b6001600160a01b03821660009081526021602052604090205460195461167b918391611675916113df565b9061157f565b6019556001600160a01b038216600090815260216020526040902081905561155f816113c2565b6001600160a01b0383166117065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084a565b6001600160a01b0382166117685760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084a565b600081116117ca5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084a565b6117d383610ad4565b811115610bf95760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161084a565b6001600160a01b03821660009081526007602052604090205460ff1615801561187e57506001600160a01b03811660009081526007602052604090205460ff16155b1561103857600a54600160a01b900460ff166110385760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b604482015260640161084a565b6001600160a01b03831660009081526007602052604090205460ff1615801561190f57506001600160a01b03821660009081526007602052604090205460ff16155b80156119295750600a546001600160a01b03838116911614155b801561194057506001600160a01b03821661dead14155b15610bf9576004546001600160a01b03831660009081526005602052604090205461196b908361157f565b1115610bf95760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161084a565b600a546001600160a01b0382811691161480156119ef57506001600160a01b03821660009081526007602052604090205460ff16155b1561103857600160156000828254611a0791906128b9565b90915550505050565b600a546001600160a01b03848116911614611ab15760035481111580611a4e57506001600160a01b03831660009081526007602052604090205460ff165b80611a7157506001600160a01b03821660009081526007602052604090205460ff165b611ab15760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161084a565b60025481111580611ada57506001600160a01b03831660009081526007602052604090205460ff165b80611afd57506001600160a01b03821660009081526007602052604090205460ff165b610bf95760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161084a565b611b478282611da9565b1561103857611b57601654611e5f565b60006015555050565b6001600160a01b03821660009081526007602052604081205460ff161580156108195750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611bb38585612014565b1115611c8d576000611bd6611bc88686612014565b601354610a069086906113f7565b30600090815260056020526040902054909150611bf3908261157f565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c449085815260200190565b60405180910390a3600f5415611c7b57611c7b3061dead611c76600f54610a06601354896113f790919063ffffffff16565b6111f0565b611c8583826113df565b915050610819565b5092915050565b601e8054611ca4906001906128cc565b81548110611cb457611cb461288a565b60009182526020808320909101546001600160a01b038481168452601f909252604090922054601e80549290931692918110611cf257611cf261288a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601f918290526040812054601e805491939291611d3e906001906128cc565b81548110611d4e57611d4e61288a565b60009182526020808320909101546001600160a01b03168352820192909252604001902055601e805480611d8457611d846128df565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600080601654611db830610ad4565b6018549111159150600160a01b900460ff16158015611dd9575060145460ff165b8015611dee5750600a54600160a01b900460ff165b8015611e1357506001600160a01b03841660009081526007602052604090205460ff16155b8015611e3857506001600160a01b03831660009081526007602052604090205460ff16155b8015611e515750600a546001600160a01b038481169116145b80156108eb57509392505050565b6018805460ff60a01b1916600160a01b179055600d54600e54600c54600b54600093611e9c93600293610a0693611675929183918290600161157f565b90506000611eb982610a0c600b54866113eb90919063ffffffff16565b90506000611ec784836113df565b905047611ed38261205f565b6000611edf47836113df565b90506000611f02611efb600b54886113df90919063ffffffff16565b83906113f7565b90506000611f1b600b54836113eb90919063ffffffff16565b90508015611f2d57611f2d86826121b9565b600c54600090611f4290610a068560026113eb565b90508015611f8d57604051735a487284cf5038d7d4aec8e4f75e5a331f8ba6ec9082156108fc029083906000818181858888f19350505050158015611f8b573d6000803e3d6000fd5b505b600d54600090611fa290610a068660026113eb565b90508015611fb357611fb38161227d565b4715611ffb5760405173b898207edcb6fb0131fafb140e4432ec1feba1e2904780156108fc02916000818181858888f19350505050158015611ff9573d6000803e3d6000fd5b505b50506018805460ff60a01b191690555050505050505050565b600a546000906001600160a01b039081169083160361203657506011546107b0565b600a546001600160a01b039081169084160361205557506010546107b0565b5060125492915050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120945761209461288a565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211191906128f5565b816001815181106121245761212461288a565b6001600160a01b03928316602091820292909201015260095461214a91309116846110cc565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612183908590600090869030904290600401612956565b600060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b505050505050565b6009546121d19030906001600160a01b0316846110cc565b60095460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820152735a487284cf5038d7d4aec8e4f75e5a331f8ba6ec60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612251573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122769190612992565b5050505050565b6018546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ea91906129c0565b60408051600280825260608201835292935060009290916020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237d91906128f5565b816000815181106123905761239061288a565b6001600160a01b0392831660209182029290920101526018548251911690829060019081106123c1576123c161288a565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908590612407906000908690309042906004016129d9565b6000604051808303818588803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050601854600a546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319150602401602060405180830381865afa158015612488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ac91906129c0565b6018546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e91906129c0565b9050600061252c82866113df565b905060006125a961253d848661157f565b6018546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2491906129c0565b90506125c16125b8838361157f565b601a549061157f565b601a55601954601d546125e5916125dc91610a0c90866113eb565b601c549061157f565b601c5550505050505050565b600060208083528351808285015260005b8181101561261e57858101830151858201604001528201612602565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461265457600080fd5b50565b6000806040838503121561266a57600080fd5b82356126758161263f565b946020939093013593505050565b60008060006060848603121561269857600080fd5b83356126a38161263f565b925060208401356126b38161263f565b929592945050506040919091013590565b6000602082840312156126d657600080fd5b81356108198161263f565b801515811461265457600080fd5b6000806040838503121561270257600080fd5b823561270d8161263f565b9150602083013561271d816126e1565b809150509250929050565b60008060006060848603121561273d57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561276957600080fd5b8335925060208401356126b38161263f565b600080600080600080600080610100898b03121561279857600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080604083850312156127e357600080fd5b82356127ee8161263f565b9150602083013561271d8161263f565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107b0576107b061281e565b60008261286857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561287f57600080fd5b8151610819816126e1565b634e487b7160e01b600052603260045260246000fd5b6000600182016128b2576128b261281e565b5060010190565b808201808211156107b0576107b061281e565b818103818111156107b0576107b061281e565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561290757600080fd5b81516108198161263f565b600081518084526020808501945080840160005b8381101561294b5781516001600160a01b031687529582019590820190600101612926565b509495945050505050565b85815284602082015260a06040820152600061297560a0830186612912565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156129a757600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129d257600080fd5b5051919050565b8481526080602082015260006129f26080830186612912565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204d1cb53f9736ff7f232333511c2b1f850d38352a2a92a476e5319e12040293bd64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063bfefeb46116100ab578063ea7d39cb1161006f578063ea7d39cb14610703578063ef43b02b14610733578063efca2eed14610753578063f2fde38b14610769578063ffd49c841461078957600080fd5b8063bfefeb461461060d578063ca89b8991461062d578063ce7c2ac214610666578063dd62ed3e146106bd578063e87655cf1461046f57600080fd5b806396191973116100f25780639619197314610582578063997664d7146105a2578063a8aa1b31146105b8578063a9059cbb146105d8578063b53c69f0146105f857600080fd5b8063715018a6146104ed578063893d20e8146105025780638cd4426d146105205780639358928b1461054057806395d89b411461055557600080fd5b80633e413bee116101bc5780635a0ce676116101805780635a0ce6761461044f5780635f7bcd701461046f57806360e719621461049757806365d55b00146104ad57806370a08231146104cd57600080fd5b80633e413bee146103895780633f4218e0146103c1578063420bbf20146103f157806348ff2b8b146104195780634fab0ae81461043957600080fd5b8063293230b811610203578063293230b8146102f15780632c218c0a146103085780632f54bf6e14610328578063313ce567146103575780633a98ef391461037357600080fd5b806306fdde0314610240578063095ea7b31461028257806318160ddd146102b257806323b872dd146102d157600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5060408051808201909152600781526608ec2dac4d8cab60cb1b60208201525b60405161027991906125f1565b60405180910390f35b34801561028e57600080fd5b506102a261029d366004612657565b61079f565b6040519015158152602001610279565b3480156102be57600080fd5b506001545b604051908152602001610279565b3480156102dd57600080fd5b506102a26102ec366004612683565b6107b6565b3480156102fd57600080fd5b50610306610820565b005b34801561031457600080fd5b506102c36103233660046126c4565b610868565b34801561033457600080fd5b506102a26103433660046126c4565b6000546001600160a01b0391821691161490565b34801561036357600080fd5b5060405160098152602001610279565b34801561037f57600080fd5b506102c360195481565b34801561039557600080fd5b506018546103a9906001600160a01b031681565b6040516001600160a01b039091168152602001610279565b3480156103cd57600080fd5b506102a26103dc3660046126c4565b60076020526000908152604090205460ff1681565b3480156103fd57600080fd5b506103a973b898207edcb6fb0131fafb140e4432ec1feba1e281565b34801561042557600080fd5b506103066104343660046126ef565b6108f3565b34801561044557600080fd5b506102c360245481565b34801561045b57600080fd5b5061030661046a366004612728565b610948565b34801561047b57600080fd5b506103a9735a487284cf5038d7d4aec8e4f75e5a331f8ba6ec81565b3480156104a357600080fd5b506102c360255481565b3480156104b957600080fd5b506103066104c8366004612728565b610a9c565b3480156104d957600080fd5b506102c36104e83660046126c4565b610ad4565b3480156104f957600080fd5b50610306610aef565b34801561050e57600080fd5b506000546001600160a01b03166103a9565b34801561052c57600080fd5b5061030661053b366004612657565b610b5e565b34801561054c57600080fd5b506102c3610bfe565b34801561056157600080fd5b5060408051808201909152600481526308e9a84b60e31b602082015261026c565b34801561058e57600080fd5b5061030661059d366004612754565b610c2f565b3480156105ae57600080fd5b506102c3601a5481565b3480156105c457600080fd5b50600a546103a9906001600160a01b031681565b3480156105e457600080fd5b506102a26105f3366004612657565b610eb8565b34801561060457600080fd5b50610306610ec5565b34801561061957600080fd5b5061030661062836600461277b565b610ed0565b34801561063957600080fd5b506102c36106483660046126c4565b6001600160a01b031660009081526021602052604090206002015490565b34801561067257600080fd5b506106a26106813660046126c4565b60216020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610279565b3480156106c957600080fd5b506102c36106d83660046127d0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b34801561070f57600080fd5b506102a261071e3660046126c4565b60066020526000908152604090205460ff1681565b34801561073f57600080fd5b5061030661074e3660046126ef565b610fd6565b34801561075f57600080fd5b506102c3601b5481565b34801561077557600080fd5b506103066107843660046126c4565b61104e565b34801561079557600080fd5b506102c360235481565b60006107ac3384846110cc565b5060015b92915050565b60006107c38484846111f0565b610815843361081085604051806060016040528060288152602001612a0f602891396001600160a01b038a1660009081526008602090815260408083203384529091529020549190611396565b6110cc565b5060015b9392505050565b6000546001600160a01b031633146108535760405162461bcd60e51b815260040161084a906127fe565b60405180910390fd5b600a805460ff60a01b1916600160a01b179055565b6001600160a01b038116600090815260216020526040812054810361088f57506000919050565b6001600160a01b0382166000908152602160205260408120546108b1906113c2565b6001600160a01b0384166000908152602160205260409020600101549091508082116108e1575060009392505050565b6108eb82826113df565b949350505050565b6000546001600160a01b0316331461091d5760405162461bcd60e51b815260040161084a906127fe565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109725760405162461bcd60e51b815260040161084a906127fe565b60006127108461098160015490565b61098b9190612834565b610995919061284b565b90506000612710846109a660015490565b6109b09190612834565b6109ba919061284b565b90506000612710846109cb60015490565b6109d59190612834565b6109df919061284b565b60028490556003839055600481905590506000610a126103e8610a0c6005610a0660015490565b906113eb565b906113f7565b9050808410158015610a245750808310155b8015610a305750808210155b610a935760405162461bcd60e51b815260206004820152602e60248201527f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560448201526d206c657373207468616e202e352560901b606482015260840161084a565b50505050505050565b6000546001600160a01b03163314610ac65760405162461bcd60e51b815260040161084a906127fe565b602392909255602455602555565b6001600160a01b031660009081526005602052604090205490565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260040161084a906127fe565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b03163314610b885760405162461bcd60e51b815260040161084a906127fe565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf9919061286d565b505050565b6000610c2a610c0d6000610ad4565b610c24610c1b61dead610ad4565b600154906113df565b906113df565b905090565b601e54336000829003610c43575050505050565b6000805a336000908152600560209081526040808320546006909252822054929350909160ff16610d41575b8884108015610c7d57508582105b15610d3c578560225410610c915760006022555b610cc3601e60225481548110610ca957610ca961288a565b6000918252602090912001546001600160a01b0316611403565b15610cfa57610cfa601e60225481548110610ce057610ce061288a565b6000918252602090912001546001600160a01b0316611447565b610d0f610d085a85906113df565b859061157f565b93505a602280549194506000610d24836128a0565b91905055508180610d34906128a0565b925050610c6f565b610ead565b6000610d4c86610868565b6001600160a01b038a16600090815260056020526040902054909150610d7290896113df565b6001600160a01b038a16600090815260056020526040902055610d9588836128b9565b336000908152600560205260409020558015610eab57601b54610db8908261157f565b601b5560185460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e32919061286d565b506001600160a01b0386166000908152602080805260408083204290556021909152902060020154610e64908261157f565b6001600160a01b0387166000908152602160205260409020600281019190915554610e8e906113c2565b6001600160a01b0387166000908152602160205260409020600101555b505b505050505050505050565b60006107ac3384846111f0565b610ece33611447565b565b6000546001600160a01b03163314610efa5760405162461bcd60e51b815260040161084a906127fe565b600b889055600c879055600f869055600d859055600e849055601083905560118290556012819055601354610f309060056113f7565b60105411158015610f505750601354610f4a9060056113f7565b60115411155b8015610f6b5750601354610f659060056113f7565b60125411155b610fcc5760405162461bcd60e51b815260206004820152602c60248201527f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60448201526b6f7265207468616e2032302560a01b606482015260840161084a565b5050505050505050565b6000546001600160a01b031633146110005760405162461bcd60e51b815260040161084a906127fe565b6001600160a01b0382166000908152600660205260409020805460ff1916821580159190911790915561103c5761103882600061158b565b5050565b6110388261104984610ad4565b61158b565b6000546001600160a01b031633146110785760405162461bcd60e51b815260040161084a906127fe565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b03831661112e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161084a565b6001600160a01b03821661118f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161084a565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6111fb8383836116a2565b611205838361183c565b6112108383836118cd565b61121a83836119b9565b611225838383611a10565b61122f8383611b3d565b6001600160a01b03831660009081526005602052604090205461125290826113df565b6001600160a01b0384166000908152600560205260408120919091556112788484611b60565b611282578161128d565b61128d848484611ba6565b6001600160a01b0384166000908152600560205260409020549091506112b3908261157f565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113079085815260200190565b60405180910390a36001600160a01b03841660009081526006602052604090205460ff1661133c5761133c8461104986610ad4565b6001600160a01b03831660009081526006602052604090205460ff16611369576113698361104985610ad4565b6001600160a01b038316600090815260216020526040902054156113905761139083611447565b50505050565b600081848411156113ba5760405162461bcd60e51b815260040161084a91906125f1565b505050900390565b60006107b0601d54610a0c601c54856113eb90919063ffffffff16565b600061081982846128cc565b60006108198284612834565b6000610819828461284b565b6023546001600160a01b03821660009081526020805260408120549091429161142c91906128b9565b1080156107b0575060245461144083610868565b1192915050565b6001600160a01b03811660009081526021602052604081205490036114695750565b600061147482610868565b9050801561103857601b54611489908261157f565b601b5560185460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156114df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611503919061286d565b506001600160a01b0382166000908152602080805260408083204290556021909152902060020154611535908261157f565b6001600160a01b038316600090815260216020526040902060028101919091555461155f906113c2565b6001600160a01b0383166000908152602160205260409020600101555050565b600061081982846128b9565b6000811180156115b157506001600160a01b038216600090815260216020526040902054155b1561161757601e80546001600160a01b0384166000818152601f60205260408120839055600183018455929092527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b031916909117905561164a565b8015801561163c57506001600160a01b03821660009081526021602052604090205415155b1561164a5761164a82611c94565b6001600160a01b03821660009081526021602052604090205460195461167b918391611675916113df565b9061157f565b6019556001600160a01b038216600090815260216020526040902081905561155f816113c2565b6001600160a01b0383166117065760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161084a565b6001600160a01b0382166117685760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161084a565b600081116117ca5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161084a565b6117d383610ad4565b811115610bf95760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b606482015260840161084a565b6001600160a01b03821660009081526007602052604090205460ff1615801561187e57506001600160a01b03811660009081526007602052604090205460ff16155b1561103857600a54600160a01b900460ff166110385760405162461bcd60e51b815260206004820152600e60248201526d1d1c98591a5b99d05b1b1bddd95960921b604482015260640161084a565b6001600160a01b03831660009081526007602052604090205460ff1615801561190f57506001600160a01b03821660009081526007602052604090205460ff16155b80156119295750600a546001600160a01b03838116911614155b801561194057506001600160a01b03821661dead14155b15610bf9576004546001600160a01b03831660009081526005602052604090205461196b908361157f565b1115610bf95760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000604482015260640161084a565b600a546001600160a01b0382811691161480156119ef57506001600160a01b03821660009081526007602052604090205460ff16155b1561103857600160156000828254611a0791906128b9565b90915550505050565b600a546001600160a01b03848116911614611ab15760035481111580611a4e57506001600160a01b03831660009081526007602052604090205460ff165b80611a7157506001600160a01b03821660009081526007602052604090205460ff165b611ab15760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161084a565b60025481111580611ada57506001600160a01b03831660009081526007602052604090205460ff165b80611afd57506001600160a01b03821660009081526007602052604090205460ff165b610bf95760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b604482015260640161084a565b611b478282611da9565b1561103857611b57601654611e5f565b60006015555050565b6001600160a01b03821660009081526007602052604081205460ff161580156108195750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611bb38585612014565b1115611c8d576000611bd6611bc88686612014565b601354610a069086906113f7565b30600090815260056020526040902054909150611bf3908261157f565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c449085815260200190565b60405180910390a3600f5415611c7b57611c7b3061dead611c76600f54610a06601354896113f790919063ffffffff16565b6111f0565b611c8583826113df565b915050610819565b5092915050565b601e8054611ca4906001906128cc565b81548110611cb457611cb461288a565b60009182526020808320909101546001600160a01b038481168452601f909252604090922054601e80549290931692918110611cf257611cf261288a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152601f918290526040812054601e805491939291611d3e906001906128cc565b81548110611d4e57611d4e61288a565b60009182526020808320909101546001600160a01b03168352820192909252604001902055601e805480611d8457611d846128df565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600080601654611db830610ad4565b6018549111159150600160a01b900460ff16158015611dd9575060145460ff165b8015611dee5750600a54600160a01b900460ff165b8015611e1357506001600160a01b03841660009081526007602052604090205460ff16155b8015611e3857506001600160a01b03831660009081526007602052604090205460ff16155b8015611e515750600a546001600160a01b038481169116145b80156108eb57509392505050565b6018805460ff60a01b1916600160a01b179055600d54600e54600c54600b54600093611e9c93600293610a0693611675929183918290600161157f565b90506000611eb982610a0c600b54866113eb90919063ffffffff16565b90506000611ec784836113df565b905047611ed38261205f565b6000611edf47836113df565b90506000611f02611efb600b54886113df90919063ffffffff16565b83906113f7565b90506000611f1b600b54836113eb90919063ffffffff16565b90508015611f2d57611f2d86826121b9565b600c54600090611f4290610a068560026113eb565b90508015611f8d57604051735a487284cf5038d7d4aec8e4f75e5a331f8ba6ec9082156108fc029083906000818181858888f19350505050158015611f8b573d6000803e3d6000fd5b505b600d54600090611fa290610a068660026113eb565b90508015611fb357611fb38161227d565b4715611ffb5760405173b898207edcb6fb0131fafb140e4432ec1feba1e2904780156108fc02916000818181858888f19350505050158015611ff9573d6000803e3d6000fd5b505b50506018805460ff60a01b191690555050505050505050565b600a546000906001600160a01b039081169083160361203657506011546107b0565b600a546001600160a01b039081169084160361205557506010546107b0565b5060125492915050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120945761209461288a565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061211191906128f5565b816001815181106121245761212461288a565b6001600160a01b03928316602091820292909201015260095461214a91309116846110cc565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790612183908590600090869030904290600401612956565b600060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b505050505050565b6009546121d19030906001600160a01b0316846110cc565b60095460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820152735a487284cf5038d7d4aec8e4f75e5a331f8ba6ec60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015612251573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122769190612992565b5050505050565b6018546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156122c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ea91906129c0565b60408051600280825260608201835292935060009290916020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237d91906128f5565b816000815181106123905761239061288a565b6001600160a01b0392831660209182029290920101526018548251911690829060019081106123c1576123c161288a565b6001600160a01b03928316602091820292909201015260095460405163b6f9de9560e01b815291169063b6f9de95908590612407906000908690309042906004016129d9565b6000604051808303818588803b15801561242057600080fd5b505af1158015612434573d6000803e3d6000fd5b5050601854600a546040516370a0823160e01b81526001600160a01b03918216600482015260009550911692506370a082319150602401602060405180830381865afa158015612488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ac91906129c0565b6018546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e91906129c0565b9050600061252c82866113df565b905060006125a961253d848661157f565b6018546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015612585573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2491906129c0565b90506125c16125b8838361157f565b601a549061157f565b601a55601954601d546125e5916125dc91610a0c90866113eb565b601c549061157f565b601c5550505050505050565b600060208083528351808285015260005b8181101561261e57858101830151858201604001528201612602565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461265457600080fd5b50565b6000806040838503121561266a57600080fd5b82356126758161263f565b946020939093013593505050565b60008060006060848603121561269857600080fd5b83356126a38161263f565b925060208401356126b38161263f565b929592945050506040919091013590565b6000602082840312156126d657600080fd5b81356108198161263f565b801515811461265457600080fd5b6000806040838503121561270257600080fd5b823561270d8161263f565b9150602083013561271d816126e1565b809150509250929050565b60008060006060848603121561273d57600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561276957600080fd5b8335925060208401356126b38161263f565b600080600080600080600080610100898b03121561279857600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080604083850312156127e357600080fd5b82356127ee8161263f565b9150602083013561271d8161263f565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176107b0576107b061281e565b60008261286857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561287f57600080fd5b8151610819816126e1565b634e487b7160e01b600052603260045260246000fd5b6000600182016128b2576128b261281e565b5060010190565b808201808211156107b0576107b061281e565b818103818111156107b0576107b061281e565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561290757600080fd5b81516108198161263f565b600081518084526020808501945080840160005b8381101561294b5781516001600160a01b031687529582019590820190600101612926565b509495945050505050565b85815284602082015260a06040820152600061297560a0830186612912565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156129a757600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156129d257600080fd5b5051919050565b8481526080602082015260006129f26080830186612912565b6001600160a01b0394909416604083015250606001529291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204d1cb53f9736ff7f232333511c2b1f850d38352a2a92a476e5319e12040293bd64736f6c63430008110033

Deployed Bytecode Sourcemap

6140:21426:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9691:83;;;;;;;;;;-1:-1:-1;9761:5:0;;;;;;;;;;;;-1:-1:-1;;;9761:5:0;;;;9691:83;;;;;;;:::i;:::-;;;;;;;;11117:191;;;;;;;;;;-1:-1:-1;11117:191:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11117:191:0;1023:187:1;10159:100:0;;;;;;;;;;-1:-1:-1;10239:12:0;;10159:100;;;1361:25:1;;;1349:2;1334:18;10159:100:0;1215:177:1;20239:442:0;;;;;;;;;;-1:-1:-1;20239:442:0;;;;;:::i;:::-;;:::i;9968:83::-;;;;;;;;;;;;;:::i;:::-;;27002:561;;;;;;;;;;-1:-1:-1;27002:561:0;;;;;:::i;:::-;;:::i;4120:103::-;;;;;;;;;;-1:-1:-1;4120:103:0;;;;;:::i;:::-;4175:4;4210:5;-1:-1:-1;;;;;4199:16:0;;;4210:5;;4199:16;;4120:103;9877:83;;;;;;;;;;-1:-1:-1;9877:83:0;;6354:1;2252:36:1;;2240:2;2225:18;9877:83:0;2110:184:1;7710:26:0;;;;;;;;;;;;;;;;7501:64;;;;;;;;;;-1:-1:-1;7501:64:0;;;;-1:-1:-1;;;;;7501:64:0;;;;;;-1:-1:-1;;;;;2463:32:1;;;2445:51;;2433:2;2418:18;7501:64:0;2299:203:1;6729:43:0;;;;;;;;;;-1:-1:-1;6729:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8464:89;;;;;;;;;;;;8511:42;8464:89;;10985:124;;;;;;;;;;-1:-1:-1;10985:124:0;;;;;:::i;:::-;;:::i;8288:45::-;;;;;;;;;;;;;;;;13163:645;;;;;;;;;;-1:-1:-1;13163:645:0;;;;;:::i;:::-;;:::i;8560:87::-;;;;;;;;;;;;8605:42;8560:87;;8340:33;;;;;;;;;;;;;;;;26189:281;;;;;;;;;;-1:-1:-1;26189:281:0;;;;;:::i;:::-;;:::i;10267:119::-;;;;;;;;;;-1:-1:-1;10267:119:0;;;;;:::i;:::-;;:::i;4231:139::-;;;;;;;;;;;;;:::i;10059:92::-;;;;;;;;;;-1:-1:-1;10111:7:0;10138:5;-1:-1:-1;;;;;10138:5:0;10059:92;;24823:140;;;;;;;;;;-1:-1:-1;24823:140:0;;;;;:::i;:::-;;:::i;11316:154::-;;;;;;;;;;;;;:::i;9782:87::-;;;;;;;;;;-1:-1:-1;9854:7:0;;;;;;;;;;;;-1:-1:-1;;;9854:7:0;;;;9782:87;;22838:1698;;;;;;;;;;-1:-1:-1;22838:1698:0;;;;;:::i;:::-;;:::i;7743:29::-;;;;;;;;;;;;;;;;6876:19;;;;;;;;;;-1:-1:-1;6876:19:0;;;;-1:-1:-1;;;;;6876:19:0;;;10394:197;;;;;;;;;;-1:-1:-1;10394:197:0;;;;;:::i;:::-;;:::i;25205:81::-;;;;;;;;;;;;;:::i;13816:775::-;;;;;;;;;;-1:-1:-1;13816:775:0;;;;;:::i;:::-;;:::i;24971:222::-;;;;;;;;;;-1:-1:-1;24971:222:0;;;;;:::i;:::-;-1:-1:-1;;;;;25151:19:0;25071:7;25151:19;;;:6;:19;;;;;:33;;;;24971:222;8162:39;;;;;;;;;;-1:-1:-1;8162:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4594:25:1;;;4650:2;4635:18;;4628:34;;;;4678:18;;;4671:34;4582:2;4567:18;8162:39:0;4392:319:1;10599:184:0;;;;;;;;;;-1:-1:-1;10599:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;10748:18:0;;;10716:7;10748:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10599:184;6675:47;;;;;;;;;;-1:-1:-1;6675:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21066:287;;;;;;;;;;-1:-1:-1;21066:287:0;;;;;:::i;:::-;;:::i;7779:31::-;;;;;;;;;;;;;;;;4378:136;;;;;;;;;;-1:-1:-1;4378:136:0;;;;;:::i;:::-;;:::i;8244:37::-;;;;;;;;;;;;;;;;11117:191;11219:4;11241:37;11250:10;11262:7;11271:6;11241:8;:37::i;:::-;-1:-1:-1;11296:4:0;11117:191;;;;;:::o;20239:442::-;20371:4;20388:36;20398:6;20406:9;20417:6;20388:9;:36::i;:::-;20435:216;20458:6;20479:10;20504:136;20558:6;20504:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20504:19:0;;;;;;:11;:19;;;;;;;;20524:10;20504:31;;;;;;;;;:136;:35;:136::i;:::-;20435:8;:216::i;:::-;-1:-1:-1;20669:4:0;20239:442;;;;;;:::o;9968:83::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;;;;;;;;;10022:14:::1;:21:::0;;-1:-1:-1;;;;10022:21:0::1;-1:-1:-1::0;;;10022:21:0::1;::::0;;9968:83::o;27002:561::-;-1:-1:-1;;;;;27126:19:0;;27097:7;27126:19;;;:6;:19;;;;;:26;:31;;27122:72;;-1:-1:-1;27181:1:0;;27002:561;-1:-1:-1;27002:561:0:o;27122:72::-;-1:-1:-1;;;;;27268:19:0;;27204:30;27268:19;;;:6;:19;;;;;:26;27237:68;;:16;:68::i;:::-;-1:-1:-1;;;;;27351:19:0;;27316:32;27351:19;;;:6;:19;;;;;:33;;;27204:101;;-1:-1:-1;27399:50:0;;;27395:91;;-1:-1:-1;27473:1:0;;27002:561;-1:-1:-1;;;27002:561:0:o;27395:91::-;27503:52;:22;27530:24;27503:26;:52::i;:::-;27496:59;27002:561;-1:-1:-1;;;;27002:561:0:o;10985:124::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11069:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;11069:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10985:124::o;13163:645::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;13293:13:::1;13334:5;13326:4;13310:13;10239:12:::0;;;10159:100;13310:13:::1;:20;;;;:::i;:::-;13309:30;;;;:::i;:::-;13293:46;;13350:19;13399:5;13389:6;13373:13;10239:12:::0;;;10159:100;13373:13:::1;:22;;;;:::i;:::-;13372:32;;;;:::i;:::-;13350:54;;13415:17;13463:5;13452:7;13436:13;10239:12:::0;;;10159:100;13436:13:::1;:23;;;;:::i;:::-;13435:33;;;;:::i;:::-;13479:12;:20:::0;;;13510:14:::1;:28:::0;;;13549:15:::1;:27:::0;;;13415:53;-1:-1:-1;;13603:30:0::1;13628:4;13603:20;13621:1;13603:13;10239:12:::0;;;10159:100;13603:13:::1;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;13587:46;;13675:5;13666;:14;;:38;;;;;13699:5;13684:11;:20;;13666:38;:60;;;;;13721:5;13708:9;:18;;13666:60;13644:156;;;::::0;-1:-1:-1;;;13644:156:0;;6432:2:1;13644:156:0::1;::::0;::::1;6414:21:1::0;6471:2;6451:18;;;6444:30;6510:34;6490:18;;;6483:62;-1:-1:-1;;;6561:18:1;;;6554:44;6615:19;;13644:156:0::1;6230:410:1::0;13644:156:0::1;13282:526;;;;13163:645:::0;;;:::o;26189:281::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;26352:9:::1;:22:::0;;;;26385:15:::1;:34:::0;26430:14:::1;:32:::0;26189:281::o;10267:119::-;-1:-1:-1;;;;;10360:18:0;10333:7;10360:18;;;:9;:18;;;;;;;10267:119::o;4231:139::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;4312:1:::1;4296:18:::0;;-1:-1:-1;;;;;;4296:18:0::1;::::0;;4330:32:::1;::::0;2445:51:1;;;4330:32:0::1;::::0;2433:2:1;2418:18;4330:32:0::1;;;;;;;4231:139::o:0;24823:140::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;24909:46:::1;::::0;-1:-1:-1;;;24909:46:0;;24935:10:::1;24909:46;::::0;::::1;6819:51:1::0;6886:18;;;6879:34;;;-1:-1:-1;;;;;24909:25:0;::::1;::::0;::::1;::::0;6792:18:1;;24909:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24823:140:::0;;:::o;11316:154::-;11375:7;11402:60;11440:21;11458:1;11440:9;:21::i;:::-;11402:33;11419:15;8415:42;11419:9;:15::i;:::-;11402:12;;;:16;:33::i;:::-;:37;;:60::i;:::-;11395:67;;11316:154;:::o;22838:1698::-;22993:12;:19;23038:10;22966:24;23063:21;;;23059:60;;23101:7;;22838:1698;;;:::o;23059:60::-;23129:15;23159;23177:9;23262:10;23197:18;23252:21;;;:9;:21;;;;;;;;;23289:15;:27;;;;;;23159;;-1:-1:-1;23197:18:0;;23289:27;;23284:1245;;23333:507;23350:3;23340:7;:13;:46;;;;;23370:16;23357:10;:29;23340:46;23333:507;;;23427:16;23411:12;;:32;23407:97;;23483:1;23468:12;:16;23407:97;23526:44;23543:12;23556;;23543:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23543:26:0;23526:16;:44::i;:::-;23522:137;;;23595:44;23612:12;23625;;23612:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23612:26:0;23595:16;:44::i;:::-;23687:35;23699:22;23711:9;23699:7;;:11;:22::i;:::-;23687:7;;:11;:35::i;:::-;23677:45;;23751:9;23779:12;:14;;23741:19;;-1:-1:-1;23779:12:0;:14;;;:::i;:::-;;;;;;23812:12;;;;;:::i;:::-;;;;23333:507;;;23284:1245;;;23872:14;23889:22;23906:4;23889:16;:22::i;:::-;-1:-1:-1;;;;;23948:19:0;;;;;;:9;:19;;;;;;23872:39;;-1:-1:-1;23948:32:0;;23972:7;23948:23;:32::i;:::-;-1:-1:-1;;;;;23926:19:0;;;;;;:9;:19;;;;;:54;24019:21;24033:7;24019:11;:21;:::i;:::-;24005:10;23995:21;;;;:9;:21;;;;;:45;24059:10;;24055:463;;24109:16;;:28;;24130:6;24109:20;:28::i;:::-;24090:16;:47;24163:4;;24156:35;;-1:-1:-1;;;24156:35:0;;-1:-1:-1;;;;;6837:32:1;;;24156:35:0;;;6819:51:1;6886:18;;;6879:34;;;24163:4:0;;;;24156:21;;6792:18:1;;24156:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;24210:23:0;;;;;;:17;:23;;;;;;;24236:15;24210:41;;24299:6;:12;;;;;:26;;;:78;;24352:6;24299:30;:78::i;:::-;-1:-1:-1;;;;;24270:12:0;;;;;;:6;:12;;;;;:26;;;:107;;;;24464:19;24425:77;;:16;:77::i;:::-;-1:-1:-1;;;;;24396:12:0;;;;;;:6;:12;;;;;:26;;:106;24055:463;23857:672;23284:1245;22955:1581;;;;;;22838:1698;;;:::o;10394:197::-;10499:4;10521:40;10531:10;10543:9;10554:6;10521:9;:40::i;25205:81::-;25250:28;25267:10;25250:16;:28::i;:::-;25205:81::o;13816:775::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;14100:12:::1;:25:::0;;;14136:12:::1;:25:::0;;;14172:7:::1;:15:::0;;;14198:10:::1;:21:::0;;;14230:14:::1;:29:::0;;;14270:8:::1;:17:::0;;;14298:7:::1;:15:::0;;;14324:11:::1;:20:::0;;;14389:11:::1;::::0;:18:::1;::::0;14405:1:::1;14389:15;:18::i;:::-;14377:8;;:30;;:80;;;;-1:-1:-1::0;14439:11:0::1;::::0;:18:::1;::::0;14455:1:::1;14439:15;:18::i;:::-;14428:7;;:29;;14377:80;:134;;;;-1:-1:-1::0;14493:11:0::1;::::0;:18:::1;::::0;14509:1:::1;14493:15;:18::i;:::-;14478:11;;:33;;14377:134;14355:228;;;::::0;-1:-1:-1;;;14355:228:0;;7778:2:1;14355:228:0::1;::::0;::::1;7760:21:1::0;7817:2;7797:18;;;7790:30;7856:34;7836:18;;;7829:62;-1:-1:-1;;;7907:18:1;;;7900:42;7959:19;;14355:228:0::1;7576:408:1::0;14355:228:0::1;13816:775:::0;;;;;;;;:::o;21066:287::-;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21177:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;21177:32:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;21220:126:::1;;21247:19;21256:6;21264:1;21247:8;:19::i;:::-;21066:287:::0;;:::o;21220:126::-:1;21299:35;21308:6;21316:17;21326:6;21316:9;:17::i;:::-;21299:8;:35::i;4378:136::-:0;4175:4;4210:5;-1:-1:-1;;;;;4210:5:0;4070:10;4199:16;4054:38;;;;-1:-1:-1;;;4054:38:0;;;;;;;:::i;:::-;4454:5:::1;:11:::0;;-1:-1:-1;;;;;;4454:11:0::1;-1:-1:-1::0;;;;;4454:11:0;::::1;::::0;;::::1;::::0;;;4481:25:::1;::::0;2445:51:1;;;4481:25:0::1;::::0;2433:2:1;2418:18;4481:25:0::1;;;;;;;4378:136:::0;:::o;20689:369::-;-1:-1:-1;;;;;20816:19:0;;20808:68;;;;-1:-1:-1;;;20808:68:0;;8407:2:1;20808:68:0;;;8389:21:1;8446:2;8426:18;;;8419:30;8485:34;8465:18;;;8458:62;-1:-1:-1;;;8536:18:1;;;8529:34;8580:19;;20808:68:0;8205:400:1;20808:68:0;-1:-1:-1;;;;;20895:21:0;;20887:68;;;;-1:-1:-1;;;20887:68:0;;8812:2:1;20887:68:0;;;8794:21:1;8851:2;8831:18;;;8824:30;8890:34;8870:18;;;8863:62;-1:-1:-1;;;8941:18:1;;;8934:32;8983:19;;20887:68:0;8610:398:1;20887:68:0;-1:-1:-1;;;;;20966:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21018:32;;1361:25:1;;;21018:32:0;;1334:18:1;21018:32:0;;;;;;;20689:369;;;:::o;12034:1121::-;12157:37;12168:6;12176:9;12187:6;12157:10;:37::i;:::-;12229:38;12249:6;12257:9;12229:19;:38::i;:::-;12279:41;12294:6;12302:9;12313:6;12279:14;:41::i;:::-;12331:35;12348:6;12356:9;12331:16;:35::i;:::-;12378:39;12391:6;12399:9;12410:6;12378:12;:39::i;:::-;12441:27;12450:6;12458:9;12441:8;:27::i;:::-;-1:-1:-1;;;;;12534:17:0;;;;;;:9;:17;;;;;;:29;;12556:6;12534:21;:29::i;:::-;-1:-1:-1;;;;;12514:17:0;;;;;;:9;:17;;;;;:49;;;;12599:32;12524:6;12621:9;12599:13;:32::i;:::-;:104;;12697:6;12599:104;;;12647:34;12655:6;12663:9;12674:6;12647:7;:34::i;:::-;-1:-1:-1;;;;;12737:20:0;;;;;;:9;:20;;;;;;12574:129;;-1:-1:-1;12737:40:0;;12574:129;12737:24;:40::i;:::-;-1:-1:-1;;;;;12714:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12793:43;;;;;;;;;;12821:14;1361:25:1;;1349:2;1334:18;;1215:177;12793:43:0;;;;;;;;-1:-1:-1;;;;;12852:23:0;;;;;;:15;:23;;;;;;;;12847:92;;12892:35;12901:6;12909:17;12919:6;12909:9;:17::i;12892:35::-;-1:-1:-1;;;;;12954:26:0;;;;;;:15;:26;;;;;;;;12949:101;;12997:41;13006:9;13017:20;13027:9;13017;:20::i;12997:41::-;-1:-1:-1;;;;;13064:17:0;;13091:1;13064:17;;;:6;:17;;;;;:24;:28;13060:88;;13109:27;13126:9;13109:16;:27::i;:::-;12146:1009;12034:1121;;;:::o;2032:240::-;2152:7;2213:12;2205:6;;;;2197:29;;;;-1:-1:-1;;;2197:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2248:5:0;;;2032:240::o;25982:199::-;26073:7;26118:55;26150:22;;26118:27;26128:16;;26118:5;:9;;:27;;;;:::i;332:98::-;390:7;417:5;421:1;417;:5;:::i;438:98::-;496:7;523:5;527:1;523;:5;:::i;544:98::-;602:7;629:5;633:1;629;:5;:::i;24544:271::-;24716:9;;-1:-1:-1;;;;;24683:30:0;;24641:4;24683:30;;;:17;:30;;;;;;24641:4;;24728:15;;24683:42;;24716:9;24683:42;:::i;:::-;:60;:124;;;;;24792:15;;24760:29;24777:11;24760:16;:29::i;:::-;:47;24663:144;24544:271;-1:-1:-1;;24544:271:0:o;25294:680::-;-1:-1:-1;;;;;25365:19:0;;;;;;:6;:19;;;;;:26;:31;;25361:70;;25294:680;:::o;25361:70::-;25441:14;25458:29;25475:11;25458:16;:29::i;:::-;25441:46;-1:-1:-1;25502:10:0;;25498:469;;25548:16;;:28;;25569:6;25548:20;:28::i;:::-;25529:16;:47;25598:4;;25591:42;;-1:-1:-1;;;25591:42:0;;-1:-1:-1;;;;;6837:32:1;;;25591:42:0;;;6819:51:1;6886:18;;;6879:34;;;25598:4:0;;;;25591:21;;6792:18:1;;25591:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;25648:30:0;;;;;;:17;:30;;;;;;;25681:15;25648:48;;25747:6;:19;;;;;:51;;;:81;;25821:6;25747:73;:81::i;:::-;-1:-1:-1;;;;;25711:19:0;;;;;;:6;:19;;;;;:33;;;:117;;;;25914:26;25879:76;;:16;:76::i;:::-;-1:-1:-1;;;;;25843:19:0;;;;;;:6;:19;;;;;:33;;:112;25350:624;25294:680;:::o;226:98::-;284:7;311:5;315:1;311;:5;:::i;21361:539::-;21449:1;21440:6;:10;:45;;;;-1:-1:-1;;;;;;21454:19:0;;;;;;:6;:19;;;;;:26;:31;21440:45;21436:216;;;26577:12;:19;;-1:-1:-1;;;;;26543:31:0;;;;;;:18;:31;;;;;:53;;;26607:30;;;;;;;;;;;;;-1:-1:-1;;;;;;26607:30:0;;;;;;21436:216;;;21551:11;;:45;;;;-1:-1:-1;;;;;;21566:19:0;;21595:1;21566:19;;;:6;:19;;;;;:26;:30;;21551:45;21547:105;;;21613:27;21628:11;21613:14;:27::i;:::-;-1:-1:-1;;;;;21692:19:0;;;;;;:6;:19;;;;;:26;21676:11;;:55;;21724:6;;21676:43;;:15;:43::i;:::-;:47;;:55::i;:::-;21662:11;:69;-1:-1:-1;;;;;21742:19:0;;;;;;:6;:19;;;;;:35;;;21824:68;21771:6;21824:16;:68::i;11478:548::-;-1:-1:-1;;;;;11616:20:0;;11608:70;;;;-1:-1:-1;;;11608:70:0;;9348:2:1;11608:70:0;;;9330:21:1;9387:2;9367:18;;;9360:30;9426:34;9406:18;;;9399:62;-1:-1:-1;;;9477:18:1;;;9470:35;9522:19;;11608:70:0;9146:401:1;11608:70:0;-1:-1:-1;;;;;11697:23:0;;11689:71;;;;-1:-1:-1;;;11689:71:0;;9754:2:1;11689:71:0;;;9736:21:1;9793:2;9773:18;;;9766:30;9832:34;9812:18;;;9805:62;-1:-1:-1;;;9883:18:1;;;9876:33;9926:19;;11689:71:0;9552:399:1;11689:71:0;11810:1;11793:6;:19;11771:110;;;;-1:-1:-1;;;11771:110:0;;10158:2:1;11771:110:0;;;10140:21:1;10197:2;10177:18;;;10170:30;10236:34;10216:18;;;10209:62;-1:-1:-1;;;10287:18:1;;;10280:39;10336:19;;11771:110:0;9956:405:1;11771:110:0;11924:17;11934:6;11924:9;:17::i;:::-;11914:6;:27;;11892:126;;;;-1:-1:-1;;;11892:126:0;;10568:2:1;11892:126:0;;;10550:21:1;10607:2;10587:18;;;10580:30;10646:34;10626:18;;;10619:62;-1:-1:-1;;;10697:18:1;;;10690:47;10754:19;;11892:126:0;10366:413:1;14599:240:0;-1:-1:-1;;;;;14716:19:0;;;;;;:11;:19;;;;;;;;14715:20;:47;;;;-1:-1:-1;;;;;;14740:22:0;;;;;;:11;:22;;;;;;;;14739:23;14715:47;14711:121;;;14787:14;;-1:-1:-1;;;14787:14:0;;;;14779:41;;;;-1:-1:-1;;;14779:41:0;;10986:2:1;14779:41:0;;;10968:21:1;11025:2;11005:18;;;10998:30;-1:-1:-1;;;11044:18:1;;;11037:44;11098:18;;14779:41:0;10784:338:1;14847:489:0;-1:-1:-1;;;;;15000:19:0;;;;;;:11;:19;;;;;;;;14999:20;:60;;;;-1:-1:-1;;;;;;15037:22:0;;;;;;:11;:22;;;;;;;;15036:23;14999:60;:103;;;;-1:-1:-1;15097:4:0;;-1:-1:-1;;;;;15076:26:0;;;15097:4;;15076:26;;14999:103;:146;;;;-1:-1:-1;;;;;;15119:26:0;;8415:42;15119:26;;14999:146;14981:348;;;15236:15;;-1:-1:-1;;;;;15199:20:0;;;;;;:9;:20;;;;;;:32;;15224:6;15199:24;:32::i;:::-;15198:53;;15172:145;;;;-1:-1:-1;;;15172:145:0;;11329:2:1;15172:145:0;;;11311:21:1;11368:2;11348:18;;;11341:30;11407:32;11387:18;;;11380:60;11457:18;;15172:145:0;11127:354:1;15344:185:0;15442:4;;-1:-1:-1;;;;;15429:17:0;;;15442:4;;15429:17;:41;;;;-1:-1:-1;;;;;;15451:19:0;;;;;;:11;:19;;;;;;;;15450:20;15429:41;15425:97;;;15508:1;15487:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15344:185:0;;:::o;15537:563::-;15683:4;;-1:-1:-1;;;;;15673:14:0;;;15683:4;;15673:14;15669:241;;15740:14;;15730:6;:24;;:68;;;-1:-1:-1;;;;;;15779:19:0;;;;;;:11;:19;;;;;;;;15730:68;:115;;;-1:-1:-1;;;;;;15823:22:0;;;;;;:11;:22;;;;;;;;15730:115;15704:194;;;;-1:-1:-1;;;15704:194:0;;11688:2:1;15704:194:0;;;11670:21:1;11727:2;11707:18;;;11700:30;-1:-1:-1;;;11746:18:1;;;11739:47;11803:18;;15704:194:0;11486:341:1;15704:194:0;15952:12;;15942:6;:22;;:62;;;-1:-1:-1;;;;;;15985:19:0;;;;;;:11;:19;;;;;;;;15942:62;:105;;;-1:-1:-1;;;;;;16025:22:0;;;;;;:11;:22;;;;;;;;15942:105;15920:172;;;;-1:-1:-1;;;15920:172:0;;11688:2:1;15920:172:0;;;11670:21:1;11727:2;11707:18;;;11700:30;-1:-1:-1;;;11746:18:1;;;11739:47;11803:18;;15920:172:0;11486:341:1;18731:212:0;18808:33;18823:6;18831:9;18808:14;:33::i;:::-;18804:132;;;18858:29;18873:13;;18858:14;:29::i;:::-;18922:1;18902:9;:22;18731:212;;:::o;18951:192::-;-1:-1:-1;;;;;19089:19:0;;19059:4;19089:19;;;:11;:19;;;;;;;;19088:20;:47;;;;-1:-1:-1;;;;;;;19113:22:0;;;;;:11;:22;;;;;;;;19112:23;;18951:192;-1:-1:-1;18951:192:0:o;19462:769::-;19582:7;19639:1;19606:30;19618:6;19626:9;19606:11;:30::i;:::-;:34;19602:598;;;19657:17;19677:91;19723:30;19735:6;19743:9;19723:11;:30::i;:::-;19688:11;;19677:23;;:6;;:10;:23::i;:91::-;19828:4;19810:24;;;;:9;:24;;;;;;19657:111;;-1:-1:-1;19810:39:0;;19657:111;19810:28;:39::i;:::-;19801:4;19783:24;;;;:9;:24;;;;;;;:66;;;;19869:42;;-1:-1:-1;;;;;19869:42:0;;;;;;;19901:9;1361:25:1;;1349:2;1334:18;;1215:177;19869:42:0;;;;;;;;19930:7;;:20;19926:220;;19971:159;20011:4;8415:42;20075:36;20103:7;;20075:23;20086:11;;20075:6;:10;;:23;;;;:::i;:36::-;19971:9;:159::i;:::-;20167:21;:6;20178:9;20167:10;:21::i;:::-;20160:28;;;;;19602:598;-1:-1:-1;20217:6:0;19462:769;-1:-1:-1;;19462:769:0:o;26653:337::-;26766:12;26793:19;;:23;;26815:1;;26793:23;:::i;:::-;26766:61;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26731:31:0;;;;;:18;:31;;;;;;;;26718:12;:45;;26766:61;;;;;26718:12;:45;;;;;;:::i;:::-;;;;;;;;;;;;;:109;;-1:-1:-1;;;;;;26718:109:0;-1:-1:-1;;;;;26718:109:0;;;;;;26922:31;;;;;:18;:31;;;;;;;;26871:12;26884:19;;26922:31;;:18;26718:45;26884:23;;-1:-1:-1;;26884:23:0;:::i;:::-;26871:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26871:37:0;26838:81;;;;;;;;;;;;:115;26964:12;:18;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;26964:18:0;;;;;-1:-1:-1;;;;;;26964:18:0;;;;;;-1:-1:-1;26653:337:0:o;18280:443::-;18389:4;18411:19;18461:13;;18433:24;18451:4;18433:9;:24::i;:::-;18506:8;;-1:-1:-1;;18433:41:0;;-1:-1:-1;;;;18506:8:0;;;;18505:9;:37;;;;-1:-1:-1;18531:11:0;;;;18505:37;:68;;;;-1:-1:-1;18559:14:0;;-1:-1:-1;;;18559:14:0;;;;18505:68;:105;;;;-1:-1:-1;;;;;;18591:19:0;;;;;;:11;:19;;;;;;;;18590:20;18505:105;:145;;;;-1:-1:-1;;;;;;18628:22:0;;;;;;:11;:22;;;;;;;;18627:23;18505:145;:179;;;;-1:-1:-1;18680:4:0;;-1:-1:-1;;;;;18667:17:0;;;18680:4;;18667:17;18505:179;:210;;;;-1:-1:-1;18701:14:0;18485:230;-1:-1:-1;;;18280:443:0:o;16108:1351::-;7640:8;:15;;-1:-1:-1;;;;7640:15:0;-1:-1:-1;;;7640:15:0;;;16297:10:::1;::::0;16259:14:::1;::::0;16241:12:::1;::::0;16217::::1;::::0;7640:15;;16202:138:::1;::::0;16338:1:::1;::::0;16217:105:::1;::::0;:57:::1;::::0;16259:14;16217:57;;;;7651:4;16217:16:::1;:19::i;16202:138::-;16179:161;;16351:32;16386:66;16429:12;16386:24;16397:12;;16386:6;:10;;:24;;;;:::i;:66::-;16351:101:::0;-1:-1:-1;16463:14:0::1;16480:36;:6:::0;16351:101;16480:10:::1;:36::i;:::-;16463:53:::0;-1:-1:-1;16552:21:0::1;16584:24;16463:53:::0;16584:16:::1;:24::i;:::-;16619:20;16642:41;:21;16668:14:::0;16642:25:::1;:41::i;:::-;16619:64;;16694:19;16716:48;16733:30;16750:12;;16733;:16;;:30;;;;:::i;:::-;16716:12:::0;;:16:::1;:48::i;:::-;16694:70;;16775:29;16807;16823:12;;16807:11;:15;;:29;;;;:::i;:::-;16775:61:::0;-1:-1:-1;16851:34:0;;16847:128:::1;;16902:61;16915:24;16941:21;16902:12;:61::i;:::-;17034:12;::::0;16985:23:::1;::::0;17011:36:::1;::::0;:18:::1;:11:::0;17027:1:::1;17011:15;:18::i;:36::-;16985:62:::0;-1:-1:-1;17062:19:0;;17058:105:::1;;17098:53;::::0;8605:42:::1;::::0;17098:53;::::1;;;::::0;17135:15;;17098:53:::1;::::0;;;17135:15;8605:42;17098:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17058:105;17220:10;::::0;17173:21:::1;::::0;17197:34:::1;::::0;:18:::1;:11:::0;17213:1:::1;17197:15;:18::i;:34::-;17173:58:::0;-1:-1:-1;17246:17:0;;17242:72:::1;;17280:22;17288:13;17280:7;:22::i;:::-;17328:21;:34:::0;17324:128:::1;;17379:61;::::0;8511:42:::1;::::0;17418:21:::1;17379:61:::0;::::1;;;::::0;::::1;::::0;;;17418:21;8511:42;17379:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17324:128;-1:-1:-1::0;;7678:8:0;:16;;-1:-1:-1;;;;7678:16:0;;;-1:-1:-1;;;;;;;;16108:1351:0:o;19151:303::-;19299:4;;19257:7;;-1:-1:-1;;;;;19299:4:0;;;19286:17;;;;19282:64;;-1:-1:-1;19327:7:0;;19320:14;;19282:64;19370:4;;-1:-1:-1;;;;;19370:4:0;;;19360:14;;;;19356:62;;-1:-1:-1;19398:8:0;;19391:15;;19356:62;-1:-1:-1;19435:11:0;;19151:303;;;;:::o;17828:444::-;17918:16;;;17932:1;17918:16;;;;;;;;17894:21;;17918:16;;;;;;;;;;-1:-1:-1;17918:16:0;17894:40;;17963:4;17945;17950:1;17945:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17945:23:0;;;:7;;;;;;;;;;:23;;;;17989:6;;:13;;;-1:-1:-1;;;17989:13:0;;;;:6;;;;;:11;;:13;;;;;17945:7;;17989:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17979:4;17984:1;17979:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17979:23:0;;;:7;;;;;;;;;:23;18045:6;;18013:53;;18030:4;;18045:6;18054:11;18013:8;:53::i;:::-;18077:6;;:187;;-1:-1:-1;;;18077:187:0;;-1:-1:-1;;;;;18077:6:0;;;;:57;;:187;;18149:11;;18077:6;;18191:4;;18218;;18238:15;;18077:187;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:389;17828:444;:::o;17467:353::-;17580:6;;17548:53;;17565:4;;-1:-1:-1;;;;;17580:6:0;17589:11;17548:8;:53::i;:::-;17612:6;;:200;;-1:-1:-1;;;17612:200:0;;17675:4;17612:200;;;13746:34:1;13796:18;;;13789:34;;;17612:6:0;13839:18:1;;;13832:34;;;13882:18;;;13875:34;8699:42:0;13925:19:1;;;13918:44;17786:15:0;13978:19:1;;;13971:35;-1:-1:-1;;;;;17612:6:0;;;;:22;;17642:9;;13680:19:1;;17612:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;17467:353;;:::o;21908:922::-;21995:4;;21988:37;;-1:-1:-1;;;21988:37:0;;22019:4;21988:37;;;2445:51:1;21964:21:0;;-1:-1:-1;;;;;21995:4:0;;21988:22;;2418:18:1;;21988:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22060:16;;;22074:1;22060:16;;;;;;;;21964:61;;-1:-1:-1;22036:21:0;;22060:16;;;;;;;;;;-1:-1:-1;;22097:6:0;;:13;;;-1:-1:-1;;;22097:13:0;;;;22036:40;;-1:-1:-1;;;;;;22097:6:0;;;;:11;;-1:-1:-1;22097:13:0;;;;;;;;;;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22087:4;22092:1;22087:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22087:23:0;;;:7;;;;;;;;;:23;22139:4;;22121:7;;22139:4;;;22121;;22139;;22121:7;;;;;;:::i;:::-;-1:-1:-1;;;;;22121:23:0;;;:7;;;;;;;;;:23;22155:6;;:140;;-1:-1:-1;;;22155:140:0;;:6;;;:57;;22234:9;;22155:140;;:6;;22258:4;;22272;;22279:15;;22155:140;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22336:4:0;;22352;;22329:28;;-1:-1:-1;;;22329:28:0;;-1:-1:-1;;;;;22352:4:0;;;22329:28;;;2445:51:1;22306:20:0;;-1:-1:-1;22336:4:0;;;-1:-1:-1;22329:22:0;;-1:-1:-1;2418:18:1;;22329:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22399:4;;22392:37;;-1:-1:-1;;;22392:37:0;;22423:4;22392:37;;;2445:51:1;22306::0;;-1:-1:-1;22368:21:0;;-1:-1:-1;;;;;22399:4:0;;;;22392:22;;2418:18:1;;22392:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22368:61;-1:-1:-1;22440:14:0;22457:32;22368:61;22475:13;22457:17;:32::i;:::-;22440:49;-1:-1:-1;22500:21:0;22524:98;22580:31;:13;22598:12;22580:17;:31::i;:::-;22531:4;;22524:37;;-1:-1:-1;;;22524:37:0;;22555:4;22524:37;;;2445:51:1;-1:-1:-1;;;;;22531:4:0;;;;22524:22;;2418:18:1;;22524:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:98::-;22500:122;-1:-1:-1;22650:45:0;22669:25;:6;22500:122;22669:10;:25::i;:::-;22650:14;;;:18;:45::i;:::-;22633:14;:62;22799:11;;22760:22;;22725:97;;22760:51;;:34;;22787:6;22760:26;:34::i;:51::-;22725:16;;;:20;:97::i;:::-;22706:16;:116;-1:-1:-1;;;;;;;21908:922:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:247::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;2025:9;2012:23;2044:31;2069:5;2044:31;:::i;2507:118::-;2593:5;2586:13;2579:21;2572:5;2569:32;2559:60;;2615:1;2612;2605:12;2630:382;2695:6;2703;2756:2;2744:9;2735:7;2731:23;2727:32;2724:52;;;2772:1;2769;2762:12;2724:52;2811:9;2798:23;2830:31;2855:5;2830:31;:::i;:::-;2880:5;-1:-1:-1;2937:2:1;2922:18;;2909:32;2950:30;2909:32;2950:30;:::i;:::-;2999:7;2989:17;;;2630:382;;;;;:::o;3017:316::-;3094:6;3102;3110;3163:2;3151:9;3142:7;3138:23;3134:32;3131:52;;;3179:1;3176;3169:12;3131:52;-1:-1:-1;;3202:23:1;;;3272:2;3257:18;;3244:32;;-1:-1:-1;3323:2:1;3308:18;;;3295:32;;3017:316;-1:-1:-1;3017:316:1:o;3338:383::-;3415:6;3423;3431;3484:2;3472:9;3463:7;3459:23;3455:32;3452:52;;;3500:1;3497;3490:12;3452:52;3536:9;3523:23;3513:33;;3596:2;3585:9;3581:18;3568:32;3609:31;3634:5;3609:31;:::i;3726:661::-;3848:6;3856;3864;3872;3880;3888;3896;3904;3957:3;3945:9;3936:7;3932:23;3928:33;3925:53;;;3974:1;3971;3964:12;3925:53;-1:-1:-1;;3997:23:1;;;4067:2;4052:18;;4039:32;;-1:-1:-1;4118:2:1;4103:18;;4090:32;;4169:2;4154:18;;4141:32;;-1:-1:-1;4220:3:1;4205:19;;4192:33;;-1:-1:-1;4272:3:1;4257:19;;4244:33;;-1:-1:-1;4324:3:1;4309:19;;4296:33;;-1:-1:-1;4376:3:1;4361:19;4348:33;;-1:-1:-1;3726:661:1;-1:-1:-1;3726:661:1:o;4716:388::-;4784:6;4792;4845:2;4833:9;4824:7;4820:23;4816:32;4813:52;;;4861:1;4858;4851:12;4813:52;4900:9;4887:23;4919:31;4944:5;4919:31;:::i;:::-;4969:5;-1:-1:-1;5026:2:1;5011:18;;4998:32;5039:33;4998:32;5039:33;:::i;5369:329::-;5571:2;5553:21;;;5610:1;5590:18;;;5583:29;-1:-1:-1;;;5643:2:1;5628:18;;5621:36;5689:2;5674:18;;5369:329::o;5703:127::-;5764:10;5759:3;5755:20;5752:1;5745:31;5795:4;5792:1;5785:15;5819:4;5816:1;5809:15;5835:168;5908:9;;;5939;;5956:15;;;5950:22;;5936:37;5926:71;;5977:18;;:::i;6008:217::-;6048:1;6074;6064:132;;6118:10;6113:3;6109:20;6106:1;6099:31;6153:4;6150:1;6143:15;6181:4;6178:1;6171:15;6064:132;-1:-1:-1;6210:9:1;;6008:217::o;6924:245::-;6991:6;7044:2;7032:9;7023:7;7019:23;7015:32;7012:52;;;7060:1;7057;7050:12;7012:52;7092:9;7086:16;7111:28;7133:5;7111:28;:::i;7174:127::-;7235:10;7230:3;7226:20;7223:1;7216:31;7266:4;7263:1;7256:15;7290:4;7287:1;7280:15;7306:135;7345:3;7366:17;;;7363:43;;7386:18;;:::i;:::-;-1:-1:-1;7433:1:1;7422:13;;7306:135::o;7446:125::-;7511:9;;;7532:10;;;7529:36;;;7545:18;;:::i;9013:128::-;9080:9;;;9101:11;;;9098:37;;;9115:18;;:::i;11832:127::-;11893:10;11888:3;11884:20;11881:1;11874:31;11924:4;11921:1;11914:15;11948:4;11945:1;11938:15;12096:251;12166:6;12219:2;12207:9;12198:7;12194:23;12190:32;12187:52;;;12235:1;12232;12225:12;12187:52;12267:9;12261:16;12286:31;12311:5;12286:31;:::i;12352:461::-;12405:3;12443:5;12437:12;12470:6;12465:3;12458:19;12496:4;12525:2;12520:3;12516:12;12509:19;;12562:2;12555:5;12551:14;12583:1;12593:195;12607:6;12604:1;12601:13;12593:195;;;12672:13;;-1:-1:-1;;;;;12668:39:1;12656:52;;12728:12;;;;12763:15;;;;12704:1;12622:9;12593:195;;;-1:-1:-1;12804:3:1;;12352:461;-1:-1:-1;;;;;12352:461:1:o;12818:582::-;13117:6;13106:9;13099:25;13160:6;13155:2;13144:9;13140:18;13133:34;13203:3;13198:2;13187:9;13183:18;13176:31;13080:4;13224:57;13276:3;13265:9;13261:19;13253:6;13224:57;:::i;:::-;-1:-1:-1;;;;;13317:32:1;;;;13312:2;13297:18;;13290:60;-1:-1:-1;13381:3:1;13366:19;13359:35;13216:65;12818:582;-1:-1:-1;;;12818:582:1:o;14017:306::-;14105:6;14113;14121;14174:2;14162:9;14153:7;14149:23;14145:32;14142:52;;;14190:1;14187;14180:12;14142:52;14219:9;14213:16;14203:26;;14269:2;14258:9;14254:18;14248:25;14238:35;;14313:2;14302:9;14298:18;14292:25;14282:35;;14017:306;;;;;:::o;14328:184::-;14398:6;14451:2;14439:9;14430:7;14426:23;14422:32;14419:52;;;14467:1;14464;14457:12;14419:52;-1:-1:-1;14490:16:1;;14328:184;-1:-1:-1;14328:184:1:o;14517:510::-;14788:6;14777:9;14770:25;14831:3;14826:2;14815:9;14811:18;14804:31;14751:4;14852:57;14904:3;14893:9;14889:19;14881:6;14852:57;:::i;:::-;-1:-1:-1;;;;;14945:32:1;;;;14940:2;14925:18;;14918:60;-1:-1:-1;15009:2:1;14994:18;14987:34;14844:65;14517:510;-1:-1:-1;;14517:510:1:o

Swarm Source

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