ETH Price: $2,516.70 (+3.34%)

Token

Busted Bean ($BEAN)
 

Overview

Max Total Supply

1,000,000 $BEAN

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,008 $BEAN

Value
$0.00
0xc2843a83fc9dbc16f8ad3922e8b0d1c1f9334f53
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:
BustedBean

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-24
*/

/**

/$$$$$$$  /$$$$$$$$  /$$$$$$  /$$   /$$
| $$__  $$| $$_____/ /$$__  $$| $$$ | $$
| $$  \ $$| $$      | $$  \ $$| $$$$| $$
| $$$$$$$ | $$$$$   | $$$$$$$$| $$ $$ $$
| $$__  $$| $$__/   | $$__  $$| $$  $$$$
| $$  \ $$| $$      | $$  | $$| $$\  $$$
| $$$$$$$/| $$$$$$$$| $$  | $$| $$ \  $$
|_______/ |________/|__/  |__/|__/  \__/                         

>>>>> Open trading on 2022-09-24 16:00 UTC <<<<<<

Website: https://bustedbean.club

- Markeing Fee: 4/8%
- Max Transaction Amount: 2%
- Max Wallet: 2%

SPDX-License-Identifier: MIT

*/

pragma solidity >=0.8.8;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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);
}

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

contract BustedBean is ERC20, Ownable {
    using SafeMath for uint256;

    //Contract functional variables
    uint256 private constant TOTAL_SUPPLY = 1_000_000 * 1e18;
    uint256 public _maxTransactionAmount;
    mapping(address => bool) public _isExcludedFromLimit;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    bool private _swapping;

    // Anti-bot
    mapping(address => uint256) private _lastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public _isTransferDelay = true;

    //Fees
    address public marketingWallet;
    address public devWallet;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExempt;

    //Uniswap
    IUniswapV2Router02 public router;
    address public pair;
    address public constant deadAddress = address(0xdead);

    constructor() ERC20("Busted Bean", "$BEAN") {
        setupSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uint256 _buyMarketingFee = 4;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
        uint256 _sellMarketingFee = 8;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        _maxTransactionAmount = TOTAL_SUPPLY * 2 / 100;
        _maxWallet = TOTAL_SUPPLY * 2 / 100;
        _swapTokensAtAmount = TOTAL_SUPPLY * 1 / 100;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = 0xF1c2bFDddaf5aA18677865a20Fe907E0146c400C;
        // set as marketing wallet
        devWallet = owner();
        // set as dev wallet

        // exclude from paying fees or having max transaction amount
        setIsExcludeFromFees(owner(), true);
        setIsExcludeFromFees(address(this), true);
        setIsExcludeFromFees(address(0xdead), true);
        setIsExcludeFromFees(address(marketingWallet), true);

        setIsExcludeFromLimit(owner(), true);
        setIsExcludeFromLimit(address(this), true);
        setIsExcludeFromLimit(address(0xdead), true);
        setIsExcludeFromLimit(address(marketingWallet), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, TOTAL_SUPPLY);
    }

    function setupSwapRouter(address routerAddress) private {
        require(routerAddress != address(0), "Invalid router address");
        router = IUniswapV2Router02(routerAddress);
        pair = IUniswapV2Factory(router.factory()).getPair(
            address(this),
            router.WETH()
        );
        if (pair == address(0)) {
            pair = IUniswapV2Factory(router.factory()).createPair(
                address(this),
                router.WETH()
            );
        }
        setIsExcludeFromLimit(routerAddress, true);
        setIsExcludeFromLimit(address(pair), true);
        setExempt(address(router), true);
    }

    receive() external payable {}

    function activeTrading() external onlyOwner {
        _tradingActive = true;
    }

    function removeLimits() external onlyOwner {
        _limitsInEffect = false;
    }

    function disableTransferDelay() external onlyOwner {
        _isTransferDelay = false;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= ((totalSupply() * 1) / 10000) / 1e18,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(
            newAmount <= ((totalSupply() * 5) / 1000) / 1e18,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount * 1e18;
        return true;
    }

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

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

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

    function setIsExcludeFromFees(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromFees[account] = excluded;
    }

    function setExempt(address who, bool status) public onlyOwner {
        _isExempt[who] = status;
    }

    function setIsExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (!_tradingActive) {
            require(_isExempt[from] || from == owner() || to == owner(), "Trading is not active.");
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (_swapping) {
            super._transfer(from, to, amount);
            return;
        }

        if (_limitsInEffect) {
            if (
                //when buy
                from == pair && !_isExcludedFromLimit[to]
            ) {
                require(
                    amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
                // Delay on buy only
                if (_isTransferDelay) {
                    require(
                        _lastTransferTimestamp[tx.origin] < block.number,
                        "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                    );
                    _lastTransferTimestamp[tx.origin] = block.number;
                }
            } else if (
                //when sell
                to == pair && !_isExcludedFromLimit[from]
            ) {
                require(
                    amount <= _maxTransactionAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            } else if (!_isExcludedFromLimit[to]) {
                // transfer
                require(
                    amount + balanceOf(to) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

        if (
            canSwap &&
            _tradingActive &&
            to == pair && //on sell
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapBack();
        }

        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (from == pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tokenAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

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

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

    function swapBack() private lockTheSwap {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"_isExcludedFromLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setIsExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setIsExcludeFromLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setIsExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600b81526020017f427573746564204265616e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f244245414e0000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000e2e565b5080600490805190602001906200010092919062000e2e565b50505062000123620001176200042460201b60201c565b6200042c60201b60201c565b62000148737a250d5630b4cf539739df2c5dacb4c659f2488d620004f260201b60201c565b6000600490506000806000600890506000806064600269d3c21bcecceda100000062000175919062000f17565b62000181919062000fa7565b6006819055506064600269d3c21bcecceda1000000620001a2919062000f17565b620001ae919062000fa7565b6009819055506064600169d3c21bcecceda1000000620001cf919062000f17565b620001db919062000fa7565b60088190555085600f819055508460108190555083601181905550601154601054600f546200020b919062000fdf565b62000217919062000fdf565b600e8190555082601381905550816014819055508060158190555060155460145460135462000247919062000fdf565b62000253919062000fdf565b60128190555073f1c2bfdddaf5aa18677865a20fe907e0146c400c600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002be62000aaf60201b60201c565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003206200031262000aaf60201b60201c565b600162000ad960201b60201c565b6200033330600162000ad960201b60201c565b6200034861dead600162000ad960201b60201c565b6200037d600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000ad960201b60201c565b6200039f6200039162000aaf60201b60201c565b600162000b4460201b60201c565b620003b230600162000b4460201b60201c565b620003c761dead600162000b4460201b60201c565b620003fc600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b4460201b60201c565b620004183369d3c21bcecceda100000062000baf60201b60201c565b50505050505062001310565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000565576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055c906200109d565b60405180910390fd5b80601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200060f57600080fd5b505afa15801562000624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064a919062001129565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620006cf57600080fd5b505afa158015620006e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070a919062001129565b6040518363ffffffff1660e01b8152600401620007299291906200116c565b60206040518083038186803b1580156200074257600080fd5b505afa15801562000757573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200077d919062001129565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000a2f57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200087e57600080fd5b505afa15801562000893573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008b9919062001129565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200093e57600080fd5b505afa15801562000953573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000979919062001129565b6040518363ffffffff1660e01b8152600401620009989291906200116c565b602060405180830381600087803b158015620009b357600080fd5b505af1158015620009c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009ee919062001129565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b62000a4281600162000b4460201b60201c565b62000a77601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b4460201b60201c565b62000aac601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000d2860201b60201c565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000ae962000d9360201b60201c565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000b5462000d9360201b60201c565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1990620011e9565b60405180910390fd5b62000c366000838362000e2460201b60201c565b806002600082825462000c4a919062000fdf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ca1919062000fdf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d0891906200121c565b60405180910390a362000d246000838362000e2960201b60201c565b5050565b62000d3862000d9360201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000da36200042460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000dc962000aaf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e199062001289565b60405180910390fd5b565b505050565b505050565b82805462000e3c90620012da565b90600052602060002090601f01602090048101928262000e60576000855562000eac565b82601f1062000e7b57805160ff191683800117855562000eac565b8280016001018555821562000eac579182015b8281111562000eab57825182559160200191906001019062000e8e565b5b50905062000ebb919062000ebf565b5090565b5b8082111562000eda57600081600090555060010162000ec0565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f248262000ede565b915062000f318362000ede565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f6d5762000f6c62000ee8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fb48262000ede565b915062000fc18362000ede565b92508262000fd45762000fd362000f78565b5b828204905092915050565b600062000fec8262000ede565b915062000ff98362000ede565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001031576200103062000ee8565b5b828201905092915050565b600082825260208201905092915050565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b6000620010856016836200103c565b915062001092826200104d565b602082019050919050565b60006020820190508181036000830152620010b88162001076565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010f182620010c4565b9050919050565b6200110381620010e4565b81146200110f57600080fd5b50565b6000815190506200112381620010f8565b92915050565b600060208284031215620011425762001141620010bf565b5b6000620011528482850162001112565b91505092915050565b6200116681620010e4565b82525050565b60006040820190506200118360008301856200115b565b6200119260208301846200115b565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011d1601f836200103c565b9150620011de8262001199565b602082019050919050565b600060208201905081810360008301526200120481620011c2565b9050919050565b620012168162000ede565b82525050565b60006020820190506200123360008301846200120b565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012716020836200103c565b91506200127e8262001239565b602082019050919050565b60006020820190508181036000830152620012a48162001262565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620012f357607f821691505b602082108114156200130a5762001309620012ab565b5b50919050565b613e7c80620013206000396000f3fe60806040526004361061028c5760003560e01c80638da5cb5b1161015a578063b3ac8537116100c1578063e73b90cd1161007a578063e73b90cd146109e9578063e884f26014610a14578063f11a24d314610a2b578063f2fde38b14610a56578063f637434214610a7f578063f887ea4014610aaa57610293565b8063b3ac8537146108c7578063c18bc195146108de578063cd183bbd14610907578063d257b34f14610944578063d85ba06314610981578063dd62ed3e146109ac57610293565b80639fccce32116101135780639fccce32146107a35780639fde54f5146107ce578063a0d82dc5146107f7578063a457c2d714610822578063a8aa1b311461085f578063a9059cbb1461088a57610293565b80638da5cb5b1461068f5780638ea5220f146106ba5780639145dbe2146106e5578063921369131461072257806395d89b411461074d5780639c3b4fdc1461077857610293565b8063313ce567116101fe57806375f0a874116101b757806375f0a874146105915780637bce5a04146105bc57806382247ec0146105e7578063863587cd1461061257806386695e8e1461063b5780638bb1f5e91461066457610293565b8063313ce5671461049357806339509351146104be5780636a486a8e146104fb57806370a0823114610526578063715018a614610563578063751039fc1461057a57610293565b80631f3fed8f116102505780631f3fed8f14610381578063203e727e146103ac57806323b872dd146103d557806327c8f8351461041257806327f4d7d51461043d5780632fd689e31461046857610293565b806304beaeb81461029857806306fdde03146102c3578063095ea7b3146102ee57806318160ddd1461032b5780631a8145bb1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad5565b6040516102ba9190612b8f565b60405180910390f35b3480156102cf57600080fd5b506102d8610adb565b6040516102e59190612c43565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190612cf4565b610b6d565b6040516103229190612d4f565b60405180910390f35b34801561033757600080fd5b50610340610b90565b60405161034d9190612b8f565b60405180910390f35b34801561036257600080fd5b5061036b610b9a565b6040516103789190612b8f565b60405180910390f35b34801561038d57600080fd5b50610396610ba0565b6040516103a39190612b8f565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612d6a565b610ba6565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612d97565b610c41565b6040516104099190612d4f565b60405180910390f35b34801561041e57600080fd5b50610427610c70565b6040516104349190612df9565b60405180910390f35b34801561044957600080fd5b50610452610c76565b60405161045f9190612d4f565b60405180910390f35b34801561047457600080fd5b5061047d610c89565b60405161048a9190612b8f565b60405180910390f35b34801561049f57600080fd5b506104a8610c8f565b6040516104b59190612e30565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612cf4565b610c98565b6040516104f29190612d4f565b60405180910390f35b34801561050757600080fd5b50610510610ccf565b60405161051d9190612b8f565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612e4b565b610cd5565b60405161055a9190612b8f565b60405180910390f35b34801561056f57600080fd5b50610578610d1d565b005b34801561058657600080fd5b5061058f610d31565b005b34801561059d57600080fd5b506105a6610d56565b6040516105b39190612df9565b60405180910390f35b3480156105c857600080fd5b506105d1610d7c565b6040516105de9190612b8f565b60405180910390f35b3480156105f357600080fd5b506105fc610d82565b6040516106099190612b8f565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190612ea4565b610d88565b005b34801561064757600080fd5b50610662600480360381019061065d9190612ea4565b610deb565b005b34801561067057600080fd5b50610679610e4e565b6040516106869190612d4f565b60405180910390f35b34801561069b57600080fd5b506106a4610e61565b6040516106b19190612df9565b60405180910390f35b3480156106c657600080fd5b506106cf610e8b565b6040516106dc9190612df9565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190612e4b565b610eb1565b6040516107199190612d4f565b60405180910390f35b34801561072e57600080fd5b50610737610f07565b6040516107449190612b8f565b60405180910390f35b34801561075957600080fd5b50610762610f0d565b60405161076f9190612c43565b60405180910390f35b34801561078457600080fd5b5061078d610f9f565b60405161079a9190612b8f565b60405180910390f35b3480156107af57600080fd5b506107b8610fa5565b6040516107c59190612b8f565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612ea4565b610fab565b005b34801561080357600080fd5b5061080c61100e565b6040516108199190612b8f565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190612cf4565b611014565b6040516108569190612d4f565b60405180910390f35b34801561086b57600080fd5b5061087461108b565b6040516108819190612df9565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190612cf4565b6110b1565b6040516108be9190612d4f565b60405180910390f35b3480156108d357600080fd5b506108dc6110d4565b005b3480156108ea57600080fd5b5061090560048036038101906109009190612d6a565b6110f9565b005b34801561091357600080fd5b5061092e60048036038101906109299190612e4b565b611194565b60405161093b9190612d4f565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190612d6a565b6111b4565b6040516109789190612d4f565b60405180910390f35b34801561098d57600080fd5b506109966112cd565b6040516109a39190612b8f565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190612ee4565b6112d3565b6040516109e09190612b8f565b60405180910390f35b3480156109f557600080fd5b506109fe61135a565b604051610a0b9190612d4f565b60405180910390f35b348015610a2057600080fd5b50610a2961136d565b005b348015610a3757600080fd5b50610a40611392565b604051610a4d9190612b8f565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a789190612e4b565b611398565b005b348015610a8b57600080fd5b50610a9461141c565b604051610aa19190612b8f565b60405180910390f35b348015610ab657600080fd5b50610abf611422565b604051610acc9190612f83565b60405180910390f35b60065481565b606060038054610aea90612fcd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1690612fcd565b8015610b635780601f10610b3857610100808354040283529160200191610b63565b820191906000526020600020905b815481529060010190602001808311610b4657829003601f168201915b5050505050905090565b600080610b78611448565b9050610b85818585611450565b600191505092915050565b6000600254905090565b60175481565b60165481565b610bae61161b565b670de0b6b3a76400006103e86001610bc4610b90565b610bce919061302e565b610bd891906130b7565b610be291906130b7565b811015610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b9061315a565b60405180910390fd5b670de0b6b3a764000081610c38919061302e565b60068190555050565b600080610c4c611448565b9050610c59858285611699565b610c64858585611725565b60019150509392505050565b61dead81565b600a60019054906101000a900460ff1681565b60085481565b60006012905090565b600080610ca3611448565b9050610cc4818585610cb585896112d3565b610cbf919061317a565b611450565b600191505092915050565b60125481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d2561161b565b610d2f60006121ca565b565b610d3961161b565b6000600a60006101000a81548160ff021916908315150217905550565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60095481565b610d9061161b565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610df361161b565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b606060048054610f1c90612fcd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890612fcd565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050905090565b60115481565b60185481565b610fb361161b565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b60008061101f611448565b9050600061102d82866112d3565b905083811015611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613242565b60405180910390fd5b61107f8286868403611450565b60019250505092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806110bc611448565b90506110c9818585611725565b600191505092915050565b6110dc61161b565b6001600a60016101000a81548160ff021916908315150217905550565b61110161161b565b670de0b6b3a76400006103e86005611117610b90565b611121919061302e565b61112b91906130b7565b61113591906130b7565b811015611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906132d4565b60405180910390fd5b670de0b6b3a76400008161118b919061302e565b60098190555050565b60076020528060005260406000206000915054906101000a900460ff1681565b60006111be61161b565b670de0b6b3a764000061271060016111d4610b90565b6111de919061302e565b6111e891906130b7565b6111f291906130b7565b821015611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90613366565b60405180910390fd5b670de0b6b3a76400006103e8600561124a610b90565b611254919061302e565b61125e91906130b7565b61126891906130b7565b8211156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a1906133f8565b60405180910390fd5b670de0b6b3a7640000826112be919061302e565b60088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60009054906101000a900460ff1681565b61137561161b565b6000600c60006101000a81548160ff021916908315150217905550565b60105481565b6113a061161b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611410576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114079061348a565b60405180910390fd5b611419816121ca565b50565b60145481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b79061351c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611530576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611527906135ae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161160e9190612b8f565b60405180910390a3505050565b611623611448565b73ffffffffffffffffffffffffffffffffffffffff16611641610e61565b73ffffffffffffffffffffffffffffffffffffffff1614611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e9061361a565b60405180910390fd5b565b60006116a584846112d3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461171f5781811015611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613686565b60405180910390fd5b61171e8484848403611450565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c90613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc906137aa565b60405180910390fd5b600a60019054906101000a900460ff1661192057601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118a35750611874610e61565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806118e057506118b1610e61565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690613816565b60405180910390fd5b5b600081141561193a5761193583836000612290565b6121c5565b600a60029054906101000a900460ff161561195f5761195a838383612290565b6121c5565b600a60009054906101000a900460ff1615611d4057601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a1b5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b9d57600654811115611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c906138a8565b60405180910390fd5b600954611a7183610cd5565b82611a7c919061317a565b1115611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490613914565b60405180910390fd5b600c60009054906101000a900460ff1615611b985743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906139cc565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d3f565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611c445750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9357600654811115611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613a5e565b60405180910390fd5b611d3e565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d3d57600954611cf083610cd5565b82611cfb919061317a565b1115611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613914565b60405180910390fd5b5b5b5b5b6000611d4b30610cd5565b905060006008548210159050808015611d705750600a60019054906101000a900460ff165b8015611dc95750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611e1f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e755750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e8357611e82612511565b5b600060019050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f2a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f3457600090505b600081156121b557601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f9b57506000601254115b1561206857611fc86064611fba601254886127c990919063ffffffff16565b6127df90919063ffffffff16565b905060125460145482611fdb919061302e565b611fe591906130b7565b60176000828254611ff6919061317a565b925050819055506012546015548261200e919061302e565b61201891906130b7565b60186000828254612029919061317a565b9250508190555060125460135482612041919061302e565b61204b91906130b7565b6016600082825461205c919061317a565b92505081905550612191565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156120c757506000600e54115b15612190576120f460646120e6600e54886127c990919063ffffffff16565b6127df90919063ffffffff16565b9050600e5460105482612107919061302e565b61211191906130b7565b60176000828254612122919061317a565b92505081905550600e546011548261213a919061302e565b61214491906130b7565b60186000828254612155919061317a565b92505081905550600e54600f548261216d919061302e565b61217791906130b7565b60166000828254612188919061317a565b925050819055505b5b60008111156121a6576121a5873083612290565b5b80856121b29190613a7e565b94505b6121c0878787612290565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f790613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612367906137aa565b60405180910390fd5b61237b8383836127f5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890613b24565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612494919061317a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124f89190612b8f565b60405180910390a361250b8484846127fa565b50505050565b6001600a60026101000a81548160ff021916908315150217905550600061253730610cd5565b9050600060185460165460175461254e919061317a565b612558919061317a565b905060008083148061256a5750600082145b15612577575050506127ac565b60006002836017548661258a919061302e565b61259491906130b7565b61259e91906130b7565b905060006125b582866127ff90919063ffffffff16565b905060004790506125c582612815565b60006125da82476127ff90919063ffffffff16565b90506000612605876125f7601654856127c990919063ffffffff16565b6127df90919063ffffffff16565b9050600061263088612622601854866127c990919063ffffffff16565b6127df90919063ffffffff16565b905060008183856126419190613a7e565b61264b9190613a7e565b9050600060178190555060006016819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516126ab90613b75565b60006040518083038185875af1925050503d80600081146126e8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ed565b606091505b5050809850506000871180156127035750600081115b15612713576127128782612a67565b5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161275990613b75565b60006040518083038185875af1925050503d8060008114612796576040519150601f19603f3d011682016040523d82523d6000602084013e61279b565b606091505b505080985050505050505050505050505b6000600a60026101000a81548160ff021916908315150217905550565b600081836127d7919061302e565b905092915050565b600081836127ed91906130b7565b905092915050565b505050565b505050565b6000818361280d9190613a7e565b905092915050565b6000600267ffffffffffffffff81111561283257612831613b8a565b5b6040519080825280602002602001820160405280156128605781602001602082028036833780820191505090505b509050308160008151811061287857612877613bb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561291a57600080fd5b505afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190613bfd565b8160018151811061296657612965613bb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129cd30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611450565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a31959493929190613d23565b600060405180830381600087803b158015612a4b57600080fd5b505af1158015612a5f573d6000803e3d6000fd5b505050505050565b612a9430601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611450565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612b1d96959493929190613d7d565b6060604051808303818588803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b6f9190613df3565b5050505050565b6000819050919050565b612b8981612b76565b82525050565b6000602082019050612ba46000830184612b80565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612be4578082015181840152602081019050612bc9565b83811115612bf3576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c1582612baa565b612c1f8185612bb5565b9350612c2f818560208601612bc6565b612c3881612bf9565b840191505092915050565b60006020820190508181036000830152612c5d8184612c0a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c9582612c6a565b9050919050565b612ca581612c8a565b8114612cb057600080fd5b50565b600081359050612cc281612c9c565b92915050565b612cd181612b76565b8114612cdc57600080fd5b50565b600081359050612cee81612cc8565b92915050565b60008060408385031215612d0b57612d0a612c65565b5b6000612d1985828601612cb3565b9250506020612d2a85828601612cdf565b9150509250929050565b60008115159050919050565b612d4981612d34565b82525050565b6000602082019050612d646000830184612d40565b92915050565b600060208284031215612d8057612d7f612c65565b5b6000612d8e84828501612cdf565b91505092915050565b600080600060608486031215612db057612daf612c65565b5b6000612dbe86828701612cb3565b9350506020612dcf86828701612cb3565b9250506040612de086828701612cdf565b9150509250925092565b612df381612c8a565b82525050565b6000602082019050612e0e6000830184612dea565b92915050565b600060ff82169050919050565b612e2a81612e14565b82525050565b6000602082019050612e456000830184612e21565b92915050565b600060208284031215612e6157612e60612c65565b5b6000612e6f84828501612cb3565b91505092915050565b612e8181612d34565b8114612e8c57600080fd5b50565b600081359050612e9e81612e78565b92915050565b60008060408385031215612ebb57612eba612c65565b5b6000612ec985828601612cb3565b9250506020612eda85828601612e8f565b9150509250929050565b60008060408385031215612efb57612efa612c65565b5b6000612f0985828601612cb3565b9250506020612f1a85828601612cb3565b9150509250929050565b6000819050919050565b6000612f49612f44612f3f84612c6a565b612f24565b612c6a565b9050919050565b6000612f5b82612f2e565b9050919050565b6000612f6d82612f50565b9050919050565b612f7d81612f62565b82525050565b6000602082019050612f986000830184612f74565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fe557607f821691505b60208210811415612ff957612ff8612f9e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061303982612b76565b915061304483612b76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561307d5761307c612fff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130c282612b76565b91506130cd83612b76565b9250826130dd576130dc613088565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613144602f83612bb5565b915061314f826130e8565b604082019050919050565b6000602082019050818103600083015261317381613137565b9050919050565b600061318582612b76565b915061319083612b76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c5576131c4612fff565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061322c602583612bb5565b9150613237826131d0565b604082019050919050565b6000602082019050818103600083015261325b8161321f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006132be602483612bb5565b91506132c982613262565b604082019050919050565b600060208201905081810360008301526132ed816132b1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613350603483612bb5565b915061335b826132f4565b604082019050919050565b6000602082019050818103600083015261337f81613343565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006133e2603483612bb5565b91506133ed82613386565b604082019050919050565b60006020820190508181036000830152613411816133d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613474602683612bb5565b915061347f82613418565b604082019050919050565b600060208201905081810360008301526134a381613467565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613506602483612bb5565b9150613511826134aa565b604082019050919050565b60006020820190508181036000830152613535816134f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613598602283612bb5565b91506135a38261353c565b604082019050919050565b600060208201905081810360008301526135c78161358b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613604602083612bb5565b915061360f826135ce565b602082019050919050565b60006020820190508181036000830152613633816135f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613670601d83612bb5565b915061367b8261363a565b602082019050919050565b6000602082019050818103600083015261369f81613663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613702602583612bb5565b915061370d826136a6565b604082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613794602383612bb5565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613800601683612bb5565b915061380b826137ca565b602082019050919050565b6000602082019050818103600083015261382f816137f3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613892603583612bb5565b915061389d82613836565b604082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006138fe601383612bb5565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006139b6604983612bb5565b91506139c182613934565b606082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a48603683612bb5565b9150613a53826139ec565b604082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b6000613a8982612b76565b9150613a9483612b76565b925082821015613aa757613aa6612fff565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b0e602683612bb5565b9150613b1982613ab2565b604082019050919050565b60006020820190508181036000830152613b3d81613b01565b9050919050565b600081905092915050565b50565b6000613b5f600083613b44565b9150613b6a82613b4f565b600082019050919050565b6000613b8082613b52565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613bf781612c9c565b92915050565b600060208284031215613c1357613c12612c65565b5b6000613c2184828501613be8565b91505092915050565b6000819050919050565b6000613c4f613c4a613c4584613c2a565b612f24565b612b76565b9050919050565b613c5f81613c34565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c9a81612c8a565b82525050565b6000613cac8383613c91565b60208301905092915050565b6000602082019050919050565b6000613cd082613c65565b613cda8185613c70565b9350613ce583613c81565b8060005b83811015613d16578151613cfd8882613ca0565b9750613d0883613cb8565b925050600181019050613ce9565b5085935050505092915050565b600060a082019050613d386000830188612b80565b613d456020830187613c56565b8181036040830152613d578186613cc5565b9050613d666060830185612dea565b613d736080830184612b80565b9695505050505050565b600060c082019050613d926000830189612dea565b613d9f6020830188612b80565b613dac6040830187613c56565b613db96060830186613c56565b613dc66080830185612dea565b613dd360a0830184612b80565b979650505050505050565b600081519050613ded81612cc8565b92915050565b600080600060608486031215613e0c57613e0b612c65565b5b6000613e1a86828701613dde565b9350506020613e2b86828701613dde565b9250506040613e3c86828701613dde565b915050925092509256fea26469706673582212200430ca277947604ec9316c572d50c6af17c68272a4c86e10110bf1c7bbf8211764736f6c63430008090033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c80638da5cb5b1161015a578063b3ac8537116100c1578063e73b90cd1161007a578063e73b90cd146109e9578063e884f26014610a14578063f11a24d314610a2b578063f2fde38b14610a56578063f637434214610a7f578063f887ea4014610aaa57610293565b8063b3ac8537146108c7578063c18bc195146108de578063cd183bbd14610907578063d257b34f14610944578063d85ba06314610981578063dd62ed3e146109ac57610293565b80639fccce32116101135780639fccce32146107a35780639fde54f5146107ce578063a0d82dc5146107f7578063a457c2d714610822578063a8aa1b311461085f578063a9059cbb1461088a57610293565b80638da5cb5b1461068f5780638ea5220f146106ba5780639145dbe2146106e5578063921369131461072257806395d89b411461074d5780639c3b4fdc1461077857610293565b8063313ce567116101fe57806375f0a874116101b757806375f0a874146105915780637bce5a04146105bc57806382247ec0146105e7578063863587cd1461061257806386695e8e1461063b5780638bb1f5e91461066457610293565b8063313ce5671461049357806339509351146104be5780636a486a8e146104fb57806370a0823114610526578063715018a614610563578063751039fc1461057a57610293565b80631f3fed8f116102505780631f3fed8f14610381578063203e727e146103ac57806323b872dd146103d557806327c8f8351461041257806327f4d7d51461043d5780632fd689e31461046857610293565b806304beaeb81461029857806306fdde03146102c3578063095ea7b3146102ee57806318160ddd1461032b5780631a8145bb1461035657610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610ad5565b6040516102ba9190612b8f565b60405180910390f35b3480156102cf57600080fd5b506102d8610adb565b6040516102e59190612c43565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190612cf4565b610b6d565b6040516103229190612d4f565b60405180910390f35b34801561033757600080fd5b50610340610b90565b60405161034d9190612b8f565b60405180910390f35b34801561036257600080fd5b5061036b610b9a565b6040516103789190612b8f565b60405180910390f35b34801561038d57600080fd5b50610396610ba0565b6040516103a39190612b8f565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190612d6a565b610ba6565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612d97565b610c41565b6040516104099190612d4f565b60405180910390f35b34801561041e57600080fd5b50610427610c70565b6040516104349190612df9565b60405180910390f35b34801561044957600080fd5b50610452610c76565b60405161045f9190612d4f565b60405180910390f35b34801561047457600080fd5b5061047d610c89565b60405161048a9190612b8f565b60405180910390f35b34801561049f57600080fd5b506104a8610c8f565b6040516104b59190612e30565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612cf4565b610c98565b6040516104f29190612d4f565b60405180910390f35b34801561050757600080fd5b50610510610ccf565b60405161051d9190612b8f565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190612e4b565b610cd5565b60405161055a9190612b8f565b60405180910390f35b34801561056f57600080fd5b50610578610d1d565b005b34801561058657600080fd5b5061058f610d31565b005b34801561059d57600080fd5b506105a6610d56565b6040516105b39190612df9565b60405180910390f35b3480156105c857600080fd5b506105d1610d7c565b6040516105de9190612b8f565b60405180910390f35b3480156105f357600080fd5b506105fc610d82565b6040516106099190612b8f565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190612ea4565b610d88565b005b34801561064757600080fd5b50610662600480360381019061065d9190612ea4565b610deb565b005b34801561067057600080fd5b50610679610e4e565b6040516106869190612d4f565b60405180910390f35b34801561069b57600080fd5b506106a4610e61565b6040516106b19190612df9565b60405180910390f35b3480156106c657600080fd5b506106cf610e8b565b6040516106dc9190612df9565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190612e4b565b610eb1565b6040516107199190612d4f565b60405180910390f35b34801561072e57600080fd5b50610737610f07565b6040516107449190612b8f565b60405180910390f35b34801561075957600080fd5b50610762610f0d565b60405161076f9190612c43565b60405180910390f35b34801561078457600080fd5b5061078d610f9f565b60405161079a9190612b8f565b60405180910390f35b3480156107af57600080fd5b506107b8610fa5565b6040516107c59190612b8f565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612ea4565b610fab565b005b34801561080357600080fd5b5061080c61100e565b6040516108199190612b8f565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190612cf4565b611014565b6040516108569190612d4f565b60405180910390f35b34801561086b57600080fd5b5061087461108b565b6040516108819190612df9565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190612cf4565b6110b1565b6040516108be9190612d4f565b60405180910390f35b3480156108d357600080fd5b506108dc6110d4565b005b3480156108ea57600080fd5b5061090560048036038101906109009190612d6a565b6110f9565b005b34801561091357600080fd5b5061092e60048036038101906109299190612e4b565b611194565b60405161093b9190612d4f565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190612d6a565b6111b4565b6040516109789190612d4f565b60405180910390f35b34801561098d57600080fd5b506109966112cd565b6040516109a39190612b8f565b60405180910390f35b3480156109b857600080fd5b506109d360048036038101906109ce9190612ee4565b6112d3565b6040516109e09190612b8f565b60405180910390f35b3480156109f557600080fd5b506109fe61135a565b604051610a0b9190612d4f565b60405180910390f35b348015610a2057600080fd5b50610a2961136d565b005b348015610a3757600080fd5b50610a40611392565b604051610a4d9190612b8f565b60405180910390f35b348015610a6257600080fd5b50610a7d6004803603810190610a789190612e4b565b611398565b005b348015610a8b57600080fd5b50610a9461141c565b604051610aa19190612b8f565b60405180910390f35b348015610ab657600080fd5b50610abf611422565b604051610acc9190612f83565b60405180910390f35b60065481565b606060038054610aea90612fcd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1690612fcd565b8015610b635780601f10610b3857610100808354040283529160200191610b63565b820191906000526020600020905b815481529060010190602001808311610b4657829003601f168201915b5050505050905090565b600080610b78611448565b9050610b85818585611450565b600191505092915050565b6000600254905090565b60175481565b60165481565b610bae61161b565b670de0b6b3a76400006103e86001610bc4610b90565b610bce919061302e565b610bd891906130b7565b610be291906130b7565b811015610c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1b9061315a565b60405180910390fd5b670de0b6b3a764000081610c38919061302e565b60068190555050565b600080610c4c611448565b9050610c59858285611699565b610c64858585611725565b60019150509392505050565b61dead81565b600a60019054906101000a900460ff1681565b60085481565b60006012905090565b600080610ca3611448565b9050610cc4818585610cb585896112d3565b610cbf919061317a565b611450565b600191505092915050565b60125481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d2561161b565b610d2f60006121ca565b565b610d3961161b565b6000600a60006101000a81548160ff021916908315150217905550565b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60095481565b610d9061161b565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610df361161b565b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c60009054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b606060048054610f1c90612fcd565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890612fcd565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050905090565b60115481565b60185481565b610fb361161b565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b60008061101f611448565b9050600061102d82866112d3565b905083811015611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613242565b60405180910390fd5b61107f8286868403611450565b60019250505092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806110bc611448565b90506110c9818585611725565b600191505092915050565b6110dc61161b565b6001600a60016101000a81548160ff021916908315150217905550565b61110161161b565b670de0b6b3a76400006103e86005611117610b90565b611121919061302e565b61112b91906130b7565b61113591906130b7565b811015611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e906132d4565b60405180910390fd5b670de0b6b3a76400008161118b919061302e565b60098190555050565b60076020528060005260406000206000915054906101000a900460ff1681565b60006111be61161b565b670de0b6b3a764000061271060016111d4610b90565b6111de919061302e565b6111e891906130b7565b6111f291906130b7565b821015611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b90613366565b60405180910390fd5b670de0b6b3a76400006103e8600561124a610b90565b611254919061302e565b61125e91906130b7565b61126891906130b7565b8211156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a1906133f8565b60405180910390fd5b670de0b6b3a7640000826112be919061302e565b60088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a60009054906101000a900460ff1681565b61137561161b565b6000600c60006101000a81548160ff021916908315150217905550565b60105481565b6113a061161b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611410576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114079061348a565b60405180910390fd5b611419816121ca565b50565b60145481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b79061351c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611530576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611527906135ae565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161160e9190612b8f565b60405180910390a3505050565b611623611448565b73ffffffffffffffffffffffffffffffffffffffff16611641610e61565b73ffffffffffffffffffffffffffffffffffffffff1614611697576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168e9061361a565b60405180910390fd5b565b60006116a584846112d3565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461171f5781811015611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890613686565b60405180910390fd5b61171e8484848403611450565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c90613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc906137aa565b60405180910390fd5b600a60019054906101000a900460ff1661192057601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118a35750611874610e61565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806118e057506118b1610e61565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690613816565b60405180910390fd5b5b600081141561193a5761193583836000612290565b6121c5565b600a60029054906101000a900460ff161561195f5761195a838383612290565b6121c5565b600a60009054906101000a900460ff1615611d4057601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611a1b5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b9d57600654811115611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c906138a8565b60405180910390fd5b600954611a7183610cd5565b82611a7c919061317a565b1115611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490613914565b60405180910390fd5b600c60009054906101000a900460ff1615611b985743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906139cc565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611d3f565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611c445750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c9357600654811115611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8590613a5e565b60405180910390fd5b611d3e565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d3d57600954611cf083610cd5565b82611cfb919061317a565b1115611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613914565b60405180910390fd5b5b5b5b5b6000611d4b30610cd5565b905060006008548210159050808015611d705750600a60019054906101000a900460ff165b8015611dc95750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611e1f5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e755750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e8357611e82612511565b5b600060019050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f2a5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611f3457600090505b600081156121b557601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611f9b57506000601254115b1561206857611fc86064611fba601254886127c990919063ffffffff16565b6127df90919063ffffffff16565b905060125460145482611fdb919061302e565b611fe591906130b7565b60176000828254611ff6919061317a565b925050819055506012546015548261200e919061302e565b61201891906130b7565b60186000828254612029919061317a565b9250508190555060125460135482612041919061302e565b61204b91906130b7565b6016600082825461205c919061317a565b92505081905550612191565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156120c757506000600e54115b15612190576120f460646120e6600e54886127c990919063ffffffff16565b6127df90919063ffffffff16565b9050600e5460105482612107919061302e565b61211191906130b7565b60176000828254612122919061317a565b92505081905550600e546011548261213a919061302e565b61214491906130b7565b60186000828254612155919061317a565b92505081905550600e54600f548261216d919061302e565b61217791906130b7565b60166000828254612188919061317a565b925050819055505b5b60008111156121a6576121a5873083612290565b5b80856121b29190613a7e565b94505b6121c0878787612290565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f790613718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612367906137aa565b60405180910390fd5b61237b8383836127f5565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f890613b24565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612494919061317a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124f89190612b8f565b60405180910390a361250b8484846127fa565b50505050565b6001600a60026101000a81548160ff021916908315150217905550600061253730610cd5565b9050600060185460165460175461254e919061317a565b612558919061317a565b905060008083148061256a5750600082145b15612577575050506127ac565b60006002836017548661258a919061302e565b61259491906130b7565b61259e91906130b7565b905060006125b582866127ff90919063ffffffff16565b905060004790506125c582612815565b60006125da82476127ff90919063ffffffff16565b90506000612605876125f7601654856127c990919063ffffffff16565b6127df90919063ffffffff16565b9050600061263088612622601854866127c990919063ffffffff16565b6127df90919063ffffffff16565b905060008183856126419190613a7e565b61264b9190613a7e565b9050600060178190555060006016819055506000601881905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516126ab90613b75565b60006040518083038185875af1925050503d80600081146126e8576040519150601f19603f3d011682016040523d82523d6000602084013e6126ed565b606091505b5050809850506000871180156127035750600081115b15612713576127128782612a67565b5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161275990613b75565b60006040518083038185875af1925050503d8060008114612796576040519150601f19603f3d011682016040523d82523d6000602084013e61279b565b606091505b505080985050505050505050505050505b6000600a60026101000a81548160ff021916908315150217905550565b600081836127d7919061302e565b905092915050565b600081836127ed91906130b7565b905092915050565b505050565b505050565b6000818361280d9190613a7e565b905092915050565b6000600267ffffffffffffffff81111561283257612831613b8a565b5b6040519080825280602002602001820160405280156128605781602001602082028036833780820191505090505b509050308160008151811061287857612877613bb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561291a57600080fd5b505afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190613bfd565b8160018151811061296657612965613bb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129cd30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611450565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a31959493929190613d23565b600060405180830381600087803b158015612a4b57600080fd5b505af1158015612a5f573d6000803e3d6000fd5b505050505050565b612a9430601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611450565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612b1d96959493929190613d7d565b6060604051808303818588803b158015612b3657600080fd5b505af1158015612b4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b6f9190613df3565b5050505050565b6000819050919050565b612b8981612b76565b82525050565b6000602082019050612ba46000830184612b80565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612be4578082015181840152602081019050612bc9565b83811115612bf3576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c1582612baa565b612c1f8185612bb5565b9350612c2f818560208601612bc6565b612c3881612bf9565b840191505092915050565b60006020820190508181036000830152612c5d8184612c0a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c9582612c6a565b9050919050565b612ca581612c8a565b8114612cb057600080fd5b50565b600081359050612cc281612c9c565b92915050565b612cd181612b76565b8114612cdc57600080fd5b50565b600081359050612cee81612cc8565b92915050565b60008060408385031215612d0b57612d0a612c65565b5b6000612d1985828601612cb3565b9250506020612d2a85828601612cdf565b9150509250929050565b60008115159050919050565b612d4981612d34565b82525050565b6000602082019050612d646000830184612d40565b92915050565b600060208284031215612d8057612d7f612c65565b5b6000612d8e84828501612cdf565b91505092915050565b600080600060608486031215612db057612daf612c65565b5b6000612dbe86828701612cb3565b9350506020612dcf86828701612cb3565b9250506040612de086828701612cdf565b9150509250925092565b612df381612c8a565b82525050565b6000602082019050612e0e6000830184612dea565b92915050565b600060ff82169050919050565b612e2a81612e14565b82525050565b6000602082019050612e456000830184612e21565b92915050565b600060208284031215612e6157612e60612c65565b5b6000612e6f84828501612cb3565b91505092915050565b612e8181612d34565b8114612e8c57600080fd5b50565b600081359050612e9e81612e78565b92915050565b60008060408385031215612ebb57612eba612c65565b5b6000612ec985828601612cb3565b9250506020612eda85828601612e8f565b9150509250929050565b60008060408385031215612efb57612efa612c65565b5b6000612f0985828601612cb3565b9250506020612f1a85828601612cb3565b9150509250929050565b6000819050919050565b6000612f49612f44612f3f84612c6a565b612f24565b612c6a565b9050919050565b6000612f5b82612f2e565b9050919050565b6000612f6d82612f50565b9050919050565b612f7d81612f62565b82525050565b6000602082019050612f986000830184612f74565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fe557607f821691505b60208210811415612ff957612ff8612f9e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061303982612b76565b915061304483612b76565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561307d5761307c612fff565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006130c282612b76565b91506130cd83612b76565b9250826130dd576130dc613088565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000613144602f83612bb5565b915061314f826130e8565b604082019050919050565b6000602082019050818103600083015261317381613137565b9050919050565b600061318582612b76565b915061319083612b76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c5576131c4612fff565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061322c602583612bb5565b9150613237826131d0565b604082019050919050565b6000602082019050818103600083015261325b8161321f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006132be602483612bb5565b91506132c982613262565b604082019050919050565b600060208201905081810360008301526132ed816132b1565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613350603483612bb5565b915061335b826132f4565b604082019050919050565b6000602082019050818103600083015261337f81613343565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006133e2603483612bb5565b91506133ed82613386565b604082019050919050565b60006020820190508181036000830152613411816133d5565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613474602683612bb5565b915061347f82613418565b604082019050919050565b600060208201905081810360008301526134a381613467565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613506602483612bb5565b9150613511826134aa565b604082019050919050565b60006020820190508181036000830152613535816134f9565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613598602283612bb5565b91506135a38261353c565b604082019050919050565b600060208201905081810360008301526135c78161358b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613604602083612bb5565b915061360f826135ce565b602082019050919050565b60006020820190508181036000830152613633816135f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613670601d83612bb5565b915061367b8261363a565b602082019050919050565b6000602082019050818103600083015261369f81613663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613702602583612bb5565b915061370d826136a6565b604082019050919050565b60006020820190508181036000830152613731816136f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613794602383612bb5565b915061379f82613738565b604082019050919050565b600060208201905081810360008301526137c381613787565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613800601683612bb5565b915061380b826137ca565b602082019050919050565b6000602082019050818103600083015261382f816137f3565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613892603583612bb5565b915061389d82613836565b604082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006138fe601383612bb5565b9150613909826138c8565b602082019050919050565b6000602082019050818103600083015261392d816138f1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006139b6604983612bb5565b91506139c182613934565b606082019050919050565b600060208201905081810360008301526139e5816139a9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613a48603683612bb5565b9150613a53826139ec565b604082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b6000613a8982612b76565b9150613a9483612b76565b925082821015613aa757613aa6612fff565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b0e602683612bb5565b9150613b1982613ab2565b604082019050919050565b60006020820190508181036000830152613b3d81613b01565b9050919050565b600081905092915050565b50565b6000613b5f600083613b44565b9150613b6a82613b4f565b600082019050919050565b6000613b8082613b52565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613bf781612c9c565b92915050565b600060208284031215613c1357613c12612c65565b5b6000613c2184828501613be8565b91505092915050565b6000819050919050565b6000613c4f613c4a613c4584613c2a565b612f24565b612b76565b9050919050565b613c5f81613c34565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c9a81612c8a565b82525050565b6000613cac8383613c91565b60208301905092915050565b6000602082019050919050565b6000613cd082613c65565b613cda8185613c70565b9350613ce583613c81565b8060005b83811015613d16578151613cfd8882613ca0565b9750613d0883613cb8565b925050600181019050613ce9565b5085935050505092915050565b600060a082019050613d386000830188612b80565b613d456020830187613c56565b8181036040830152613d578186613cc5565b9050613d666060830185612dea565b613d736080830184612b80565b9695505050505050565b600060c082019050613d926000830189612dea565b613d9f6020830188612b80565b613dac6040830187613c56565b613db96060830186613c56565b613dc66080830185612dea565b613dd360a0830184612b80565b979650505050505050565b600081519050613ded81612cc8565b92915050565b600080600060608486031215613e0c57613e0b612c65565b5b6000613e1a86828701613dde565b9350506020613e2b86828701613dde565b9250506040613e3c86828701613dde565b915050925092509256fea26469706673582212200430ca277947604ec9316c572d50c6af17c68272a4c86e10110bf1c7bbf8211764736f6c63430008090033

Deployed Bytecode Sourcemap

33103:12308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33283:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13767:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16118:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14887:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34157:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37857:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16899:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34421:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33499:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33385;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14729:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17603:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33972:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15058:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25771:103;;;;;;;;;;;;;:::i;:::-;;37071:85;;;;;;;;;;;;;:::i;:::-;;33761:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33865;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33426:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38544:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38407:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33705:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25123:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33798:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38824:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34007:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13986:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33939:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34197:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38712:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34083:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18344:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34395:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15391:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36979:84;;;;;;;;;;;;;:::i;:::-;;38146:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33326:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37328:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33831:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15647:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33458:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37164:94;;;;;;;;;;;;;:::i;:::-;;33902:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26029:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34045:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34356:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33283:36;;;;:::o;13767:100::-;13821:13;13854:5;13847:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13767:100;:::o;16118:201::-;16201:4;16218:13;16234:12;:10;:12::i;:::-;16218:28;;16257:32;16266:5;16273:7;16282:6;16257:8;:32::i;:::-;16307:4;16300:11;;;16118:201;;;;:::o;14887:108::-;14948:7;14975:12;;14968:19;;14887:108;:::o;34157:33::-;;;;:::o;34117:::-;;;;:::o;37857:281::-;25009:13;:11;:13::i;:::-;38000:4:::1;37992;37987:1;37971:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37970:26;;;;:::i;:::-;37969:35;;;;:::i;:::-;37956:9;:48;;37934:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;38126:4;38114:9;:16;;;;:::i;:::-;38090:21;:40;;;;37857:281:::0;:::o;16899:295::-;17030:4;17047:15;17065:12;:10;:12::i;:::-;17047:30;;17088:38;17104:4;17110:7;17119:6;17088:15;:38::i;:::-;17137:27;17147:4;17153:2;17157:6;17137:9;:27::i;:::-;17182:4;17175:11;;;16899:295;;;;;:::o;34421:53::-;34467:6;34421:53;:::o;33499:34::-;;;;;;;;;;;;;:::o;33385:::-;;;;:::o;14729:93::-;14787:5;14812:2;14805:9;;14729:93;:::o;17603:238::-;17691:4;17708:13;17724:12;:10;:12::i;:::-;17708:28;;17747:64;17756:5;17763:7;17800:10;17772:25;17782:5;17789:7;17772:9;:25::i;:::-;:38;;;;:::i;:::-;17747:8;:64::i;:::-;17829:4;17822:11;;;17603:238;;;;:::o;33972:28::-;;;;:::o;15058:127::-;15132:7;15159:9;:18;15169:7;15159:18;;;;;;;;;;;;;;;;15152:25;;15058:127;;;:::o;25771:103::-;25009:13;:11;:13::i;:::-;25836:30:::1;25863:1;25836:18;:30::i;:::-;25771:103::o:0;37071:85::-;25009:13;:11;:13::i;:::-;37143:5:::1;37125:15;;:23;;;;;;;;;;;;;;;;;;37071:85::o:0;33761:30::-;;;;;;;;;;;;;:::o;33865:::-;;;;:::o;33426:25::-;;;;:::o;38544:160::-;25009:13;:11;:13::i;:::-;38688:8:::1;38657:19;:28;38677:7;38657:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38544:160:::0;;:::o;38407:129::-;25009:13;:11;:13::i;:::-;38524:4:::1;38493:20;:28;38514:6;38493:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38407:129:::0;;:::o;33705:35::-;;;;;;;;;;;;;:::o;25123:87::-;25169:7;25196:6;;;;;;;;;;;25189:13;;25123:87;:::o;33798:24::-;;;;;;;;;;;;;:::o;38824:129::-;38893:4;38917:19;:28;38937:7;38917:28;;;;;;;;;;;;;;;;;;;;;;;;;38910:35;;38824:129;;;:::o;34007:31::-;;;;:::o;13986:104::-;14042:13;14075:7;14068:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13986:104;:::o;33939:24::-;;;;:::o;34197:27::-;;;;:::o;38712:104::-;25009:13;:11;:13::i;:::-;38802:6:::1;38785:9;:14;38795:3;38785:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38712:104:::0;;:::o;34083:25::-;;;;:::o;18344:436::-;18437:4;18454:13;18470:12;:10;:12::i;:::-;18454:28;;18493:24;18520:25;18530:5;18537:7;18520:9;:25::i;:::-;18493:52;;18584:15;18564:16;:35;;18556:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18677:60;18686:5;18693:7;18721:15;18702:16;:34;18677:8;:60::i;:::-;18768:4;18761:11;;;;18344:436;;;;:::o;34395:19::-;;;;;;;;;;;;;:::o;15391:193::-;15470:4;15487:13;15503:12;:10;:12::i;:::-;15487:28;;15526;15536:5;15543:2;15547:6;15526:9;:28::i;:::-;15572:4;15565:11;;;15391:193;;;;:::o;36979:84::-;25009:13;:11;:13::i;:::-;37051:4:::1;37034:14;;:21;;;;;;;;;;;;;;;;;;36979:84::o:0;38146:253::-;25009:13;:11;:13::i;:::-;38286:4:::1;38278;38273:1;38257:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38256:26;;;;:::i;:::-;38255:35;;;;:::i;:::-;38245:6;:45;;38223:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38387:4;38378:6;:13;;;;:::i;:::-;38365:10;:26;;;;38146:253:::0;:::o;33326:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;37328:521::-;37436:4;25009:13;:11;:13::i;:::-;37525:4:::1;37516:5;37511:1;37495:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37494:27;;;;:::i;:::-;37493:36;;;;:::i;:::-;37480:9;:49;;37458:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;37686:4;37678;37673:1;37657:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37656:26;;;;:::i;:::-;37655:35;;;;:::i;:::-;37642:9;:48;;37620:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;37815:4;37803:9;:16;;;;:::i;:::-;37781:19;:38;;;;37837:4;37830:11;;37328:521:::0;;;:::o;33831:27::-;;;;:::o;15647:151::-;15736:7;15763:11;:18;15775:5;15763:18;;;;;;;;;;;;;;;:27;15782:7;15763:27;;;;;;;;;;;;;;;;15756:34;;15647:151;;;;:::o;33458:34::-;;;;;;;;;;;;;:::o;37164:94::-;25009:13;:11;:13::i;:::-;37245:5:::1;37226:16;;:24;;;;;;;;;;;;;;;;;;37164:94::o:0;33902:30::-;;;;:::o;26029:201::-;25009:13;:11;:13::i;:::-;26138:1:::1;26118:22;;:8;:22;;;;26110:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26194:28;26213:8;26194:18;:28::i;:::-;26029:201:::0;:::o;34045:31::-;;;;:::o;34356:32::-;;;;;;;;;;;;;:::o;12773:98::-;12826:7;12853:10;12846:17;;12773:98;:::o;21969:380::-;22122:1;22105:19;;:5;:19;;;;22097:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22203:1;22184:21;;:7;:21;;;;22176:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22287:6;22257:11;:18;22269:5;22257:18;;;;;;;;;;;;;;;:27;22276:7;22257:27;;;;;;;;;;;;;;;:36;;;;22325:7;22309:32;;22318:5;22309:32;;;22334:6;22309:32;;;;;;:::i;:::-;;;;;;;;21969:380;;;:::o;25288:132::-;25363:12;:10;:12::i;:::-;25352:23;;:7;:5;:7::i;:::-;:23;;;25344:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25288:132::o;22640:453::-;22775:24;22802:25;22812:5;22819:7;22802:9;:25::i;:::-;22775:52;;22862:17;22842:16;:37;22838:248;;22924:6;22904:16;:26;;22896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23008:51;23017:5;23024:7;23052:6;23033:16;:25;23008:8;:51::i;:::-;22838:248;22764:329;22640:453;;;:::o;38961:3774::-;39109:1;39093:18;;:4;:18;;;;39085:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39186:1;39172:16;;:2;:16;;;;39164:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39246:14;;;;;;;;;;;39241:134;;39285:9;:15;39295:4;39285:15;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;39312:7;:5;:7::i;:::-;39304:15;;:4;:15;;;39285:34;:51;;;;39329:7;:5;:7::i;:::-;39323:13;;:2;:13;;;39285:51;39277:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;39241:134;39401:1;39391:6;:11;39387:93;;;39419:28;39435:4;39441:2;39445:1;39419:15;:28::i;:::-;39462:7;;39387:93;39496:9;;;;;;;;;;;39492:96;;;39522:33;39538:4;39544:2;39548:6;39522:15;:33::i;:::-;39570:7;;39492:96;39604:15;;;;;;;;;;;39600:1432;;;39694:4;;;;;;;;;;;39686:12;;:4;:12;;;:41;;;;;39703:20;:24;39724:2;39703:24;;;;;;;;;;;;;;;;;;;;;;;;;39702:25;39686:41;39636:1385;;;39802:21;;39792:6;:31;;39762:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;39995:10;;39978:13;39988:2;39978:9;:13::i;:::-;39969:6;:22;;;;:::i;:::-;:36;;39939:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;40129:16;;;;;;;;;;;40125:343;;;40240:12;40204:22;:33;40227:9;40204:33;;;;;;;;;;;;;;;;:48;40170:207;;;;;;;;;;;;:::i;:::-;;;;;;;;;40436:12;40400:22;:33;40423:9;40400:33;;;;;;;;;;;;;;;:48;;;;40125:343;39636:1385;;;40546:4;;;;;;;;;;;40540:10;;:2;:10;;;:41;;;;;40555:20;:26;40576:4;40555:26;;;;;;;;;;;;;;;;;;;;;;;;;40554:27;40540:41;40489:532;;;40656:21;;40646:6;:31;;40616:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;40489:532;;;40802:20;:24;40823:2;40802:24;;;;;;;;;;;;;;;;;;;;;;;;;40797:224;;40932:10;;40915:13;40925:2;40915:9;:13::i;:::-;40906:6;:22;;;;:::i;:::-;:36;;40876:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;40797:224;40489:532;39636:1385;39600:1432;41044:28;41075:24;41093:4;41075:9;:24::i;:::-;41044:55;;41112:12;41151:19;;41127:20;:43;;41112:58;;41201:7;:38;;;;;41225:14;;;;;;;;;;;41201:38;:65;;;;;41262:4;;;;;;;;;;;41256:10;;:2;:10;;;41201:65;:118;;;;;41294:19;:25;41314:4;41294:25;;;;;;;;;;;;;;;;;;;;;;;;;41293:26;41201:118;:159;;;;;41337:19;:23;41357:2;41337:23;;;;;;;;;;;;;;;;;;;;;;;;;41336:24;41201:159;41183:226;;;41387:10;:8;:10::i;:::-;41183:226;41421:12;41436:4;41421:19;;41542;:25;41562:4;41542:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41571:19;:23;41591:2;41571:23;;;;;;;;;;;;;;;;;;;;;;;;;41542:52;41538:100;;;41621:5;41611:15;;41538:100;41650:12;41755:7;41751:931;;;41813:4;;;;;;;;;;;41807:10;;:2;:10;;;:31;;;;;41837:1;41821:13;;:17;41807:31;41803:730;;;41866:34;41896:3;41866:25;41877:13;;41866:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41859:41;;41969:13;;41949:16;;41942:4;:23;;;;:::i;:::-;41941:41;;;;:::i;:::-;41919:18;;:63;;;;;;;:::i;:::-;;;;;;;;42039:13;;42025:10;;42018:4;:17;;;;:::i;:::-;42017:35;;;;:::i;:::-;42001:12;;:51;;;;;;;:::i;:::-;;;;;;;;42121:13;;42101:16;;42094:4;:23;;;;:::i;:::-;42093:41;;;;:::i;:::-;42071:18;;:63;;;;;;;:::i;:::-;;;;;;;;41803:730;;;42204:4;;;;;;;;;;;42196:12;;:4;:12;;;:32;;;;;42227:1;42212:12;;:16;42196:32;42192:341;;;42256:33;42285:3;42256:24;42267:12;;42256:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42249:40;;42357:12;;42338:15;;42331:4;:22;;;;:::i;:::-;42330:39;;;;:::i;:::-;42308:18;;:61;;;;;;;:::i;:::-;;;;;;;;42425:12;;42412:9;;42405:4;:16;;;;:::i;:::-;42404:33;;;;:::i;:::-;42388:12;;:49;;;;;;;:::i;:::-;;;;;;;;42505:12;;42486:15;;42479:4;:22;;;;:::i;:::-;42478:39;;;;:::i;:::-;42456:18;;:61;;;;;;;:::i;:::-;;;;;;;;42192:341;41803:730;42560:1;42553:4;:8;42549:91;;;42582:42;42598:4;42612;42619;42582:15;:42::i;:::-;42549:91;42666:4;42656:14;;;;;:::i;:::-;;;41751:931;42694:33;42710:4;42716:2;42720:6;42694:15;:33::i;:::-;39074:3661;;;;38961:3774;;;;:::o;26390:191::-;26464:16;26483:6;;;;;;;;;;;26464:25;;26509:8;26500:6;;:17;;;;;;;;;;;;;;;;;;26564:8;26533:40;;26554:8;26533:40;;;;;;;;;;;;26453:128;26390:191;:::o;19250:671::-;19397:1;19381:18;;:4;:18;;;;19373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19474:1;19460:16;;:2;:16;;;;19452:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19529:38;19550:4;19556:2;19560:6;19529:20;:38::i;:::-;19580:19;19602:9;:15;19612:4;19602:15;;;;;;;;;;;;;;;;19580:37;;19651:6;19636:11;:21;;19628:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;19768:6;19754:11;:20;19736:9;:15;19746:4;19736:15;;;;;;;;;;;;;;;:38;;;;19813:6;19796:9;:13;19806:2;19796:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;19852:2;19837:26;;19846:4;19837:26;;;19856:6;19837:26;;;;;;:::i;:::-;;;;;;;;19876:37;19896:4;19902:2;19906:6;19876:19;:37::i;:::-;19362:559;19250:671;;;:::o;43818:1484::-;45356:4;45344:9;;:16;;;;;;;;;;;;;;;;;;43869:23:::1;43895:24;43913:4;43895:9;:24::i;:::-;43869:50;;43930:25;44026:12;;43992:18;;43958;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;43930:108;;44049:12;44097:1:::0;44078:15:::1;:20;:46;;;;44123:1;44102:17;:22;44078:46;44074:85;;;44141:7;;;;;44074:85;44220:23;44333:1;44300:17;44265:18;;44247:15;:36;;;;:::i;:::-;44246:71;;;;:::i;:::-;:88;;;;:::i;:::-;44220:114;;44345:26;44374:36;44394:15;44374;:19;;:36;;;;:::i;:::-;44345:65;;44423:25;44451:21;44423:49;;44485:36;44502:18;44485:16;:36::i;:::-;44534:18;44555:44;44581:17;44555:21;:25;;:44;;;;:::i;:::-;44534:65;;44612:23;44638:81;44691:17;44638:34;44653:18;;44638:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;44612:107;;44730:17;44750:51;44783:17;44750:28;44765:12;;44750:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44730:71;;44814:23;44871:9;44853:15;44840:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44814:66;;44914:1;44893:18;:22;;;;44947:1;44926:18;:22;;;;44974:1;44959:12;:16;;;;45010:9;;;;;;;;;;;45002:23;;45033:9;45002:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44988:59;;;;;45082:1;45064:15;:19;:42;;;;;45105:1;45087:15;:19;45064:42;45060:121;;;45123:46;45136:15;45153;45123:12;:46::i;:::-;45060:121;45215:15;;;;;;;;;;;45207:29;;45258:21;45207:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45193:101;;;;;43858:1444;;;;;;;;;;45371:1;45395:5:::0;45383:9;;:17;;;;;;;;;;;;;;;;;;43818:1484::o;29676:98::-;29734:7;29765:1;29761;:5;;;;:::i;:::-;29754:12;;29676:98;;;;:::o;30075:::-;30133:7;30164:1;30160;:5;;;;:::i;:::-;30153:12;;30075:98;;;;:::o;23693:125::-;;;;:::o;24422:124::-;;;;:::o;29319:98::-;29377:7;29408:1;29404;:5;;;;:::i;:::-;29397:12;;29319:98;;;;:::o;42743:562::-;42869:21;42907:1;42893:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42869:40;;42938:4;42920;42925:1;42920:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42964:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42954:4;42959:1;42954:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42990:53;43007:4;43022:6;;;;;;;;;;;43031:11;42990:8;:53::i;:::-;43082:6;;;;;;;;;;;:57;;;43154:11;43180:1;43224:4;43251;43271:15;43082:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42798:507;42743:562;:::o;43313:497::-;43461:53;43478:4;43493:6;;;;;;;;;;;43502:11;43461:8;:53::i;:::-;43557:6;;;;;;;;;;;:22;;;43587:9;43620:4;43640:11;43666:1;43709;43752:9;;;;;;;;;;;43776:15;43557:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43313:497;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:118::-;4893:24;4911:5;4893:24;:::i;:::-;4888:3;4881:37;4806:118;;:::o;4930:222::-;5023:4;5061:2;5050:9;5046:18;5038:26;;5074:71;5142:1;5131:9;5127:17;5118:6;5074:71;:::i;:::-;4930:222;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:329::-;5647:6;5696:2;5684:9;5675:7;5671:23;5667:32;5664:119;;;5702:79;;:::i;:::-;5664:119;5822:1;5847:53;5892:7;5883:6;5872:9;5868:22;5847:53;:::i;:::-;5837:63;;5793:117;5588:329;;;;:::o;5923:116::-;5993:21;6008:5;5993:21;:::i;:::-;5986:5;5983:32;5973:60;;6029:1;6026;6019:12;5973:60;5923:116;:::o;6045:133::-;6088:5;6126:6;6113:20;6104:29;;6142:30;6166:5;6142:30;:::i;:::-;6045:133;;;;:::o;6184:468::-;6249:6;6257;6306:2;6294:9;6285:7;6281:23;6277:32;6274:119;;;6312:79;;:::i;:::-;6274:119;6432:1;6457:53;6502:7;6493:6;6482:9;6478:22;6457:53;:::i;:::-;6447:63;;6403:117;6559:2;6585:50;6627:7;6618:6;6607:9;6603:22;6585:50;:::i;:::-;6575:60;;6530:115;6184:468;;;;;:::o;6658:474::-;6726:6;6734;6783:2;6771:9;6762:7;6758:23;6754:32;6751:119;;;6789:79;;:::i;:::-;6751:119;6909:1;6934:53;6979:7;6970:6;6959:9;6955:22;6934:53;:::i;:::-;6924:63;;6880:117;7036:2;7062:53;7107:7;7098:6;7087:9;7083:22;7062:53;:::i;:::-;7052:63;;7007:118;6658:474;;;;;:::o;7138:60::-;7166:3;7187:5;7180:12;;7138:60;;;:::o;7204:142::-;7254:9;7287:53;7305:34;7314:24;7332:5;7314:24;:::i;:::-;7305:34;:::i;:::-;7287:53;:::i;:::-;7274:66;;7204:142;;;:::o;7352:126::-;7402:9;7435:37;7466:5;7435:37;:::i;:::-;7422:50;;7352:126;;;:::o;7484:152::-;7560:9;7593:37;7624:5;7593:37;:::i;:::-;7580:50;;7484:152;;;:::o;7642:183::-;7755:63;7812:5;7755:63;:::i;:::-;7750:3;7743:76;7642:183;;:::o;7831:274::-;7950:4;7988:2;7977:9;7973:18;7965:26;;8001:97;8095:1;8084:9;8080:17;8071:6;8001:97;:::i;:::-;7831:274;;;;:::o;8111:180::-;8159:77;8156:1;8149:88;8256:4;8253:1;8246:15;8280:4;8277:1;8270:15;8297:320;8341:6;8378:1;8372:4;8368:12;8358:22;;8425:1;8419:4;8415:12;8446:18;8436:81;;8502:4;8494:6;8490:17;8480:27;;8436:81;8564:2;8556:6;8553:14;8533:18;8530:38;8527:84;;;8583:18;;:::i;:::-;8527:84;8348:269;8297:320;;;:::o;8623:180::-;8671:77;8668:1;8661:88;8768:4;8765:1;8758:15;8792:4;8789:1;8782:15;8809:348;8849:7;8872:20;8890:1;8872:20;:::i;:::-;8867:25;;8906:20;8924:1;8906:20;:::i;:::-;8901:25;;9094:1;9026:66;9022:74;9019:1;9016:81;9011:1;9004:9;8997:17;8993:105;8990:131;;;9101:18;;:::i;:::-;8990:131;9149:1;9146;9142:9;9131:20;;8809:348;;;;:::o;9163:180::-;9211:77;9208:1;9201:88;9308:4;9305:1;9298:15;9332:4;9329:1;9322:15;9349:185;9389:1;9406:20;9424:1;9406:20;:::i;:::-;9401:25;;9440:20;9458:1;9440:20;:::i;:::-;9435:25;;9479:1;9469:35;;9484:18;;:::i;:::-;9469:35;9526:1;9523;9519:9;9514:14;;9349:185;;;;:::o;9540:234::-;9680:34;9676:1;9668:6;9664:14;9657:58;9749:17;9744:2;9736:6;9732:15;9725:42;9540:234;:::o;9780:366::-;9922:3;9943:67;10007:2;10002:3;9943:67;:::i;:::-;9936:74;;10019:93;10108:3;10019:93;:::i;:::-;10137:2;10132:3;10128:12;10121:19;;9780:366;;;:::o;10152:419::-;10318:4;10356:2;10345:9;10341:18;10333:26;;10405:9;10399:4;10395:20;10391:1;10380:9;10376:17;10369:47;10433:131;10559:4;10433:131;:::i;:::-;10425:139;;10152:419;;;:::o;10577:305::-;10617:3;10636:20;10654:1;10636:20;:::i;:::-;10631:25;;10670:20;10688:1;10670:20;:::i;:::-;10665:25;;10824:1;10756:66;10752:74;10749:1;10746:81;10743:107;;;10830:18;;:::i;:::-;10743:107;10874:1;10871;10867:9;10860:16;;10577:305;;;;:::o;10888:224::-;11028:34;11024:1;11016:6;11012:14;11005:58;11097:7;11092:2;11084:6;11080:15;11073:32;10888:224;:::o;11118:366::-;11260:3;11281:67;11345:2;11340:3;11281:67;:::i;:::-;11274:74;;11357:93;11446:3;11357:93;:::i;:::-;11475:2;11470:3;11466:12;11459:19;;11118:366;;;:::o;11490:419::-;11656:4;11694:2;11683:9;11679:18;11671:26;;11743:9;11737:4;11733:20;11729:1;11718:9;11714:17;11707:47;11771:131;11897:4;11771:131;:::i;:::-;11763:139;;11490:419;;;:::o;11915:223::-;12055:34;12051:1;12043:6;12039:14;12032:58;12124:6;12119:2;12111:6;12107:15;12100:31;11915:223;:::o;12144:366::-;12286:3;12307:67;12371:2;12366:3;12307:67;:::i;:::-;12300:74;;12383:93;12472:3;12383:93;:::i;:::-;12501:2;12496:3;12492:12;12485:19;;12144:366;;;:::o;12516:419::-;12682:4;12720:2;12709:9;12705:18;12697:26;;12769:9;12763:4;12759:20;12755:1;12744:9;12740:17;12733:47;12797:131;12923:4;12797:131;:::i;:::-;12789:139;;12516:419;;;:::o;12941:239::-;13081:34;13077:1;13069:6;13065:14;13058:58;13150:22;13145:2;13137:6;13133:15;13126:47;12941:239;:::o;13186:366::-;13328:3;13349:67;13413:2;13408:3;13349:67;:::i;:::-;13342:74;;13425:93;13514:3;13425:93;:::i;:::-;13543:2;13538:3;13534:12;13527:19;;13186:366;;;:::o;13558:419::-;13724:4;13762:2;13751:9;13747:18;13739:26;;13811:9;13805:4;13801:20;13797:1;13786:9;13782:17;13775:47;13839:131;13965:4;13839:131;:::i;:::-;13831:139;;13558:419;;;:::o;13983:239::-;14123:34;14119:1;14111:6;14107:14;14100:58;14192:22;14187:2;14179:6;14175:15;14168:47;13983:239;:::o;14228:366::-;14370:3;14391:67;14455:2;14450:3;14391:67;:::i;:::-;14384:74;;14467:93;14556:3;14467:93;:::i;:::-;14585:2;14580:3;14576:12;14569:19;;14228:366;;;:::o;14600:419::-;14766:4;14804:2;14793:9;14789:18;14781:26;;14853:9;14847:4;14843:20;14839:1;14828:9;14824:17;14817:47;14881:131;15007:4;14881:131;:::i;:::-;14873:139;;14600:419;;;:::o;15025:225::-;15165:34;15161:1;15153:6;15149:14;15142:58;15234:8;15229:2;15221:6;15217:15;15210:33;15025:225;:::o;15256:366::-;15398:3;15419:67;15483:2;15478:3;15419:67;:::i;:::-;15412:74;;15495:93;15584:3;15495:93;:::i;:::-;15613:2;15608:3;15604:12;15597:19;;15256:366;;;:::o;15628:419::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15881:9;15875:4;15871:20;15867:1;15856:9;15852:17;15845:47;15909:131;16035:4;15909:131;:::i;:::-;15901:139;;15628:419;;;:::o;16053:223::-;16193:34;16189:1;16181:6;16177:14;16170:58;16262:6;16257:2;16249:6;16245:15;16238:31;16053:223;:::o;16282:366::-;16424:3;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16521:93;16610:3;16521:93;:::i;:::-;16639:2;16634:3;16630:12;16623:19;;16282:366;;;:::o;16654:419::-;16820:4;16858:2;16847:9;16843:18;16835:26;;16907:9;16901:4;16897:20;16893:1;16882:9;16878:17;16871:47;16935:131;17061:4;16935:131;:::i;:::-;16927:139;;16654:419;;;:::o;17079:221::-;17219:34;17215:1;17207:6;17203:14;17196:58;17288:4;17283:2;17275:6;17271:15;17264:29;17079:221;:::o;17306:366::-;17448:3;17469:67;17533:2;17528:3;17469:67;:::i;:::-;17462:74;;17545:93;17634:3;17545:93;:::i;:::-;17663:2;17658:3;17654:12;17647:19;;17306:366;;;:::o;17678:419::-;17844:4;17882:2;17871:9;17867:18;17859:26;;17931:9;17925:4;17921:20;17917:1;17906:9;17902:17;17895:47;17959:131;18085:4;17959:131;:::i;:::-;17951:139;;17678:419;;;:::o;18103:182::-;18243:34;18239:1;18231:6;18227:14;18220:58;18103:182;:::o;18291:366::-;18433:3;18454:67;18518:2;18513:3;18454:67;:::i;:::-;18447:74;;18530:93;18619:3;18530:93;:::i;:::-;18648:2;18643:3;18639:12;18632:19;;18291:366;;;:::o;18663:419::-;18829:4;18867:2;18856:9;18852:18;18844:26;;18916:9;18910:4;18906:20;18902:1;18891:9;18887:17;18880:47;18944:131;19070:4;18944:131;:::i;:::-;18936:139;;18663:419;;;:::o;19088:179::-;19228:31;19224:1;19216:6;19212:14;19205:55;19088:179;:::o;19273:366::-;19415:3;19436:67;19500:2;19495:3;19436:67;:::i;:::-;19429:74;;19512:93;19601:3;19512:93;:::i;:::-;19630:2;19625:3;19621:12;19614:19;;19273:366;;;:::o;19645:419::-;19811:4;19849:2;19838:9;19834:18;19826:26;;19898:9;19892:4;19888:20;19884:1;19873:9;19869:17;19862:47;19926:131;20052:4;19926:131;:::i;:::-;19918:139;;19645:419;;;:::o;20070:224::-;20210:34;20206:1;20198:6;20194:14;20187:58;20279:7;20274:2;20266:6;20262:15;20255:32;20070:224;:::o;20300:366::-;20442:3;20463:67;20527:2;20522:3;20463:67;:::i;:::-;20456:74;;20539:93;20628:3;20539:93;:::i;:::-;20657:2;20652:3;20648:12;20641:19;;20300:366;;;:::o;20672:419::-;20838:4;20876:2;20865:9;20861:18;20853:26;;20925:9;20919:4;20915:20;20911:1;20900:9;20896:17;20889:47;20953:131;21079:4;20953:131;:::i;:::-;20945:139;;20672:419;;;:::o;21097:222::-;21237:34;21233:1;21225:6;21221:14;21214:58;21306:5;21301:2;21293:6;21289:15;21282:30;21097:222;:::o;21325:366::-;21467:3;21488:67;21552:2;21547:3;21488:67;:::i;:::-;21481:74;;21564:93;21653:3;21564:93;:::i;:::-;21682:2;21677:3;21673:12;21666:19;;21325:366;;;:::o;21697:419::-;21863:4;21901:2;21890:9;21886:18;21878:26;;21950:9;21944:4;21940:20;21936:1;21925:9;21921:17;21914:47;21978:131;22104:4;21978:131;:::i;:::-;21970:139;;21697:419;;;:::o;22122:172::-;22262:24;22258:1;22250:6;22246:14;22239:48;22122:172;:::o;22300:366::-;22442:3;22463:67;22527:2;22522:3;22463:67;:::i;:::-;22456:74;;22539:93;22628:3;22539:93;:::i;:::-;22657:2;22652:3;22648:12;22641:19;;22300:366;;;:::o;22672:419::-;22838:4;22876:2;22865:9;22861:18;22853:26;;22925:9;22919:4;22915:20;22911:1;22900:9;22896:17;22889:47;22953:131;23079:4;22953:131;:::i;:::-;22945:139;;22672:419;;;:::o;23097:240::-;23237:34;23233:1;23225:6;23221:14;23214:58;23306:23;23301:2;23293:6;23289:15;23282:48;23097:240;:::o;23343:366::-;23485:3;23506:67;23570:2;23565:3;23506:67;:::i;:::-;23499:74;;23582:93;23671:3;23582:93;:::i;:::-;23700:2;23695:3;23691:12;23684:19;;23343:366;;;:::o;23715:419::-;23881:4;23919:2;23908:9;23904:18;23896:26;;23968:9;23962:4;23958:20;23954:1;23943:9;23939:17;23932:47;23996:131;24122:4;23996:131;:::i;:::-;23988:139;;23715:419;;;:::o;24140:169::-;24280:21;24276:1;24268:6;24264:14;24257:45;24140:169;:::o;24315:366::-;24457:3;24478:67;24542:2;24537:3;24478:67;:::i;:::-;24471:74;;24554:93;24643:3;24554:93;:::i;:::-;24672:2;24667:3;24663:12;24656:19;;24315:366;;;:::o;24687:419::-;24853:4;24891:2;24880:9;24876:18;24868:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24968:131;25094:4;24968:131;:::i;:::-;24960:139;;24687:419;;;:::o;25112:297::-;25252:34;25248:1;25240:6;25236:14;25229:58;25321:34;25316:2;25308:6;25304:15;25297:59;25390:11;25385:2;25377:6;25373:15;25366:36;25112:297;:::o;25415:366::-;25557:3;25578:67;25642:2;25637:3;25578:67;:::i;:::-;25571:74;;25654:93;25743:3;25654:93;:::i;:::-;25772:2;25767:3;25763:12;25756:19;;25415:366;;;:::o;25787:419::-;25953:4;25991:2;25980:9;25976:18;25968:26;;26040:9;26034:4;26030:20;26026:1;26015:9;26011:17;26004:47;26068:131;26194:4;26068:131;:::i;:::-;26060:139;;25787:419;;;:::o;26212:241::-;26352:34;26348:1;26340:6;26336:14;26329:58;26421:24;26416:2;26408:6;26404:15;26397:49;26212:241;:::o;26459:366::-;26601:3;26622:67;26686:2;26681:3;26622:67;:::i;:::-;26615:74;;26698:93;26787:3;26698:93;:::i;:::-;26816:2;26811:3;26807:12;26800:19;;26459:366;;;:::o;26831:419::-;26997:4;27035:2;27024:9;27020:18;27012:26;;27084:9;27078:4;27074:20;27070:1;27059:9;27055:17;27048:47;27112:131;27238:4;27112:131;:::i;:::-;27104:139;;26831:419;;;:::o;27256:191::-;27296:4;27316:20;27334:1;27316:20;:::i;:::-;27311:25;;27350:20;27368:1;27350:20;:::i;:::-;27345:25;;27389:1;27386;27383:8;27380:34;;;27394:18;;:::i;:::-;27380:34;27439:1;27436;27432:9;27424:17;;27256:191;;;;:::o;27453:225::-;27593:34;27589:1;27581:6;27577:14;27570:58;27662:8;27657:2;27649:6;27645:15;27638:33;27453:225;:::o;27684:366::-;27826:3;27847:67;27911:2;27906:3;27847:67;:::i;:::-;27840:74;;27923:93;28012:3;27923:93;:::i;:::-;28041:2;28036:3;28032:12;28025:19;;27684:366;;;:::o;28056:419::-;28222:4;28260:2;28249:9;28245:18;28237:26;;28309:9;28303:4;28299:20;28295:1;28284:9;28280:17;28273:47;28337:131;28463:4;28337:131;:::i;:::-;28329:139;;28056:419;;;:::o;28481:147::-;28582:11;28619:3;28604:18;;28481:147;;;;:::o;28634:114::-;;:::o;28754:398::-;28913:3;28934:83;29015:1;29010:3;28934:83;:::i;:::-;28927:90;;29026:93;29115:3;29026:93;:::i;:::-;29144:1;29139:3;29135:11;29128:18;;28754:398;;;:::o;29158:379::-;29342:3;29364:147;29507:3;29364:147;:::i;:::-;29357:154;;29528:3;29521:10;;29158:379;;;:::o;29543:180::-;29591:77;29588:1;29581:88;29688:4;29685:1;29678:15;29712:4;29709:1;29702:15;29729:180;29777:77;29774:1;29767:88;29874:4;29871:1;29864:15;29898:4;29895:1;29888:15;29915:143;29972:5;30003:6;29997:13;29988:22;;30019:33;30046:5;30019:33;:::i;:::-;29915:143;;;;:::o;30064:351::-;30134:6;30183:2;30171:9;30162:7;30158:23;30154:32;30151:119;;;30189:79;;:::i;:::-;30151:119;30309:1;30334:64;30390:7;30381:6;30370:9;30366:22;30334:64;:::i;:::-;30324:74;;30280:128;30064:351;;;;:::o;30421:85::-;30466:7;30495:5;30484:16;;30421:85;;;:::o;30512:158::-;30570:9;30603:61;30621:42;30630:32;30656:5;30630:32;:::i;:::-;30621:42;:::i;:::-;30603:61;:::i;:::-;30590:74;;30512:158;;;:::o;30676:147::-;30771:45;30810:5;30771:45;:::i;:::-;30766:3;30759:58;30676:147;;:::o;30829:114::-;30896:6;30930:5;30924:12;30914:22;;30829:114;;;:::o;30949:184::-;31048:11;31082:6;31077:3;31070:19;31122:4;31117:3;31113:14;31098:29;;30949:184;;;;:::o;31139:132::-;31206:4;31229:3;31221:11;;31259:4;31254:3;31250:14;31242:22;;31139:132;;;:::o;31277:108::-;31354:24;31372:5;31354:24;:::i;:::-;31349:3;31342:37;31277:108;;:::o;31391:179::-;31460:10;31481:46;31523:3;31515:6;31481:46;:::i;:::-;31559:4;31554:3;31550:14;31536:28;;31391:179;;;;:::o;31576:113::-;31646:4;31678;31673:3;31669:14;31661:22;;31576:113;;;:::o;31725:732::-;31844:3;31873:54;31921:5;31873:54;:::i;:::-;31943:86;32022:6;32017:3;31943:86;:::i;:::-;31936:93;;32053:56;32103:5;32053:56;:::i;:::-;32132:7;32163:1;32148:284;32173:6;32170:1;32167:13;32148:284;;;32249:6;32243:13;32276:63;32335:3;32320:13;32276:63;:::i;:::-;32269:70;;32362:60;32415:6;32362:60;:::i;:::-;32352:70;;32208:224;32195:1;32192;32188:9;32183:14;;32148:284;;;32152:14;32448:3;32441:10;;31849:608;;;31725:732;;;;:::o;32463:831::-;32726:4;32764:3;32753:9;32749:19;32741:27;;32778:71;32846:1;32835:9;32831:17;32822:6;32778:71;:::i;:::-;32859:80;32935:2;32924:9;32920:18;32911:6;32859:80;:::i;:::-;32986:9;32980:4;32976:20;32971:2;32960:9;32956:18;32949:48;33014:108;33117:4;33108:6;33014:108;:::i;:::-;33006:116;;33132:72;33200:2;33189:9;33185:18;33176:6;33132:72;:::i;:::-;33214:73;33282:3;33271:9;33267:19;33258:6;33214:73;:::i;:::-;32463:831;;;;;;;;:::o;33300:807::-;33549:4;33587:3;33576:9;33572:19;33564:27;;33601:71;33669:1;33658:9;33654:17;33645:6;33601:71;:::i;:::-;33682:72;33750:2;33739:9;33735:18;33726:6;33682:72;:::i;:::-;33764:80;33840:2;33829:9;33825:18;33816:6;33764:80;:::i;:::-;33854;33930:2;33919:9;33915:18;33906:6;33854:80;:::i;:::-;33944:73;34012:3;34001:9;33997:19;33988:6;33944:73;:::i;:::-;34027;34095:3;34084:9;34080:19;34071:6;34027:73;:::i;:::-;33300:807;;;;;;;;;:::o;34113:143::-;34170:5;34201:6;34195:13;34186:22;;34217:33;34244:5;34217:33;:::i;:::-;34113:143;;;;:::o;34262:663::-;34350:6;34358;34366;34415:2;34403:9;34394:7;34390:23;34386:32;34383:119;;;34421:79;;:::i;:::-;34383:119;34541:1;34566:64;34622:7;34613:6;34602:9;34598:22;34566:64;:::i;:::-;34556:74;;34512:128;34679:2;34705:64;34761:7;34752:6;34741:9;34737:22;34705:64;:::i;:::-;34695:74;;34650:129;34818:2;34844:64;34900:7;34891:6;34880:9;34876:22;34844:64;:::i;:::-;34834:74;;34789:129;34262:663;;;;;:::o

Swarm Source

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