ETH Price: $2,861.08 (-10.02%)
Gas: 15 Gwei

Token

Cult Coin ($CULT)
 

Overview

Max Total Supply

329,146,572.194661635209633441 $CULT

Holders

165

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
24,736.331148618855736013 $CULT

Value
$0.00
0xC7Ab55df0B6B75DD601d5f44EDeE72F91b80a63A
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:
CultToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-12
*/

/**
 *       https://twitter.com/cult_initiation
 *       https://t.me/cult_initation
 **/

/**


⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣞⣋⣉⣳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣋⣉⣄⣉⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠋⡉⢉⠁⣈⠛⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⡉⠁⠉⣄⢉⡉⠙⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠯⡽⠋⠉⠁⣁⠈⠉⠛⠛⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠆⣸⣅⣁⣬⣭⣌⣉⣜⡓⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⡿⡿⠿⣿⣿⣿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣿⢿⣍⠉⠃⠀⠀⣀⣴⠛⠀⣹⠟⢿⡄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⣟⣻⡶⠚⠚⠋⠩⠍⠿⠭⣽⣿⣧⣞⠉⢻⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⣾⣿⡷⠋⠁⠀⠀⠀⣀⣀⣤⣤⣤⣀⡈⢹⣻⣷⣴⣷⡀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣼⡟⠛⠀⣠⡴⣶⣿⡟⠛⢻⣿⣿⣿⣿⢿⢷⣿⣿⣙⣯⣷⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡜⠛⣤⣶⣿⣿⡇⢿⣿⣷⣄⣘⣿⣿⣿⡿⡼⠺⠛⣿⣿⣿⡟⣷⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣸⢛⡛⡿⠿⣷⣧⠹⣌⢿⡋⠉⠛⣛⣿⣿⠟⢡⠆⣰⣿⣿⣿⠿⢮⣧⠀⠀⠀⠀
⠀⠀⠀⡰⢷⡤⠏⢁⠀⠈⠛⠃⠈⠀⠈⠉⠛⠛⠉⠁⠀⠉⣀⣬⣿⣿⣿⠿⠦⣙⣧⠀⠀⠀
⠀⠀⢰⠛⣿⠛⠦⠀⡀⠒⠀⠀⠐⠦⠤⠤⠤⠤⠴⠖⢒⣻⢷⣛⣿⡈⠉⢤⡒⠛⢻⣆⠀⠀
⠀⢠⣻⣯⡉⢳⡶⠤⣍⡉⢐⡒⠒⠐⠲⣶⢶⣤⠀⢰⣾⣟⣻⣿⡷⠴⠖⣾⠛⢻⣍⠙⣆⠀
⢠⠿⣬⡉⣹⡿⠦⠀⢤⣄⠀⠹⠏⢹⠛⠋⢋⣟⢉⡍⢉⣭⠠⣶⠀⠴⠓⠛⠛⠿⣽⣿⣿⡆
⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉
 **/

pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */

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

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

// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

