ETH Price: $3,899.36 (-0.54%)

Token

ERC-20: MIYAMOTO (MOTO)
 

Overview

Max Total Supply

10,000,000,000 MOTO

Holders

342

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.36294814257793554 MOTO

Value
$0.00
0x3d408387EA783eb93887e8d7ceeEC5F91D4Cb33D
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:
MIYAMOTO

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-23
*/

/**
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@&#@@@@@@@@@@@@@@@5??5@@@@@@@@@@@@@@@#&@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@&JP&@@@@@@@@@@@@@G??P@@@@@@@@@@@@@&PJ&@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@B?JP&@@@@@@@@@@@@YY@@@@@@@@@@@@&GJ?B@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@G??Y#@@@@@@@&GPPJJPPG&@@@@@@@#Y?JB@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@BYJYG&##BBB5JJJJJJJJ5BBB##&GYJYB@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@#YYY5YYYYYYYYYYYYYYYYYYYY5YY5#@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@&PYYPB###&&&&&&&&&&&&&&###BPYYP&@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@BYY5&@@@@@@@@@@@@@@@@@@@@@@&5YYB@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@GYY5@@@@@@#&@@@@@@@@@@##@@@@5YYG@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@&P55YY5@@@&BGYYB@@@@@@&BB5YG@@@PYY55P&@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@BYYYYY5@@@&P55P#@@@@@@@G55P#@@@PYYYYYB@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@&P55YY5@@@@@@@@@&#####@@@@@@@@@5YY55P&@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@#5YYB@@@@@@@@#P555B@@@@@@@@BYY5#@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@#555G&@@@@@@@@@@@@@@@@@@&G555#@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@&G555PGBBBBBBBBBBBBBBGP555G&@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@##&&B55YYYYYYYYYYYYYYYY55B&&##@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@B55PP555G#&B555555G&#G555PP55B@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@&#BPYY5P&@@@&555555#@@@&P5YYPB#&@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@&BP5Y5BBGP5#@@@&555555#@@@#5PGBB5Y5PB&@@@@@@@@@@@@@@@@
@@@@@@@@@@@&BP5YY5PB&@@@&&@@@#555555B@@@&&@@@&BP5YY5PB&@@@@@@@@@@@@@
@@@@@@@@@@@GYY55G#@@@@@@&GPP5555555555PPB@@@@@@@#G55YYG@@@@@@@@@@@@@
@@@@@@@@@@@@#B#@@@@@@@@@GY55555555555555Y#@@@@@@@@@#B#@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@&GP5PP5P555555PPB@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
███    ███ ██ ██    ██  █████  ███    ███  ██████  ████████  ██████  
████  ████ ██  ██  ██  ██   ██ ████  ████ ██    ██    ██    ██    ██ 
██ ████ ██ ██   ████   ███████ ██ ████ ██ ██    ██    ██    ██    ██ 
██  ██  ██ ██    ██    ██   ██ ██  ██  ██ ██    ██    ██    ██    ██ 
██      ██ ██    ██    ██   ██ ██      ██  ██████     ██     ██████  
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.19;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 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 to 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 {}
}
 
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @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) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract MIYAMOTO is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet;
    
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 

    bool public tradingActive = false;
    bool public swapEnabled = false;
 
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyBurnFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellBurnFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event burnWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event TransferForeignToken(address token, uint256 amount);

 
    constructor() ERC20("MIYAMOTO", "MOTO") {
        
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyBurnFee = 0;
 
        uint256 _sellMarketingFee = 5;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellBurnFee = 0;

      
        uint256 totalSupply = 10000000000 * 1e18;
 
        maxTransactionAmount = totalSupply * 1000 / 1000; // 100% maxTransactionAmountTxn
        maxWallet = totalSupply * 1000 / 1000; // 100% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBurnFee = _buyBurnFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBurnFee = _sellBurnFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
      
        marketingWallet = address(0x7bCA62a260Dcb3CDDF1C753055Ea26D390743f03); // set as marketing wallet
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy, uint256 _burnFeeBuy, uint256 _marketingFeeSell, uint256 _liquidityFeeSell, uint256 _burnFeeSell) external onlyOwner {
        buyMarketingFee = _marketingFeeBuy;
        buyLiquidityFee = _liquidityFeeBuy;
        buyBurnFee = _burnFeeBuy;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBurnFee;
        sellMarketingFee = _marketingFeeSell;
        sellLiquidityFee = _liquidityFeeSell;
        sellBurnFee = _burnFeeSell;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBurnFee;
        require(buyTotalFees <= 25, "Must keep fees at 25% or less");
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }
 
   
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }
   
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    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(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
         
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        uint256 tokensForBurn;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // 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 (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForBurn += fees * sellBurnFee / sellTotalFees;

                }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForBurn += fees * buyBurnFee / buyTotalFees;
   
            }
 
           if(fees > 0){    
                super._transfer(from, address(this), fees);
            }

            if(tokensForBurn > 0) {
                 super._transfer(address(this), address(0xdead), tokensForBurn);
            }

            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] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.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(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // 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 ethForLiquidity = ethBalance - ethForMarketing;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"burnWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","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":"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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","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":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","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":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","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"}]

60c06040526000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600881526020017f4d4959414d4f544f0000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4f544f000000000000000000000000000000000000000000000000000000008152508160039081620000c5919062000d5e565b508060049081620000d7919062000d5e565b5050506000620000ec620005bb60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001b7816001620005c360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d919062000eaf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002eb919062000eaf565b6040518363ffffffff1660e01b81526004016200030a92919062000ef2565b6020604051808303816000875af11580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000350919062000eaf565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200039860a0516001620005c360201b60201c565b620003ad60a0516001620006c060201b60201c565b60006005905060008060006005905060008060006b204fce5e3e2502611000000090506103e88082620003e1919062000f4e565b620003ed919062000fc8565b6007819055506103e8808262000404919062000f4e565b62000410919062000fc8565b600981905550612710600a8262000428919062000f4e565b62000434919062000fc8565b60088190555086600c8190555085600d8190555084600e81905550600e54600d54600c5462000464919062001000565b62000470919062001000565b600b81905550836010819055508260118190555081601281905550601254601154601054620004a0919062001000565b620004ac919062001000565b600f81905550737bca62a260dcb3cddf1c753055ea26d390743f03600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005296200051b6200076160201b60201c565b60016200078b60201b60201c565b6200053c3060016200078b60201b60201c565b6200055161dead60016200078b60201b60201c565b62000573620005656200076160201b60201c565b6001620005c360201b60201c565b62000586306001620005c360201b60201c565b6200059b61dead6001620005c360201b60201c565b620005ad3382620008d860201b60201c565b50505050505050506200120a565b600033905090565b620005d3620005bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000665576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065c906200109c565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200079b620005bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000824906200109c565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008cc9190620010db565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200094a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009419062001148565b60405180910390fd5b6200095e6000838362000a7c60201b60201c565b620009758160025462000a8160201b90919060201c565b600281905550620009ce816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a8160201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a7091906200117b565b60405180910390a35050565b505050565b600080828462000a92919062001000565b90508381101562000ada576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ad190620011e8565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b6657607f821691505b60208210810362000b7c5762000b7b62000b1e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000be67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ba7565b62000bf2868362000ba7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c3f62000c3962000c338462000c0a565b62000c14565b62000c0a565b9050919050565b6000819050919050565b62000c5b8362000c1e565b62000c7362000c6a8262000c46565b84845462000bb4565b825550505050565b600090565b62000c8a62000c7b565b62000c9781848462000c50565b505050565b5b8181101562000cbf5762000cb360008262000c80565b60018101905062000c9d565b5050565b601f82111562000d0e5762000cd88162000b82565b62000ce38462000b97565b8101602085101562000cf3578190505b62000d0b62000d028562000b97565b83018262000c9c565b50505b505050565b600082821c905092915050565b600062000d336000198460080262000d13565b1980831691505092915050565b600062000d4e838362000d20565b9150826002028217905092915050565b62000d698262000ae4565b67ffffffffffffffff81111562000d855762000d8462000aef565b5b62000d91825462000b4d565b62000d9e82828562000cc3565b600060209050601f83116001811462000dd6576000841562000dc1578287015190505b62000dcd858262000d40565b86555062000e3d565b601f19841662000de68662000b82565b60005b8281101562000e105784890151825560018201915060208501945060208101905062000de9565b8683101562000e30578489015162000e2c601f89168262000d20565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e778262000e4a565b9050919050565b62000e898162000e6a565b811462000e9557600080fd5b50565b60008151905062000ea98162000e7e565b92915050565b60006020828403121562000ec85762000ec762000e45565b5b600062000ed88482850162000e98565b91505092915050565b62000eec8162000e6a565b82525050565b600060408201905062000f09600083018562000ee1565b62000f18602083018462000ee1565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f5b8262000c0a565b915062000f688362000c0a565b925082820262000f788162000c0a565b9150828204841483151762000f925762000f9162000f1f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fd58262000c0a565b915062000fe28362000c0a565b92508262000ff55762000ff462000f99565b5b828204905092915050565b60006200100d8262000c0a565b91506200101a8362000c0a565b925082820190508082111562001035576200103462000f1f565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010846020836200103b565b915062001091826200104c565b602082019050919050565b60006020820190508181036000830152620010b78162001075565b9050919050565b60008115159050919050565b620010d581620010be565b82525050565b6000602082019050620010f26000830184620010ca565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001130601f836200103b565b91506200113d82620010f8565b602082019050919050565b60006020820190508181036000830152620011638162001121565b9050919050565b620011758162000c0a565b82525050565b60006020820190506200119260008301846200116a565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011d0601b836200103b565b9150620011dd8262001198565b602082019050919050565b600060208201905081810360008301526200120381620011c1565b9050919050565b60805160a051614e286200125a60003960008181610eb001526118c4015260008181610bb70152818161366d0152818161374e015281816137750152818161381101526138380152614e286000f3fe6080604052600436106102815760003560e01c8063921369131161014f578063c0246668116100c1578063e2f456051161007a578063e2f45605146109e5578063e71dc3f514610a10578063f11a24d314610a3b578063f2fde38b14610a66578063f637434214610a8f578063f8b45b0514610aba57610288565b8063c0246668146108c3578063c18bc195146108ec578063c8c8ebe414610915578063d257b34f14610940578063d85ba0631461097d578063dd62ed3e146109a857610288565b8063a457c2d711610113578063a457c2d71461078d578063a9059cbb146107ca578063aacebbe314610807578063adb873bd14610830578063b62496f51461085b578063bbc0c7421461089857610288565b806392136913146106bc578063924de9b7146106e757806395d89b4114610710578063992c58e41461073b5780639a7a23d61461076457610288565b806349bd5a5e116101f35780637571336a116101ac5780637571336a146105be57806375f0a874146105e75780637bce5a04146106125780638366e79a1461063d5780638a8c523c1461067a5780638da5cb5b1461069157610288565b806349bd5a5e146104ac5780634fbee193146104d75780636a486a8e146105145780636ddd17131461053f57806370a082311461056a578063715018a6146105a757610288565b80631a8145bb116102455780631a8145bb146103885780631f3fed8f146103b3578063203e727e146103de57806323b872dd14610407578063313ce56714610444578063395093511461046f57610288565b806306fdde031461028d578063095ea7b3146102b857806310d5de53146102f55780631694505e1461033257806318160ddd1461035d57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ae5565b6040516102af91906139da565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613a95565b610b77565b6040516102ec9190613af0565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613b0b565b610b95565b6040516103299190613af0565b60405180910390f35b34801561033e57600080fd5b50610347610bb5565b6040516103549190613b97565b60405180910390f35b34801561036957600080fd5b50610372610bd9565b60405161037f9190613bc1565b60405180910390f35b34801561039457600080fd5b5061039d610be3565b6040516103aa9190613bc1565b60405180910390f35b3480156103bf57600080fd5b506103c8610be9565b6040516103d59190613bc1565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190613bdc565b610bef565b005b34801561041357600080fd5b5061042e60048036038101906104299190613c09565b610d19565b60405161043b9190613af0565b60405180910390f35b34801561045057600080fd5b50610459610df2565b6040516104669190613c78565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613a95565b610dfb565b6040516104a39190613af0565b60405180910390f35b3480156104b857600080fd5b506104c1610eae565b6040516104ce9190613ca2565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613b0b565b610ed2565b60405161050b9190613af0565b60405180910390f35b34801561052057600080fd5b50610529610f28565b6040516105369190613bc1565b60405180910390f35b34801561054b57600080fd5b50610554610f2e565b6040516105619190613af0565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613b0b565b610f41565b60405161059e9190613bc1565b60405180910390f35b3480156105b357600080fd5b506105bc610f89565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613ce9565b6110e1565b005b3480156105f357600080fd5b506105fc6111d3565b6040516106099190613ca2565b60405180910390f35b34801561061e57600080fd5b506106276111f9565b6040516106349190613bc1565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613d29565b6111ff565b6040516106719190613af0565b60405180910390f35b34801561068657600080fd5b5061068f611444565b005b34801561069d57600080fd5b506106a661151a565b6040516106b39190613ca2565b60405180910390f35b3480156106c857600080fd5b506106d1611544565b6040516106de9190613bc1565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613d69565b61154a565b005b34801561071c57600080fd5b506107256115fe565b60405161073291906139da565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613d96565b611690565b005b34801561077057600080fd5b5061078b60048036038101906107869190613ce9565b61182b565b005b34801561079957600080fd5b506107b460048036038101906107af9190613a95565b61195e565b6040516107c19190613af0565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613a95565b611a2b565b6040516107fe9190613af0565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613b0b565b611a49565b005b34801561083c57600080fd5b50610845611ba0565b6040516108529190613bc1565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613b0b565b611ba6565b60405161088f9190613af0565b60405180910390f35b3480156108a457600080fd5b506108ad611bc6565b6040516108ba9190613af0565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190613ce9565b611bd9565b005b3480156108f857600080fd5b50610913600480360381019061090e9190613bdc565b611d19565b005b34801561092157600080fd5b5061092a611e43565b6040516109379190613bc1565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190613bdc565b611e49565b6040516109749190613af0565b60405180910390f35b34801561098957600080fd5b50610992611fb9565b60405161099f9190613bc1565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca9190613d29565b611fbf565b6040516109dc9190613bc1565b60405180910390f35b3480156109f157600080fd5b506109fa612046565b604051610a079190613bc1565b60405180910390f35b348015610a1c57600080fd5b50610a2561204c565b604051610a329190613bc1565b60405180910390f35b348015610a4757600080fd5b50610a50612052565b604051610a5d9190613bc1565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190613b0b565b612058565b005b348015610a9b57600080fd5b50610aa461221e565b604051610ab19190613bc1565b60405180910390f35b348015610ac657600080fd5b50610acf612224565b604051610adc9190613bc1565b60405180910390f35b606060038054610af490613e52565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2090613e52565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b6000610b8b610b8461222a565b8484612232565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60145481565b60135481565b610bf761222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d90613ecf565b60405180910390fd5b670de0b6b3a76400006103e86005610c9c610bd9565b610ca69190613f1e565b610cb09190613f8f565b610cba9190613f8f565b811015610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390614032565b60405180910390fd5b670de0b6b3a764000081610d109190613f1e565b60078190555050565b6000610d268484846123fb565b610de784610d3261222a565b610de285604051806060016040528060288152602001614da660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9861222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eb89092919063ffffffff16565b612232565b600190509392505050565b60006012905090565b6000610ea4610e0861222a565b84610e9f8560016000610e1961222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c90919063ffffffff16565b612232565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790613ecf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110e961222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613ecf565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600061120961222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90613ecf565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd9061409e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113419190613ca2565b602060405180830381865afa15801561135e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138291906140d3565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016113bf929190614100565b6020604051808303816000875af11580156113de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611402919061413e565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611435929190614100565b60405180910390a15092915050565b61144c61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613ecf565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61155261222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890613ecf565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60606004805461160d90613e52565b80601f016020809104026020016040519081016040528092919081815260200182805461163990613e52565b80156116865780601f1061165b57610100808354040283529160200191611686565b820191906000526020600020905b81548152906001019060200180831161166957829003601f168201915b5050505050905090565b61169861222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90613ecf565b60405180910390fd5b85600c8190555084600d8190555083600e81905550600e54600d54600c5461174f919061416b565b611759919061416b565b600b81905550826010819055508160118190555080601281905550601254601154601054611787919061416b565b611791919061416b565b600f819055506019600b5411156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d4906141eb565b60405180910390fd5b6019600f541115611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a906141eb565b60405180910390fd5b505050505050565b61183361222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613ecf565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119479061427d565b60405180910390fd5b61195a8282612f7a565b5050565b6000611a2161196b61222a565b84611a1c85604051806060016040528060258152602001614dce602591396001600061199561222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eb89092919063ffffffff16565b612232565b6001905092915050565b6000611a3f611a3861222a565b84846123fb565b6001905092915050565b611a5161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790613ecf565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60186020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611be161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613ecf565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d0d9190613af0565b60405180910390a25050565b611d2161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790613ecf565b60405180910390fd5b670de0b6b3a76400006103e86005611dc6610bd9565b611dd09190613f1e565b611dda9190613f8f565b611de49190613f8f565b811015611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061430f565b60405180910390fd5b670de0b6b3a764000081611e3a9190613f1e565b60098190555050565b60075481565b6000611e5361222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed990613ecf565b60405180910390fd5b620186a06001611ef0610bd9565b611efa9190613f1e565b611f049190613f8f565b821015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d906143a1565b60405180910390fd5b6103e86005611f53610bd9565b611f5d9190613f1e565b611f679190613f8f565b821115611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614433565b60405180910390fd5b8160088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600e5481565b600d5481565b61206061222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690613ecf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361215e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612155906144c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614557565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612307906145e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123ee9190613bc1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124619061467b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d09061470d565b60405180910390fd5b600081036124f2576124ed8383600061301b565b612eb3565b6124fa61151a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612568575061253861151a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125a15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125db575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f45750600560149054906101000a900460ff16155b156129d757600a60009054906101000a900460ff166126ee57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ae5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e490614779565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127915750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612838576007548111156127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d29061480b565b60405180910390fd5b6009546127e783610f41565b826127f2919061416b565b1115612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614877565b60405180910390fd5b6129d6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128db5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561292a57600754811115612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c90614909565b60405180910390fd5b6129d5565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129d45760095461298783610f41565b82612992919061416b565b11156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca90614877565b60405180910390fd5b5b5b5b5b60006129e230610f41565b9050600060085482101590506000818015612a095750600a60019054906101000a900460ff165b8015612a225750600560149054906101000a900460ff16155b8015612a785750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ace5750601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b245750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b68576001600560146101000a81548160ff021916908315150217905550612b4c6132ae565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c1e5750601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c2857600090505b60008115612ea257601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8b57506000600f54115b15612d4d57612cb86064612caa600f54896134bb90919063ffffffff16565b61353590919063ffffffff16565b9050600f5460115482612ccb9190613f1e565b612cd59190613f8f565b60146000828254612ce6919061416b565b92505081905550600f5460105482612cfe9190613f1e565b612d089190613f8f565b60136000828254612d19919061416b565b92505081905550600f5460125482612d319190613f1e565b612d3b9190613f8f565b83612d46919061416b565b9250612e67565b601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612da857506000600b54115b15612e6657612dd56064612dc7600b54896134bb90919063ffffffff16565b61353590919063ffffffff16565b9050600b54600d5482612de89190613f1e565b612df29190613f8f565b60146000828254612e03919061416b565b92505081905550600b54600c5482612e1b9190613f1e565b612e259190613f8f565b60136000828254612e36919061416b565b92505081905550600b54600e5482612e4e9190613f1e565b612e589190613f8f565b83612e63919061416b565b92505b5b6000811115612e7c57612e7b88308361301b565b5b6000831115612e9357612e923061dead8561301b565b5b8086612e9f9190614929565b95505b612ead88888861301b565b50505050505b505050565b6000838311158290612f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef791906139da565b60405180910390fd5b5060008385612f0f9190614929565b9050809150509392505050565b6000808284612f2b919061416b565b905083811015612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f67906149a9565b60405180910390fd5b8091505092915050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361308a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130819061467b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f09061470d565b60405180910390fd5b61310483838361357f565b61316f81604051806060016040528060268152602001614d80602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eb89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613202816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132a19190613bc1565b60405180910390a3505050565b60006132b930610f41565b905060006013546014546132cd919061416b565b90506000808314806132df5750600082145b156132ec575050506134b9565b60146008546132fb9190613f1e565b8311156133145760146008546133119190613f1e565b92505b6000600283601454866133279190613f1e565b6133319190613f8f565b61333b9190613f8f565b90506000613352828661358490919063ffffffff16565b90506000479050613362826135ce565b6000613377824761358490919063ffffffff16565b905060006133a287613394601354856134bb90919063ffffffff16565b61353590919063ffffffff16565b9050600081836133b29190614929565b9050600060148190555060006013819055506000861180156133d45750600081115b15613421576133e3868261380b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613418939291906149c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161346790614a31565b60006040518083038185875af1925050503d80600081146134a4576040519150601f19603f3d011682016040523d82523d6000602084013e6134a9565b606091505b5050809750505050505050505050505b565b60008083036134cd576000905061352f565b600082846134db9190613f1e565b90508284826134ea9190613f8f565b1461352a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352190614ab8565b60405180910390fd5b809150505b92915050565b600061357783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138e7565b905092915050565b505050565b60006135c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612eb8565b905092915050565b6000600267ffffffffffffffff8111156135eb576135ea614ad8565b5b6040519080825280602002602001820160405280156136195781602001602082028036833780820191505090505b509050308160008151811061363157613630614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fa9190614b4b565b8160018151811061370e5761370d614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613773307f000000000000000000000000000000000000000000000000000000000000000084612232565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137d5959493929190614c71565b600060405180830381600087803b1580156137ef57600080fd5b505af1158015613803573d6000803e3d6000fd5b505050505050565b613836307f000000000000000000000000000000000000000000000000000000000000000084612232565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161389d96959493929190614ccb565b60606040518083038185885af11580156138bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138e09190614d2c565b5050505050565b6000808311829061392e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392591906139da565b60405180910390fd5b506000838561393d9190613f8f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613984578082015181840152602081019050613969565b60008484015250505050565b6000601f19601f8301169050919050565b60006139ac8261394a565b6139b68185613955565b93506139c6818560208601613966565b6139cf81613990565b840191505092915050565b600060208201905081810360008301526139f481846139a1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a2c82613a01565b9050919050565b613a3c81613a21565b8114613a4757600080fd5b50565b600081359050613a5981613a33565b92915050565b6000819050919050565b613a7281613a5f565b8114613a7d57600080fd5b50565b600081359050613a8f81613a69565b92915050565b60008060408385031215613aac57613aab6139fc565b5b6000613aba85828601613a4a565b9250506020613acb85828601613a80565b9150509250929050565b60008115159050919050565b613aea81613ad5565b82525050565b6000602082019050613b056000830184613ae1565b92915050565b600060208284031215613b2157613b206139fc565b5b6000613b2f84828501613a4a565b91505092915050565b6000819050919050565b6000613b5d613b58613b5384613a01565b613b38565b613a01565b9050919050565b6000613b6f82613b42565b9050919050565b6000613b8182613b64565b9050919050565b613b9181613b76565b82525050565b6000602082019050613bac6000830184613b88565b92915050565b613bbb81613a5f565b82525050565b6000602082019050613bd66000830184613bb2565b92915050565b600060208284031215613bf257613bf16139fc565b5b6000613c0084828501613a80565b91505092915050565b600080600060608486031215613c2257613c216139fc565b5b6000613c3086828701613a4a565b9350506020613c4186828701613a4a565b9250506040613c5286828701613a80565b9150509250925092565b600060ff82169050919050565b613c7281613c5c565b82525050565b6000602082019050613c8d6000830184613c69565b92915050565b613c9c81613a21565b82525050565b6000602082019050613cb76000830184613c93565b92915050565b613cc681613ad5565b8114613cd157600080fd5b50565b600081359050613ce381613cbd565b92915050565b60008060408385031215613d0057613cff6139fc565b5b6000613d0e85828601613a4a565b9250506020613d1f85828601613cd4565b9150509250929050565b60008060408385031215613d4057613d3f6139fc565b5b6000613d4e85828601613a4a565b9250506020613d5f85828601613a4a565b9150509250929050565b600060208284031215613d7f57613d7e6139fc565b5b6000613d8d84828501613cd4565b91505092915050565b60008060008060008060c08789031215613db357613db26139fc565b5b6000613dc189828a01613a80565b9650506020613dd289828a01613a80565b9550506040613de389828a01613a80565b9450506060613df489828a01613a80565b9350506080613e0589828a01613a80565b92505060a0613e1689828a01613a80565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6a57607f821691505b602082108103613e7d57613e7c613e23565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613eb9602083613955565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f2982613a5f565b9150613f3483613a5f565b9250828202613f4281613a5f565b91508282048414831517613f5957613f58613eef565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f9a82613a5f565b9150613fa583613a5f565b925082613fb557613fb4613f60565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061401c602f83613955565b915061402782613fc0565b604082019050919050565b6000602082019050818103600083015261404b8161400f565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b6000614088601c83613955565b915061409382614052565b602082019050919050565b600060208201905081810360008301526140b78161407b565b9050919050565b6000815190506140cd81613a69565b92915050565b6000602082840312156140e9576140e86139fc565b5b60006140f7848285016140be565b91505092915050565b60006040820190506141156000830185613c93565b6141226020830184613bb2565b9392505050565b60008151905061413881613cbd565b92915050565b600060208284031215614154576141536139fc565b5b600061416284828501614129565b91505092915050565b600061417682613a5f565b915061418183613a5f565b925082820190508082111561419957614198613eef565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006141d5601d83613955565b91506141e08261419f565b602082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614267603983613955565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006142f9602483613955565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061438b603583613955565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061441d603483613955565b9150614428826143c1565b604082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144af602683613955565b91506144ba82614453565b604082019050919050565b600060208201905081810360008301526144de816144a2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614541602483613955565b915061454c826144e5565b604082019050919050565b6000602082019050818103600083015261457081614534565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145d3602283613955565b91506145de82614577565b604082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614665602583613955565b915061467082614609565b604082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146f7602383613955565b91506147028261469b565b604082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614763601683613955565b915061476e8261472d565b602082019050919050565b6000602082019050818103600083015261479281614756565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147f5603583613955565b915061480082614799565b604082019050919050565b60006020820190508181036000830152614824816147e8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614861601383613955565b915061486c8261482b565b602082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148f3603683613955565b91506148fe82614897565b604082019050919050565b60006020820190508181036000830152614922816148e6565b9050919050565b600061493482613a5f565b915061493f83613a5f565b925082820390508181111561495757614956613eef565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614993601b83613955565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b60006060820190506149de6000830186613bb2565b6149eb6020830185613bb2565b6149f86040830184613bb2565b949350505050565b600081905092915050565b50565b6000614a1b600083614a00565b9150614a2682614a0b565b600082019050919050565b6000614a3c82614a0e565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa2602183613955565b9150614aad82614a46565b604082019050919050565b60006020820190508181036000830152614ad181614a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b4581613a33565b92915050565b600060208284031215614b6157614b606139fc565b5b6000614b6f84828501614b36565b91505092915050565b6000819050919050565b6000614b9d614b98614b9384614b78565b613b38565b613a5f565b9050919050565b614bad81614b82565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614be881613a21565b82525050565b6000614bfa8383614bdf565b60208301905092915050565b6000602082019050919050565b6000614c1e82614bb3565b614c288185614bbe565b9350614c3383614bcf565b8060005b83811015614c64578151614c4b8882614bee565b9750614c5683614c06565b925050600181019050614c37565b5085935050505092915050565b600060a082019050614c866000830188613bb2565b614c936020830187614ba4565b8181036040830152614ca58186614c13565b9050614cb46060830185613c93565b614cc16080830184613bb2565b9695505050505050565b600060c082019050614ce06000830189613c93565b614ced6020830188613bb2565b614cfa6040830187614ba4565b614d076060830186614ba4565b614d146080830185613c93565b614d2160a0830184613bb2565b979650505050505050565b600080600060608486031215614d4557614d446139fc565b5b6000614d53868287016140be565b9350506020614d64868287016140be565b9250506040614d75868287016140be565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206efe9222e95253ff88c10ac710e7455538680307b442b20f2602147a5d30f75964736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102815760003560e01c8063921369131161014f578063c0246668116100c1578063e2f456051161007a578063e2f45605146109e5578063e71dc3f514610a10578063f11a24d314610a3b578063f2fde38b14610a66578063f637434214610a8f578063f8b45b0514610aba57610288565b8063c0246668146108c3578063c18bc195146108ec578063c8c8ebe414610915578063d257b34f14610940578063d85ba0631461097d578063dd62ed3e146109a857610288565b8063a457c2d711610113578063a457c2d71461078d578063a9059cbb146107ca578063aacebbe314610807578063adb873bd14610830578063b62496f51461085b578063bbc0c7421461089857610288565b806392136913146106bc578063924de9b7146106e757806395d89b4114610710578063992c58e41461073b5780639a7a23d61461076457610288565b806349bd5a5e116101f35780637571336a116101ac5780637571336a146105be57806375f0a874146105e75780637bce5a04146106125780638366e79a1461063d5780638a8c523c1461067a5780638da5cb5b1461069157610288565b806349bd5a5e146104ac5780634fbee193146104d75780636a486a8e146105145780636ddd17131461053f57806370a082311461056a578063715018a6146105a757610288565b80631a8145bb116102455780631a8145bb146103885780631f3fed8f146103b3578063203e727e146103de57806323b872dd14610407578063313ce56714610444578063395093511461046f57610288565b806306fdde031461028d578063095ea7b3146102b857806310d5de53146102f55780631694505e1461033257806318160ddd1461035d57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610ae5565b6040516102af91906139da565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da9190613a95565b610b77565b6040516102ec9190613af0565b60405180910390f35b34801561030157600080fd5b5061031c60048036038101906103179190613b0b565b610b95565b6040516103299190613af0565b60405180910390f35b34801561033e57600080fd5b50610347610bb5565b6040516103549190613b97565b60405180910390f35b34801561036957600080fd5b50610372610bd9565b60405161037f9190613bc1565b60405180910390f35b34801561039457600080fd5b5061039d610be3565b6040516103aa9190613bc1565b60405180910390f35b3480156103bf57600080fd5b506103c8610be9565b6040516103d59190613bc1565b60405180910390f35b3480156103ea57600080fd5b5061040560048036038101906104009190613bdc565b610bef565b005b34801561041357600080fd5b5061042e60048036038101906104299190613c09565b610d19565b60405161043b9190613af0565b60405180910390f35b34801561045057600080fd5b50610459610df2565b6040516104669190613c78565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613a95565b610dfb565b6040516104a39190613af0565b60405180910390f35b3480156104b857600080fd5b506104c1610eae565b6040516104ce9190613ca2565b60405180910390f35b3480156104e357600080fd5b506104fe60048036038101906104f99190613b0b565b610ed2565b60405161050b9190613af0565b60405180910390f35b34801561052057600080fd5b50610529610f28565b6040516105369190613bc1565b60405180910390f35b34801561054b57600080fd5b50610554610f2e565b6040516105619190613af0565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190613b0b565b610f41565b60405161059e9190613bc1565b60405180910390f35b3480156105b357600080fd5b506105bc610f89565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613ce9565b6110e1565b005b3480156105f357600080fd5b506105fc6111d3565b6040516106099190613ca2565b60405180910390f35b34801561061e57600080fd5b506106276111f9565b6040516106349190613bc1565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613d29565b6111ff565b6040516106719190613af0565b60405180910390f35b34801561068657600080fd5b5061068f611444565b005b34801561069d57600080fd5b506106a661151a565b6040516106b39190613ca2565b60405180910390f35b3480156106c857600080fd5b506106d1611544565b6040516106de9190613bc1565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613d69565b61154a565b005b34801561071c57600080fd5b506107256115fe565b60405161073291906139da565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613d96565b611690565b005b34801561077057600080fd5b5061078b60048036038101906107869190613ce9565b61182b565b005b34801561079957600080fd5b506107b460048036038101906107af9190613a95565b61195e565b6040516107c19190613af0565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613a95565b611a2b565b6040516107fe9190613af0565b60405180910390f35b34801561081357600080fd5b5061082e60048036038101906108299190613b0b565b611a49565b005b34801561083c57600080fd5b50610845611ba0565b6040516108529190613bc1565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613b0b565b611ba6565b60405161088f9190613af0565b60405180910390f35b3480156108a457600080fd5b506108ad611bc6565b6040516108ba9190613af0565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e59190613ce9565b611bd9565b005b3480156108f857600080fd5b50610913600480360381019061090e9190613bdc565b611d19565b005b34801561092157600080fd5b5061092a611e43565b6040516109379190613bc1565b60405180910390f35b34801561094c57600080fd5b5061096760048036038101906109629190613bdc565b611e49565b6040516109749190613af0565b60405180910390f35b34801561098957600080fd5b50610992611fb9565b60405161099f9190613bc1565b60405180910390f35b3480156109b457600080fd5b506109cf60048036038101906109ca9190613d29565b611fbf565b6040516109dc9190613bc1565b60405180910390f35b3480156109f157600080fd5b506109fa612046565b604051610a079190613bc1565b60405180910390f35b348015610a1c57600080fd5b50610a2561204c565b604051610a329190613bc1565b60405180910390f35b348015610a4757600080fd5b50610a50612052565b604051610a5d9190613bc1565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190613b0b565b612058565b005b348015610a9b57600080fd5b50610aa461221e565b604051610ab19190613bc1565b60405180910390f35b348015610ac657600080fd5b50610acf612224565b604051610adc9190613bc1565b60405180910390f35b606060038054610af490613e52565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2090613e52565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b6000610b8b610b8461222a565b8484612232565b6001905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60145481565b60135481565b610bf761222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d90613ecf565b60405180910390fd5b670de0b6b3a76400006103e86005610c9c610bd9565b610ca69190613f1e565b610cb09190613f8f565b610cba9190613f8f565b811015610cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf390614032565b60405180910390fd5b670de0b6b3a764000081610d109190613f1e565b60078190555050565b6000610d268484846123fb565b610de784610d3261222a565b610de285604051806060016040528060288152602001614da660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9861222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eb89092919063ffffffff16565b612232565b600190509392505050565b60006012905090565b6000610ea4610e0861222a565b84610e9f8560016000610e1961222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c90919063ffffffff16565b612232565b6001905092915050565b7f00000000000000000000000032d4ee0a5cb74a63cbb4caa27cef9453253199cd81565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b600a60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101790613ecf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110e961222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116f90613ecf565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600061120961222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f90613ecf565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd9061409e565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113419190613ca2565b602060405180830381865afa15801561135e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138291906140d3565b90508373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016113bf929190614100565b6020604051808303816000875af11580156113de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611402919061413e565b91507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e4388482604051611435929190614100565b60405180910390a15092915050565b61144c61222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613ecf565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff02191690831515021790555043601581905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61155261222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890613ecf565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b60606004805461160d90613e52565b80601f016020809104026020016040519081016040528092919081815260200182805461163990613e52565b80156116865780601f1061165b57610100808354040283529160200191611686565b820191906000526020600020905b81548152906001019060200180831161166957829003601f168201915b5050505050905090565b61169861222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90613ecf565b60405180910390fd5b85600c8190555084600d8190555083600e81905550600e54600d54600c5461174f919061416b565b611759919061416b565b600b81905550826010819055508160118190555080601281905550601254601154601054611787919061416b565b611791919061416b565b600f819055506019600b5411156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d4906141eb565b60405180910390fd5b6019600f541115611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a906141eb565b60405180910390fd5b505050505050565b61183361222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b990613ecf565b60405180910390fd5b7f00000000000000000000000032d4ee0a5cb74a63cbb4caa27cef9453253199cd73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611950576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119479061427d565b60405180910390fd5b61195a8282612f7a565b5050565b6000611a2161196b61222a565b84611a1c85604051806060016040528060258152602001614dce602591396001600061199561222a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eb89092919063ffffffff16565b612232565b6001905092915050565b6000611a3f611a3861222a565b84846123fb565b6001905092915050565b611a5161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad790613ecf565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b60186020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900460ff1681565b611be161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6790613ecf565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d0d9190613af0565b60405180910390a25050565b611d2161222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da790613ecf565b60405180910390fd5b670de0b6b3a76400006103e86005611dc6610bd9565b611dd09190613f1e565b611dda9190613f8f565b611de49190613f8f565b811015611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d9061430f565b60405180910390fd5b670de0b6b3a764000081611e3a9190613f1e565b60098190555050565b60075481565b6000611e5361222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed990613ecf565b60405180910390fd5b620186a06001611ef0610bd9565b611efa9190613f1e565b611f049190613f8f565b821015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d906143a1565b60405180910390fd5b6103e86005611f53610bd9565b611f5d9190613f1e565b611f679190613f8f565b821115611fa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa090614433565b60405180910390fd5b8160088190555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600e5481565b600d5481565b61206061222a565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e690613ecf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361215e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612155906144c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b60095481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229890614557565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612307906145e9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123ee9190613bc1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361246a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124619061467b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d09061470d565b60405180910390fd5b600081036124f2576124ed8383600061301b565b612eb3565b6124fa61151a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612568575061253861151a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125a15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125db575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156125f45750600560149054906101000a900460ff16155b156129d757600a60009054906101000a900460ff166126ee57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806126ae5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e490614779565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127915750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612838576007548111156127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d29061480b565b60405180910390fd5b6009546127e783610f41565b826127f2919061416b565b1115612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614877565b60405180910390fd5b6129d6565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128db5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561292a57600754811115612925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291c90614909565b60405180910390fd5b6129d5565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166129d45760095461298783610f41565b82612992919061416b565b11156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca90614877565b60405180910390fd5b5b5b5b5b60006129e230610f41565b9050600060085482101590506000818015612a095750600a60019054906101000a900460ff165b8015612a225750600560149054906101000a900460ff16155b8015612a785750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ace5750601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b245750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b68576001600560146101000a81548160ff021916908315150217905550612b4c6132ae565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c1e5750601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c2857600090505b60008115612ea257601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c8b57506000600f54115b15612d4d57612cb86064612caa600f54896134bb90919063ffffffff16565b61353590919063ffffffff16565b9050600f5460115482612ccb9190613f1e565b612cd59190613f8f565b60146000828254612ce6919061416b565b92505081905550600f5460105482612cfe9190613f1e565b612d089190613f8f565b60136000828254612d19919061416b565b92505081905550600f5460125482612d319190613f1e565b612d3b9190613f8f565b83612d46919061416b565b9250612e67565b601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612da857506000600b54115b15612e6657612dd56064612dc7600b54896134bb90919063ffffffff16565b61353590919063ffffffff16565b9050600b54600d5482612de89190613f1e565b612df29190613f8f565b60146000828254612e03919061416b565b92505081905550600b54600c5482612e1b9190613f1e565b612e259190613f8f565b60136000828254612e36919061416b565b92505081905550600b54600e5482612e4e9190613f1e565b612e589190613f8f565b83612e63919061416b565b92505b5b6000811115612e7c57612e7b88308361301b565b5b6000831115612e9357612e923061dead8561301b565b5b8086612e9f9190614929565b95505b612ead88888861301b565b50505050505b505050565b6000838311158290612f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef791906139da565b60405180910390fd5b5060008385612f0f9190614929565b9050809150509392505050565b6000808284612f2b919061416b565b905083811015612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f67906149a9565b60405180910390fd5b8091505092915050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361308a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130819061467b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f09061470d565b60405180910390fd5b61310483838361357f565b61316f81604051806060016040528060268152602001614d80602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eb89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613202816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132a19190613bc1565b60405180910390a3505050565b60006132b930610f41565b905060006013546014546132cd919061416b565b90506000808314806132df5750600082145b156132ec575050506134b9565b60146008546132fb9190613f1e565b8311156133145760146008546133119190613f1e565b92505b6000600283601454866133279190613f1e565b6133319190613f8f565b61333b9190613f8f565b90506000613352828661358490919063ffffffff16565b90506000479050613362826135ce565b6000613377824761358490919063ffffffff16565b905060006133a287613394601354856134bb90919063ffffffff16565b61353590919063ffffffff16565b9050600081836133b29190614929565b9050600060148190555060006013819055506000861180156133d45750600081115b15613421576133e3868261380b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601454604051613418939291906149c9565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161346790614a31565b60006040518083038185875af1925050503d80600081146134a4576040519150601f19603f3d011682016040523d82523d6000602084013e6134a9565b606091505b5050809750505050505050505050505b565b60008083036134cd576000905061352f565b600082846134db9190613f1e565b90508284826134ea9190613f8f565b1461352a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352190614ab8565b60405180910390fd5b809150505b92915050565b600061357783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138e7565b905092915050565b505050565b60006135c683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612eb8565b905092915050565b6000600267ffffffffffffffff8111156135eb576135ea614ad8565b5b6040519080825280602002602001820160405280156136195781602001602082028036833780820191505090505b509050308160008151811061363157613630614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136fa9190614b4b565b8160018151811061370e5761370d614b07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613773307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612232565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016137d5959493929190614c71565b600060405180830381600087803b1580156137ef57600080fd5b505af1158015613803573d6000803e3d6000fd5b505050505050565b613836307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612232565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161389d96959493929190614ccb565b60606040518083038185885af11580156138bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138e09190614d2c565b5050505050565b6000808311829061392e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392591906139da565b60405180910390fd5b506000838561393d9190613f8f565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613984578082015181840152602081019050613969565b60008484015250505050565b6000601f19601f8301169050919050565b60006139ac8261394a565b6139b68185613955565b93506139c6818560208601613966565b6139cf81613990565b840191505092915050565b600060208201905081810360008301526139f481846139a1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a2c82613a01565b9050919050565b613a3c81613a21565b8114613a4757600080fd5b50565b600081359050613a5981613a33565b92915050565b6000819050919050565b613a7281613a5f565b8114613a7d57600080fd5b50565b600081359050613a8f81613a69565b92915050565b60008060408385031215613aac57613aab6139fc565b5b6000613aba85828601613a4a565b9250506020613acb85828601613a80565b9150509250929050565b60008115159050919050565b613aea81613ad5565b82525050565b6000602082019050613b056000830184613ae1565b92915050565b600060208284031215613b2157613b206139fc565b5b6000613b2f84828501613a4a565b91505092915050565b6000819050919050565b6000613b5d613b58613b5384613a01565b613b38565b613a01565b9050919050565b6000613b6f82613b42565b9050919050565b6000613b8182613b64565b9050919050565b613b9181613b76565b82525050565b6000602082019050613bac6000830184613b88565b92915050565b613bbb81613a5f565b82525050565b6000602082019050613bd66000830184613bb2565b92915050565b600060208284031215613bf257613bf16139fc565b5b6000613c0084828501613a80565b91505092915050565b600080600060608486031215613c2257613c216139fc565b5b6000613c3086828701613a4a565b9350506020613c4186828701613a4a565b9250506040613c5286828701613a80565b9150509250925092565b600060ff82169050919050565b613c7281613c5c565b82525050565b6000602082019050613c8d6000830184613c69565b92915050565b613c9c81613a21565b82525050565b6000602082019050613cb76000830184613c93565b92915050565b613cc681613ad5565b8114613cd157600080fd5b50565b600081359050613ce381613cbd565b92915050565b60008060408385031215613d0057613cff6139fc565b5b6000613d0e85828601613a4a565b9250506020613d1f85828601613cd4565b9150509250929050565b60008060408385031215613d4057613d3f6139fc565b5b6000613d4e85828601613a4a565b9250506020613d5f85828601613a4a565b9150509250929050565b600060208284031215613d7f57613d7e6139fc565b5b6000613d8d84828501613cd4565b91505092915050565b60008060008060008060c08789031215613db357613db26139fc565b5b6000613dc189828a01613a80565b9650506020613dd289828a01613a80565b9550506040613de389828a01613a80565b9450506060613df489828a01613a80565b9350506080613e0589828a01613a80565b92505060a0613e1689828a01613a80565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e6a57607f821691505b602082108103613e7d57613e7c613e23565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613eb9602083613955565b9150613ec482613e83565b602082019050919050565b60006020820190508181036000830152613ee881613eac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f2982613a5f565b9150613f3483613a5f565b9250828202613f4281613a5f565b91508282048414831517613f5957613f58613eef565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f9a82613a5f565b9150613fa583613a5f565b925082613fb557613fb4613f60565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b600061401c602f83613955565b915061402782613fc0565b604082019050919050565b6000602082019050818103600083015261404b8161400f565b9050919050565b7f43616e2774207769746864726177206e617469766520746f6b656e7300000000600082015250565b6000614088601c83613955565b915061409382614052565b602082019050919050565b600060208201905081810360008301526140b78161407b565b9050919050565b6000815190506140cd81613a69565b92915050565b6000602082840312156140e9576140e86139fc565b5b60006140f7848285016140be565b91505092915050565b60006040820190506141156000830185613c93565b6141226020830184613bb2565b9392505050565b60008151905061413881613cbd565b92915050565b600060208284031215614154576141536139fc565b5b600061416284828501614129565b91505092915050565b600061417682613a5f565b915061418183613a5f565b925082820190508082111561419957614198613eef565b5b92915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006141d5601d83613955565b91506141e08261419f565b602082019050919050565b60006020820190508181036000830152614204816141c8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614267603983613955565b91506142728261420b565b604082019050919050565b600060208201905081810360008301526142968161425a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006142f9602483613955565b91506143048261429d565b604082019050919050565b60006020820190508181036000830152614328816142ec565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061438b603583613955565b91506143968261432f565b604082019050919050565b600060208201905081810360008301526143ba8161437e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061441d603483613955565b9150614428826143c1565b604082019050919050565b6000602082019050818103600083015261444c81614410565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144af602683613955565b91506144ba82614453565b604082019050919050565b600060208201905081810360008301526144de816144a2565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614541602483613955565b915061454c826144e5565b604082019050919050565b6000602082019050818103600083015261457081614534565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145d3602283613955565b91506145de82614577565b604082019050919050565b60006020820190508181036000830152614602816145c6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614665602583613955565b915061467082614609565b604082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146f7602383613955565b91506147028261469b565b604082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614763601683613955565b915061476e8261472d565b602082019050919050565b6000602082019050818103600083015261479281614756565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006147f5603583613955565b915061480082614799565b604082019050919050565b60006020820190508181036000830152614824816147e8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614861601383613955565b915061486c8261482b565b602082019050919050565b6000602082019050818103600083015261489081614854565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006148f3603683613955565b91506148fe82614897565b604082019050919050565b60006020820190508181036000830152614922816148e6565b9050919050565b600061493482613a5f565b915061493f83613a5f565b925082820390508181111561495757614956613eef565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614993601b83613955565b915061499e8261495d565b602082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b60006060820190506149de6000830186613bb2565b6149eb6020830185613bb2565b6149f86040830184613bb2565b949350505050565b600081905092915050565b50565b6000614a1b600083614a00565b9150614a2682614a0b565b600082019050919050565b6000614a3c82614a0e565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614aa2602183613955565b9150614aad82614a46565b604082019050919050565b60006020820190508181036000830152614ad181614a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b4581613a33565b92915050565b600060208284031215614b6157614b606139fc565b5b6000614b6f84828501614b36565b91505092915050565b6000819050919050565b6000614b9d614b98614b9384614b78565b613b38565b613a5f565b9050919050565b614bad81614b82565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614be881613a21565b82525050565b6000614bfa8383614bdf565b60208301905092915050565b6000602082019050919050565b6000614c1e82614bb3565b614c288185614bbe565b9350614c3383614bcf565b8060005b83811015614c64578151614c4b8882614bee565b9750614c5683614c06565b925050600181019050614c37565b5085935050505092915050565b600060a082019050614c866000830188613bb2565b614c936020830187614ba4565b8181036040830152614ca58186614c13565b9050614cb46060830185613c93565b614cc16080830184613bb2565b9695505050505050565b600060c082019050614ce06000830189613c93565b614ced6020830188613bb2565b614cfa6040830187614ba4565b614d076060830186614ba4565b614d146080830185613c93565b614d2160a0830184613bb2565b979650505050505050565b600080600060608486031215614d4557614d446139fc565b5b6000614d53868287016140be565b9350506020614d64868287016140be565b9250506040614d75868287016140be565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206efe9222e95253ff88c10ac710e7455538680307b442b20f2602147a5d30f75964736f6c63430008130033

Deployed Bytecode Sourcemap

31786:14014:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9884:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12058:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32832:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31865:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11007:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32580:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32540;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36656:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12710:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10848:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13475:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31923:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39490:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32393:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32206:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11179:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24386:148;;;;;;;;;;;;;:::i;:::-;;37123:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32002:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32284;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39093:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36038:148;;;;;;;;;;;;;:::i;:::-;;23742:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32428:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37364:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10104:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37474:743;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38425:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14197:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11520:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38877:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32504:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33055:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32166:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38231:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36899:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32048:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36261:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32250:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11759:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32090:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32358:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24690:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32466:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32130:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9884:100;9938:13;9971:5;9964:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9884:100;:::o;12058:169::-;12141:4;12158:39;12167:12;:10;:12::i;:::-;12181:7;12190:6;12158:8;:39::i;:::-;12215:4;12208:11;;12058:169;;;;:::o;32832:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;31865:51::-;;;:::o;11007:108::-;11068:7;11095:12;;11088:19;;11007:108;:::o;32580:33::-;;;;:::o;32540:::-;;;;:::o;36656:234::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36775:4:::1;36769;36765:1;36749:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36748:31;;;;:::i;:::-;36738:6;:41;;36730:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;36875:6;36865;:17;;;;:::i;:::-;36842:20;:40;;;;36656:234:::0;:::o;12710:355::-;12850:4;12867:36;12877:6;12885:9;12896:6;12867:9;:36::i;:::-;12914:121;12923:6;12931:12;:10;:12::i;:::-;12945:89;12983:6;12945:89;;;;;;;;;;;;;;;;;:11;:19;12957:6;12945:19;;;;;;;;;;;;;;;:33;12965:12;:10;:12::i;:::-;12945:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12914:8;:121::i;:::-;13053:4;13046:11;;12710:355;;;;;:::o;10848:93::-;10906:5;10931:2;10924:9;;10848:93;:::o;13475:218::-;13563:4;13580:83;13589:12;:10;:12::i;:::-;13603:7;13612:50;13651:10;13612:11;:25;13624:12;:10;:12::i;:::-;13612:25;;;;;;;;;;;;;;;:34;13638:7;13612:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;13580:8;:83::i;:::-;13681:4;13674:11;;13475:218;;;;:::o;31923:38::-;;;:::o;39490:125::-;39555:4;39579:19;:28;39599:7;39579:28;;;;;;;;;;;;;;;;;;;;;;;;;39572:35;;39490:125;;;:::o;32393:28::-;;;;:::o;32206:31::-;;;;;;;;;;;;;:::o;11179:127::-;11253:7;11280:9;:18;11290:7;11280:18;;;;;;;;;;;;;;;;11273:25;;11179:127;;;:::o;24386:148::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24493:1:::1;24456:40;;24477:6;;;;;;;;;;;24456:40;;;;;;;;;;;;24524:1;24507:6;;:19;;;;;;;;;;;;;;;;;;24386:148::o:0;37123:144::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37255:4:::1;37213:31;:39;37245:6;37213:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37123:144:::0;;:::o;32002:30::-;;;;;;;;;;;;;:::o;32284:::-;;;;:::o;39093:386::-;39180:10;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39229:4:::1;39211:23;;:6;:23;;::::0;39203:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39278:24;39312:6;39305:24;;;39338:4;39305:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39278:66;;39370:6;39363:23;;;39387:3;39392:16;39363:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39355:54;;39425:46;39446:6;39454:16;39425:46;;;;;;;:::i;:::-;;;;;;;;39192:287;39093:386:::0;;;;:::o;36038:148::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36109:4:::1;36093:13;;:20;;;;;;;;;;;;;;;;;;36138:4;36124:11;;:18;;;;;;;;;;;;;;;;;;36166:12;36153:10;:25;;;;36038:148::o:0;23742:79::-;23780:7;23807:6;;;;;;;;;;;23800:13;;23742:79;:::o;32428:31::-;;;;:::o;37364:101::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37450:7:::1;37436:11;;:21;;;;;;;;;;;;;;;;;;37364:101:::0;:::o;10104:104::-;10160:13;10193:7;10186:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10104:104;:::o;37474:743::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37691:16:::1;37673:15;:34;;;;37736:16;37718:15;:34;;;;37776:11;37763:10;:24;;;;37849:10;;37831:15;;37813;;:33;;;;:::i;:::-;:46;;;;:::i;:::-;37798:12;:61;;;;37889:17;37870:16;:36;;;;37936:17;37917:16;:36;;;;37978:12;37964:11;:26;;;;38055:11;;38036:16;;38017;;:35;;;;:::i;:::-;:49;;;;:::i;:::-;38001:13;:65;;;;38101:2;38085:12;;:18;;38077:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38173:2;38156:13;;:19;;38148:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37474:743:::0;;;;;;:::o;38425:245::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38532:13:::1;38524:21;;:4;:21;;::::0;38516:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38621:41;38650:4;38656:5;38621:28;:41::i;:::-;38425:245:::0;;:::o;14197:269::-;14290:4;14307:129;14316:12;:10;:12::i;:::-;14330:7;14339:96;14378:15;14339:96;;;;;;;;;;;;;;;;;:11;:25;14351:12;:10;:12::i;:::-;14339:25;;;;;;;;;;;;;;;:34;14365:7;14339:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14307:8;:129::i;:::-;14454:4;14447:11;;14197:269;;;;:::o;11520:175::-;11606:4;11623:42;11633:12;:10;:12::i;:::-;11647:9;11658:6;11623:9;:42::i;:::-;11683:4;11676:11;;11520:175;;;;:::o;38877:208::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39014:15:::1;;;;;;;;;;;38971:59;;38994:18;38971:59;;;;;;;;;;;;39059:18;39041:15;;:36;;;;;;;;;;;;;;;;;;38877:208:::0;:::o;32504:26::-;;;;:::o;33055:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;32166:33::-;;;;;;;;;;;;;:::o;38231:182::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38347:8:::1;38316:19;:28;38336:7;38316:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38387:7;38371:34;;;38396:8;38371:34;;;;;;:::i;:::-;;;;;;;;38231:182:::0;;:::o;36899:215::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37021:4:::1;37015;37011:1;36995:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36994:31;;;;:::i;:::-;36984:6;:41;;36976:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;37099:6;37089;:17;;;;:::i;:::-;37077:9;:29;;;;36899:215:::0;:::o;32048:35::-;;;;:::o;36261:386::-;36342:4;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36399:6:::1;36395:1;36379:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;36366:9;:39;;36358:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;36515:4;36511:1;36495:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36482:9;:37;;36474:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36608:9;36587:18;:30;;;;36635:4;36628:11;;36261:386:::0;;;:::o;32250:27::-;;;;:::o;11759:151::-;11848:7;11875:11;:18;11887:5;11875:18;;;;;;;;;;;;;;;:27;11894:7;11875:27;;;;;;;;;;;;;;;;11868:34;;11759:151;;;;:::o;32090:33::-;;;;:::o;32358:25::-;;;;:::o;32321:30::-;;;;:::o;24690:244::-;23965:12;:10;:12::i;:::-;23955:22;;:6;;;;;;;;;;;:22;;;23947:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24799:1:::1;24779:22;;:8;:22;;::::0;24771:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24889:8;24860:38;;24881:6;;;;;;;;;;;24860:38;;;;;;;;;;;;24918:8;24909:6;;:17;;;;;;;;;;;;;;;;;;24690:244:::0;:::o;32466:31::-;;;;:::o;32130:24::-;;;;:::o;2575:98::-;2628:7;2655:10;2648:17;;2575:98;:::o;17393:381::-;17546:1;17529:19;;:5;:19;;;17521:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17627:1;17608:21;;:7;:21;;;17600:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17712:6;17682:11;:18;17694:5;17682:18;;;;;;;;;;;;;;;:27;17701:7;17682:27;;;;;;;;;;;;;;;:36;;;;17750:7;17734:32;;17743:5;17734:32;;;17759:6;17734:32;;;;;;:::i;:::-;;;;;;;;17393:381;;;:::o;39675:3593::-;39823:1;39807:18;;:4;:18;;;39799:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39900:1;39886:16;;:2;:16;;;39878:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39967:1;39957:6;:11;39954:92;;39985:28;40001:4;40007:2;40011:1;39985:15;:28::i;:::-;40028:7;;39954:92;40093:7;:5;:7::i;:::-;40085:15;;:4;:15;;;;:49;;;;;40127:7;:5;:7::i;:::-;40121:13;;:2;:13;;;;40085:49;:86;;;;;40169:1;40155:16;;:2;:16;;;;40085:86;:128;;;;;40206:6;40192:21;;:2;:21;;;;40085:128;:158;;;;;40235:8;;;;;;;;;;;40234:9;40085:158;40063:1189;;;40281:13;;;;;;;;;;;40277:148;;40326:19;:25;40346:4;40326:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40355:19;:23;40375:2;40355:23;;;;;;;;;;;;;;;;;;;;;;;;;40326:52;40318:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40277:148;40478:25;:31;40504:4;40478:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40514:31;:35;40546:2;40514:35;;;;;;;;;;;;;;;;;;;;;;;;;40513:36;40478:71;40474:763;;;40596:20;;40586:6;:30;;40578:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40735:9;;40718:13;40728:2;40718:9;:13::i;:::-;40709:6;:22;;;;:::i;:::-;:35;;40701:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40474:763;;;40847:25;:29;40873:2;40847:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40881:31;:37;40913:4;40881:37;;;;;;;;;;;;;;;;;;;;;;;;;40880:38;40847:71;40843:394;;;40965:20;;40955:6;:30;;40947:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40843:394;;;41091:31;:35;41123:2;41091:35;;;;;;;;;;;;;;;;;;;;;;;;;41087:150;;41184:9;;41167:13;41177:2;41167:9;:13::i;:::-;41158:6;:22;;;;:::i;:::-;:35;;41150:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41087:150;40843:394;40474:763;40063:1189;41273:28;41304:24;41322:4;41304:9;:24::i;:::-;41273:55;;41339:12;41378:18;;41354:20;:42;;41339:57;;41407:21;41459:7;:35;;;;;41483:11;;;;;;;;;;;41459:35;:61;;;;;41512:8;;;;;;;;;;;41511:9;41459:61;:110;;;;;41538:25;:31;41564:4;41538:31;;;;;;;;;;;;;;;;;;;;;;;;;41537:32;41459:110;:153;;;;;41587:19;:25;41607:4;41587:25;;;;;;;;;;;;;;;;;;;;;;;;;41586:26;41459:153;:194;;;;;41630:19;:23;41650:2;41630:23;;;;;;;;;;;;;;;;;;;;;;;;;41629:24;41459:194;41441:328;;;41691:4;41680:8;;:15;;;;;;;;;;;;;;;;;;41713:10;:8;:10::i;:::-;41752:5;41741:8;;:16;;;;;;;;;;;;;;;;;;41441:328;41782:12;41798:8;;;;;;;;;;;41797:9;41782:24;;41908:19;:25;41928:4;41908:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41937:19;:23;41957:2;41937:23;;;;;;;;;;;;;;;;;;;;;;;;;41908:52;41905:99;;;41987:5;41977:15;;41905:99;42017:12;42121:7;42118:1096;;;42172:25;:29;42198:2;42172:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42221:1;42205:13;;:17;42172:50;42168:769;;;42249:34;42279:3;42249:25;42260:13;;42249:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42242:41;;42350:13;;42331:16;;42324:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42302:18;;:61;;;;;;;:::i;:::-;;;;;;;;42430:13;;42411:16;;42404:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42382:18;;:61;;;;;;;:::i;:::-;;;;;;;;42500:13;;42486:11;;42479:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;42462:51;;;;;:::i;:::-;;;42168:769;;;42580:25;:31;42606:4;42580:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;42630:1;42615:12;;:16;42580:51;42577:360;;;42659:33;42688:3;42659:24;42670:12;;42659:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;42652:40;;42758:12;;42740:15;;42733:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42711:18;;:59;;;;;;;:::i;:::-;;;;;;;;42836:12;;42818:15;;42811:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;42789:18;;:59;;;;;;;:::i;:::-;;;;;;;;42904:12;;42891:10;;42884:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;42867:49;;;;;:::i;:::-;;;42577:360;42168:769;42963:1;42956:4;:8;42953:93;;;42988:42;43004:4;43018;43025;42988:15;:42::i;:::-;42953:93;43081:1;43065:13;:17;43062:120;;;43104:62;43128:4;43143:6;43152:13;43104:15;:62::i;:::-;43062:120;43208:4;43198:14;;;;;:::i;:::-;;;42118:1096;43227:33;43243:4;43249:2;43253:6;43227:15;:33::i;:::-;39788:3480;;;;;39675:3593;;;;:::o;19680:193::-;19766:7;19799:1;19794;:6;;19802:12;19786:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19826:9;19842:1;19838;:5;;;;:::i;:::-;19826:17;;19864:1;19857:8;;;19680:193;;;;;:::o;18774:182::-;18832:7;18852:9;18868:1;18864;:5;;;;:::i;:::-;18852:17;;18893:1;18888;:6;;18880:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18947:1;18940:8;;;18774:182;;;;:::o;38679:189::-;38796:5;38762:25;:31;38788:4;38762:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38854:5;38820:40;;38848:4;38820:40;;;;;;;;;;;;38679:189;;:::o;14957:575::-;15115:1;15097:20;;:6;:20;;;15089:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15199:1;15178:23;;:9;:23;;;15170:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15255:47;15276:6;15284:9;15295:6;15255:20;:47::i;:::-;15336:71;15358:6;15336:71;;;;;;;;;;;;;;;;;:9;:17;15346:6;15336:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;15316:9;:17;15326:6;15316:17;;;;;;;;;;;;;;;:91;;;;15441:32;15466:6;15441:9;:20;15451:9;15441:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;15418:9;:20;15428:9;15418:20;;;;;;;;;;;;;;;:55;;;;15506:9;15489:35;;15498:6;15489:35;;;15517:6;15489:35;;;;;;:::i;:::-;;;;;;;;14957:575;;;:::o;44414:1381::-;44453:23;44479:24;44497:4;44479:9;:24::i;:::-;44453:50;;44514:25;44563:18;;44542;;:39;;;;:::i;:::-;44514:67;;44592:12;44640:1;44621:15;:20;:46;;;;44666:1;44645:17;:22;44621:46;44618:60;;;44670:7;;;;;44618:60;44733:2;44712:18;;:23;;;;:::i;:::-;44694:15;:41;44691:111;;;44788:2;44767:18;;:23;;;;:::i;:::-;44749:41;;44691:111;44864:23;44949:1;44929:17;44908:18;;44890:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;44864:86;;44961:26;44990:36;45010:15;44990;:19;;:36;;;;:::i;:::-;44961:65;;45040:25;45068:21;45040:49;;45103:36;45120:18;45103:16;:36::i;:::-;45154:18;45175:44;45201:17;45175:21;:25;;:44;;;;:::i;:::-;45154:65;;45243:23;45269:57;45308:17;45269:34;45284:18;;45269:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;45243:83;;45337:23;45376:15;45363:10;:28;;;;:::i;:::-;45337:54;;45433:1;45412:18;:22;;;;45466:1;45445:18;:22;;;;45509:1;45491:15;:19;:42;;;;;45532:1;45514:15;:19;45491:42;45488:210;;;45549:46;45562:15;45579;45549:12;:46::i;:::-;45615:71;45630:18;45650:15;45667:18;;45615:71;;;;;;;;:::i;:::-;;;;;;;;45488:210;45732:15;;;;;;;;;;;45724:29;;45761:21;45724:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45711:76;;;;;44442:1353;;;;;;;;;44414:1381;:::o;20133:473::-;20191:7;20441:1;20436;:6;20432:47;;20466:1;20459:8;;;;20432:47;20492:9;20508:1;20504;:5;;;;:::i;:::-;20492:17;;20537:1;20532;20528;:5;;;;:::i;:::-;:10;20520:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20597:1;20590:8;;;20133:473;;;;;:::o;21083:132::-;21141:7;21168:39;21172:1;21175;21168:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;21161:46;;21083:132;;;;:::o;18378:125::-;;;;:::o;19240:136::-;19298:7;19325:43;19329:1;19332;19325:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;19318:50;;19240:136;;;;:::o;43277:597::-;43406:21;43444:1;43430:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43406:40;;43475:4;43457;43462:1;43457:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43501:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43491:4;43496:1;43491:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;43537:62;43554:4;43569:15;43587:11;43537:8;:62::i;:::-;43639:15;:66;;;43720:11;43746:1;43790:4;43817;43837:15;43639:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43332:542;43277:597;:::o;43883:522::-;44031:62;44048:4;44063:15;44081:11;44031:8;:62::i;:::-;44137:15;:31;;;44176:9;44209:4;44229:11;44255:1;44298;44349:6;44371:15;44137:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43883:522;;:::o;21712:279::-;21798:7;21830:1;21826;:5;21833:12;21818:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21857:9;21873:1;21869;:5;;;;:::i;:::-;21857:17;;21982:1;21975:8;;;21712:279;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:474::-;7656:6;7664;7713:2;7701:9;7692:7;7688:23;7684:32;7681:119;;;7719:79;;:::i;:::-;7681:119;7839:1;7864:53;7909:7;7900:6;7889:9;7885:22;7864:53;:::i;:::-;7854:63;;7810:117;7966:2;7992:53;8037:7;8028:6;8017:9;8013:22;7992:53;:::i;:::-;7982:63;;7937:118;7588:474;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:1057::-;8501:6;8509;8517;8525;8533;8541;8590:3;8578:9;8569:7;8565:23;8561:33;8558:120;;;8597:79;;:::i;:::-;8558:120;8717:1;8742:53;8787:7;8778:6;8767:9;8763:22;8742:53;:::i;:::-;8732:63;;8688:117;8844:2;8870:53;8915:7;8906:6;8895:9;8891:22;8870:53;:::i;:::-;8860:63;;8815:118;8972:2;8998:53;9043:7;9034:6;9023:9;9019:22;8998:53;:::i;:::-;8988:63;;8943:118;9100:2;9126:53;9171:7;9162:6;9151:9;9147:22;9126:53;:::i;:::-;9116:63;;9071:118;9228:3;9255:53;9300:7;9291:6;9280:9;9276:22;9255:53;:::i;:::-;9245:63;;9199:119;9357:3;9384:53;9429:7;9420:6;9409:9;9405:22;9384:53;:::i;:::-;9374:63;;9328:119;8397:1057;;;;;;;;:::o;9460:180::-;9508:77;9505:1;9498:88;9605:4;9602:1;9595:15;9629:4;9626:1;9619:15;9646:320;9690:6;9727:1;9721:4;9717:12;9707:22;;9774:1;9768:4;9764:12;9795:18;9785:81;;9851:4;9843:6;9839:17;9829:27;;9785:81;9913:2;9905:6;9902:14;9882:18;9879:38;9876:84;;9932:18;;:::i;:::-;9876:84;9697:269;9646:320;;;:::o;9972:182::-;10112:34;10108:1;10100:6;10096:14;10089:58;9972:182;:::o;10160:366::-;10302:3;10323:67;10387:2;10382:3;10323:67;:::i;:::-;10316:74;;10399:93;10488:3;10399:93;:::i;:::-;10517:2;10512:3;10508:12;10501:19;;10160:366;;;:::o;10532:419::-;10698:4;10736:2;10725:9;10721:18;10713:26;;10785:9;10779:4;10775:20;10771:1;10760:9;10756:17;10749:47;10813:131;10939:4;10813:131;:::i;:::-;10805:139;;10532:419;;;:::o;10957:180::-;11005:77;11002:1;10995:88;11102:4;11099:1;11092:15;11126:4;11123:1;11116:15;11143:410;11183:7;11206:20;11224:1;11206:20;:::i;:::-;11201:25;;11240:20;11258:1;11240:20;:::i;:::-;11235:25;;11295:1;11292;11288:9;11317:30;11335:11;11317:30;:::i;:::-;11306:41;;11496:1;11487:7;11483:15;11480:1;11477:22;11457:1;11450:9;11430:83;11407:139;;11526:18;;:::i;:::-;11407:139;11191:362;11143:410;;;;:::o;11559:180::-;11607:77;11604:1;11597:88;11704:4;11701:1;11694:15;11728:4;11725:1;11718:15;11745:185;11785:1;11802:20;11820:1;11802:20;:::i;:::-;11797:25;;11836:20;11854:1;11836:20;:::i;:::-;11831:25;;11875:1;11865:35;;11880:18;;:::i;:::-;11865:35;11922:1;11919;11915:9;11910:14;;11745:185;;;;:::o;11936:234::-;12076:34;12072:1;12064:6;12060:14;12053:58;12145:17;12140:2;12132:6;12128:15;12121:42;11936:234;:::o;12176:366::-;12318:3;12339:67;12403:2;12398:3;12339:67;:::i;:::-;12332:74;;12415:93;12504:3;12415:93;:::i;:::-;12533:2;12528:3;12524:12;12517:19;;12176:366;;;:::o;12548:419::-;12714:4;12752:2;12741:9;12737:18;12729:26;;12801:9;12795:4;12791:20;12787:1;12776:9;12772:17;12765:47;12829:131;12955:4;12829:131;:::i;:::-;12821:139;;12548:419;;;:::o;12973:178::-;13113:30;13109:1;13101:6;13097:14;13090:54;12973:178;:::o;13157:366::-;13299:3;13320:67;13384:2;13379:3;13320:67;:::i;:::-;13313:74;;13396:93;13485:3;13396:93;:::i;:::-;13514:2;13509:3;13505:12;13498:19;;13157:366;;;:::o;13529:419::-;13695:4;13733:2;13722:9;13718:18;13710:26;;13782:9;13776:4;13772:20;13768:1;13757:9;13753:17;13746:47;13810:131;13936:4;13810:131;:::i;:::-;13802:139;;13529:419;;;:::o;13954:143::-;14011:5;14042:6;14036:13;14027:22;;14058:33;14085:5;14058:33;:::i;:::-;13954:143;;;;:::o;14103:351::-;14173:6;14222:2;14210:9;14201:7;14197:23;14193:32;14190:119;;;14228:79;;:::i;:::-;14190:119;14348:1;14373:64;14429:7;14420:6;14409:9;14405:22;14373:64;:::i;:::-;14363:74;;14319:128;14103:351;;;;:::o;14460:332::-;14581:4;14619:2;14608:9;14604:18;14596:26;;14632:71;14700:1;14689:9;14685:17;14676:6;14632:71;:::i;:::-;14713:72;14781:2;14770:9;14766:18;14757:6;14713:72;:::i;:::-;14460:332;;;;;:::o;14798:137::-;14852:5;14883:6;14877:13;14868:22;;14899:30;14923:5;14899:30;:::i;:::-;14798:137;;;;:::o;14941:345::-;15008:6;15057:2;15045:9;15036:7;15032:23;15028:32;15025:119;;;15063:79;;:::i;:::-;15025:119;15183:1;15208:61;15261:7;15252:6;15241:9;15237:22;15208:61;:::i;:::-;15198:71;;15154:125;14941:345;;;;:::o;15292:191::-;15332:3;15351:20;15369:1;15351:20;:::i;:::-;15346:25;;15385:20;15403:1;15385:20;:::i;:::-;15380:25;;15428:1;15425;15421:9;15414:16;;15449:3;15446:1;15443:10;15440:36;;;15456:18;;:::i;:::-;15440:36;15292:191;;;;:::o;15489:179::-;15629:31;15625:1;15617:6;15613:14;15606:55;15489:179;:::o;15674:366::-;15816:3;15837:67;15901:2;15896:3;15837:67;:::i;:::-;15830:74;;15913:93;16002:3;15913:93;:::i;:::-;16031:2;16026:3;16022:12;16015:19;;15674:366;;;:::o;16046:419::-;16212:4;16250:2;16239:9;16235:18;16227:26;;16299:9;16293:4;16289:20;16285:1;16274:9;16270:17;16263:47;16327:131;16453:4;16327:131;:::i;:::-;16319:139;;16046:419;;;:::o;16471:244::-;16611:34;16607:1;16599:6;16595:14;16588:58;16680:27;16675:2;16667:6;16663:15;16656:52;16471:244;:::o;16721:366::-;16863:3;16884:67;16948:2;16943:3;16884:67;:::i;:::-;16877:74;;16960:93;17049:3;16960:93;:::i;:::-;17078:2;17073:3;17069:12;17062:19;;16721:366;;;:::o;17093:419::-;17259:4;17297:2;17286:9;17282:18;17274:26;;17346:9;17340:4;17336:20;17332:1;17321:9;17317:17;17310:47;17374:131;17500:4;17374:131;:::i;:::-;17366:139;;17093:419;;;:::o;17518:223::-;17658:34;17654:1;17646:6;17642:14;17635:58;17727:6;17722:2;17714:6;17710:15;17703:31;17518:223;:::o;17747:366::-;17889:3;17910:67;17974:2;17969:3;17910:67;:::i;:::-;17903:74;;17986:93;18075:3;17986:93;:::i;:::-;18104:2;18099:3;18095:12;18088:19;;17747:366;;;:::o;18119:419::-;18285:4;18323:2;18312:9;18308:18;18300:26;;18372:9;18366:4;18362:20;18358:1;18347:9;18343:17;18336:47;18400:131;18526:4;18400:131;:::i;:::-;18392:139;;18119:419;;;:::o;18544:240::-;18684:34;18680:1;18672:6;18668:14;18661:58;18753:23;18748:2;18740:6;18736:15;18729:48;18544:240;:::o;18790:366::-;18932:3;18953:67;19017:2;19012:3;18953:67;:::i;:::-;18946:74;;19029:93;19118:3;19029:93;:::i;:::-;19147:2;19142:3;19138:12;19131:19;;18790:366;;;:::o;19162:419::-;19328:4;19366:2;19355:9;19351:18;19343:26;;19415:9;19409:4;19405:20;19401:1;19390:9;19386:17;19379:47;19443:131;19569:4;19443:131;:::i;:::-;19435:139;;19162:419;;;:::o;19587:239::-;19727:34;19723:1;19715:6;19711:14;19704:58;19796:22;19791:2;19783:6;19779:15;19772:47;19587:239;:::o;19832:366::-;19974:3;19995:67;20059:2;20054:3;19995:67;:::i;:::-;19988:74;;20071:93;20160:3;20071:93;:::i;:::-;20189:2;20184:3;20180:12;20173:19;;19832:366;;;:::o;20204:419::-;20370:4;20408:2;20397:9;20393:18;20385:26;;20457:9;20451:4;20447:20;20443:1;20432:9;20428:17;20421:47;20485:131;20611:4;20485:131;:::i;:::-;20477:139;;20204:419;;;:::o;20629:225::-;20769:34;20765:1;20757:6;20753:14;20746:58;20838:8;20833:2;20825:6;20821:15;20814:33;20629:225;:::o;20860:366::-;21002:3;21023:67;21087:2;21082:3;21023:67;:::i;:::-;21016:74;;21099:93;21188:3;21099:93;:::i;:::-;21217:2;21212:3;21208:12;21201:19;;20860:366;;;:::o;21232:419::-;21398:4;21436:2;21425:9;21421:18;21413:26;;21485:9;21479:4;21475:20;21471:1;21460:9;21456:17;21449:47;21513:131;21639:4;21513:131;:::i;:::-;21505:139;;21232:419;;;:::o;21657:223::-;21797:34;21793:1;21785:6;21781:14;21774:58;21866:6;21861:2;21853:6;21849:15;21842:31;21657:223;:::o;21886:366::-;22028:3;22049:67;22113:2;22108:3;22049:67;:::i;:::-;22042:74;;22125:93;22214:3;22125:93;:::i;:::-;22243:2;22238:3;22234:12;22227:19;;21886:366;;;:::o;22258:419::-;22424:4;22462:2;22451:9;22447:18;22439:26;;22511:9;22505:4;22501:20;22497:1;22486:9;22482:17;22475:47;22539:131;22665:4;22539:131;:::i;:::-;22531:139;;22258:419;;;:::o;22683:221::-;22823:34;22819:1;22811:6;22807:14;22800:58;22892:4;22887:2;22879:6;22875:15;22868:29;22683:221;:::o;22910:366::-;23052:3;23073:67;23137:2;23132:3;23073:67;:::i;:::-;23066:74;;23149:93;23238:3;23149:93;:::i;:::-;23267:2;23262:3;23258:12;23251:19;;22910:366;;;:::o;23282:419::-;23448:4;23486:2;23475:9;23471:18;23463:26;;23535:9;23529:4;23525:20;23521:1;23510:9;23506:17;23499:47;23563:131;23689:4;23563:131;:::i;:::-;23555:139;;23282:419;;;:::o;23707:224::-;23847:34;23843:1;23835:6;23831:14;23824:58;23916:7;23911:2;23903:6;23899:15;23892:32;23707:224;:::o;23937:366::-;24079:3;24100:67;24164:2;24159:3;24100:67;:::i;:::-;24093:74;;24176:93;24265:3;24176:93;:::i;:::-;24294:2;24289:3;24285:12;24278:19;;23937:366;;;:::o;24309:419::-;24475:4;24513:2;24502:9;24498:18;24490:26;;24562:9;24556:4;24552:20;24548:1;24537:9;24533:17;24526:47;24590:131;24716:4;24590:131;:::i;:::-;24582:139;;24309:419;;;:::o;24734:222::-;24874:34;24870:1;24862:6;24858:14;24851:58;24943:5;24938:2;24930:6;24926:15;24919:30;24734:222;:::o;24962:366::-;25104:3;25125:67;25189:2;25184:3;25125:67;:::i;:::-;25118:74;;25201:93;25290:3;25201:93;:::i;:::-;25319:2;25314:3;25310:12;25303:19;;24962:366;;;:::o;25334:419::-;25500:4;25538:2;25527:9;25523:18;25515:26;;25587:9;25581:4;25577:20;25573:1;25562:9;25558:17;25551:47;25615:131;25741:4;25615:131;:::i;:::-;25607:139;;25334:419;;;:::o;25759:172::-;25899:24;25895:1;25887:6;25883:14;25876:48;25759:172;:::o;25937:366::-;26079:3;26100:67;26164:2;26159:3;26100:67;:::i;:::-;26093:74;;26176:93;26265:3;26176:93;:::i;:::-;26294:2;26289:3;26285:12;26278:19;;25937:366;;;:::o;26309:419::-;26475:4;26513:2;26502:9;26498:18;26490:26;;26562:9;26556:4;26552:20;26548:1;26537:9;26533:17;26526:47;26590:131;26716:4;26590:131;:::i;:::-;26582:139;;26309:419;;;:::o;26734:240::-;26874:34;26870:1;26862:6;26858:14;26851:58;26943:23;26938:2;26930:6;26926:15;26919:48;26734:240;:::o;26980:366::-;27122:3;27143:67;27207:2;27202:3;27143:67;:::i;:::-;27136:74;;27219:93;27308:3;27219:93;:::i;:::-;27337:2;27332:3;27328:12;27321:19;;26980:366;;;:::o;27352:419::-;27518:4;27556:2;27545:9;27541:18;27533:26;;27605:9;27599:4;27595:20;27591:1;27580:9;27576:17;27569:47;27633:131;27759:4;27633:131;:::i;:::-;27625:139;;27352:419;;;:::o;27777:169::-;27917:21;27913:1;27905:6;27901:14;27894:45;27777:169;:::o;27952:366::-;28094:3;28115:67;28179:2;28174:3;28115:67;:::i;:::-;28108:74;;28191:93;28280:3;28191:93;:::i;:::-;28309:2;28304:3;28300:12;28293:19;;27952:366;;;:::o;28324:419::-;28490:4;28528:2;28517:9;28513:18;28505:26;;28577:9;28571:4;28567:20;28563:1;28552:9;28548:17;28541:47;28605:131;28731:4;28605:131;:::i;:::-;28597:139;;28324:419;;;:::o;28749:241::-;28889:34;28885:1;28877:6;28873:14;28866:58;28958:24;28953:2;28945:6;28941:15;28934:49;28749:241;:::o;28996:366::-;29138:3;29159:67;29223:2;29218:3;29159:67;:::i;:::-;29152:74;;29235:93;29324:3;29235:93;:::i;:::-;29353:2;29348:3;29344:12;29337:19;;28996:366;;;:::o;29368:419::-;29534:4;29572:2;29561:9;29557:18;29549:26;;29621:9;29615:4;29611:20;29607:1;29596:9;29592:17;29585:47;29649:131;29775:4;29649:131;:::i;:::-;29641:139;;29368:419;;;:::o;29793:194::-;29833:4;29853:20;29871:1;29853:20;:::i;:::-;29848:25;;29887:20;29905:1;29887:20;:::i;:::-;29882:25;;29931:1;29928;29924:9;29916:17;;29955:1;29949:4;29946:11;29943:37;;;29960:18;;:::i;:::-;29943:37;29793:194;;;;:::o;29993:177::-;30133:29;30129:1;30121:6;30117:14;30110:53;29993:177;:::o;30176:366::-;30318:3;30339:67;30403:2;30398:3;30339:67;:::i;:::-;30332:74;;30415:93;30504:3;30415:93;:::i;:::-;30533:2;30528:3;30524:12;30517:19;;30176:366;;;:::o;30548:419::-;30714:4;30752:2;30741:9;30737:18;30729:26;;30801:9;30795:4;30791:20;30787:1;30776:9;30772:17;30765:47;30829:131;30955:4;30829:131;:::i;:::-;30821:139;;30548:419;;;:::o;30973:442::-;31122:4;31160:2;31149:9;31145:18;31137:26;;31173:71;31241:1;31230:9;31226:17;31217:6;31173:71;:::i;:::-;31254:72;31322:2;31311:9;31307:18;31298:6;31254:72;:::i;:::-;31336;31404:2;31393:9;31389:18;31380:6;31336:72;:::i;:::-;30973:442;;;;;;:::o;31421:147::-;31522:11;31559:3;31544:18;;31421:147;;;;:::o;31574:114::-;;:::o;31694:398::-;31853:3;31874:83;31955:1;31950:3;31874:83;:::i;:::-;31867:90;;31966:93;32055:3;31966:93;:::i;:::-;32084:1;32079:3;32075:11;32068:18;;31694:398;;;:::o;32098:379::-;32282:3;32304:147;32447:3;32304:147;:::i;:::-;32297:154;;32468:3;32461:10;;32098:379;;;:::o;32483:220::-;32623:34;32619:1;32611:6;32607:14;32600:58;32692:3;32687:2;32679:6;32675:15;32668:28;32483:220;:::o;32709:366::-;32851:3;32872:67;32936:2;32931:3;32872:67;:::i;:::-;32865:74;;32948:93;33037:3;32948:93;:::i;:::-;33066:2;33061:3;33057:12;33050:19;;32709:366;;;:::o;33081:419::-;33247:4;33285:2;33274:9;33270:18;33262:26;;33334:9;33328:4;33324:20;33320:1;33309:9;33305:17;33298:47;33362:131;33488:4;33362:131;:::i;:::-;33354:139;;33081:419;;;:::o;33506:180::-;33554:77;33551:1;33544:88;33651:4;33648:1;33641:15;33675:4;33672:1;33665:15;33692:180;33740:77;33737:1;33730:88;33837:4;33834:1;33827:15;33861:4;33858:1;33851:15;33878:143;33935:5;33966:6;33960:13;33951:22;;33982:33;34009:5;33982:33;:::i;:::-;33878:143;;;;:::o;34027:351::-;34097:6;34146:2;34134:9;34125:7;34121:23;34117:32;34114:119;;;34152:79;;:::i;:::-;34114:119;34272:1;34297:64;34353:7;34344:6;34333:9;34329:22;34297:64;:::i;:::-;34287:74;;34243:128;34027:351;;;;:::o;34384:85::-;34429:7;34458:5;34447:16;;34384:85;;;:::o;34475:158::-;34533:9;34566:61;34584:42;34593:32;34619:5;34593:32;:::i;:::-;34584:42;:::i;:::-;34566:61;:::i;:::-;34553:74;;34475:158;;;:::o;34639:147::-;34734:45;34773:5;34734:45;:::i;:::-;34729:3;34722:58;34639:147;;:::o;34792:114::-;34859:6;34893:5;34887:12;34877:22;;34792:114;;;:::o;34912:184::-;35011:11;35045:6;35040:3;35033:19;35085:4;35080:3;35076:14;35061:29;;34912:184;;;;:::o;35102:132::-;35169:4;35192:3;35184:11;;35222:4;35217:3;35213:14;35205:22;;35102:132;;;:::o;35240:108::-;35317:24;35335:5;35317:24;:::i;:::-;35312:3;35305:37;35240:108;;:::o;35354:179::-;35423:10;35444:46;35486:3;35478:6;35444:46;:::i;:::-;35522:4;35517:3;35513:14;35499:28;;35354:179;;;;:::o;35539:113::-;35609:4;35641;35636:3;35632:14;35624:22;;35539:113;;;:::o;35688:732::-;35807:3;35836:54;35884:5;35836:54;:::i;:::-;35906:86;35985:6;35980:3;35906:86;:::i;:::-;35899:93;;36016:56;36066:5;36016:56;:::i;:::-;36095:7;36126:1;36111:284;36136:6;36133:1;36130:13;36111:284;;;36212:6;36206:13;36239:63;36298:3;36283:13;36239:63;:::i;:::-;36232:70;;36325:60;36378:6;36325:60;:::i;:::-;36315:70;;36171:224;36158:1;36155;36151:9;36146:14;;36111:284;;;36115:14;36411:3;36404:10;;35812:608;;;35688:732;;;;:::o;36426:831::-;36689:4;36727:3;36716:9;36712:19;36704:27;;36741:71;36809:1;36798:9;36794:17;36785:6;36741:71;:::i;:::-;36822:80;36898:2;36887:9;36883:18;36874:6;36822:80;:::i;:::-;36949:9;36943:4;36939:20;36934:2;36923:9;36919:18;36912:48;36977:108;37080:4;37071:6;36977:108;:::i;:::-;36969:116;;37095:72;37163:2;37152:9;37148:18;37139:6;37095:72;:::i;:::-;37177:73;37245:3;37234:9;37230:19;37221:6;37177:73;:::i;:::-;36426:831;;;;;;;;:::o;37263:807::-;37512:4;37550:3;37539:9;37535:19;37527:27;;37564:71;37632:1;37621:9;37617:17;37608:6;37564:71;:::i;:::-;37645:72;37713:2;37702:9;37698:18;37689:6;37645:72;:::i;:::-;37727:80;37803:2;37792:9;37788:18;37779:6;37727:80;:::i;:::-;37817;37893:2;37882:9;37878:18;37869:6;37817:80;:::i;:::-;37907:73;37975:3;37964:9;37960:19;37951:6;37907:73;:::i;:::-;37990;38058:3;38047:9;38043:19;38034:6;37990:73;:::i;:::-;37263:807;;;;;;;;;:::o;38076:663::-;38164:6;38172;38180;38229:2;38217:9;38208:7;38204:23;38200:32;38197:119;;;38235:79;;:::i;:::-;38197:119;38355:1;38380:64;38436:7;38427:6;38416:9;38412:22;38380:64;:::i;:::-;38370:74;;38326:128;38493:2;38519:64;38575:7;38566:6;38555:9;38551:22;38519:64;:::i;:::-;38509:74;;38464:129;38632:2;38658:64;38714:7;38705:6;38694:9;38690:22;38658:64;:::i;:::-;38648:74;;38603:129;38076:663;;;;;:::o

Swarm Source

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