ETH Price: $2,637.67 (+1.19%)

Token

XMUSK (XMUSK)
 

Overview

Max Total Supply

100,000,000,000 XMUSK

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
cryptolovera.eth
Balance
327,556,326 XMUSK

Value
$0.00
0x0b89f9dd41dbfb165565c52b5163889be454ca90
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:
XMUSK

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-29
*/

/**
 *Submitted for verification at Etherscan.io on 2022-10-15
*/

pragma solidity ^0.8.17;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {codehash := extcodehash(account)}
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success,) = recipient.call{value : amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value : weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address token0, address token1) external view returns (address);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(address token,uint amountTokenDesired,uint amountTokenMin,uint amountETHMin,address to,uint deadline)
    external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

contract XMUSK is ERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; }
    event RandomNumberChosen(uint256);
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public marketPair;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private _totalSupply = 100_000_000_000 * 10 ** 9;
    uint256 public _maxWalletAmount =  2_500_000_000 * 10 ** 9;
    uint256 public buyFee = 5;
    uint256 public sellFee = 5;
    bool inSwapAndLiquify;
    uint256 public ethPriceToSwap = 150000000000000000; 
    address private _elonSac = 0x4dA0f1bd266E50C0a7C68D33A6cDA5e2fEE135DA;
    address private _team = 0xB2D2B9fFCf021Ec166d019f230B78d059c9bE515;
    address private _randomWinner = 0x36e0Dc24311bd5533D5f8Fd8E651724Db010A9d1;
    uint256 public _elonSacAmount = 40;
    uint256 public _teamAmount = 20;
    uint256 public _randomWinnerAmount = 20;
    uint256 public _lpShareAmount = 10; //the other half will be ETH
    address public deployer;
    uint256 public lastChosenRandomNumber = 0;
    
    constructor() ERC20("XMUSK", "XMUSK") {
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        deployer = owner();
        marketPair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _mint(msg.sender, _totalSupply);
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
       if(from != owner() && to != owner()) {
            if(takeFees) {
                taxAmount = amount.mul(buyFee).div(100);
                if (from != marketPair && to == marketPair) {
                    taxAmount = amount.mul(sellFee).div(100);
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance > 0) {
                        uint256 tokenAmount = getTokenPrice();
                        if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify) {
                            swapTokensForEth(tokenAmount);
                        }
                    }
                }
            }
            uint256 amountToHolder = amount.sub(taxAmount);
            uint256 holderBalance = balanceOf(to).add(amountToHolder);
            if (from == marketPair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
            if (from != marketPair && to != marketPair) {
                require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
            }
            if(taxAmount > 0) {
                super._transfer(from, address(this), taxAmount);
            }
           super._transfer(from, to, amountToHolder); 
       } else {
            super._transfer(from, to, amount);
        }
    }


    function manualSwap() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwapAndLiquify) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

    function chooseRandomNumber() external {
        uint256 range = 10000;
        uint randomnumber = uint(keccak256(abi.encodePacked(block.timestamp))) % range;
        lastChosenRandomNumber = randomnumber;
        emit RandomNumberChosen(randomnumber);
    }

   function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        uint256 lpTokens = tokenAmount.mul(_lpShareAmount).div(100);
        uint256 tokenSwapAmount = tokenAmount.sub(lpTokens);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenSwapAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
        
        uint256 balance = address(this).balance;
        uint256 elonSac = balance.mul(_elonSacAmount).div(100);
        uint256 team = balance.mul(_teamAmount).div(100);
        uint256 randomWinner = balance.mul(_randomWinnerAmount).div(100);
        uint256 liquidityEth = balance.mul(_lpShareAmount).div(100);
        payable(_elonSac).transfer(elonSac);  
        payable(_team).transfer(team);  
        payable(_randomWinner).transfer(randomWinner);  
        addLiquidity(lpTokens, liquidityEth);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deployer,
            block.timestamp
        );
    }

    function getTokenPrice() public view returns (uint256)  {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function setWalletAddresses(address elonSac, address team, address randomWinner) external onlyOwner {
        _elonSac = elonSac;
        _team = team;
        _randomWinner = randomWinner;
    }

    function setShare(uint256 elonSac, uint256 team, uint256 randomWinner, uint256 lpShare) external onlyOwner {
        _elonSacAmount = elonSac;
        _teamAmount = team;
        _randomWinnerAmount = randomWinner;
        _lpShareAmount = lpShare;
    }

    function setFees(uint256 buy, uint256 sell) external onlyOwner {
        buyFee = buy;
        sellFee = sell;
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

    receive() external payable {}

    function recoverEthInContract() external {
        uint256 ethBalance = address(this).balance;
        payable(deployer).transfer(ethBalance);
    }

    function recoverERC20Tokens(address contractAddress) external {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(deployer, balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RandomNumberChosen","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":"_elonSacAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lpShareAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_randomWinnerAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chooseRandomNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastChosenRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"recoverERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverEthInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"elonSac","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"},{"internalType":"uint256","name":"randomWinner","type":"uint256"},{"internalType":"uint256","name":"lpShare","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"elonSac","type":"address"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"randomWinner","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555068056bc75e2d631000006009556722b1c8c1227a0000600a556005600b556005600c55670214e8348c4f0000600e55734da0f1bd266e50c0a7c68d33a6cda5e2fee135da600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b2d2b9ffcf021ec166d019f230b78d059c9be51560105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507336e0dc24311bd5533d5f8fd8e651724db010a9d160115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506028601255601460135560148055600a6015555f601755348015620001a6575f80fd5b506040518060400160405280600581526020017f584d55534b0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f584d55534b0000000000000000000000000000000000000000000000000000008152508160039081620002249190620009f5565b508060049081620002369190620009f5565b5050505f6200024a620005e860201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600160085f620002fc620005ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620003b0620005ef60201b60201c565b60165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000480919062000b3e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000507573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200052d919062000b3e565b6040518363ffffffff1660e01b81526004016200054c92919062000b7f565b6020604051808303815f875af115801562000569573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200058f919062000b3e565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005e2336009546200061760201b60201c565b62000cbb565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000688576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067f9062000c08565b60405180910390fd5b6200069b5f83836200078760201b60201c565b8060025f828254620006ae919062000c55565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000702919062000c55565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000768919062000ca0565b60405180910390a3620007835f83836200078c60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200080d57607f821691505b602082108103620008235762000822620007c8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200084a565b6200089386836200084a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620008dd620008d7620008d184620008ab565b620008b4565b620008ab565b9050919050565b5f819050919050565b620008f883620008bd565b620009106200090782620008e4565b84845462000856565b825550505050565b5f90565b6200092662000918565b62000933818484620008ed565b505050565b5b818110156200095a576200094e5f826200091c565b60018101905062000939565b5050565b601f821115620009a957620009738162000829565b6200097e846200083b565b810160208510156200098e578190505b620009a66200099d856200083b565b83018262000938565b50505b505050565b5f82821c905092915050565b5f620009cb5f1984600802620009ae565b1980831691505092915050565b5f620009e58383620009ba565b9150826002028217905092915050565b62000a008262000791565b67ffffffffffffffff81111562000a1c5762000a1b6200079b565b5b62000a288254620007f5565b62000a358282856200095e565b5f60209050601f83116001811462000a6b575f841562000a56578287015190505b62000a628582620009d8565b86555062000ad1565b601f19841662000a7b8662000829565b5f5b8281101562000aa45784890151825560018201915060208501945060208101905062000a7d565b8683101562000ac4578489015162000ac0601f891682620009ba565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000b088262000add565b9050919050565b62000b1a8162000afc565b811462000b25575f80fd5b50565b5f8151905062000b388162000b0f565b92915050565b5f6020828403121562000b565762000b5562000ad9565b5b5f62000b658482850162000b28565b91505092915050565b62000b798162000afc565b82525050565b5f60408201905062000b945f83018562000b6e565b62000ba3602083018462000b6e565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000bf0601f8362000baa565b915062000bfd8262000bba565b602082019050919050565b5f6020820190508181035f83015262000c218162000be2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c6182620008ab565b915062000c6e83620008ab565b925082820190508082111562000c895762000c8862000c28565b5b92915050565b62000c9a81620008ab565b82525050565b5f60208201905062000cb55f83018462000c8f565b92915050565b613e998062000cc95f395ff3fe60806040526004361061021d575f3560e01c8063621a2b0b11610122578063a457c2d7116100aa578063dd62ed3e1161006e578063dd62ed3e1461078c578063dde3b986146107c8578063e9ac0e59146107f2578063f2fde38b14610808578063fb6287d21461083057610224565b8063a457c2d71461069a578063a9059cbb146106d6578063b2abbbc414610712578063cb48b73c1461073a578063d5f394881461076257610224565b8063715018a6116100f1578063715018a6146105de57806384afff9b146105f45780638da5cb5b1461061c57806395d89b41146106465780639c207baa1461067057610224565b8063621a2b0b14610538578063622dda96146105625780636c0a24eb1461057857806370a08231146105a257610224565b8063313ce567116101a55780634b94f50e116101745780634b94f50e1461047a57806350faa48f146104a457806351bc3c85146104ce57806354a5df1f146104e4578063560ed6c01461050e57610224565b8063313ce567146103c257806339509351146103ec578063441d801f14610428578063470624021461045057610224565b80631694505e116101ec5780631694505e146102e057806318160ddd1461030a57806323b872dd1461033457806327a14fc2146103705780632b14ca561461039857610224565b806306fdde031461022857806308c4debe14610252578063095ea7b31461027c5780630b78f9c0146102b857610224565b3661022457005b5f80fd5b348015610233575f80fd5b5061023c610858565b6040516102499190612c0d565b60405180910390f35b34801561025d575f80fd5b506102666108e8565b6040516102739190612c45565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d9190612cf3565b6108ee565b6040516102af9190612d4b565b60405180910390f35b3480156102c3575f80fd5b506102de60048036038101906102d99190612d64565b610910565b005b3480156102eb575f80fd5b506102f46109b8565b6040516103019190612dfd565b60405180910390f35b348015610315575f80fd5b5061031e6109dd565b60405161032b9190612c45565b60405180910390f35b34801561033f575f80fd5b5061035a60048036038101906103559190612e16565b6109e6565b6040516103679190612d4b565b60405180910390f35b34801561037b575f80fd5b5061039660048036038101906103919190612e66565b610a14565b005b3480156103a3575f80fd5b506103ac610ac3565b6040516103b99190612c45565b60405180910390f35b3480156103cd575f80fd5b506103d6610ac9565b6040516103e39190612eac565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190612cf3565b610ad1565b60405161041f9190612d4b565b60405180910390f35b348015610433575f80fd5b5061044e60048036038101906104499190612f50565b610b07565b005b34801561045b575f80fd5b50610464610bad565b6040516104719190612c45565b60405180910390f35b348015610485575f80fd5b5061048e610bb3565b60405161049b9190612c45565b60405180910390f35b3480156104af575f80fd5b506104b8610dec565b6040516104c59190612fbc565b60405180910390f35b3480156104d9575f80fd5b506104e2610e11565b005b3480156104ef575f80fd5b506104f8610e46565b6040516105059190612c45565b60405180910390f35b348015610519575f80fd5b50610522610e4c565b60405161052f9190612c45565b60405180910390f35b348015610543575f80fd5b5061054c610e52565b6040516105599190612c45565b60405180910390f35b34801561056d575f80fd5b50610576610e58565b005b348015610583575f80fd5b5061058c610ed7565b6040516105999190612c45565b60405180910390f35b3480156105ad575f80fd5b506105c860048036038101906105c39190612fd5565b610edd565b6040516105d59190612c45565b60405180910390f35b3480156105e9575f80fd5b506105f2610f22565b005b3480156105ff575f80fd5b5061061a60048036038101906106159190612fd5565b611075565b005b348015610627575f80fd5b50610630611196565b60405161063d9190612fbc565b60405180910390f35b348015610651575f80fd5b5061065a6111be565b6040516106679190612c0d565b60405180910390f35b34801561067b575f80fd5b5061068461124e565b6040516106919190612c45565b60405180910390f35b3480156106a5575f80fd5b506106c060048036038101906106bb9190612cf3565b611254565b6040516106cd9190612d4b565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612cf3565b6112c9565b6040516107099190612d4b565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612e66565b6112eb565b005b348015610745575f80fd5b50610760600480360381019061075b9190613000565b61138b565b005b34801561076d575f80fd5b50610776611443565b6040516107839190612fbc565b60405180910390f35b348015610797575f80fd5b506107b260048036038101906107ad9190613064565b611468565b6040516107bf9190612c45565b60405180910390f35b3480156107d3575f80fd5b506107dc6114ea565b6040516107e99190612c45565b60405180910390f35b3480156107fd575f80fd5b506108066114f0565b005b348015610813575f80fd5b5061082e60048036038101906108299190612fd5565b61155c565b005b34801561083b575f80fd5b50610856600480360381019061085191906130a2565b61171e565b005b6060600380546108679061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546108939061311f565b80156108de5780601f106108b5576101008083540402835291602001916108de565b820191905f5260205f20905b8154815290600101906020018083116108c157829003601f168201915b5050505050905090565b60155481565b5f806108f8611879565b9050610905818585611880565b600191505092915050565b610918611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d90613199565b60405180910390fd5b81600b8190555080600c819055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f806109f0611879565b90506109fd858285611a43565b610a08858585611ace565b60019150509392505050565b610a1c611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190613199565b60405180910390fd5b633b9aca0081610aba91906131e4565b600a8190555050565b600c5481565b5f6009905090565b5f80610adb611879565b9050610afc818585610aed8589611468565b610af79190613225565b611880565b600191505092915050565b610b0f611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490613199565b60405180910390fd5b610ba88383836120da565b505050565b600b5481565b5f80600267ffffffffffffffff811115610bd057610bcf613258565b5b604051908082528060200260200182016040528015610bfe5781602001602082028036833780820191505090505b50905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8f9190613299565b815f81518110610ca257610ca16132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610cf157610cf06132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600e54836040518363ffffffff1660e01b8152600401610d899291906133a8565b5f60405180830381865afa158015610da3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610dcb91906134f5565b600181518110610dde57610ddd6132c4565b5b602002602001015191505090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610e1b30610edd565b90505f811115610e4357600d5f9054906101000a900460ff16610e4257610e418161217a565b5b5b50565b600e5481565b60175481565b60145481565b5f61271090505f8142604051602001610e71919061355c565b604051602081830303815290604052805190602001205f1c610e9391906135a3565b9050806017819055507fb2e131358e599e271f5996d83ffb4961be7fc5db93fc763575f3cce20be4a3cc81604051610ecb9190612c45565b60405180910390a15050565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f2a611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf90613199565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110b39190612fbc565b602060405180830381865afa1580156110ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f291906135d3565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016111509291906135fe565b6020604051808303815f875af115801561116c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111909190613639565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111cd9061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546111f99061311f565b80156112445780601f1061121b57610100808354040283529160200191611244565b820191905f5260205f20905b81548152906001019060200180831161122757829003601f168201915b5050505050905090565b60125481565b5f8061125e611879565b90505f61126b8286611468565b9050838110156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a7906136d4565b60405180910390fd5b6112bd8286868403611880565b60019250505092915050565b5f806112d3611879565b90506112e0818585611ace565b600191505092915050565b6112f3611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613199565b60405180910390fd5b80600e8190555050565b611393611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613199565b60405180910390fd5b8360128190555082601381905550816014819055508060158190555050505050565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60135481565b5f47905060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611558573d5f803e3d5ffd5b5050565b611564611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613199565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613762565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611726611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90613199565b60405180910390fd5b82600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906137f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119539061387e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a369190612c45565b60405180910390a3505050565b5f611a4e8484611468565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ac85781811015611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab1906138e6565b60405180910390fd5b611ac78484848403611880565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3390613974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613a02565b60405180910390fd5b5f8111611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390613a90565b60405180910390fd5b5f8060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611c8c575060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611ccb5750611c9b611196565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611d0a5750611cda611196565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050611d14611196565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611d825750611d52611196565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156120c7578015611ede57611db56064611da7600b54866125e190919063ffffffff16565b61265890919063ffffffff16565b915060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611e60575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15611edd57611e8d6064611e7f600c54866125e190919063ffffffff16565b61265890919063ffffffff16565b91505f611e9930610edd565b90505f811115611edb575f611eac610bb3565b9050808210158015611eca5750600d5f9054906101000a900460ff16155b15611ed957611ed88161217a565b5b505b505b5b5f611ef283856126a190919063ffffffff16565b90505f611f1082611f0288610edd565b6126ea90919063ffffffff16565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611fac57600a54811115611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613b1e565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612056575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b156120a157600a548111156120a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209790613b1e565b60405180910390fd5b5b5f8411156120b5576120b4873086612747565b5b6120c0878784612747565b50506120d3565b6120d2858585612747565b5b5050505050565b5f5b83839050811015612174575f8484838181106120fb576120fa6132c4565b5b90506020020160208101906121109190612fd5565b90508260085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505080806001019150506120dc565b50505050565b5f6121a36064612195601554856125e190919063ffffffff16565b61265890919063ffffffff16565b90505f6121b982846126a190919063ffffffff16565b90505f600267ffffffffffffffff8111156121d7576121d6613258565b5b6040519080825280602002602001820160405280156122055781602001602082028036833780820191505090505b50905030815f8151811061221c5761221b6132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e49190613299565b816001815181106122f8576122f76132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061235e3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611880565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016123c0959493929190613b75565b5f604051808303815f87803b1580156123d7575f80fd5b505af11580156123e9573d5f803e3d5ffd5b505050505f4790505f61241a606461240c601254856125e190919063ffffffff16565b61265890919063ffffffff16565b90505f6124456064612437601354866125e190919063ffffffff16565b61265890919063ffffffff16565b90505f6124706064612462601454876125e190919063ffffffff16565b61265890919063ffffffff16565b90505f61249b606461248d601554886125e190919063ffffffff16565b61265890919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f19350505050158015612501573d5f803e3d5ffd5b5060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612566573d5f803e3d5ffd5b5060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156125cb573d5f803e3d5ffd5b506125d688826129bc565b505050505050505050565b5f8083036125f1575f9050612652565b5f82846125fe91906131e4565b905082848261260d9190613bcd565b1461264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490613c6d565b60405180910390fd5b809150505b92915050565b5f61269983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ab6565b905092915050565b5f6126e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b905092915050565b5f8082846126f89190613225565b90508381101561273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613cd5565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90613974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90613a02565b60405180910390fd5b61282e838383612b79565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a890613d63565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461293f9190613225565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129a39190612c45565b60405180910390a36129b6848484612b7e565b50505050565b6129e83060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611880565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612a6e96959493929190613d81565b60606040518083038185885af1158015612a8a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612aaf9190613de0565b5050505050565b5f8083118290612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af39190612c0d565b60405180910390fd5b505f8385612b0a9190613bcd565b9050809150509392505050565b5f838311158290612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559190612c0d565b60405180910390fd5b505f8385612b6c9190613e30565b9050809150509392505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612bba578082015181840152602081019050612b9f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612bdf82612b83565b612be98185612b8d565b9350612bf9818560208601612b9d565b612c0281612bc5565b840191505092915050565b5f6020820190508181035f830152612c258184612bd5565b905092915050565b5f819050919050565b612c3f81612c2d565b82525050565b5f602082019050612c585f830184612c36565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c9882612c6f565b9050919050565b612ca881612c8e565b8114612cb2575f80fd5b50565b5f81359050612cc381612c9f565b92915050565b612cd281612c2d565b8114612cdc575f80fd5b50565b5f81359050612ced81612cc9565b92915050565b5f8060408385031215612d0957612d08612c67565b5b5f612d1685828601612cb5565b9250506020612d2785828601612cdf565b9150509250929050565b5f8115159050919050565b612d4581612d31565b82525050565b5f602082019050612d5e5f830184612d3c565b92915050565b5f8060408385031215612d7a57612d79612c67565b5b5f612d8785828601612cdf565b9250506020612d9885828601612cdf565b9150509250929050565b5f819050919050565b5f612dc5612dc0612dbb84612c6f565b612da2565b612c6f565b9050919050565b5f612dd682612dab565b9050919050565b5f612de782612dcc565b9050919050565b612df781612ddd565b82525050565b5f602082019050612e105f830184612dee565b92915050565b5f805f60608486031215612e2d57612e2c612c67565b5b5f612e3a86828701612cb5565b9350506020612e4b86828701612cb5565b9250506040612e5c86828701612cdf565b9150509250925092565b5f60208284031215612e7b57612e7a612c67565b5b5f612e8884828501612cdf565b91505092915050565b5f60ff82169050919050565b612ea681612e91565b82525050565b5f602082019050612ebf5f830184612e9d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ee657612ee5612ec5565b5b8235905067ffffffffffffffff811115612f0357612f02612ec9565b5b602083019150836020820283011115612f1f57612f1e612ecd565b5b9250929050565b612f2f81612d31565b8114612f39575f80fd5b50565b5f81359050612f4a81612f26565b92915050565b5f805f60408486031215612f6757612f66612c67565b5b5f84013567ffffffffffffffff811115612f8457612f83612c6b565b5b612f9086828701612ed1565b93509350506020612fa386828701612f3c565b9150509250925092565b612fb681612c8e565b82525050565b5f602082019050612fcf5f830184612fad565b92915050565b5f60208284031215612fea57612fe9612c67565b5b5f612ff784828501612cb5565b91505092915050565b5f805f806080858703121561301857613017612c67565b5b5f61302587828801612cdf565b945050602061303687828801612cdf565b935050604061304787828801612cdf565b925050606061305887828801612cdf565b91505092959194509250565b5f806040838503121561307a57613079612c67565b5b5f61308785828601612cb5565b925050602061309885828601612cb5565b9150509250929050565b5f805f606084860312156130b9576130b8612c67565b5b5f6130c686828701612cb5565b93505060206130d786828701612cb5565b92505060406130e886828701612cb5565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061313657607f821691505b602082108103613149576131486130f2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613183602083612b8d565b915061318e8261314f565b602082019050919050565b5f6020820190508181035f8301526131b081613177565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131ee82612c2d565b91506131f983612c2d565b925082820261320781612c2d565b9150828204841483151761321e5761321d6131b7565b5b5092915050565b5f61322f82612c2d565b915061323a83612c2d565b9250828201905080821115613252576132516131b7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061329381612c9f565b92915050565b5f602082840312156132ae576132ad612c67565b5b5f6132bb84828501613285565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61332381612c8e565b82525050565b5f613334838361331a565b60208301905092915050565b5f602082019050919050565b5f613356826132f1565b61336081856132fb565b935061336b8361330b565b805f5b8381101561339b5781516133828882613329565b975061338d83613340565b92505060018101905061336e565b5085935050505092915050565b5f6040820190506133bb5f830185612c36565b81810360208301526133cd818461334c565b90509392505050565b6133df82612bc5565b810181811067ffffffffffffffff821117156133fe576133fd613258565b5b80604052505050565b5f613410612c5e565b905061341c82826133d6565b919050565b5f67ffffffffffffffff82111561343b5761343a613258565b5b602082029050602081019050919050565b5f8151905061345a81612cc9565b92915050565b5f61347261346d84613421565b613407565b9050808382526020820190506020840283018581111561349557613494612ecd565b5b835b818110156134be57806134aa888261344c565b845260208401935050602081019050613497565b5050509392505050565b5f82601f8301126134dc576134db612ec5565b5b81516134ec848260208601613460565b91505092915050565b5f6020828403121561350a57613509612c67565b5b5f82015167ffffffffffffffff81111561352757613526612c6b565b5b613533848285016134c8565b91505092915050565b5f819050919050565b61355661355182612c2d565b61353c565b82525050565b5f6135678284613545565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6135ad82612c2d565b91506135b883612c2d565b9250826135c8576135c7613576565b5b828206905092915050565b5f602082840312156135e8576135e7612c67565b5b5f6135f58482850161344c565b91505092915050565b5f6040820190506136115f830185612fad565b61361e6020830184612c36565b9392505050565b5f8151905061363381612f26565b92915050565b5f6020828403121561364e5761364d612c67565b5b5f61365b84828501613625565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6136be602583612b8d565b91506136c982613664565b604082019050919050565b5f6020820190508181035f8301526136eb816136b2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61374c602683612b8d565b9150613757826136f2565b604082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6137da602483612b8d565b91506137e582613780565b604082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613868602283612b8d565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6138d0601d83612b8d565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61395e602583612b8d565b915061396982613904565b604082019050919050565b5f6020820190508181035f83015261398b81613952565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139ec602383612b8d565b91506139f782613992565b604082019050919050565b5f6020820190508181035f830152613a19816139e0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613a7a602983612b8d565b9150613a8582613a20565b604082019050919050565b5f6020820190508181035f830152613aa781613a6e565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574205f8201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b5f613b08602583612b8d565b9150613b1382613aae565b604082019050919050565b5f6020820190508181035f830152613b3581613afc565b9050919050565b5f819050919050565b5f613b5f613b5a613b5584613b3c565b612da2565b612c2d565b9050919050565b613b6f81613b45565b82525050565b5f60a082019050613b885f830188612c36565b613b956020830187613b66565b8181036040830152613ba7818661334c565b9050613bb66060830185612fad565b613bc36080830184612c36565b9695505050505050565b5f613bd782612c2d565b9150613be283612c2d565b925082613bf257613bf1613576565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c57602183612b8d565b9150613c6282613bfd565b604082019050919050565b5f6020820190508181035f830152613c8481613c4b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613cbf601b83612b8d565b9150613cca82613c8b565b602082019050919050565b5f6020820190508181035f830152613cec81613cb3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613d4d602683612b8d565b9150613d5882613cf3565b604082019050919050565b5f6020820190508181035f830152613d7a81613d41565b9050919050565b5f60c082019050613d945f830189612fad565b613da16020830188612c36565b613dae6040830187613b66565b613dbb6060830186613b66565b613dc86080830185612fad565b613dd560a0830184612c36565b979650505050505050565b5f805f60608486031215613df757613df6612c67565b5b5f613e048682870161344c565b9350506020613e158682870161344c565b9250506040613e268682870161344c565b9150509250925092565b5f613e3a82612c2d565b9150613e4583612c2d565b9250828203905081811115613e5d57613e5c6131b7565b5b9291505056fea2646970667358221220ffb5181146c1a18c790050075726565c614474b4b9fa680cef1c435ecb1c206664736f6c63430008160033

Deployed Bytecode

0x60806040526004361061021d575f3560e01c8063621a2b0b11610122578063a457c2d7116100aa578063dd62ed3e1161006e578063dd62ed3e1461078c578063dde3b986146107c8578063e9ac0e59146107f2578063f2fde38b14610808578063fb6287d21461083057610224565b8063a457c2d71461069a578063a9059cbb146106d6578063b2abbbc414610712578063cb48b73c1461073a578063d5f394881461076257610224565b8063715018a6116100f1578063715018a6146105de57806384afff9b146105f45780638da5cb5b1461061c57806395d89b41146106465780639c207baa1461067057610224565b8063621a2b0b14610538578063622dda96146105625780636c0a24eb1461057857806370a08231146105a257610224565b8063313ce567116101a55780634b94f50e116101745780634b94f50e1461047a57806350faa48f146104a457806351bc3c85146104ce57806354a5df1f146104e4578063560ed6c01461050e57610224565b8063313ce567146103c257806339509351146103ec578063441d801f14610428578063470624021461045057610224565b80631694505e116101ec5780631694505e146102e057806318160ddd1461030a57806323b872dd1461033457806327a14fc2146103705780632b14ca561461039857610224565b806306fdde031461022857806308c4debe14610252578063095ea7b31461027c5780630b78f9c0146102b857610224565b3661022457005b5f80fd5b348015610233575f80fd5b5061023c610858565b6040516102499190612c0d565b60405180910390f35b34801561025d575f80fd5b506102666108e8565b6040516102739190612c45565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d9190612cf3565b6108ee565b6040516102af9190612d4b565b60405180910390f35b3480156102c3575f80fd5b506102de60048036038101906102d99190612d64565b610910565b005b3480156102eb575f80fd5b506102f46109b8565b6040516103019190612dfd565b60405180910390f35b348015610315575f80fd5b5061031e6109dd565b60405161032b9190612c45565b60405180910390f35b34801561033f575f80fd5b5061035a60048036038101906103559190612e16565b6109e6565b6040516103679190612d4b565b60405180910390f35b34801561037b575f80fd5b5061039660048036038101906103919190612e66565b610a14565b005b3480156103a3575f80fd5b506103ac610ac3565b6040516103b99190612c45565b60405180910390f35b3480156103cd575f80fd5b506103d6610ac9565b6040516103e39190612eac565b60405180910390f35b3480156103f7575f80fd5b50610412600480360381019061040d9190612cf3565b610ad1565b60405161041f9190612d4b565b60405180910390f35b348015610433575f80fd5b5061044e60048036038101906104499190612f50565b610b07565b005b34801561045b575f80fd5b50610464610bad565b6040516104719190612c45565b60405180910390f35b348015610485575f80fd5b5061048e610bb3565b60405161049b9190612c45565b60405180910390f35b3480156104af575f80fd5b506104b8610dec565b6040516104c59190612fbc565b60405180910390f35b3480156104d9575f80fd5b506104e2610e11565b005b3480156104ef575f80fd5b506104f8610e46565b6040516105059190612c45565b60405180910390f35b348015610519575f80fd5b50610522610e4c565b60405161052f9190612c45565b60405180910390f35b348015610543575f80fd5b5061054c610e52565b6040516105599190612c45565b60405180910390f35b34801561056d575f80fd5b50610576610e58565b005b348015610583575f80fd5b5061058c610ed7565b6040516105999190612c45565b60405180910390f35b3480156105ad575f80fd5b506105c860048036038101906105c39190612fd5565b610edd565b6040516105d59190612c45565b60405180910390f35b3480156105e9575f80fd5b506105f2610f22565b005b3480156105ff575f80fd5b5061061a60048036038101906106159190612fd5565b611075565b005b348015610627575f80fd5b50610630611196565b60405161063d9190612fbc565b60405180910390f35b348015610651575f80fd5b5061065a6111be565b6040516106679190612c0d565b60405180910390f35b34801561067b575f80fd5b5061068461124e565b6040516106919190612c45565b60405180910390f35b3480156106a5575f80fd5b506106c060048036038101906106bb9190612cf3565b611254565b6040516106cd9190612d4b565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612cf3565b6112c9565b6040516107099190612d4b565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612e66565b6112eb565b005b348015610745575f80fd5b50610760600480360381019061075b9190613000565b61138b565b005b34801561076d575f80fd5b50610776611443565b6040516107839190612fbc565b60405180910390f35b348015610797575f80fd5b506107b260048036038101906107ad9190613064565b611468565b6040516107bf9190612c45565b60405180910390f35b3480156107d3575f80fd5b506107dc6114ea565b6040516107e99190612c45565b60405180910390f35b3480156107fd575f80fd5b506108066114f0565b005b348015610813575f80fd5b5061082e60048036038101906108299190612fd5565b61155c565b005b34801561083b575f80fd5b50610856600480360381019061085191906130a2565b61171e565b005b6060600380546108679061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546108939061311f565b80156108de5780601f106108b5576101008083540402835291602001916108de565b820191905f5260205f20905b8154815290600101906020018083116108c157829003601f168201915b5050505050905090565b60155481565b5f806108f8611879565b9050610905818585611880565b600191505092915050565b610918611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099d90613199565b60405180910390fd5b81600b8190555080600c819055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f806109f0611879565b90506109fd858285611a43565b610a08858585611ace565b60019150509392505050565b610a1c611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190613199565b60405180910390fd5b633b9aca0081610aba91906131e4565b600a8190555050565b600c5481565b5f6009905090565b5f80610adb611879565b9050610afc818585610aed8589611468565b610af79190613225565b611880565b600191505092915050565b610b0f611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9490613199565b60405180910390fd5b610ba88383836120da565b505050565b600b5481565b5f80600267ffffffffffffffff811115610bd057610bcf613258565b5b604051908082528060200260200182016040528015610bfe5781602001602082028036833780820191505090505b50905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8f9190613299565b815f81518110610ca257610ca16132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110610cf157610cf06132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600e54836040518363ffffffff1660e01b8152600401610d899291906133a8565b5f60405180830381865afa158015610da3573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610dcb91906134f5565b600181518110610dde57610ddd6132c4565b5b602002602001015191505090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f610e1b30610edd565b90505f811115610e4357600d5f9054906101000a900460ff16610e4257610e418161217a565b5b5b50565b600e5481565b60175481565b60145481565b5f61271090505f8142604051602001610e71919061355c565b604051602081830303815290604052805190602001205f1c610e9391906135a3565b9050806017819055507fb2e131358e599e271f5996d83ffb4961be7fc5db93fc763575f3cce20be4a3cc81604051610ecb9190612c45565b60405180910390a15050565b600a5481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610f2a611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf90613199565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110b39190612fbc565b602060405180830381865afa1580156110ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f291906135d3565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016111509291906135fe565b6020604051808303815f875af115801561116c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111909190613639565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546111cd9061311f565b80601f01602080910402602001604051908101604052809291908181526020018280546111f99061311f565b80156112445780601f1061121b57610100808354040283529160200191611244565b820191905f5260205f20905b81548152906001019060200180831161122757829003601f168201915b5050505050905090565b60125481565b5f8061125e611879565b90505f61126b8286611468565b9050838110156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a7906136d4565b60405180910390fd5b6112bd8286868403611880565b60019250505092915050565b5f806112d3611879565b90506112e0818585611ace565b600191505092915050565b6112f3611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611381576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137890613199565b60405180910390fd5b80600e8190555050565b611393611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613199565b60405180910390fd5b8360128190555082601381905550816014819055508060158190555050505050565b60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60135481565b5f47905060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611558573d5f803e3d5ffd5b5050565b611564611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613199565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165790613762565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611726611879565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90613199565b60405180910390fd5b82600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e5906137f0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361195c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119539061387e565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a369190612c45565b60405180910390a3505050565b5f611a4e8484611468565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ac85781811015611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab1906138e6565b60405180910390fd5b611ac78484848403611880565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3390613974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba190613a02565b60405180910390fd5b5f8111611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390613a90565b60405180910390fd5b5f8060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611c8c575060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611ccb5750611c9b611196565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611d0a5750611cda611196565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050611d14611196565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611d825750611d52611196565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156120c7578015611ede57611db56064611da7600b54866125e190919063ffffffff16565b61265890919063ffffffff16565b915060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611e60575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15611edd57611e8d6064611e7f600c54866125e190919063ffffffff16565b61265890919063ffffffff16565b91505f611e9930610edd565b90505f811115611edb575f611eac610bb3565b9050808210158015611eca5750600d5f9054906101000a900460ff16155b15611ed957611ed88161217a565b5b505b505b5b5f611ef283856126a190919063ffffffff16565b90505f611f1082611f0288610edd565b6126ea90919063ffffffff16565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611fac57600a54811115611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290613b1e565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612056575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b156120a157600a548111156120a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209790613b1e565b60405180910390fd5b5b5f8411156120b5576120b4873086612747565b5b6120c0878784612747565b50506120d3565b6120d2858585612747565b5b5050505050565b5f5b83839050811015612174575f8484838181106120fb576120fa6132c4565b5b90506020020160208101906121109190612fd5565b90508260085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505080806001019150506120dc565b50505050565b5f6121a36064612195601554856125e190919063ffffffff16565b61265890919063ffffffff16565b90505f6121b982846126a190919063ffffffff16565b90505f600267ffffffffffffffff8111156121d7576121d6613258565b5b6040519080825280602002602001820160405280156122055781602001602082028036833780820191505090505b50905030815f8151811061221c5761221b6132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e49190613299565b816001815181106122f8576122f76132c4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061235e3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611880565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016123c0959493929190613b75565b5f604051808303815f87803b1580156123d7575f80fd5b505af11580156123e9573d5f803e3d5ffd5b505050505f4790505f61241a606461240c601254856125e190919063ffffffff16565b61265890919063ffffffff16565b90505f6124456064612437601354866125e190919063ffffffff16565b61265890919063ffffffff16565b90505f6124706064612462601454876125e190919063ffffffff16565b61265890919063ffffffff16565b90505f61249b606461248d601554886125e190919063ffffffff16565b61265890919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f19350505050158015612501573d5f803e3d5ffd5b5060105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050158015612566573d5f803e3d5ffd5b5060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156125cb573d5f803e3d5ffd5b506125d688826129bc565b505050505050505050565b5f8083036125f1575f9050612652565b5f82846125fe91906131e4565b905082848261260d9190613bcd565b1461264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490613c6d565b60405180910390fd5b809150505b92915050565b5f61269983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612ab6565b905092915050565b5f6126e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b17565b905092915050565b5f8082846126f89190613225565b90508381101561273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613cd5565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90613974565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90613a02565b60405180910390fd5b61282e838383612b79565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156128b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a890613d63565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461293f9190613225565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516129a39190612c45565b60405180910390a36129b6848484612b7e565b50505050565b6129e83060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611880565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612a6e96959493929190613d81565b60606040518083038185885af1158015612a8a573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190612aaf9190613de0565b5050505050565b5f8083118290612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af39190612c0d565b60405180910390fd5b505f8385612b0a9190613bcd565b9050809150509392505050565b5f838311158290612b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b559190612c0d565b60405180910390fd5b505f8385612b6c9190613e30565b9050809150509392505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612bba578082015181840152602081019050612b9f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612bdf82612b83565b612be98185612b8d565b9350612bf9818560208601612b9d565b612c0281612bc5565b840191505092915050565b5f6020820190508181035f830152612c258184612bd5565b905092915050565b5f819050919050565b612c3f81612c2d565b82525050565b5f602082019050612c585f830184612c36565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612c9882612c6f565b9050919050565b612ca881612c8e565b8114612cb2575f80fd5b50565b5f81359050612cc381612c9f565b92915050565b612cd281612c2d565b8114612cdc575f80fd5b50565b5f81359050612ced81612cc9565b92915050565b5f8060408385031215612d0957612d08612c67565b5b5f612d1685828601612cb5565b9250506020612d2785828601612cdf565b9150509250929050565b5f8115159050919050565b612d4581612d31565b82525050565b5f602082019050612d5e5f830184612d3c565b92915050565b5f8060408385031215612d7a57612d79612c67565b5b5f612d8785828601612cdf565b9250506020612d9885828601612cdf565b9150509250929050565b5f819050919050565b5f612dc5612dc0612dbb84612c6f565b612da2565b612c6f565b9050919050565b5f612dd682612dab565b9050919050565b5f612de782612dcc565b9050919050565b612df781612ddd565b82525050565b5f602082019050612e105f830184612dee565b92915050565b5f805f60608486031215612e2d57612e2c612c67565b5b5f612e3a86828701612cb5565b9350506020612e4b86828701612cb5565b9250506040612e5c86828701612cdf565b9150509250925092565b5f60208284031215612e7b57612e7a612c67565b5b5f612e8884828501612cdf565b91505092915050565b5f60ff82169050919050565b612ea681612e91565b82525050565b5f602082019050612ebf5f830184612e9d565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112612ee657612ee5612ec5565b5b8235905067ffffffffffffffff811115612f0357612f02612ec9565b5b602083019150836020820283011115612f1f57612f1e612ecd565b5b9250929050565b612f2f81612d31565b8114612f39575f80fd5b50565b5f81359050612f4a81612f26565b92915050565b5f805f60408486031215612f6757612f66612c67565b5b5f84013567ffffffffffffffff811115612f8457612f83612c6b565b5b612f9086828701612ed1565b93509350506020612fa386828701612f3c565b9150509250925092565b612fb681612c8e565b82525050565b5f602082019050612fcf5f830184612fad565b92915050565b5f60208284031215612fea57612fe9612c67565b5b5f612ff784828501612cb5565b91505092915050565b5f805f806080858703121561301857613017612c67565b5b5f61302587828801612cdf565b945050602061303687828801612cdf565b935050604061304787828801612cdf565b925050606061305887828801612cdf565b91505092959194509250565b5f806040838503121561307a57613079612c67565b5b5f61308785828601612cb5565b925050602061309885828601612cb5565b9150509250929050565b5f805f606084860312156130b9576130b8612c67565b5b5f6130c686828701612cb5565b93505060206130d786828701612cb5565b92505060406130e886828701612cb5565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061313657607f821691505b602082108103613149576131486130f2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613183602083612b8d565b915061318e8261314f565b602082019050919050565b5f6020820190508181035f8301526131b081613177565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6131ee82612c2d565b91506131f983612c2d565b925082820261320781612c2d565b9150828204841483151761321e5761321d6131b7565b5b5092915050565b5f61322f82612c2d565b915061323a83612c2d565b9250828201905080821115613252576132516131b7565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061329381612c9f565b92915050565b5f602082840312156132ae576132ad612c67565b5b5f6132bb84828501613285565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61332381612c8e565b82525050565b5f613334838361331a565b60208301905092915050565b5f602082019050919050565b5f613356826132f1565b61336081856132fb565b935061336b8361330b565b805f5b8381101561339b5781516133828882613329565b975061338d83613340565b92505060018101905061336e565b5085935050505092915050565b5f6040820190506133bb5f830185612c36565b81810360208301526133cd818461334c565b90509392505050565b6133df82612bc5565b810181811067ffffffffffffffff821117156133fe576133fd613258565b5b80604052505050565b5f613410612c5e565b905061341c82826133d6565b919050565b5f67ffffffffffffffff82111561343b5761343a613258565b5b602082029050602081019050919050565b5f8151905061345a81612cc9565b92915050565b5f61347261346d84613421565b613407565b9050808382526020820190506020840283018581111561349557613494612ecd565b5b835b818110156134be57806134aa888261344c565b845260208401935050602081019050613497565b5050509392505050565b5f82601f8301126134dc576134db612ec5565b5b81516134ec848260208601613460565b91505092915050565b5f6020828403121561350a57613509612c67565b5b5f82015167ffffffffffffffff81111561352757613526612c6b565b5b613533848285016134c8565b91505092915050565b5f819050919050565b61355661355182612c2d565b61353c565b82525050565b5f6135678284613545565b60208201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6135ad82612c2d565b91506135b883612c2d565b9250826135c8576135c7613576565b5b828206905092915050565b5f602082840312156135e8576135e7612c67565b5b5f6135f58482850161344c565b91505092915050565b5f6040820190506136115f830185612fad565b61361e6020830184612c36565b9392505050565b5f8151905061363381612f26565b92915050565b5f6020828403121561364e5761364d612c67565b5b5f61365b84828501613625565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6136be602583612b8d565b91506136c982613664565b604082019050919050565b5f6020820190508181035f8301526136eb816136b2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61374c602683612b8d565b9150613757826136f2565b604082019050919050565b5f6020820190508181035f83015261377981613740565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6137da602483612b8d565b91506137e582613780565b604082019050919050565b5f6020820190508181035f830152613807816137ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613868602283612b8d565b91506138738261380e565b604082019050919050565b5f6020820190508181035f8301526138958161385c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6138d0601d83612b8d565b91506138db8261389c565b602082019050919050565b5f6020820190508181035f8301526138fd816138c4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61395e602583612b8d565b915061396982613904565b604082019050919050565b5f6020820190508181035f83015261398b81613952565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6139ec602383612b8d565b91506139f782613992565b604082019050919050565b5f6020820190508181035f830152613a19816139e0565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613a7a602983612b8d565b9150613a8582613a20565b604082019050919050565b5f6020820190508181035f830152613aa781613a6e565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c6574205f8201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b5f613b08602583612b8d565b9150613b1382613aae565b604082019050919050565b5f6020820190508181035f830152613b3581613afc565b9050919050565b5f819050919050565b5f613b5f613b5a613b5584613b3c565b612da2565b612c2d565b9050919050565b613b6f81613b45565b82525050565b5f60a082019050613b885f830188612c36565b613b956020830187613b66565b8181036040830152613ba7818661334c565b9050613bb66060830185612fad565b613bc36080830184612c36565b9695505050505050565b5f613bd782612c2d565b9150613be283612c2d565b925082613bf257613bf1613576565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c57602183612b8d565b9150613c6282613bfd565b604082019050919050565b5f6020820190508181035f830152613c8481613c4b565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613cbf601b83612b8d565b9150613cca82613c8b565b602082019050919050565b5f6020820190508181035f830152613cec81613cb3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613d4d602683612b8d565b9150613d5882613cf3565b604082019050919050565b5f6020820190508181035f830152613d7a81613d41565b9050919050565b5f60c082019050613d945f830189612fad565b613da16020830188612c36565b613dae6040830187613b66565b613dbb6060830186613b66565b613dc86080830185612fad565b613dd560a0830184612c36565b979650505050505050565b5f805f60608486031215613df757613df6612c67565b5b5f613e048682870161344c565b9350506020613e158682870161344c565b9250506040613e268682870161344c565b9150509250925092565b5f613e3a82612c2d565b9150613e4583612c2d565b9250828203905081811115613e5d57613e5c6131b7565b5b9291505056fea2646970667358221220ffb5181146c1a18c790050075726565c614474b4b9fa680cef1c435ecb1c206664736f6c63430008160033

Deployed Bytecode Sourcemap

19876:7721:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8190:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20942:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10540:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26889:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20105:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9309:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11321:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27016:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20468:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9152:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12025:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25872:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20436:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25600:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20218:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23306:267;;;;;;;;;;;;;:::i;:::-;;20529:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21042:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20896:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23581:264;;;;;;;;;;;;;:::i;:::-;;20371:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9480:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7003:148;;;;;;;;;;;;;:::i;:::-;;27355:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6789:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8409:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20817:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12766:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9813:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26285:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26622:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21012:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10069:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20858:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27196:151;;;;;;;;;;;;;:::i;:::-;;7159:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26415:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8190:100;8244:13;8277:5;8270:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8190:100;:::o;20942:34::-;;;;:::o;10540:201::-;10623:4;10640:13;10656:12;:10;:12::i;:::-;10640:28;;10679:32;10688:5;10695:7;10704:6;10679:8;:32::i;:::-;10729:4;10722:11;;;10540:201;;;;:::o;26889:119::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26972:3:::1;26963:6;:12;;;;26996:4;26986:7;:14;;;;26889:119:::0;;:::o;20105:106::-;;;;;;;;;;;;;:::o;9309:108::-;9370:7;9397:12;;9390:19;;9309:108;:::o;11321:295::-;11452:4;11469:15;11487:12;:10;:12::i;:::-;11469:30;;11510:38;11526:4;11532:7;11541:6;11510:15;:38::i;:::-;11559:27;11569:4;11575:2;11579:6;11559:9;:27::i;:::-;11604:4;11597:11;;;11321:295;;;;;:::o;27016:135::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27136:7:::1;27118:15;:25;;;;:::i;:::-;27099:16;:44;;;;27016:135:::0;:::o;20468:26::-;;;;:::o;9152:92::-;9210:5;9235:1;9228:8;;9152:92;:::o;12025:238::-;12113:4;12130:13;12146:12;:10;:12::i;:::-;12130:28;;12169:64;12178:5;12185:7;12222:10;12194:25;12204:5;12211:7;12194:9;:25::i;:::-;:38;;;;:::i;:::-;12169:8;:64::i;:::-;12251:4;12244:11;;;12025:238;;;;:::o;25872:161::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25984:41:::1;25997:9;;26008:16;25984:12;:41::i;:::-;25872:161:::0;;;:::o;20436:25::-;;;;:::o;25600:264::-;25646:7;25667:21;25705:1;25691:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25667:40;;25728:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25718:4;25723:1;25718:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25779:4;25761;25766:1;25761:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25802:15;;;;;;;;;;;:29;;;25832:14;;25848:4;25802:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25854:1;25802:54;;;;;;;;:::i;:::-;;;;;;;;25795:61;;;25600:264;:::o;20218:25::-;;;;;;;;;;;;;:::o;23306:267::-;23348:28;23379:24;23397:4;23379:9;:24::i;:::-;23348:55;;23441:1;23418:20;:24;23414:152;;;23464:16;;;;;;;;;;;23459:96;;23501:38;23518:20;23501:16;:38::i;:::-;23459:96;23414:152;23337:236;23306:267::o;20529:50::-;;;;:::o;21042:41::-;;;;:::o;20896:39::-;;;;:::o;23581:264::-;23631:13;23647:5;23631:21;;23663:17;23736:5;23715:15;23698:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;23688:44;;;;;;23683:50;;:58;;;;:::i;:::-;23663:78;;23777:12;23752:22;:37;;;;23805:32;23824:12;23805:32;;;;;;:::i;:::-;;;;;;;;23620:225;;23581:264::o;20371:58::-;;;;:::o;9480:127::-;9554:7;9581:9;:18;9591:7;9581:18;;;;;;;;;;;;;;;;9574:25;;9480:127;;;:::o;7003:148::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7110:1:::1;7073:40;;7094:6;;;;;;;;;;;7073:40;;;;;;;;;;;;7141:1;7124:6;;:19;;;;;;;;;;;;;;;;;;7003:148::o:0;27355:237::-;27428:17;27455:15;27428:43;;27482:15;27500:10;:20;;;27529:4;27500:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27482:53;;27546:10;:19;;;27566:8;;;;;;;;;;;27576:7;27546:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27417:175;;27355:237;:::o;6789:79::-;6827:7;6854:6;;;;;;;;;;;6847:13;;6789:79;:::o;8409:104::-;8465:13;8498:7;8491:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8409:104;:::o;20817:34::-;;;;:::o;12766:436::-;12859:4;12876:13;12892:12;:10;:12::i;:::-;12876:28;;12915:24;12942:25;12952:5;12959:7;12942:9;:25::i;:::-;12915:52;;13006:15;12986:16;:35;;12978:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13099:60;13108:5;13115:7;13143:15;13124:16;:34;13099:8;:60::i;:::-;13190:4;13183:11;;;;12766:436;;;;:::o;9813:193::-;9892:4;9909:13;9925:12;:10;:12::i;:::-;9909:28;;9948;9958:5;9965:2;9969:6;9948:9;:28::i;:::-;9994:4;9987:11;;;9813:193;;;;:::o;26285:122::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26384:15:::1;26367:14;:32;;;;26285:122:::0;:::o;26622:259::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26757:7:::1;26740:14;:24;;;;26789:4;26775:11;:18;;;;26826:12;26804:19;:34;;;;26866:7;26849:14;:24;;;;26622:259:::0;;;;:::o;21012:23::-;;;;;;;;;;;;;:::o;10069:151::-;10158:7;10185:11;:18;10197:5;10185:18;;;;;;;;;;;;;;;:27;10204:7;10185:27;;;;;;;;;;;;;;;;10178:34;;10069:151;;;;:::o;20858:31::-;;;;:::o;27196:151::-;27248:18;27269:21;27248:42;;27309:8;;;;;;;;;;;27301:26;;:38;27328:10;27301:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27237:110;27196:151::o;7159:244::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7268:1:::1;7248:22;;:8;:22;;::::0;7240:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7358:8;7329:38;;7350:6;;;;;;;;;;;7329:38;;;;;;;;;;;;7387:8;7378:6;;:17;;;;;;;;;;;;;;;;;;7159:244:::0;:::o;26415:199::-;6926:12;:10;:12::i;:::-;6916:22;;:6;;;;;;;;;;;:22;;;6908:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26537:7:::1;26526:8;;:18;;;;;;;;;;;;;;;;;;26563:4;26555:5;;:12;;;;;;;;;;;;;;;;;;26594;26578:13;;:28;;;;;;;;;;;;;;;;;;26415:199:::0;;;:::o;3131:98::-;3184:7;3211:10;3204:17;;3131:98;:::o;16391:380::-;16544:1;16527:19;;:5;:19;;;16519:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16625:1;16606:21;;:7;:21;;;16598:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16709:6;16679:11;:18;16691:5;16679:18;;;;;;;;;;;;;;;:27;16698:7;16679:27;;;;;;;;;;;;;;;:36;;;;16747:7;16731:32;;16740:5;16731:32;;;16756:6;16731:32;;;;;;:::i;:::-;;;;;;;;16391:380;;;:::o;17062:453::-;17197:24;17224:25;17234:5;17241:7;17224:9;:25::i;:::-;17197:52;;17284:17;17264:16;:37;17260:248;;17346:6;17326:16;:26;;17318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17430:51;17439:5;17446:7;17474:6;17455:16;:25;17430:8;:51::i;:::-;17260:248;17186:329;17062:453;;;:::o;21435:1861::-;21549:1;21533:18;;:4;:18;;;21525:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21626:1;21612:16;;:2;:16;;;21604:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21696:1;21687:6;:10;21679:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21754:17;21786:13;21803:18;:24;21822:4;21803:24;;;;;;;;;;;;;;;;;;;;;;;;;21802:25;:52;;;;;21832:18;:22;21851:2;21832:22;;;;;;;;;;;;;;;;;;;;;;;;;21831:23;21802:52;:71;;;;;21866:7;:5;:7::i;:::-;21858:15;;:4;:15;;;;21802:71;:88;;;;;21883:7;:5;:7::i;:::-;21877:13;;:2;:13;;;;21802:88;21786:104;;21911:7;:5;:7::i;:::-;21903:15;;:4;:15;;;;:32;;;;;21928:7;:5;:7::i;:::-;21922:13;;:2;:13;;;;21903:32;21900:1389;;;21955:8;21952:626;;;21996:27;22019:3;21996:18;22007:6;;21996;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;21984:39;;22054:10;;;;;;;;;;;22046:18;;:4;:18;;;;:38;;;;;22074:10;;;;;;;;;;;22068:16;;:2;:16;;;22046:38;22042:521;;;22121:28;22145:3;22121:19;22132:7;;22121:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;22109:40;;22172:28;22203:24;22221:4;22203:9;:24::i;:::-;22172:55;;22277:1;22254:20;:24;22250:294;;;22307:19;22329:15;:13;:15::i;:::-;22307:37;;22399:11;22375:20;:35;;:56;;;;;22415:16;;;;;;;;;;;22414:17;22375:56;22371:150;;;22464:29;22481:11;22464:16;:29::i;:::-;22371:150;22280:264;22250:294;22086:477;22042:521;21952:626;22592:22;22617:21;22628:9;22617:6;:10;;:21;;;;:::i;:::-;22592:46;;22653:21;22677:33;22695:14;22677:13;22687:2;22677:9;:13::i;:::-;:17;;:33;;;;:::i;:::-;22653:57;;22737:10;;;;;;;;;;;22729:18;;:4;:18;;;22725:142;;22793:16;;22776:13;:33;;22768:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22725:142;22893:10;;;;;;;;;;;22885:18;;:4;:18;;;;:38;;;;;22913:10;;;;;;;;;;;22907:16;;:2;:16;;;;22885:38;22881:162;;;22969:16;;22952:13;:33;;22944:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22881:162;23072:1;23060:9;:13;23057:100;;;23094:47;23110:4;23124;23131:9;23094:15;:47::i;:::-;23057:100;23170:41;23186:4;23192:2;23196:14;23170:15;:41::i;:::-;21937:1286;;21900:1389;;;23244:33;23260:4;23266:2;23270:6;23244:15;:33::i;:::-;21900:1389;21514:1782;;21435:1861;;;:::o;26041:236::-;26128:9;26123:147;26147:9;;:16;;26143:1;:20;26123:147;;;26185:12;26200:9;;26210:1;26200:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26185:27;;26254:4;26227:18;:24;26246:4;26227:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26170:100;26165:3;;;;;;;26123:147;;;;26041:236;;;:::o;23852:1218::-;23978:16;23997:40;24033:3;23997:31;24013:14;;23997:11;:15;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;23978:59;;24048:23;24074:25;24090:8;24074:11;:15;;:25;;;;:::i;:::-;24048:51;;24110:21;24148:1;24134:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24110:40;;24179:4;24161;24166:1;24161:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24205:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24195:4;24200:1;24195:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;24238:62;24255:4;24270:15;;;;;;;;;;;24288:11;24238:8;:62::i;:::-;24337:15;;;;;;;;;;;:66;;;24418:15;24448:1;24465:4;24492;24512:15;24337:201;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24559:15;24577:21;24559:39;;24609:15;24627:36;24659:3;24627:27;24639:14;;24627:7;:11;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;24609:54;;24674:12;24689:33;24718:3;24689:24;24701:11;;24689:7;:11;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24674:48;;24733:20;24756:41;24793:3;24756:32;24768:19;;24756:7;:11;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;24733:64;;24808:20;24831:36;24863:3;24831:27;24843:14;;24831:7;:11;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;24808:59;;24886:8;;;;;;;;;;;24878:26;;:35;24905:7;24878:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24934:5;;;;;;;;;;;24926:23;;:29;24950:4;24926:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24976:13;;;;;;;;;;;24968:31;;:45;25000:12;24968:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25026:36;25039:8;25049:12;25026;:36::i;:::-;23907:1163;;;;;;;;23852:1218;:::o;1803:471::-;1861:7;2111:1;2106;:6;2102:47;;2136:1;2129:8;;;;2102:47;2161:9;2177:1;2173;:5;;;;:::i;:::-;2161:17;;2206:1;2201;2197;:5;;;;:::i;:::-;:10;2189:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2265:1;2258:8;;;1803:471;;;;;:::o;2282:132::-;2340:7;2367:39;2371:1;2374;2367:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2360:46;;2282:132;;;;:::o;1459:136::-;1517:7;1544:43;1548:1;1551;1544:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1537:50;;1459:136;;;;:::o;1270:181::-;1328:7;1348:9;1364:1;1360;:5;;;;:::i;:::-;1348:17;;1389:1;1384;:6;;1376:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1442:1;1435:8;;;1270:181;;;;:::o;13672:671::-;13819:1;13803:18;;:4;:18;;;13795:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13896:1;13882:16;;:2;:16;;;13874:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;13951:38;13972:4;13978:2;13982:6;13951:20;:38::i;:::-;14002:19;14024:9;:15;14034:4;14024:15;;;;;;;;;;;;;;;;14002:37;;14073:6;14058:11;:21;;14050:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14190:6;14176:11;:20;14158:9;:15;14168:4;14158:15;;;;;;;;;;;;;;;:38;;;;14235:6;14218:9;:13;14228:2;14218:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;14274:2;14259:26;;14268:4;14259:26;;;14278:6;14259:26;;;;;;:::i;:::-;;;;;;;;14298:37;14318:4;14324:2;14328:6;14298:19;:37::i;:::-;13784:559;13672:671;;;:::o;25078:514::-;25226:62;25243:4;25258:15;;;;;;;;;;;25276:11;25226:8;:62::i;:::-;25331:15;;;;;;;;;;;:31;;;25370:9;25403:4;25423:11;25449:1;25492;25535:8;;;;;;;;;;;25558:15;25331:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25078:514;;:::o;2422:278::-;2508:7;2540:1;2536;:5;2543:12;2528:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2567:9;2583:1;2579;:5;;;;:::i;:::-;2567:17;;2691:1;2684:8;;;2422:278;;;;;:::o;1603:192::-;1689:7;1722:1;1717;:6;;1725:12;1709:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1749:9;1765:1;1761;:5;;;;:::i;:::-;1749:17;;1786:1;1779:8;;;1603:192;;;;;:::o;18115:125::-;;;;:::o;18844:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:474::-;3866:6;3874;3923:2;3911:9;3902:7;3898:23;3894:32;3891:119;;;3929:79;;:::i;:::-;3891:119;4049:1;4074:53;4119:7;4110:6;4099:9;4095:22;4074:53;:::i;:::-;4064:63;;4020:117;4176:2;4202:53;4247:7;4238:6;4227:9;4223:22;4202:53;:::i;:::-;4192:63;;4147:118;3798:474;;;;;:::o;4278:60::-;4306:3;4327:5;4320:12;;4278:60;;;:::o;4344:142::-;4394:9;4427:53;4445:34;4454:24;4472:5;4454:24;:::i;:::-;4445:34;:::i;:::-;4427:53;:::i;:::-;4414:66;;4344:142;;;:::o;4492:126::-;4542:9;4575:37;4606:5;4575:37;:::i;:::-;4562:50;;4492:126;;;:::o;4624:153::-;4701:9;4734:37;4765:5;4734:37;:::i;:::-;4721:50;;4624:153;;;:::o;4783:185::-;4897:64;4955:5;4897:64;:::i;:::-;4892:3;4885:77;4783:185;;:::o;4974:276::-;5094:4;5132:2;5121:9;5117:18;5109:26;;5145:98;5240:1;5229:9;5225:17;5216:6;5145:98;:::i;:::-;4974:276;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:329::-;5940:6;5989:2;5977:9;5968:7;5964:23;5960:32;5957:119;;;5995:79;;:::i;:::-;5957:119;6115:1;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6086:117;5881:329;;;;:::o;6216:86::-;6251:7;6291:4;6284:5;6280:16;6269:27;;6216:86;;;:::o;6308:112::-;6391:22;6407:5;6391:22;:::i;:::-;6386:3;6379:35;6308:112;;:::o;6426:214::-;6515:4;6553:2;6542:9;6538:18;6530:26;;6566:67;6630:1;6619:9;6615:17;6606:6;6566:67;:::i;:::-;6426:214;;;;:::o;6646:117::-;6755:1;6752;6745:12;6769:117;6878:1;6875;6868:12;6892:117;7001:1;6998;6991:12;7032:568;7105:8;7115:6;7165:3;7158:4;7150:6;7146:17;7142:27;7132:122;;7173:79;;:::i;:::-;7132:122;7286:6;7273:20;7263:30;;7316:18;7308:6;7305:30;7302:117;;;7338:79;;:::i;:::-;7302:117;7452:4;7444:6;7440:17;7428:29;;7506:3;7498:4;7490:6;7486:17;7476:8;7472:32;7469:41;7466:128;;;7513:79;;:::i;:::-;7466:128;7032:568;;;;;:::o;7606:116::-;7676:21;7691:5;7676:21;:::i;:::-;7669:5;7666:32;7656:60;;7712:1;7709;7702:12;7656:60;7606:116;:::o;7728:133::-;7771:5;7809:6;7796:20;7787:29;;7825:30;7849:5;7825:30;:::i;:::-;7728:133;;;;:::o;7867:698::-;7959:6;7967;7975;8024:2;8012:9;8003:7;7999:23;7995:32;7992:119;;;8030:79;;:::i;:::-;7992:119;8178:1;8167:9;8163:17;8150:31;8208:18;8200:6;8197:30;8194:117;;;8230:79;;:::i;:::-;8194:117;8343:80;8415:7;8406:6;8395:9;8391:22;8343:80;:::i;:::-;8325:98;;;;8121:312;8472:2;8498:50;8540:7;8531:6;8520:9;8516:22;8498:50;:::i;:::-;8488:60;;8443:115;7867:698;;;;;:::o;8571:118::-;8658:24;8676:5;8658:24;:::i;:::-;8653:3;8646:37;8571:118;;:::o;8695:222::-;8788:4;8826:2;8815:9;8811:18;8803:26;;8839:71;8907:1;8896:9;8892:17;8883:6;8839:71;:::i;:::-;8695:222;;;;:::o;8923:329::-;8982:6;9031:2;9019:9;9010:7;9006:23;9002:32;8999:119;;;9037:79;;:::i;:::-;8999:119;9157:1;9182:53;9227:7;9218:6;9207:9;9203:22;9182:53;:::i;:::-;9172:63;;9128:117;8923:329;;;;:::o;9258:765::-;9344:6;9352;9360;9368;9417:3;9405:9;9396:7;9392:23;9388:33;9385:120;;;9424:79;;:::i;:::-;9385:120;9544:1;9569:53;9614:7;9605:6;9594:9;9590:22;9569:53;:::i;:::-;9559:63;;9515:117;9671:2;9697:53;9742:7;9733:6;9722:9;9718:22;9697:53;:::i;:::-;9687:63;;9642:118;9799:2;9825:53;9870:7;9861:6;9850:9;9846:22;9825:53;:::i;:::-;9815:63;;9770:118;9927:2;9953:53;9998:7;9989:6;9978:9;9974:22;9953:53;:::i;:::-;9943:63;;9898:118;9258:765;;;;;;;:::o;10029:474::-;10097:6;10105;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10407:2;10433:53;10478:7;10469:6;10458:9;10454:22;10433:53;:::i;:::-;10423:63;;10378:118;10029:474;;;;;:::o;10509:619::-;10586:6;10594;10602;10651:2;10639:9;10630:7;10626:23;10622:32;10619:119;;;10657:79;;:::i;:::-;10619:119;10777:1;10802:53;10847:7;10838:6;10827:9;10823:22;10802:53;:::i;:::-;10792:63;;10748:117;10904:2;10930:53;10975:7;10966:6;10955:9;10951:22;10930:53;:::i;:::-;10920:63;;10875:118;11032:2;11058:53;11103:7;11094:6;11083:9;11079:22;11058:53;:::i;:::-;11048:63;;11003:118;10509:619;;;;;:::o;11134:180::-;11182:77;11179:1;11172:88;11279:4;11276:1;11269:15;11303:4;11300:1;11293:15;11320:320;11364:6;11401:1;11395:4;11391:12;11381:22;;11448:1;11442:4;11438:12;11469:18;11459:81;;11525:4;11517:6;11513:17;11503:27;;11459:81;11587:2;11579:6;11576:14;11556:18;11553:38;11550:84;;11606:18;;:::i;:::-;11550:84;11371:269;11320:320;;;:::o;11646:182::-;11786:34;11782:1;11774:6;11770:14;11763:58;11646:182;:::o;11834:366::-;11976:3;11997:67;12061:2;12056:3;11997:67;:::i;:::-;11990:74;;12073:93;12162:3;12073:93;:::i;:::-;12191:2;12186:3;12182:12;12175:19;;11834:366;;;:::o;12206:419::-;12372:4;12410:2;12399:9;12395:18;12387:26;;12459:9;12453:4;12449:20;12445:1;12434:9;12430:17;12423:47;12487:131;12613:4;12487:131;:::i;:::-;12479:139;;12206:419;;;:::o;12631:180::-;12679:77;12676:1;12669:88;12776:4;12773:1;12766:15;12800:4;12797:1;12790:15;12817:410;12857:7;12880:20;12898:1;12880:20;:::i;:::-;12875:25;;12914:20;12932:1;12914:20;:::i;:::-;12909:25;;12969:1;12966;12962:9;12991:30;13009:11;12991:30;:::i;:::-;12980:41;;13170:1;13161:7;13157:15;13154:1;13151:22;13131:1;13124:9;13104:83;13081:139;;13200:18;;:::i;:::-;13081:139;12865:362;12817:410;;;;:::o;13233:191::-;13273:3;13292:20;13310:1;13292:20;:::i;:::-;13287:25;;13326:20;13344:1;13326:20;:::i;:::-;13321:25;;13369:1;13366;13362:9;13355:16;;13390:3;13387:1;13384:10;13381:36;;;13397:18;;:::i;:::-;13381:36;13233:191;;;;:::o;13430:180::-;13478:77;13475:1;13468:88;13575:4;13572:1;13565:15;13599:4;13596:1;13589:15;13616:143;13673:5;13704:6;13698:13;13689:22;;13720:33;13747:5;13720:33;:::i;:::-;13616:143;;;;:::o;13765:351::-;13835:6;13884:2;13872:9;13863:7;13859:23;13855:32;13852:119;;;13890:79;;:::i;:::-;13852:119;14010:1;14035:64;14091:7;14082:6;14071:9;14067:22;14035:64;:::i;:::-;14025:74;;13981:128;13765:351;;;;:::o;14122:180::-;14170:77;14167:1;14160:88;14267:4;14264:1;14257:15;14291:4;14288:1;14281:15;14308:114;14375:6;14409:5;14403:12;14393:22;;14308:114;;;:::o;14428:184::-;14527:11;14561:6;14556:3;14549:19;14601:4;14596:3;14592:14;14577:29;;14428:184;;;;:::o;14618:132::-;14685:4;14708:3;14700:11;;14738:4;14733:3;14729:14;14721:22;;14618:132;;;:::o;14756:108::-;14833:24;14851:5;14833:24;:::i;:::-;14828:3;14821:37;14756:108;;:::o;14870:179::-;14939:10;14960:46;15002:3;14994:6;14960:46;:::i;:::-;15038:4;15033:3;15029:14;15015:28;;14870:179;;;;:::o;15055:113::-;15125:4;15157;15152:3;15148:14;15140:22;;15055:113;;;:::o;15204:732::-;15323:3;15352:54;15400:5;15352:54;:::i;:::-;15422:86;15501:6;15496:3;15422:86;:::i;:::-;15415:93;;15532:56;15582:5;15532:56;:::i;:::-;15611:7;15642:1;15627:284;15652:6;15649:1;15646:13;15627:284;;;15728:6;15722:13;15755:63;15814:3;15799:13;15755:63;:::i;:::-;15748:70;;15841:60;15894:6;15841:60;:::i;:::-;15831:70;;15687:224;15674:1;15671;15667:9;15662:14;;15627:284;;;15631:14;15927:3;15920:10;;15328:608;;;15204:732;;;;:::o;15942:483::-;16113:4;16151:2;16140:9;16136:18;16128:26;;16164:71;16232:1;16221:9;16217:17;16208:6;16164:71;:::i;:::-;16282:9;16276:4;16272:20;16267:2;16256:9;16252:18;16245:48;16310:108;16413:4;16404:6;16310:108;:::i;:::-;16302:116;;15942:483;;;;;:::o;16431:281::-;16514:27;16536:4;16514:27;:::i;:::-;16506:6;16502:40;16644:6;16632:10;16629:22;16608:18;16596:10;16593:34;16590:62;16587:88;;;16655:18;;:::i;:::-;16587:88;16695:10;16691:2;16684:22;16474:238;16431:281;;:::o;16718:129::-;16752:6;16779:20;;:::i;:::-;16769:30;;16808:33;16836:4;16828:6;16808:33;:::i;:::-;16718:129;;;:::o;16853:311::-;16930:4;17020:18;17012:6;17009:30;17006:56;;;17042:18;;:::i;:::-;17006:56;17092:4;17084:6;17080:17;17072:25;;17152:4;17146;17142:15;17134:23;;16853:311;;;:::o;17170:143::-;17227:5;17258:6;17252:13;17243:22;;17274:33;17301:5;17274:33;:::i;:::-;17170:143;;;;:::o;17336:732::-;17443:5;17468:81;17484:64;17541:6;17484:64;:::i;:::-;17468:81;:::i;:::-;17459:90;;17569:5;17598:6;17591:5;17584:21;17632:4;17625:5;17621:16;17614:23;;17685:4;17677:6;17673:17;17665:6;17661:30;17714:3;17706:6;17703:15;17700:122;;;17733:79;;:::i;:::-;17700:122;17848:6;17831:231;17865:6;17860:3;17857:15;17831:231;;;17940:3;17969:48;18013:3;18001:10;17969:48;:::i;:::-;17964:3;17957:61;18047:4;18042:3;18038:14;18031:21;;17907:155;17891:4;17886:3;17882:14;17875:21;;17831:231;;;17835:21;17449:619;;17336:732;;;;;:::o;18091:385::-;18173:5;18222:3;18215:4;18207:6;18203:17;18199:27;18189:122;;18230:79;;:::i;:::-;18189:122;18340:6;18334:13;18365:105;18466:3;18458:6;18451:4;18443:6;18439:17;18365:105;:::i;:::-;18356:114;;18179:297;18091:385;;;;:::o;18482:554::-;18577:6;18626:2;18614:9;18605:7;18601:23;18597:32;18594:119;;;18632:79;;:::i;:::-;18594:119;18773:1;18762:9;18758:17;18752:24;18803:18;18795:6;18792:30;18789:117;;;18825:79;;:::i;:::-;18789:117;18930:89;19011:7;19002:6;18991:9;18987:22;18930:89;:::i;:::-;18920:99;;18723:306;18482:554;;;;:::o;19042:79::-;19081:7;19110:5;19099:16;;19042:79;;;:::o;19127:157::-;19232:45;19252:24;19270:5;19252:24;:::i;:::-;19232:45;:::i;:::-;19227:3;19220:58;19127:157;;:::o;19290:256::-;19402:3;19417:75;19488:3;19479:6;19417:75;:::i;:::-;19517:2;19512:3;19508:12;19501:19;;19537:3;19530:10;;19290:256;;;;:::o;19552:180::-;19600:77;19597:1;19590:88;19697:4;19694:1;19687:15;19721:4;19718:1;19711:15;19738:176;19770:1;19787:20;19805:1;19787:20;:::i;:::-;19782:25;;19821:20;19839:1;19821:20;:::i;:::-;19816:25;;19860:1;19850:35;;19865:18;;:::i;:::-;19850:35;19906:1;19903;19899:9;19894:14;;19738:176;;;;:::o;19920:351::-;19990:6;20039:2;20027:9;20018:7;20014:23;20010:32;20007:119;;;20045:79;;:::i;:::-;20007:119;20165:1;20190:64;20246:7;20237:6;20226:9;20222:22;20190:64;:::i;:::-;20180:74;;20136:128;19920:351;;;;:::o;20277:332::-;20398:4;20436:2;20425:9;20421:18;20413:26;;20449:71;20517:1;20506:9;20502:17;20493:6;20449:71;:::i;:::-;20530:72;20598:2;20587:9;20583:18;20574:6;20530:72;:::i;:::-;20277:332;;;;;:::o;20615:137::-;20669:5;20700:6;20694:13;20685:22;;20716:30;20740:5;20716:30;:::i;:::-;20615:137;;;;:::o;20758:345::-;20825:6;20874:2;20862:9;20853:7;20849:23;20845:32;20842:119;;;20880:79;;:::i;:::-;20842:119;21000:1;21025:61;21078:7;21069:6;21058:9;21054:22;21025:61;:::i;:::-;21015:71;;20971:125;20758:345;;;;:::o;21109:224::-;21249:34;21245:1;21237:6;21233:14;21226:58;21318:7;21313:2;21305:6;21301:15;21294:32;21109:224;:::o;21339:366::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:419::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:225::-;22276:34;22272:1;22264:6;22260:14;22253:58;22345:8;22340:2;22332:6;22328:15;22321:33;22136:225;:::o;22367:366::-;22509:3;22530:67;22594:2;22589:3;22530:67;:::i;:::-;22523:74;;22606:93;22695:3;22606:93;:::i;:::-;22724:2;22719:3;22715:12;22708:19;;22367:366;;;:::o;22739:419::-;22905:4;22943:2;22932:9;22928:18;22920:26;;22992:9;22986:4;22982:20;22978:1;22967:9;22963:17;22956:47;23020:131;23146:4;23020:131;:::i;:::-;23012:139;;22739:419;;;:::o;23164:223::-;23304:34;23300:1;23292:6;23288:14;23281:58;23373:6;23368:2;23360:6;23356:15;23349:31;23164:223;:::o;23393:366::-;23535:3;23556:67;23620:2;23615:3;23556:67;:::i;:::-;23549:74;;23632:93;23721:3;23632:93;:::i;:::-;23750:2;23745:3;23741:12;23734:19;;23393:366;;;:::o;23765:419::-;23931:4;23969:2;23958:9;23954:18;23946:26;;24018:9;24012:4;24008:20;24004:1;23993:9;23989:17;23982:47;24046:131;24172:4;24046:131;:::i;:::-;24038:139;;23765:419;;;:::o;24190:221::-;24330:34;24326:1;24318:6;24314:14;24307:58;24399:4;24394:2;24386:6;24382:15;24375:29;24190:221;:::o;24417:366::-;24559:3;24580:67;24644:2;24639:3;24580:67;:::i;:::-;24573:74;;24656:93;24745:3;24656:93;:::i;:::-;24774:2;24769:3;24765:12;24758:19;;24417:366;;;:::o;24789:419::-;24955:4;24993:2;24982:9;24978:18;24970:26;;25042:9;25036:4;25032:20;25028:1;25017:9;25013:17;25006:47;25070:131;25196:4;25070:131;:::i;:::-;25062:139;;24789:419;;;:::o;25214:179::-;25354:31;25350:1;25342:6;25338:14;25331:55;25214:179;:::o;25399:366::-;25541:3;25562:67;25626:2;25621:3;25562:67;:::i;:::-;25555:74;;25638:93;25727:3;25638:93;:::i;:::-;25756:2;25751:3;25747:12;25740:19;;25399:366;;;:::o;25771:419::-;25937:4;25975:2;25964:9;25960:18;25952:26;;26024:9;26018:4;26014:20;26010:1;25999:9;25995:17;25988:47;26052:131;26178:4;26052:131;:::i;:::-;26044:139;;25771:419;;;:::o;26196:224::-;26336:34;26332:1;26324:6;26320:14;26313:58;26405:7;26400:2;26392:6;26388:15;26381:32;26196:224;:::o;26426:366::-;26568:3;26589:67;26653:2;26648:3;26589:67;:::i;:::-;26582:74;;26665:93;26754:3;26665:93;:::i;:::-;26783:2;26778:3;26774:12;26767:19;;26426:366;;;:::o;26798:419::-;26964:4;27002:2;26991:9;26987:18;26979:26;;27051:9;27045:4;27041:20;27037:1;27026:9;27022:17;27015:47;27079:131;27205:4;27079:131;:::i;:::-;27071:139;;26798:419;;;:::o;27223:222::-;27363:34;27359:1;27351:6;27347:14;27340:58;27432:5;27427:2;27419:6;27415:15;27408:30;27223:222;:::o;27451:366::-;27593:3;27614:67;27678:2;27673:3;27614:67;:::i;:::-;27607:74;;27690:93;27779:3;27690:93;:::i;:::-;27808:2;27803:3;27799:12;27792:19;;27451:366;;;:::o;27823:419::-;27989:4;28027:2;28016:9;28012:18;28004:26;;28076:9;28070:4;28066:20;28062:1;28051:9;28047:17;28040:47;28104:131;28230:4;28104:131;:::i;:::-;28096:139;;27823:419;;;:::o;28248:228::-;28388:34;28384:1;28376:6;28372:14;28365:58;28457:11;28452:2;28444:6;28440:15;28433:36;28248:228;:::o;28482:366::-;28624:3;28645:67;28709:2;28704:3;28645:67;:::i;:::-;28638:74;;28721:93;28810:3;28721:93;:::i;:::-;28839:2;28834:3;28830:12;28823:19;;28482:366;;;:::o;28854:419::-;29020:4;29058:2;29047:9;29043:18;29035:26;;29107:9;29101:4;29097:20;29093:1;29082:9;29078:17;29071:47;29135:131;29261:4;29135:131;:::i;:::-;29127:139;;28854:419;;;:::o;29279:224::-;29419:34;29415:1;29407:6;29403:14;29396:58;29488:7;29483:2;29475:6;29471:15;29464:32;29279:224;:::o;29509:366::-;29651:3;29672:67;29736:2;29731:3;29672:67;:::i;:::-;29665:74;;29748:93;29837:3;29748:93;:::i;:::-;29866:2;29861:3;29857:12;29850:19;;29509:366;;;:::o;29881:419::-;30047:4;30085:2;30074:9;30070:18;30062:26;;30134:9;30128:4;30124:20;30120:1;30109:9;30105:17;30098:47;30162:131;30288:4;30162:131;:::i;:::-;30154:139;;29881:419;;;:::o;30306:85::-;30351:7;30380:5;30369:16;;30306:85;;;:::o;30397:158::-;30455:9;30488:61;30506:42;30515:32;30541:5;30515:32;:::i;:::-;30506:42;:::i;:::-;30488:61;:::i;:::-;30475:74;;30397:158;;;:::o;30561:147::-;30656:45;30695:5;30656:45;:::i;:::-;30651:3;30644:58;30561:147;;:::o;30714:831::-;30977:4;31015:3;31004:9;31000:19;30992:27;;31029:71;31097:1;31086:9;31082:17;31073:6;31029:71;:::i;:::-;31110:80;31186:2;31175:9;31171:18;31162:6;31110:80;:::i;:::-;31237:9;31231:4;31227:20;31222:2;31211:9;31207:18;31200:48;31265:108;31368:4;31359:6;31265:108;:::i;:::-;31257:116;;31383:72;31451:2;31440:9;31436:18;31427:6;31383:72;:::i;:::-;31465:73;31533:3;31522:9;31518:19;31509:6;31465:73;:::i;:::-;30714:831;;;;;;;;:::o;31551:185::-;31591:1;31608:20;31626:1;31608:20;:::i;:::-;31603:25;;31642:20;31660:1;31642:20;:::i;:::-;31637:25;;31681:1;31671:35;;31686:18;;:::i;:::-;31671:35;31728:1;31725;31721:9;31716:14;;31551:185;;;;:::o;31742:220::-;31882:34;31878:1;31870:6;31866:14;31859:58;31951:3;31946:2;31938:6;31934:15;31927:28;31742:220;:::o;31968:366::-;32110:3;32131:67;32195:2;32190:3;32131:67;:::i;:::-;32124:74;;32207:93;32296:3;32207:93;:::i;:::-;32325:2;32320:3;32316:12;32309:19;;31968:366;;;:::o;32340:419::-;32506:4;32544:2;32533:9;32529:18;32521:26;;32593:9;32587:4;32583:20;32579:1;32568:9;32564:17;32557:47;32621:131;32747:4;32621:131;:::i;:::-;32613:139;;32340:419;;;:::o;32765:177::-;32905:29;32901:1;32893:6;32889:14;32882:53;32765:177;:::o;32948:366::-;33090:3;33111:67;33175:2;33170:3;33111:67;:::i;:::-;33104:74;;33187:93;33276:3;33187:93;:::i;:::-;33305:2;33300:3;33296:12;33289:19;;32948:366;;;:::o;33320:419::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:225::-;33885:34;33881:1;33873:6;33869:14;33862:58;33954:8;33949:2;33941:6;33937:15;33930:33;33745:225;:::o;33976:366::-;34118:3;34139:67;34203:2;34198:3;34139:67;:::i;:::-;34132:74;;34215:93;34304:3;34215:93;:::i;:::-;34333:2;34328:3;34324:12;34317:19;;33976:366;;;:::o;34348:419::-;34514:4;34552:2;34541:9;34537:18;34529:26;;34601:9;34595:4;34591:20;34587:1;34576:9;34572:17;34565:47;34629:131;34755:4;34629:131;:::i;:::-;34621:139;;34348:419;;;:::o;34773:807::-;35022:4;35060:3;35049:9;35045:19;35037:27;;35074:71;35142:1;35131:9;35127:17;35118:6;35074:71;:::i;:::-;35155:72;35223:2;35212:9;35208:18;35199:6;35155:72;:::i;:::-;35237:80;35313:2;35302:9;35298:18;35289:6;35237:80;:::i;:::-;35327;35403:2;35392:9;35388:18;35379:6;35327:80;:::i;:::-;35417:73;35485:3;35474:9;35470:19;35461:6;35417:73;:::i;:::-;35500;35568:3;35557:9;35553:19;35544:6;35500:73;:::i;:::-;34773:807;;;;;;;;;:::o;35586:663::-;35674:6;35682;35690;35739:2;35727:9;35718:7;35714:23;35710:32;35707:119;;;35745:79;;:::i;:::-;35707:119;35865:1;35890:64;35946:7;35937:6;35926:9;35922:22;35890:64;:::i;:::-;35880:74;;35836:128;36003:2;36029:64;36085:7;36076:6;36065:9;36061:22;36029:64;:::i;:::-;36019:74;;35974:129;36142:2;36168:64;36224:7;36215:6;36204:9;36200:22;36168:64;:::i;:::-;36158:74;;36113:129;35586:663;;;;;:::o;36255:194::-;36295:4;36315:20;36333:1;36315:20;:::i;:::-;36310:25;;36349:20;36367:1;36349:20;:::i;:::-;36344:25;;36393:1;36390;36386:9;36378:17;;36417:1;36411:4;36408:11;36405:37;;;36422:18;;:::i;:::-;36405:37;36255:194;;;;:::o

Swarm Source

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