contract CultToken is IERC20, Ownable {
    using SafeMath for uint256;

    address private constant UNISWAP_ROUTER =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address private constant UNISWAP_FACTORY =
        0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
    address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    string private constant _name = "Cult Coin";
    string private constant _symbol = "$CULT";
    uint8 private constant _decimals = 18;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 333000000 * 10 ** 18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 0;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 20;

    //Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping(address => bool) public bots;
    mapping(address => uint256) public _buyMap;

    address payable private _developmentAddress =
        payable(0xd0f0c2D1F8fda751c56fB06Eabe070D4DeAdcF01); //Dev Address
    address payable private _marketingAddress =
        payable(0xd0f0c2D1F8fda751c56fB06Eabe070D4DeAdcF01); // Marketing Address

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = true;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount = 1000000000000000000 * 10 ** 18;
    uint256 public _maxWalletSize = 1000000000000000000 * 10 ** 18;
    uint256 public _swapTokensAtAmount = 10000 * 10 ** 18;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            UNISWAP_ROUTER
        ); //
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

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

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

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

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

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

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

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

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

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

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

    function tokenFromReflection(
        uint256 rAmount
    ) private view returns (uint256) {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

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

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

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

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

        if (from != owner() && to != owner()) {
            //Trade start check
            if (!tradingOpen) {
                require(
                    from == owner(),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            require(
                !bots[from] && !bots[to],
                "TOKEN: Your account is blacklisted!"
            );

            if (to != uniswapV2Pair) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if (contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount;
            }

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            //Set Fee for Buys
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
                uint256 amountToBurn = amount.mul(_taxFee).div(100);
                _tTotal -= amountToBurn;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

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

    ///Withdrawls any eth that's sent to this contract
    function manualswap() external {
        require(
            _msgSender() == _developmentAddress ||
                _msgSender() == _marketingAddress
        );
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    ///Withdrawls any erc20 that's sent to this contract
    function manualsend() external {
        require(
            _msgSender() == _developmentAddress ||
                _msgSender() == _marketingAddress
        );
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }

    function blockBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notbot) public onlyOwner {
        bots[notbot] = false;
    }

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

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(
        uint256 tAmount
    )
        private
        view
        returns (uint256, uint256, uint256, uint256, uint256, uint256)
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    ) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    ) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(
        uint256 swapTokensAtAmount
    ) public onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    //Set maximum transaction
    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_buyMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","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":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526b0113737e2c00911a6d00000060055560055460001962000026919062000894565b6000196200003591906200081b565b600655600060085560006009556000600a556014600b55600a54600c55600b54600d55600c54600e55600d54600f5573d0f0c2d1f8fda751c56fb06eabe070d4deadcf01601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d0f0c2d1f8fda751c56fb06eabe070d4deadcf01601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560146101000a81548160ff02191690831515021790555060006015806101000a81548160ff0219169083151502179055506001601560166101000a81548160ff0219169083151502179055506ec097ce7bc90715b34b9f10000000006016556ec097ce7bc90715b34b9f100000000060175569021e19e0c9bab24000006018553480156200019f57600080fd5b50620001c0620001b46200067760201b60201c565b6200067f60201b60201c565b60065460016000620001d76200067760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b657600080fd5b505afa158015620002cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f1919062000783565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035457600080fd5b505afa15801562000369573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038f919062000783565b6040518363ffffffff1660e01b8152600401620003ae929190620007d1565b602060405180830381600087803b158015620003c957600080fd5b505af1158015620003de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000404919062000783565b601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460006200045a6200074360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006076200067760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620006689190620007fe565b60405180910390a35062000944565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000815190506200077d816200092a565b92915050565b6000602082840312156200079657600080fd5b6000620007a6848285016200076c565b91505092915050565b620007ba8162000856565b82525050565b620007cb816200088a565b82525050565b6000604082019050620007e86000830185620007af565b620007f76020830184620007af565b9392505050565b6000602082019050620008156000830184620007c0565b92915050565b600062000828826200088a565b915062000835836200088a565b9250828210156200084b576200084a620008cc565b5b828203905092915050565b600062000863826200086a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620008a1826200088a565b9150620008ae836200088a565b925082620008c157620008c0620008fb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b620009358162000856565b81146200094157600080fd5b50565b613b8280620009546000396000f3fe6080604052600436106101d05760003560e01c80637d1db4a5116100f7578063a2a957bb11610095578063c492f04611610064578063c492f0461461065c578063dd62ed3e14610685578063ea1644d5146106c2578063f2fde38b146106eb576101d7565b8063a2a957bb146105a2578063a9059cbb146105cb578063bfd7928414610608578063c3c8cd8014610645576101d7565b80638f70ccf7116100d15780638f70ccf7146104fa5780638f9a55c01461052357806395d89b411461054e57806398a5c31514610579576101d7565b80637d1db4a5146104675780637f2feddc146104925780638da5cb5b146104cf576101d7565b8063313ce5671161016f5780636fc3eaec1161013e5780636fc3eaec146103d357806370a08231146103ea578063715018a61461042757806374010ece1461043e576101d7565b8063313ce5671461032b57806349bd5a5e146103565780636b999053146103815780636d8aa8f8146103aa576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632fd689e314610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612d80565b610714565b005b34801561021157600080fd5b5061021a61084b565b6040516102279190613501565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612cec565b610888565b60405161026491906134cb565b60405180910390f35b34801561027957600080fd5b506102826108a6565b60405161028f91906134e6565b60405180910390f35b3480156102a457600080fd5b506102ad6108cc565b6040516102ba91906136e3565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612c9d565b6108d6565b6040516102f791906134cb565b60405180910390f35b34801561030c57600080fd5b506103156109af565b60405161032291906136e3565b60405180910390f35b34801561033757600080fd5b506103406109b5565b60405161034d9190613758565b60405180910390f35b34801561036257600080fd5b5061036b6109be565b60405161037891906134b0565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612c0f565b6109e4565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190612dc1565b610abb565b005b3480156103df57600080fd5b506103e8610b54565b005b3480156103f657600080fd5b50610411600480360381019061040c9190612c0f565b610c25565b60405161041e91906136e3565b60405180910390f35b34801561043357600080fd5b5061043c610c76565b005b34801561044a57600080fd5b5061046560048036038101906104609190612dea565b610cfe565b005b34801561047357600080fd5b5061047c610d84565b60405161048991906136e3565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190612c0f565b610d8a565b6040516104c691906136e3565b60405180910390f35b3480156104db57600080fd5b506104e4610da2565b6040516104f191906134b0565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190612dc1565b610dcb565b005b34801561052f57600080fd5b50610538610e64565b60405161054591906136e3565b60405180910390f35b34801561055a57600080fd5b50610563610e6a565b6040516105709190613501565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190612dea565b610ea7565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612e13565b610f2d565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612cec565b610fcb565b6040516105ff91906134cb565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612c0f565b610fe9565b60405161063c91906134cb565b60405180910390f35b34801561065157600080fd5b5061065a611009565b005b34801561066857600080fd5b50610683600480360381019061067e9190612d28565b6110e2565b005b34801561069157600080fd5b506106ac60048036038101906106a79190612c61565b611229565b6040516106b991906136e3565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612dea565b6112b0565b005b3480156106f757600080fd5b50610712600480360381019061070d9190612c0f565b611336565b005b61071c61142e565b73ffffffffffffffffffffffffffffffffffffffff1661073a610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078790613643565b60405180910390fd5b60005b8151811015610847576001601060008484815181106107db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061083f906139f8565b915050610793565b5050565b60606040518060400160405280600981526020017f43756c7420436f696e0000000000000000000000000000000000000000000000815250905090565b600061089c61089561142e565b8484611436565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600554905090565b60006108e3848484611601565b6109a4846108ef61142e565b61099f85604051806060016040528060288152602001613b2560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095561142e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ecc9092919063ffffffff16565b611436565b600190509392505050565b60185481565b60006012905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109ec61142e565b73ffffffffffffffffffffffffffffffffffffffff16610a0a610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790613643565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610ac361142e565b73ffffffffffffffffffffffffffffffffffffffff16610ae1610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613643565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b9561142e565b73ffffffffffffffffffffffffffffffffffffffff161480610c0b5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bf361142e565b73ffffffffffffffffffffffffffffffffffffffff16145b610c1457600080fd5b6000479050610c2281611f30565b50565b6000610c6f600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9c565b9050919050565b610c7e61142e565b73ffffffffffffffffffffffffffffffffffffffff16610c9c610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613643565b60405180910390fd5b610cfc600061200a565b565b610d0661142e565b73ffffffffffffffffffffffffffffffffffffffff16610d24610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613643565b60405180910390fd5b8060168190555050565b60165481565b60116020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610dd361142e565b73ffffffffffffffffffffffffffffffffffffffff16610df1610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613643565b60405180910390fd5b80601560146101000a81548160ff02191690831515021790555050565b60175481565b60606040518060400160405280600581526020017f2443554c54000000000000000000000000000000000000000000000000000000815250905090565b610eaf61142e565b73ffffffffffffffffffffffffffffffffffffffff16610ecd610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90613643565b60405180910390fd5b8060188190555050565b610f3561142e565b73ffffffffffffffffffffffffffffffffffffffff16610f53610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613643565b60405180910390fd5b8360088190555082600a819055508160098190555080600b8190555050505050565b6000610fdf610fd861142e565b8484611601565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661104a61142e565b73ffffffffffffffffffffffffffffffffffffffff1614806110c05750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110a861142e565b73ffffffffffffffffffffffffffffffffffffffff16145b6110c957600080fd5b60006110d430610c25565b90506110df816120ce565b50565b6110ea61142e565b73ffffffffffffffffffffffffffffffffffffffff16611108610da2565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590613643565b60405180910390fd5b60005b838390508110156112235781600460008686858181106111aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906111bf9190612c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061121b906139f8565b915050611161565b50505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112b861142e565b73ffffffffffffffffffffffffffffffffffffffff166112d6610da2565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613643565b60405180910390fd5b8060178190555050565b61133e61142e565b73ffffffffffffffffffffffffffffffffffffffff1661135c610da2565b73ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990613643565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906135a3565b60405180910390fd5b61142b8161200a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906136c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906135c3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115f491906136e3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613683565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890613523565b60405180910390fd5b60008111611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613663565b60405180910390fd5b61172c610da2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561179a575061176a610da2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b8557601560149054906101000a900460ff16611829576117bb610da2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613543565b60405180910390fd5b5b60165481111561186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613583565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119125750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906135e3565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146119fe57601754816119b384610c25565b6119bd9190613825565b106119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f4906136a3565b60405180910390fd5b5b6000611a0930610c25565b9050600060185482101590506016548210611a245760165491505b808015611a3c575060158054906101000a900460ff16155b8015611a965750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611aae5750601560169054906101000a900460ff165b8015611b045750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b5a5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b8257611b68826120ce565b60004790506000811115611b8057611b7f47611f30565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c2c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611cdf5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611cde5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611ced5760009050611eba565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d985750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611db057600854600c81905550600954600d819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e5b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611eb957600a54600c81905550600b54600d819055506000611e9c6064611e8e600d54866123c690919063ffffffff16565b61244190919063ffffffff16565b90508060056000828254611eb09190613906565b92505081905550505b5b611ec68484848461248b565b50505050565b6000838311158290611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b9190613501565b60405180910390fd5b5060008385611f239190613906565b9050809150509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f98573d6000803e3d6000fd5b5050565b6000600654821115611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90613563565b60405180910390fd5b6000611fed6124b8565b9050612002818461244190919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60016015806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561212b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156121595781602001602082028036833780820191505090505b5090503081600081518110612197577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561223957600080fd5b505afa15801561224d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122719190612c38565b816001815181106122ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061231230601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611436565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016123769594939291906136fe565b600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050505060006015806101000a81548160ff02191690831515021790555050565b6000808314156123d9576000905061243b565b600082846123e791906138ac565b90508284826123f6919061387b565b14612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d90613623565b60405180910390fd5b809150505b92915050565b600061248383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e3565b905092915050565b8061249957612498612546565b5b6124a4848484612589565b806124b2576124b1612754565b5b50505050565b60008060006124c5612768565b915091506124dc818361244190919063ffffffff16565b9250505090565b6000808311829061252a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125219190613501565b60405180910390fd5b5060008385612539919061387b565b9050809150509392505050565b6000600c5414801561255a57506000600d54145b1561256457612587565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b60008060008060008061259b876127b5565b9550955095509550955095506125f986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061268e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126da816128c5565b6126e48483612982565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161274191906136e3565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b600080600060065490506000600554905061279060055460065461244190919063ffffffff16565b8210156127a8576006546005549350935050506127b1565b81819350935050505b9091565b60008060008060008060008060006127d28a600c54600d546129bc565b92509250925060006127e26124b8565b905060008060006127f58e878787612a52565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061285f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ecc565b905092915050565b60008082846128769190613825565b9050838110156128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290613603565b60405180910390fd5b8091505092915050565b60006128cf6124b8565b905060006128e682846123c690919063ffffffff16565b905061293a81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286790919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6129978260065461281d90919063ffffffff16565b6006819055506129b28160075461286790919063ffffffff16565b6007819055505050565b6000806000806129e860646129da888a6123c690919063ffffffff16565b61244190919063ffffffff16565b90506000612a126064612a04888b6123c690919063ffffffff16565b61244190919063ffffffff16565b90506000612a3b82612a2d858c61281d90919063ffffffff16565b61281d90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612a6b85896123c690919063ffffffff16565b90506000612a8286896123c690919063ffffffff16565b90506000612a9987896123c690919063ffffffff16565b90506000612ac282612ab4858761281d90919063ffffffff16565b61281d90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000612aee612ae9846137a4565b613773565b90508083825260208201905082856020860282011115612b0d57600080fd5b60005b85811015612b3d5781612b238882612b47565b845260208401935060208301925050600181019050612b10565b5050509392505050565b600081359050612b5681613adf565b92915050565b600081519050612b6b81613adf565b92915050565b60008083601f840112612b8357600080fd5b8235905067ffffffffffffffff811115612b9c57600080fd5b602083019150836020820283011115612bb457600080fd5b9250929050565b600082601f830112612bcc57600080fd5b8135612bdc848260208601612adb565b91505092915050565b600081359050612bf481613af6565b92915050565b600081359050612c0981613b0d565b92915050565b600060208284031215612c2157600080fd5b6000612c2f84828501612b47565b91505092915050565b600060208284031215612c4a57600080fd5b6000612c5884828501612b5c565b91505092915050565b60008060408385031215612c7457600080fd5b6000612c8285828601612b47565b9250506020612c9385828601612b47565b9150509250929050565b600080600060608486031215612cb257600080fd5b6000612cc086828701612b47565b9350506020612cd186828701612b47565b9250506040612ce286828701612bfa565b9150509250925092565b60008060408385031215612cff57600080fd5b6000612d0d85828601612b47565b9250506020612d1e85828601612bfa565b9150509250929050565b600080600060408486031215612d3d57600080fd5b600084013567ffffffffffffffff811115612d5757600080fd5b612d6386828701612b71565b93509350506020612d7686828701612be5565b9150509250925092565b600060208284031215612d9257600080fd5b600082013567ffffffffffffffff811115612dac57600080fd5b612db884828501612bbb565b91505092915050565b600060208284031215612dd357600080fd5b6000612de184828501612be5565b91505092915050565b600060208284031215612dfc57600080fd5b6000612e0a84828501612bfa565b91505092915050565b60008060008060808587031215612e2957600080fd5b6000612e3787828801612bfa565b9450506020612e4887828801612bfa565b9350506040612e5987828801612bfa565b9250506060612e6a87828801612bfa565b91505092959194509250565b6000612e828383612e8e565b60208301905092915050565b612e978161393a565b82525050565b612ea68161393a565b82525050565b6000612eb7826137e0565b612ec18185613803565b9350612ecc836137d0565b8060005b83811015612efd578151612ee48882612e76565b9750612eef836137f6565b925050600181019050612ed0565b5085935050505092915050565b612f138161394c565b82525050565b612f228161398f565b82525050565b612f31816139b3565b82525050565b6000612f42826137eb565b612f4c8185613814565b9350612f5c8185602086016139c5565b612f6581613ace565b840191505092915050565b6000612f7d602383613814565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fe3603f83613814565b91507f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008301527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006020830152604082019050919050565b6000613049602a83613814565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006130af601c83613814565b91507f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006000830152602082019050919050565b60006130ef602683613814565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613155602283613814565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131bb602383613814565b91507f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008301527f65642100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613221601b83613814565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613261602183613814565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132c7602083613814565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613307602983613814565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061336d602583613814565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d3602383613814565b91507f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008301527f7a652100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613439602483613814565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61349b81613978565b82525050565b6134aa81613982565b82525050565b60006020820190506134c56000830184612e9d565b92915050565b60006020820190506134e06000830184612f0a565b92915050565b60006020820190506134fb6000830184612f19565b92915050565b6000602082019050818103600083015261351b8184612f37565b905092915050565b6000602082019050818103600083015261353c81612f70565b9050919050565b6000602082019050818103600083015261355c81612fd6565b9050919050565b6000602082019050818103600083015261357c8161303c565b9050919050565b6000602082019050818103600083015261359c816130a2565b9050919050565b600060208201905081810360008301526135bc816130e2565b9050919050565b600060208201905081810360008301526135dc81613148565b9050919050565b600060208201905081810360008301526135fc816131ae565b9050919050565b6000602082019050818103600083015261361c81613214565b9050919050565b6000602082019050818103600083015261363c81613254565b9050919050565b6000602082019050818103600083015261365c816132ba565b9050919050565b6000602082019050818103600083015261367c816132fa565b9050919050565b6000602082019050818103600083015261369c81613360565b9050919050565b600060208201905081810360008301526136bc816133c6565b9050919050565b600060208201905081810360008301526136dc8161342c565b9050919050565b60006020820190506136f86000830184613492565b92915050565b600060a0820190506137136000830188613492565b6137206020830187612f28565b81810360408301526137328186612eac565b90506137416060830185612e9d565b61374e6080830184613492565b9695505050505050565b600060208201905061376d60008301846134a1565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561379a57613799613a9f565b5b8060405250919050565b600067ffffffffffffffff8211156137bf576137be613a9f565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061383082613978565b915061383b83613978565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138705761386f613a41565b5b828201905092915050565b600061388682613978565b915061389183613978565b9250826138a1576138a0613a70565b5b828204905092915050565b60006138b782613978565b91506138c283613978565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138fb576138fa613a41565b5b828202905092915050565b600061391182613978565b915061391c83613978565b92508282101561392f5761392e613a41565b5b828203905092915050565b600061394582613958565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061399a826139a1565b9050919050565b60006139ac82613958565b9050919050565b60006139be82613978565b9050919050565b60005b838110156139e35780820151818401526020810190506139c8565b838111156139f2576000848401525b50505050565b6000613a0382613978565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a3657613a35613a41565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ae88161393a565b8114613af357600080fd5b50565b613aff8161394c565b8114613b0a57600080fd5b50565b613b1681613978565b8114613b2157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220da5c374e30acd8c22f6226e8d85ab67e9fca9c6744332eec26a20a63e71d5b4264736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101d05760003560e01c80637d1db4a5116100f7578063a2a957bb11610095578063c492f04611610064578063c492f0461461065c578063dd62ed3e14610685578063ea1644d5146106c2578063f2fde38b146106eb576101d7565b8063a2a957bb146105a2578063a9059cbb146105cb578063bfd7928414610608578063c3c8cd8014610645576101d7565b80638f70ccf7116100d15780638f70ccf7146104fa5780638f9a55c01461052357806395d89b411461054e57806398a5c31514610579576101d7565b80637d1db4a5146104675780637f2feddc146104925780638da5cb5b146104cf576101d7565b8063313ce5671161016f5780636fc3eaec1161013e5780636fc3eaec146103d357806370a08231146103ea578063715018a61461042757806374010ece1461043e576101d7565b8063313ce5671461032b57806349bd5a5e146103565780636b999053146103815780636d8aa8f8146103aa576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632fd689e314610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612d80565b610714565b005b34801561021157600080fd5b5061021a61084b565b6040516102279190613501565b60405180910390f35b34801561023c57600080fd5b5061025760048036038101906102529190612cec565b610888565b60405161026491906134cb565b60405180910390f35b34801561027957600080fd5b506102826108a6565b60405161028f91906134e6565b60405180910390f35b3480156102a457600080fd5b506102ad6108cc565b6040516102ba91906136e3565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612c9d565b6108d6565b6040516102f791906134cb565b60405180910390f35b34801561030c57600080fd5b506103156109af565b60405161032291906136e3565b60405180910390f35b34801561033757600080fd5b506103406109b5565b60405161034d9190613758565b60405180910390f35b34801561036257600080fd5b5061036b6109be565b60405161037891906134b0565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a39190612c0f565b6109e4565b005b3480156103b657600080fd5b506103d160048036038101906103cc9190612dc1565b610abb565b005b3480156103df57600080fd5b506103e8610b54565b005b3480156103f657600080fd5b50610411600480360381019061040c9190612c0f565b610c25565b60405161041e91906136e3565b60405180910390f35b34801561043357600080fd5b5061043c610c76565b005b34801561044a57600080fd5b5061046560048036038101906104609190612dea565b610cfe565b005b34801561047357600080fd5b5061047c610d84565b60405161048991906136e3565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190612c0f565b610d8a565b6040516104c691906136e3565b60405180910390f35b3480156104db57600080fd5b506104e4610da2565b6040516104f191906134b0565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190612dc1565b610dcb565b005b34801561052f57600080fd5b50610538610e64565b60405161054591906136e3565b60405180910390f35b34801561055a57600080fd5b50610563610e6a565b6040516105709190613501565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b9190612dea565b610ea7565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612e13565b610f2d565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612cec565b610fcb565b6040516105ff91906134cb565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612c0f565b610fe9565b60405161063c91906134cb565b60405180910390f35b34801561065157600080fd5b5061065a611009565b005b34801561066857600080fd5b50610683600480360381019061067e9190612d28565b6110e2565b005b34801561069157600080fd5b506106ac60048036038101906106a79190612c61565b611229565b6040516106b991906136e3565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612dea565b6112b0565b005b3480156106f757600080fd5b50610712600480360381019061070d9190612c0f565b611336565b005b61071c61142e565b73ffffffffffffffffffffffffffffffffffffffff1661073a610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078790613643565b60405180910390fd5b60005b8151811015610847576001601060008484815181106107db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061083f906139f8565b915050610793565b5050565b60606040518060400160405280600981526020017f43756c7420436f696e0000000000000000000000000000000000000000000000815250905090565b600061089c61089561142e565b8484611436565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600554905090565b60006108e3848484611601565b6109a4846108ef61142e565b61099f85604051806060016040528060288152602001613b2560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095561142e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ecc9092919063ffffffff16565b611436565b600190509392505050565b60185481565b60006012905090565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109ec61142e565b73ffffffffffffffffffffffffffffffffffffffff16610a0a610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790613643565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610ac361142e565b73ffffffffffffffffffffffffffffffffffffffff16610ae1610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e90613643565b60405180910390fd5b80601560166101000a81548160ff02191690831515021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b9561142e565b73ffffffffffffffffffffffffffffffffffffffff161480610c0b5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bf361142e565b73ffffffffffffffffffffffffffffffffffffffff16145b610c1457600080fd5b6000479050610c2281611f30565b50565b6000610c6f600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f9c565b9050919050565b610c7e61142e565b73ffffffffffffffffffffffffffffffffffffffff16610c9c610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613643565b60405180910390fd5b610cfc600061200a565b565b610d0661142e565b73ffffffffffffffffffffffffffffffffffffffff16610d24610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613643565b60405180910390fd5b8060168190555050565b60165481565b60116020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610dd361142e565b73ffffffffffffffffffffffffffffffffffffffff16610df1610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e90613643565b60405180910390fd5b80601560146101000a81548160ff02191690831515021790555050565b60175481565b60606040518060400160405280600581526020017f2443554c54000000000000000000000000000000000000000000000000000000815250905090565b610eaf61142e565b73ffffffffffffffffffffffffffffffffffffffff16610ecd610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1a90613643565b60405180910390fd5b8060188190555050565b610f3561142e565b73ffffffffffffffffffffffffffffffffffffffff16610f53610da2565b73ffffffffffffffffffffffffffffffffffffffff1614610fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613643565b60405180910390fd5b8360088190555082600a819055508160098190555080600b8190555050505050565b6000610fdf610fd861142e565b8484611601565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661104a61142e565b73ffffffffffffffffffffffffffffffffffffffff1614806110c05750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166110a861142e565b73ffffffffffffffffffffffffffffffffffffffff16145b6110c957600080fd5b60006110d430610c25565b90506110df816120ce565b50565b6110ea61142e565b73ffffffffffffffffffffffffffffffffffffffff16611108610da2565b73ffffffffffffffffffffffffffffffffffffffff161461115e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115590613643565b60405180910390fd5b60005b838390508110156112235781600460008686858181106111aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906111bf9190612c0f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061121b906139f8565b915050611161565b50505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112b861142e565b73ffffffffffffffffffffffffffffffffffffffff166112d6610da2565b73ffffffffffffffffffffffffffffffffffffffff161461132c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132390613643565b60405180910390fd5b8060178190555050565b61133e61142e565b73ffffffffffffffffffffffffffffffffffffffff1661135c610da2565b73ffffffffffffffffffffffffffffffffffffffff16146113b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a990613643565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611422576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611419906135a3565b60405180910390fd5b61142b8161200a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906136c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906135c3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115f491906136e3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611671576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166890613683565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890613523565b60405180910390fd5b60008111611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613663565b60405180910390fd5b61172c610da2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561179a575061176a610da2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b8557601560149054906101000a900460ff16611829576117bb610da2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613543565b60405180910390fd5b5b60165481111561186e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186590613583565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119125750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906135e3565b60405180910390fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146119fe57601754816119b384610c25565b6119bd9190613825565b106119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f4906136a3565b60405180910390fd5b5b6000611a0930610c25565b9050600060185482101590506016548210611a245760165491505b808015611a3c575060158054906101000a900460ff16155b8015611a965750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611aae5750601560169054906101000a900460ff165b8015611b045750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b5a5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b8257611b68826120ce565b60004790506000811115611b8057611b7f47611f30565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c2c5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611cdf5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611cde5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611ced5760009050611eba565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611d985750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611db057600854600c81905550600954600d819055505b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611e5b5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611eb957600a54600c81905550600b54600d819055506000611e9c6064611e8e600d54866123c690919063ffffffff16565b61244190919063ffffffff16565b90508060056000828254611eb09190613906565b92505081905550505b5b611ec68484848461248b565b50505050565b6000838311158290611f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0b9190613501565b60405180910390fd5b5060008385611f239190613906565b9050809150509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611f98573d6000803e3d6000fd5b5050565b6000600654821115611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90613563565b60405180910390fd5b6000611fed6124b8565b9050612002818461244190919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60016015806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561212b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156121595781602001602082028036833780820191505090505b5090503081600081518110612197577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561223957600080fd5b505afa15801561224d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122719190612c38565b816001815181106122ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061231230601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611436565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016123769594939291906136fe565b600060405180830381600087803b15801561239057600080fd5b505af11580156123a4573d6000803e3d6000fd5b505050505060006015806101000a81548160ff02191690831515021790555050565b6000808314156123d9576000905061243b565b600082846123e791906138ac565b90508284826123f6919061387b565b14612436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242d90613623565b60405180910390fd5b809150505b92915050565b600061248383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124e3565b905092915050565b8061249957612498612546565b5b6124a4848484612589565b806124b2576124b1612754565b5b50505050565b60008060006124c5612768565b915091506124dc818361244190919063ffffffff16565b9250505090565b6000808311829061252a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125219190613501565b60405180910390fd5b5060008385612539919061387b565b9050809150509392505050565b6000600c5414801561255a57506000600d54145b1561256457612587565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b60008060008060008061259b876127b5565b9550955095509550955095506125f986600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461281d90919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061268e85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286790919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126da816128c5565b6126e48483612982565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161274191906136e3565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b600080600060065490506000600554905061279060055460065461244190919063ffffffff16565b8210156127a8576006546005549350935050506127b1565b81819350935050505b9091565b60008060008060008060008060006127d28a600c54600d546129bc565b92509250925060006127e26124b8565b905060008060006127f58e878787612a52565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600061285f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ecc565b905092915050565b60008082846128769190613825565b9050838110156128bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b290613603565b60405180910390fd5b8091505092915050565b60006128cf6124b8565b905060006128e682846123c690919063ffffffff16565b905061293a81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461286790919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6129978260065461281d90919063ffffffff16565b6006819055506129b28160075461286790919063ffffffff16565b6007819055505050565b6000806000806129e860646129da888a6123c690919063ffffffff16565b61244190919063ffffffff16565b90506000612a126064612a04888b6123c690919063ffffffff16565b61244190919063ffffffff16565b90506000612a3b82612a2d858c61281d90919063ffffffff16565b61281d90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612a6b85896123c690919063ffffffff16565b90506000612a8286896123c690919063ffffffff16565b90506000612a9987896123c690919063ffffffff16565b90506000612ac282612ab4858761281d90919063ffffffff16565b61281d90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000612aee612ae9846137a4565b613773565b90508083825260208201905082856020860282011115612b0d57600080fd5b60005b85811015612b3d5781612b238882612b47565b845260208401935060208301925050600181019050612b10565b5050509392505050565b600081359050612b5681613adf565b92915050565b600081519050612b6b81613adf565b92915050565b60008083601f840112612b8357600080fd5b8235905067ffffffffffffffff811115612b9c57600080fd5b602083019150836020820283011115612bb457600080fd5b9250929050565b600082601f830112612bcc57600080fd5b8135612bdc848260208601612adb565b91505092915050565b600081359050612bf481613af6565b92915050565b600081359050612c0981613b0d565b92915050565b600060208284031215612c2157600080fd5b6000612c2f84828501612b47565b91505092915050565b600060208284031215612c4a57600080fd5b6000612c5884828501612b5c565b91505092915050565b60008060408385031215612c7457600080fd5b6000612c8285828601612b47565b9250506020612c9385828601612b47565b9150509250929050565b600080600060608486031215612cb257600080fd5b6000612cc086828701612b47565b9350506020612cd186828701612b47565b9250506040612ce286828701612bfa565b9150509250925092565b60008060408385031215612cff57600080fd5b6000612d0d85828601612b47565b9250506020612d1e85828601612bfa565b9150509250929050565b600080600060408486031215612d3d57600080fd5b600084013567ffffffffffffffff811115612d5757600080fd5b612d6386828701612b71565b93509350506020612d7686828701612be5565b9150509250925092565b600060208284031215612d9257600080fd5b600082013567ffffffffffffffff811115612dac57600080fd5b612db884828501612bbb565b91505092915050565b600060208284031215612dd357600080fd5b6000612de184828501612be5565b91505092915050565b600060208284031215612dfc57600080fd5b6000612e0a84828501612bfa565b91505092915050565b60008060008060808587031215612e2957600080fd5b6000612e3787828801612bfa565b9450506020612e4887828801612bfa565b9350506040612e5987828801612bfa565b9250506060612e6a87828801612bfa565b91505092959194509250565b6000612e828383612e8e565b60208301905092915050565b612e978161393a565b82525050565b612ea68161393a565b82525050565b6000612eb7826137e0565b612ec18185613803565b9350612ecc836137d0565b8060005b83811015612efd578151612ee48882612e76565b9750612eef836137f6565b925050600181019050612ed0565b5085935050505092915050565b612f138161394c565b82525050565b612f228161398f565b82525050565b612f31816139b3565b82525050565b6000612f42826137eb565b612f4c8185613814565b9350612f5c8185602086016139c5565b612f6581613ace565b840191505092915050565b6000612f7d602383613814565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fe3603f83613814565b91507f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008301527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006020830152604082019050919050565b6000613049602a83613814565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006130af601c83613814565b91507f544f4b454e3a204d6178205472616e73616374696f6e204c696d6974000000006000830152602082019050919050565b60006130ef602683613814565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613155602283613814565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006131bb602383613814565b91507f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008301527f65642100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613221601b83613814565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613261602183613814565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006132c7602083613814565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613307602983613814565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b600061336d602583613814565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133d3602383613814565b91507f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008301527f7a652100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613439602483613814565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61349b81613978565b82525050565b6134aa81613982565b82525050565b60006020820190506134c56000830184612e9d565b92915050565b60006020820190506134e06000830184612f0a565b92915050565b60006020820190506134fb6000830184612f19565b92915050565b6000602082019050818103600083015261351b8184612f37565b905092915050565b6000602082019050818103600083015261353c81612f70565b9050919050565b6000602082019050818103600083015261355c81612fd6565b9050919050565b6000602082019050818103600083015261357c8161303c565b9050919050565b6000602082019050818103600083015261359c816130a2565b9050919050565b600060208201905081810360008301526135bc816130e2565b9050919050565b600060208201905081810360008301526135dc81613148565b9050919050565b600060208201905081810360008301526135fc816131ae565b9050919050565b6000602082019050818103600083015261361c81613214565b9050919050565b6000602082019050818103600083015261363c81613254565b9050919050565b6000602082019050818103600083015261365c816132ba565b9050919050565b6000602082019050818103600083015261367c816132fa565b9050919050565b6000602082019050818103600083015261369c81613360565b9050919050565b600060208201905081810360008301526136bc816133c6565b9050919050565b600060208201905081810360008301526136dc8161342c565b9050919050565b60006020820190506136f86000830184613492565b92915050565b600060a0820190506137136000830188613492565b6137206020830187612f28565b81810360408301526137328186612eac565b90506137416060830185612e9d565b61374e6080830184613492565b9695505050505050565b600060208201905061376d60008301846134a1565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561379a57613799613a9f565b5b8060405250919050565b600067ffffffffffffffff8211156137bf576137be613a9f565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061383082613978565b915061383b83613978565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138705761386f613a41565b5b828201905092915050565b600061388682613978565b915061389183613978565b9250826138a1576138a0613a70565b5b828204905092915050565b60006138b782613978565b91506138c283613978565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138fb576138fa613a41565b5b828202905092915050565b600061391182613978565b915061391c83613978565b92508282101561392f5761392e613a41565b5b828203905092915050565b600061394582613958565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061399a826139a1565b9050919050565b60006139ac82613958565b9050919050565b60006139be82613978565b9050919050565b60005b838110156139e35780820151818401526020810190506139c8565b838111156139f2576000848401525b50505050565b6000613a0382613978565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a3657613a35613a41565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613ae88161393a565b8114613af357600080fd5b50565b613aff8161394c565b8114613b0a57600080fd5b50565b613b1681613978565b8114613b2157600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220da5c374e30acd8c22f6226e8d85ab67e9fca9c6744332eec26a20a63e71d5b4264736f6c63430008000033

Deployed Bytecode Sourcemap

11235:14291:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20766:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14091:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14993:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12906:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14368:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15187:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13239:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14277:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12954:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20943:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24884:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20373:276;;;;;;;;;;;;;:::i;:::-;;14471:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4779:103;;;;;;;;;;;;;:::i;:::-;;25024:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13103:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12594:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20657:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13170:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14182:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24677:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24291:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14617:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12551:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20030:277;;;;;;;;;;;;;:::i;:::-;;25263:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14817:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25140:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5037:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20766:169;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20842:9:::1;20837:91;20861:5;:12;20857:1;:16;20837:91;;;20912:4;20895;:14;20900:5;20906:1;20900:8;;;;;;;;;;;;;;;;;;;;;;20895:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20875:3;;;;;:::i;:::-;;;;20837:91;;;;20766:169:::0;:::o;14091:83::-;14128:13;14161:5;;;;;;;;;;;;;;;;;14154:12;;14091:83;:::o;14993:186::-;15093:4;15110:39;15119:12;:10;:12::i;:::-;15133:7;15142:6;15110:8;:39::i;:::-;15167:4;15160:11;;14993:186;;;;:::o;12906:41::-;;;;;;;;;;;;;:::o;14368:95::-;14421:7;14448;;14441:14;;14368:95;:::o;15187:446::-;15319:4;15336:36;15346:6;15354:9;15365:6;15336:9;:36::i;:::-;15383:220;15406:6;15427:12;:10;:12::i;:::-;15454:138;15510:6;15454:138;;;;;;;;;;;;;;;;;:11;:19;15466:6;15454:19;;;;;;;;;;;;;;;:33;15474:12;:10;:12::i;:::-;15454:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;15383:8;:220::i;:::-;15621:4;15614:11;;15187:446;;;;;:::o;13239:53::-;;;;:::o;14277:83::-;14318:5;11732:2;14336:16;;14277:83;:::o;12954:28::-;;;;;;;;;;;;;:::o;20943:92::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21022:5:::1;21007:4;:12;21012:6;21007:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;20943:92:::0;:::o;24884:101::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24965:12:::1;24951:11;;:26;;;;;;;;;;;;;;;;;;24884:101:::0;:::o;20373:276::-;20453:19;;;;;;;;;;;20437:35;;:12;:10;:12::i;:::-;:35;;;:89;;;;20509:17;;;;;;;;;;;20493:33;;:12;:10;:12::i;:::-;:33;;;20437:89;20415:122;;;;;;20548:26;20577:21;20548:50;;20609:32;20622:18;20609:12;:32::i;:::-;20373:276;:::o;14471:138::-;14537:7;14564:37;14584:7;:16;14592:7;14584:16;;;;;;;;;;;;;;;;14564:19;:37::i;:::-;14557:44;;14471:138;;;:::o;4779:103::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4844:30:::1;4871:1;4844:18;:30::i;:::-;4779:103::o:0;25024:108::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25113:11:::1;25098:12;:26;;;;25024:108:::0;:::o;13103:60::-;;;;:::o;12594:42::-;;;;;;;;;;;;;;;;;:::o;4128:87::-;4174:7;4201:6;;;;;;;;;;;4194:13;;4128:87;:::o;20657:101::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20738:12:::1;20724:11;;:26;;;;;;;;;;;;;;;;;;20657:101:::0;:::o;13170:62::-;;;;:::o;14182:87::-;14221:13;14254:7;;;;;;;;;;;;;;;;;14247:14;;14182:87;:::o;24677:155::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24806:18:::1;24784:19;:40;;;;24677:155:::0;:::o;24291:334::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24485:13:::1;24468:14;:30;;;;24527:14;24509:15;:32;;;;24567:11;24552:12;:26;;;;24605:12;24589:13;:28;;;;24291:334:::0;;;;:::o;14617:192::-;14720:4;14737:42;14747:12;:10;:12::i;:::-;14761:9;14772:6;14737:9;:42::i;:::-;14797:4;14790:11;;14617:192;;;;:::o;12551:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;20030:277::-;20110:19;;;;;;;;;;;20094:35;;:12;:10;:12::i;:::-;:35;;;:89;;;;20166:17;;;;;;;;;;;20150:33;;:12;:10;:12::i;:::-;:33;;;20094:89;20072:122;;;;;;20205:23;20231:24;20249:4;20231:9;:24::i;:::-;20205:50;;20266:33;20283:15;20266:16;:33::i;:::-;20030:277;:::o;25263:260::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25406:9:::1;25401:115;25425:8;;:15;;25421:1;:19;25401:115;;;25496:8;25462:18;:31;25481:8;;25490:1;25481:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25462:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;25442:3;;;;;:::i;:::-;;;;25401:115;;;;25263:260:::0;;;:::o;14817:168::-;14923:7;14950:11;:18;14962:5;14950:18;;;;;;;;;;;;;;;:27;14969:7;14950:27;;;;;;;;;;;;;;;;14943:34;;14817:168;;;;:::o;25140:115::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25234:13:::1;25217:14;:30;;;;25140:115:::0;:::o;5037:238::-;4359:12;:10;:12::i;:::-;4348:23;;:7;:5;:7::i;:::-;:23;;;4340:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5160:1:::1;5140:22;;:8;:22;;;;5118:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5239:28;5258:8;5239:18;:28::i;:::-;5037:238:::0;:::o;2852:98::-;2905:7;2932:10;2925:17;;2852:98;:::o;16308:335::-;16418:1;16401:19;;:5;:19;;;;16393:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16499:1;16480:21;;:7;:21;;;;16472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16581:6;16551:11;:18;16563:5;16551:18;;;;;;;;;;;;;;;:27;16570:7;16551:27;;;;;;;;;;;;;;;:36;;;;16619:7;16603:32;;16612:5;16603:32;;;16628:6;16603:32;;;;;;:::i;:::-;;;;;;;;16308:335;;;:::o;16651:2717::-;16755:1;16739:18;;:4;:18;;;;16731:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16832:1;16818:16;;:2;:16;;;;16810:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:1;16893:6;:10;16885:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16974:7;:5;:7::i;:::-;16966:15;;:4;:15;;;;:32;;;;;16991:7;:5;:7::i;:::-;16985:13;;:2;:13;;;;16966:32;16962:1534;;;17053:11;;;;;;;;;;;17048:205;;17123:7;:5;:7::i;:::-;17115:15;;:4;:15;;;17085:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;17048:205;17287:12;;17277:6;:22;;17269:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;17374:4;:10;17379:4;17374:10;;;;;;;;;;;;;;;;;;;;;;;;;17373:11;:24;;;;;17389:4;:8;17394:2;17389:8;;;;;;;;;;;;;;;;;;;;;;;;;17388:9;17373:24;17347:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;17495:13;;;;;;;;;;;17489:19;;:2;:19;;;17485:208;;17584:14;;17575:6;17559:13;17569:2;17559:9;:13::i;:::-;:22;;;;:::i;:::-;:39;17529:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;17485:208;17709:28;17740:24;17758:4;17740:9;:24::i;:::-;17709:55;;17779:12;17818:19;;17794:20;:43;;17779:58;;17882:12;;17858:20;:36;17854:112;;17938:12;;17915:35;;17854:112;18004:7;:35;;;;;18033:6;;;;;;;;;;18032:7;18004:35;:77;;;;;18068:13;;;;;;;;;;;18060:21;;:4;:21;;;;18004:77;:109;;;;;18102:11;;;;;;;;;;;18004:109;:155;;;;;18135:18;:24;18154:4;18135:24;;;;;;;;;;;;;;;;;;;;;;;;;18134:25;18004:155;:199;;;;;18181:18;:22;18200:2;18181:22;;;;;;;;;;;;;;;;;;;;;;;;;18180:23;18004:199;17982:503;;;18238:38;18255:20;18238:16;:38::i;:::-;18295:26;18324:21;18295:50;;18389:1;18368:18;:22;18364:106;;;18415:35;18428:21;18415:12;:35::i;:::-;18364:106;17982:503;;16962:1534;;;18508:12;18523:4;18508:19;;18586:18;:24;18605:4;18586:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;18614:18;:22;18633:2;18614:22;;;;;;;;;;;;;;;;;;;;;;;;;18586:50;18585:115;;;;18663:13;;;;;;;;;;;18655:21;;:4;:21;;;;:44;;;;;18686:13;;;;;;;;;;;18680:19;;:2;:19;;;;18655:44;18585:115;18567:740;;;18737:5;18727:15;;18567:740;;;18819:13;;;;;;;;;;;18811:21;;:4;:21;;;:55;;;;;18850:15;;;;;;;;;;;18836:30;;:2;:30;;;;18811:55;18807:163;;;18899:14;;18887:9;:26;;;;18942:12;;18932:7;:22;;;;18807:163;19029:13;;;;;;;;;;;19023:19;;:2;:19;;;:55;;;;;19062:15;;;;;;;;;;;19046:32;;:4;:32;;;;19023:55;19019:277;;;19111:15;;19099:9;:27;;;;19155:13;;19145:7;:23;;;;19187:20;19210:28;19234:3;19210:19;19221:7;;19210:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;19187:51;;19268:12;19257:7;;:23;;;;;;;:::i;:::-;;;;;;;;19019:277;;18567:740;19319:41;19334:4;19340:2;19344:6;19352:7;19319:14;:41::i;:::-;16651:2717;;;;:::o;10379:224::-;10499:7;10532:1;10527;:6;;10535:12;10519:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10559:9;10575:1;10571;:5;;;;:::i;:::-;10559:17;;10594:1;10587:8;;;10379:224;;;;;:::o;19376:99::-;19433:17;;;;;;;;;;;:26;;:34;19460:6;19433:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19376:99;:::o;15641:307::-;15725:7;15778;;15767;:18;;15745:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;15866:19;15888:10;:8;:10::i;:::-;15866:32;;15916:24;15928:11;15916:7;:11;;:24;;;;:::i;:::-;15909:31;;;15641:307;;;:::o;5435:191::-;5509:16;5528:6;;;;;;;;;;;5509:25;;5554:8;5545:6;;:17;;;;;;;;;;;;;;;;;;5609:8;5578:40;;5599:8;5578:40;;;;;;;;;;;;5435:191;;:::o;19483:483::-;13397:4;13388:6;;:13;;;;;;;;;;;;;;;;;;19561:21:::1;19599:1;19585:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19561:40;;19630:4;19612;19617:1;19612:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;19656:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19646:4;19651:1;19646:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;::::0;::::1;19689:62;19706:4;19721:15;;;;;;;;;;;19739:11;19689:8;:62::i;:::-;19762:15;;;;;;;;;;;:66;;;19843:11;19869:1;19885:4;19912;19932:15;19762:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13412:1;13433:5:::0;13424:6;;:14;;;;;;;;;;;;;;;;;;19483:483;:::o;10611:246::-;10669:7;10698:1;10693;:6;10689:47;;;10723:1;10716:8;;;;10689:47;10746:9;10762:1;10758;:5;;;;:::i;:::-;10746:17;;10791:1;10786;10782;:5;;;;:::i;:::-;:10;10774:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10848:1;10841:8;;;10611:246;;;;;:::o;10865:132::-;10923:7;10950:39;10954:1;10957;10950:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10943:46;;10865:132;;;;:::o;21043:282::-;21199:7;21194:28;;21208:14;:12;:14::i;:::-;21194:28;21233:44;21251:6;21259:9;21270:6;21233:17;:44::i;:::-;21293:7;21288:29;;21302:15;:13;:15::i;:::-;21288:29;21043:282;;;;:::o;23854:164::-;23896:7;23917:15;23934;23953:19;:17;:19::i;:::-;23916:56;;;;23990:20;24002:7;23990;:11;;:20;;;;:::i;:::-;23983:27;;;;23854:164;:::o;11005:223::-;11125:7;11157:1;11153;:5;11160:12;11145:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11184:9;11200:1;11196;:5;;;;:::i;:::-;11184:17;;11219:1;11212:8;;;11005:223;;;;;:::o;15956:219::-;16016:1;16003:9;;:14;:30;;;;;16032:1;16021:7;;:12;16003:30;15999:43;;;16035:7;;15999:43;16074:9;;16054:17;:29;;;;16112:7;;16094:15;:25;;;;16144:1;16132:9;:13;;;;16166:1;16156:7;:11;;;;15956:219;:::o;21333:610::-;21480:15;21510:23;21548:12;21575:23;21613:12;21640:13;21667:19;21678:7;21667:10;:19::i;:::-;21465:221;;;;;;;;;;;;21715:28;21735:7;21715;:15;21723:6;21715:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21697:7;:15;21705:6;21697:15;;;;;;;;;;;;;;;:46;;;;21775:39;21798:15;21775:7;:18;21783:9;21775:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21754:7;:18;21762:9;21754:18;;;;;;;;;;;;;;;:60;;;;21825:16;21835:5;21825:9;:16::i;:::-;21852:23;21864:4;21870;21852:11;:23::i;:::-;21908:9;21891:44;;21900:6;21891:44;;;21919:15;21891:44;;;;;;:::i;:::-;;;;;;;;21333:610;;;;;;;;;:::o;16183:117::-;16239:17;;16227:9;:29;;;;16277:15;;16267:7;:25;;;;16183:117::o;24026:257::-;24077:7;24086;24106:15;24124:7;;24106:25;;24142:15;24160:7;;24142:25;;24192:20;24204:7;;24192;;:11;;:20;;;;:::i;:::-;24182:7;:30;24178:61;;;24222:7;;24231;;24214:25;;;;;;;;24178:61;24258:7;24267;24250:25;;;;;;24026:257;;;:::o;22362:629::-;22464:7;22473;22482;22491;22500;22509;22535:23;22560:12;22574:13;22591:90;22617:7;22639:9;;22663:7;;22591:11;:90::i;:::-;22534:147;;;;;;22692:19;22714:10;:8;:10::i;:::-;22692:32;;22736:15;22753:23;22778:12;22794:109;22820:7;22842:4;22861:5;22881:11;22794;:109::i;:::-;22735:168;;;;;;22922:7;22931:15;22948:4;22954:15;22971:4;22977:5;22914:69;;;;;;;;;;;;;;;;;;;22362:629;;;;;;;:::o;10235:136::-;10293:7;10320:43;10324:1;10327;10320:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;10313:50;;10235:136;;;;:::o;10048:179::-;10106:7;10126:9;10142:1;10138;:5;;;;:::i;:::-;10126:17;;10167:1;10162;:6;;10154:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10218:1;10211:8;;;10048:179;;;;:::o;21951:211::-;22004:19;22026:10;:8;:10::i;:::-;22004:32;;22047:13;22063:22;22073:11;22063:5;:9;;:22;;;;:::i;:::-;22047:38;;22121:33;22148:5;22121:7;:22;22137:4;22121:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;22096:7;:22;22112:4;22096:22;;;;;;;;;;;;;;;:58;;;;21951:211;;;:::o;22170:147::-;22248:17;22260:4;22248:7;;:11;;:17;;;;:::i;:::-;22238:7;:27;;;;22289:20;22304:4;22289:10;;:14;;:20;;;;:::i;:::-;22276:10;:33;;;;22170:147;;:::o;22999:387::-;23127:7;23136;23145;23165:12;23180:30;23206:3;23180:21;23192:8;23180:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;23165:45;;23221:13;23237:28;23261:3;23237:19;23249:6;23237:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;23221:44;;23276:23;23302:28;23324:5;23302:17;23314:4;23302:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;23276:54;;23349:15;23366:4;23372:5;23341:37;;;;;;;;;22999:387;;;;;;;:::o;23394:452::-;23547:7;23556;23565;23585:15;23603:24;23615:11;23603:7;:11;;:24;;;;:::i;:::-;23585:42;;23638:12;23653:21;23662:11;23653:4;:8;;:21;;;;:::i;:::-;23638:36;;23685:13;23701:22;23711:11;23701:5;:9;;:22;;;;:::i;:::-;23685:38;;23734:23;23760:28;23782:5;23760:17;23772:4;23760:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;23734:54;;23807:7;23816:15;23833:4;23799:39;;;;;;;;;;23394:452;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:139::-;;736:6;723:20;714:29;;752:33;779:5;752:33;:::i;:::-;704:87;;;;:::o;797:143::-;;885:6;879:13;870:22;;901:33;928:5;901:33;:::i;:::-;860:80;;;;:::o;963:367::-;;;1096:3;1089:4;1081:6;1077:17;1073:27;1063:2;;1114:1;1111;1104:12;1063:2;1150:6;1137:20;1127:30;;1180:18;1172:6;1169:30;1166:2;;;1212:1;1209;1202:12;1166:2;1249:4;1241:6;1237:17;1225:29;;1303:3;1295:4;1287:6;1283:17;1273:8;1269:32;1266:41;1263:2;;;1320:1;1317;1310:12;1263:2;1053:277;;;;;:::o;1353:303::-;;1473:3;1466:4;1458:6;1454:17;1450:27;1440:2;;1491:1;1488;1481:12;1440:2;1531:6;1518:20;1556:94;1646:3;1638:6;1631:4;1623:6;1619:17;1556:94;:::i;:::-;1547:103;;1430:226;;;;;:::o;1662:133::-;;1743:6;1730:20;1721:29;;1759:30;1783:5;1759:30;:::i;:::-;1711:84;;;;:::o;1801:139::-;;1885:6;1872:20;1863:29;;1901:33;1928:5;1901:33;:::i;:::-;1853:87;;;;:::o;1946:262::-;;2054:2;2042:9;2033:7;2029:23;2025:32;2022:2;;;2070:1;2067;2060:12;2022:2;2113:1;2138:53;2183:7;2174:6;2163:9;2159:22;2138:53;:::i;:::-;2128:63;;2084:117;2012:196;;;;:::o;2214:284::-;;2333:2;2321:9;2312:7;2308:23;2304:32;2301:2;;;2349:1;2346;2339:12;2301:2;2392:1;2417:64;2473:7;2464:6;2453:9;2449:22;2417:64;:::i;:::-;2407:74;;2363:128;2291:207;;;;:::o;2504:407::-;;;2629:2;2617:9;2608:7;2604:23;2600:32;2597:2;;;2645:1;2642;2635:12;2597:2;2688:1;2713:53;2758:7;2749:6;2738:9;2734:22;2713:53;:::i;:::-;2703:63;;2659:117;2815:2;2841:53;2886:7;2877:6;2866:9;2862:22;2841:53;:::i;:::-;2831:63;;2786:118;2587:324;;;;;:::o;2917:552::-;;;;3059:2;3047:9;3038:7;3034:23;3030:32;3027:2;;;3075:1;3072;3065:12;3027:2;3118:1;3143:53;3188:7;3179:6;3168:9;3164:22;3143:53;:::i;:::-;3133:63;;3089:117;3245:2;3271:53;3316:7;3307:6;3296:9;3292:22;3271:53;:::i;:::-;3261:63;;3216:118;3373:2;3399:53;3444:7;3435:6;3424:9;3420:22;3399:53;:::i;:::-;3389:63;;3344:118;3017:452;;;;;:::o;3475:407::-;;;3600:2;3588:9;3579:7;3575:23;3571:32;3568:2;;;3616:1;3613;3606:12;3568:2;3659:1;3684:53;3729:7;3720:6;3709:9;3705:22;3684:53;:::i;:::-;3674:63;;3630:117;3786:2;3812:53;3857:7;3848:6;3837:9;3833:22;3812:53;:::i;:::-;3802:63;;3757:118;3558:324;;;;;:::o;3888:564::-;;;;4045:2;4033:9;4024:7;4020:23;4016:32;4013:2;;;4061:1;4058;4051:12;4013:2;4132:1;4121:9;4117:17;4104:31;4162:18;4154:6;4151:30;4148:2;;;4194:1;4191;4184:12;4148:2;4230:80;4302:7;4293:6;4282:9;4278:22;4230:80;:::i;:::-;4212:98;;;;4075:245;4359:2;4385:50;4427:7;4418:6;4407:9;4403:22;4385:50;:::i;:::-;4375:60;;4330:115;4003:449;;;;;:::o;4458:405::-;;4591:2;4579:9;4570:7;4566:23;4562:32;4559:2;;;4607:1;4604;4597:12;4559:2;4678:1;4667:9;4663:17;4650:31;4708:18;4700:6;4697:30;4694:2;;;4740:1;4737;4730:12;4694:2;4768:78;4838:7;4829:6;4818:9;4814:22;4768:78;:::i;:::-;4758:88;;4621:235;4549:314;;;;:::o;4869:256::-;;4974:2;4962:9;4953:7;4949:23;4945:32;4942:2;;;4990:1;4987;4980:12;4942:2;5033:1;5058:50;5100:7;5091:6;5080:9;5076:22;5058:50;:::i;:::-;5048:60;;5004:114;4932:193;;;;:::o;5131:262::-;;5239:2;5227:9;5218:7;5214:23;5210:32;5207:2;;;5255:1;5252;5245:12;5207:2;5298:1;5323:53;5368:7;5359:6;5348:9;5344:22;5323:53;:::i;:::-;5313:63;;5269:117;5197:196;;;;:::o;5399:698::-;;;;;5558:3;5546:9;5537:7;5533:23;5529:33;5526:2;;;5575:1;5572;5565:12;5526:2;5618:1;5643:53;5688:7;5679:6;5668:9;5664:22;5643:53;:::i;:::-;5633:63;;5589:117;5745:2;5771:53;5816:7;5807:6;5796:9;5792:22;5771:53;:::i;:::-;5761:63;;5716:118;5873:2;5899:53;5944:7;5935:6;5924:9;5920:22;5899:53;:::i;:::-;5889:63;;5844:118;6001:2;6027:53;6072:7;6063:6;6052:9;6048:22;6027:53;:::i;:::-;6017:63;;5972:118;5516:581;;;;;;;:::o;6103:179::-;;6193:46;6235:3;6227:6;6193:46;:::i;:::-;6271:4;6266:3;6262:14;6248:28;;6183:99;;;;:::o;6288:108::-;6365:24;6383:5;6365:24;:::i;:::-;6360:3;6353:37;6343:53;;:::o;6402:118::-;6489:24;6507:5;6489:24;:::i;:::-;6484:3;6477:37;6467:53;;:::o;6556:732::-;;6704:54;6752:5;6704:54;:::i;:::-;6774:86;6853:6;6848:3;6774:86;:::i;:::-;6767:93;;6884:56;6934:5;6884:56;:::i;:::-;6963:7;6994:1;6979:284;7004:6;7001:1;6998:13;6979:284;;;7080:6;7074:13;7107:63;7166:3;7151:13;7107:63;:::i;:::-;7100:70;;7193:60;7246:6;7193:60;:::i;:::-;7183:70;;7039:224;7026:1;7023;7019:9;7014:14;;6979:284;;;6983:14;7279:3;7272:10;;6680:608;;;;;;;:::o;7294:109::-;7375:21;7390:5;7375:21;:::i;:::-;7370:3;7363:34;7353:50;;:::o;7409:183::-;7522:63;7579:5;7522:63;:::i;:::-;7517:3;7510:76;7500:92;;:::o;7598:147::-;7693:45;7732:5;7693:45;:::i;:::-;7688:3;7681:58;7671:74;;:::o;7751:364::-;;7867:39;7900:5;7867:39;:::i;:::-;7922:71;7986:6;7981:3;7922:71;:::i;:::-;7915:78;;8002:52;8047:6;8042:3;8035:4;8028:5;8024:16;8002:52;:::i;:::-;8079:29;8101:6;8079:29;:::i;:::-;8074:3;8070:39;8063:46;;7843:272;;;;;:::o;8121:367::-;;8284:67;8348:2;8343:3;8284:67;:::i;:::-;8277:74;;8381:34;8377:1;8372:3;8368:11;8361:55;8447:5;8442:2;8437:3;8433:12;8426:27;8479:2;8474:3;8470:12;8463:19;;8267:221;;;:::o;8494:395::-;;8657:67;8721:2;8716:3;8657:67;:::i;:::-;8650:74;;8754:34;8750:1;8745:3;8741:11;8734:55;8820:33;8815:2;8810:3;8806:12;8799:55;8880:2;8875:3;8871:12;8864:19;;8640:249;;;:::o;8895:374::-;;9058:67;9122:2;9117:3;9058:67;:::i;:::-;9051:74;;9155:34;9151:1;9146:3;9142:11;9135:55;9221:12;9216:2;9211:3;9207:12;9200:34;9260:2;9255:3;9251:12;9244:19;;9041:228;;;:::o;9275:326::-;;9438:67;9502:2;9497:3;9438:67;:::i;:::-;9431:74;;9535:30;9531:1;9526:3;9522:11;9515:51;9592:2;9587:3;9583:12;9576:19;;9421:180;;;:::o;9607:370::-;;9770:67;9834:2;9829:3;9770:67;:::i;:::-;9763:74;;9867:34;9863:1;9858:3;9854:11;9847:55;9933:8;9928:2;9923:3;9919:12;9912:30;9968:2;9963:3;9959:12;9952:19;;9753:224;;;:::o;9983:366::-;;10146:67;10210:2;10205:3;10146:67;:::i;:::-;10139:74;;10243:34;10239:1;10234:3;10230:11;10223:55;10309:4;10304:2;10299:3;10295:12;10288:26;10340:2;10335:3;10331:12;10324:19;;10129:220;;;:::o;10355:367::-;;10518:67;10582:2;10577:3;10518:67;:::i;:::-;10511:74;;10615:34;10611:1;10606:3;10602:11;10595:55;10681:5;10676:2;10671:3;10667:12;10660:27;10713:2;10708:3;10704:12;10697:19;;10501:221;;;:::o;10728:325::-;;10891:67;10955:2;10950:3;10891:67;:::i;:::-;10884:74;;10988:29;10984:1;10979:3;10975:11;10968:50;11044:2;11039:3;11035:12;11028:19;;10874:179;;;:::o;11059:365::-;;11222:67;11286:2;11281:3;11222:67;:::i;:::-;11215:74;;11319:34;11315:1;11310:3;11306:11;11299:55;11385:3;11380:2;11375:3;11371:12;11364:25;11415:2;11410:3;11406:12;11399:19;;11205:219;;;:::o;11430:330::-;;11593:67;11657:2;11652:3;11593:67;:::i;:::-;11586:74;;11690:34;11686:1;11681:3;11677:11;11670:55;11751:2;11746:3;11742:12;11735:19;;11576:184;;;:::o;11766:373::-;;11929:67;11993:2;11988:3;11929:67;:::i;:::-;11922:74;;12026:34;12022:1;12017:3;12013:11;12006:55;12092:11;12087:2;12082:3;12078:12;12071:33;12130:2;12125:3;12121:12;12114:19;;11912:227;;;:::o;12145:369::-;;12308:67;12372:2;12367:3;12308:67;:::i;:::-;12301:74;;12405:34;12401:1;12396:3;12392:11;12385:55;12471:7;12466:2;12461:3;12457:12;12450:29;12505:2;12500:3;12496:12;12489:19;;12291:223;;;:::o;12520:367::-;;12683:67;12747:2;12742:3;12683:67;:::i;:::-;12676:74;;12780:34;12776:1;12771:3;12767:11;12760:55;12846:5;12841:2;12836:3;12832:12;12825:27;12878:2;12873:3;12869:12;12862:19;;12666:221;;;:::o;12893:368::-;;13056:67;13120:2;13115:3;13056:67;:::i;:::-;13049:74;;13153:34;13149:1;13144:3;13140:11;13133:55;13219:6;13214:2;13209:3;13205:12;13198:28;13252:2;13247:3;13243:12;13236:19;;13039:222;;;:::o;13267:118::-;13354:24;13372:5;13354:24;:::i;:::-;13349:3;13342:37;13332:53;;:::o;13391:112::-;13474:22;13490:5;13474:22;:::i;:::-;13469:3;13462:35;13452:51;;:::o;13509:222::-;;13640:2;13629:9;13625:18;13617:26;;13653:71;13721:1;13710:9;13706:17;13697:6;13653:71;:::i;:::-;13607:124;;;;:::o;13737:210::-;;13862:2;13851:9;13847:18;13839:26;;13875:65;13937:1;13926:9;13922:17;13913:6;13875:65;:::i;:::-;13829:118;;;;:::o;13953:274::-;;14110:2;14099:9;14095:18;14087:26;;14123:97;14217:1;14206:9;14202:17;14193:6;14123:97;:::i;:::-;14077:150;;;;:::o;14233:313::-;;14384:2;14373:9;14369:18;14361:26;;14433:9;14427:4;14423:20;14419:1;14408:9;14404:17;14397:47;14461:78;14534:4;14525:6;14461:78;:::i;:::-;14453:86;;14351:195;;;;:::o;14552:419::-;;14756:2;14745:9;14741:18;14733:26;;14805:9;14799:4;14795:20;14791:1;14780:9;14776:17;14769:47;14833:131;14959:4;14833:131;:::i;:::-;14825:139;;14723:248;;;:::o;14977:419::-;;15181:2;15170:9;15166:18;15158:26;;15230:9;15224:4;15220:20;15216:1;15205:9;15201:17;15194:47;15258:131;15384:4;15258:131;:::i;:::-;15250:139;;15148:248;;;:::o;15402:419::-;;15606:2;15595:9;15591:18;15583:26;;15655:9;15649:4;15645:20;15641:1;15630:9;15626:17;15619:47;15683:131;15809:4;15683:131;:::i;:::-;15675:139;;15573:248;;;:::o;15827:419::-;;16031:2;16020:9;16016:18;16008:26;;16080:9;16074:4;16070:20;16066:1;16055:9;16051:17;16044:47;16108:131;16234:4;16108:131;:::i;:::-;16100:139;;15998:248;;;:::o;16252:419::-;;16456:2;16445:9;16441:18;16433:26;;16505:9;16499:4;16495:20;16491:1;16480:9;16476:17;16469:47;16533:131;16659:4;16533:131;:::i;:::-;16525:139;;16423:248;;;:::o;16677:419::-;;16881:2;16870:9;16866:18;16858:26;;16930:9;16924:4;16920:20;16916:1;16905:9;16901:17;16894:47;16958:131;17084:4;16958:131;:::i;:::-;16950:139;;16848:248;;;:::o;17102:419::-;;17306:2;17295:9;17291:18;17283:26;;17355:9;17349:4;17345:20;17341:1;17330:9;17326:17;17319:47;17383:131;17509:4;17383:131;:::i;:::-;17375:139;;17273:248;;;:::o;17527:419::-;;17731:2;17720:9;17716:18;17708:26;;17780:9;17774:4;17770:20;17766:1;17755:9;17751:17;17744:47;17808:131;17934:4;17808:131;:::i;:::-;17800:139;;17698:248;;;:::o;17952:419::-;;18156:2;18145:9;18141:18;18133:26;;18205:9;18199:4;18195:20;18191:1;18180:9;18176:17;18169:47;18233:131;18359:4;18233:131;:::i;:::-;18225:139;;18123:248;;;:::o;18377:419::-;;18581:2;18570:9;18566:18;18558:26;;18630:9;18624:4;18620:20;18616:1;18605:9;18601:17;18594:47;18658:131;18784:4;18658:131;:::i;:::-;18650:139;;18548:248;;;:::o;18802:419::-;;19006:2;18995:9;18991:18;18983:26;;19055:9;19049:4;19045:20;19041:1;19030:9;19026:17;19019:47;19083:131;19209:4;19083:131;:::i;:::-;19075:139;;18973:248;;;:::o;19227:419::-;;19431:2;19420:9;19416:18;19408:26;;19480:9;19474:4;19470:20;19466:1;19455:9;19451:17;19444:47;19508:131;19634:4;19508:131;:::i;:::-;19500:139;;19398:248;;;:::o;19652:419::-;;19856:2;19845:9;19841:18;19833:26;;19905:9;19899:4;19895:20;19891:1;19880:9;19876:17;19869:47;19933:131;20059:4;19933:131;:::i;:::-;19925:139;;19823:248;;;:::o;20077:419::-;;20281:2;20270:9;20266:18;20258:26;;20330:9;20324:4;20320:20;20316:1;20305:9;20301:17;20294:47;20358:131;20484:4;20358:131;:::i;:::-;20350:139;;20248:248;;;:::o;20502:222::-;;20633:2;20622:9;20618:18;20610:26;;20646:71;20714:1;20703:9;20699:17;20690:6;20646:71;:::i;:::-;20600:124;;;;:::o;20730:831::-;;21031:3;21020:9;21016:19;21008:27;;21045:71;21113:1;21102:9;21098:17;21089:6;21045:71;:::i;:::-;21126:80;21202:2;21191:9;21187:18;21178:6;21126:80;:::i;:::-;21253:9;21247:4;21243:20;21238:2;21227:9;21223:18;21216:48;21281:108;21384:4;21375:6;21281:108;:::i;:::-;21273:116;;21399:72;21467:2;21456:9;21452:18;21443:6;21399:72;:::i;:::-;21481:73;21549:3;21538:9;21534:19;21525:6;21481:73;:::i;:::-;20998:563;;;;;;;;:::o;21567:214::-;;21694:2;21683:9;21679:18;21671:26;;21707:67;21771:1;21760:9;21756:17;21747:6;21707:67;:::i;:::-;21661:120;;;;:::o;21787:283::-;;21853:2;21847:9;21837:19;;21895:4;21887:6;21883:17;22002:6;21990:10;21987:22;21966:18;21954:10;21951:34;21948:62;21945:2;;;22013:18;;:::i;:::-;21945:2;22053:10;22049:2;22042:22;21827:243;;;;:::o;22076:311::-;;22243:18;22235:6;22232:30;22229:2;;;22265:18;;:::i;:::-;22229:2;22315:4;22307:6;22303:17;22295:25;;22375:4;22369;22365:15;22357:23;;22158:229;;;:::o;22393:132::-;;22483:3;22475:11;;22513:4;22508:3;22504:14;22496:22;;22465:60;;;:::o;22531:114::-;;22632:5;22626:12;22616:22;;22605:40;;;:::o;22651:99::-;;22737:5;22731:12;22721:22;;22710:40;;;:::o;22756:113::-;;22858:4;22853:3;22849:14;22841:22;;22831:38;;;:::o;22875:184::-;;23008:6;23003:3;22996:19;23048:4;23043:3;23039:14;23024:29;;22986:73;;;;:::o;23065:169::-;;23183:6;23178:3;23171:19;23223:4;23218:3;23214:14;23199:29;;23161:73;;;;:::o;23240:305::-;;23299:20;23317:1;23299:20;:::i;:::-;23294:25;;23333:20;23351:1;23333:20;:::i;:::-;23328:25;;23487:1;23419:66;23415:74;23412:1;23409:81;23406:2;;;23493:18;;:::i;:::-;23406:2;23537:1;23534;23530:9;23523:16;;23284:261;;;;:::o;23551:185::-;;23608:20;23626:1;23608:20;:::i;:::-;23603:25;;23642:20;23660:1;23642:20;:::i;:::-;23637:25;;23681:1;23671:2;;23686:18;;:::i;:::-;23671:2;23728:1;23725;23721:9;23716:14;;23593:143;;;;:::o;23742:348::-;;23805:20;23823:1;23805:20;:::i;:::-;23800:25;;23839:20;23857:1;23839:20;:::i;:::-;23834:25;;24027:1;23959:66;23955:74;23952:1;23949:81;23944:1;23937:9;23930:17;23926:105;23923:2;;;24034:18;;:::i;:::-;23923:2;24082:1;24079;24075:9;24064:20;;23790:300;;;;:::o;24096:191::-;;24156:20;24174:1;24156:20;:::i;:::-;24151:25;;24190:20;24208:1;24190:20;:::i;:::-;24185:25;;24229:1;24226;24223:8;24220:2;;;24234:18;;:::i;:::-;24220:2;24279:1;24276;24272:9;24264:17;;24141:146;;;;:::o;24293:96::-;;24359:24;24377:5;24359:24;:::i;:::-;24348:35;;24338:51;;;:::o;24395:90::-;;24472:5;24465:13;24458:21;24447:32;;24437:48;;;:::o;24491:126::-;;24568:42;24561:5;24557:54;24546:65;;24536:81;;;:::o;24623:77::-;;24689:5;24678:16;;24668:32;;;:::o;24706:86::-;;24781:4;24774:5;24770:16;24759:27;;24749:43;;;:::o;24798:178::-;;24907:63;24964:5;24907:63;:::i;:::-;24894:76;;24884:92;;;:::o;24982:139::-;;25091:24;25109:5;25091:24;:::i;:::-;25078:37;;25068:53;;;:::o;25127:121::-;;25218:24;25236:5;25218:24;:::i;:::-;25205:37;;25195:53;;;:::o;25254:307::-;25322:1;25332:113;25346:6;25343:1;25340:13;25332:113;;;25431:1;25426:3;25422:11;25416:18;25412:1;25407:3;25403:11;25396:39;25368:2;25365:1;25361:10;25356:15;;25332:113;;;25463:6;25460:1;25457:13;25454:2;;;25543:1;25534:6;25529:3;25525:16;25518:27;25454:2;25303:258;;;;:::o;25567:233::-;;25629:24;25647:5;25629:24;:::i;:::-;25620:33;;25675:66;25668:5;25665:77;25662:2;;;25745:18;;:::i;:::-;25662:2;25792:1;25785:5;25781:13;25774:20;;25610:190;;;:::o;25806:180::-;25854:77;25851:1;25844:88;25951:4;25948:1;25941:15;25975:4;25972:1;25965:15;25992:180;26040:77;26037:1;26030:88;26137:4;26134:1;26127:15;26161:4;26158:1;26151:15;26178:180;26226:77;26223:1;26216:88;26323:4;26320:1;26313:15;26347:4;26344:1;26337:15;26364:102;;26456:2;26452:7;26447:2;26440:5;26436:14;26432:28;26422:38;;26412:54;;;:::o;26472:122::-;26545:24;26563:5;26545:24;:::i;:::-;26538:5;26535:35;26525:2;;26584:1;26581;26574:12;26525:2;26515:79;:::o;26600:116::-;26670:21;26685:5;26670:21;:::i;:::-;26663:5;26660:32;26650:2;;26706:1;26703;26696:12;26650:2;26640:76;:::o;26722:122::-;26795:24;26813:5;26795:24;:::i;:::-;26788:5;26785:35;26775:2;;26834:1;26831;26824:12;26775:2;26765:79;:::o

Swarm Source

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