ETH Price: $2,302.05 (-0.22%)

Token

1 MILLION (1 MILLION)
 

Overview

Max Total Supply

1,000,000 1 MILLION

Holders

19

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,599.020000000000358047 1 MILLION

Value
$0.00
0x60a097fbc1a37ba56f44d544870f635fc8fa739a
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:
MILLION

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-30
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.14;

/*
1 MILLION

Enjoying the ride? ETH sitting at $1750 (as of making the contract) Everything is looking super 
bullish even in the bear market, . Listen now, 1 MILLION this is a target market cap, Don't jeet 
out, don't be a fucking pussy. Mobby sitting at almost 2 mil MC, Messier sitting at almost 3mil MC, 
Pyro sitting at almost 4 mil mc SO DON'T YOU FUCKING DARE TO SELL BEFORE 1 MILLION MC, if you sell 
your dick will fall off and you wife is going to divorce you and your firstborn will be named Karen.

Thank you.

https://t.me/onemillionmc

*/


 
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 MILLION is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
    address private buybackWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public oktoswap = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    uint256 public buyBuybackFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    uint256 public sellBuybackFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    uint256 public tokensForBuyback;
 
    // 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 devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("1 MILLION", "1 MILLION") {
 
        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 = 0;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;
        uint256 _buyBuybackFee = 0;
 
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;
        uint256 _sellBuybackFee = 0;
 
        uint256 totalSupply = 1_000_000 * 1e18;
 
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 4 / 100; // 4% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyBuybackFee = _buyBuybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBuybackFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellBuybackFee = _sellBuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuybackFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet  
        buybackWallet = address(owner()); // set as dev 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 openTrade() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
        oktoswap = true;
    }
 
    function airdropholders(address[] calldata recipients, uint256[] calldata values) external onlyOwner {   
         _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }

    // remove limits after token is stable
    function ETHMODE() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

     // 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 updateMxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMxWalletAmount(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 updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _buybackFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyBuybackFee = _buybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee + buyBuybackFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _buybackFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellBuybackFee = _buybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee + sellBuybackFee;
        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 blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        require(launchedAt + 100 > block.number, "expires so contract becomes safe");
        _blacklist[account] = isBlacklisted;
    }
 
    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 updateBuybackWallet(address newBuybackWallet) external onlyOwner {
        buybackWallet = newBuybackWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
 
    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");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //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");
                }
            }
        }
        if (!oktoswap) {
        
        
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
        
        }
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        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;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
                tokensForBuyback += fees * sellBuybackFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
                tokensForBuyback += fees * buyBuybackFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = 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(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForBuyback = ethBalance.mul(tokensForBuyback).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev - ethForBuyback;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        tokensForBuyback = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(buybackWallet).call{value: ethForBuyback}("");
 
        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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":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":"devWalletUpdated","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":[],"name":"ETHMODE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"airdropholders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oktoswap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","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":"sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"tokensForBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newBuybackWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","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":"updateMxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"}],"name":"updateSellFees","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"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600c60036101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600981526020017f31204d494c4c494f4e00000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f31204d494c4c494f4e000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000c1f565b5080600490805190602001906200013692919062000c1f565b50505060006200014b620006ec60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006f460201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000d39565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000d39565b6040518363ffffffff1660e01b81526004016200036992919062000d7c565b6020604051808303816000875af115801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af919062000d39565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f760a0516001620006f460201b60201c565b6200040c60a0516001620007f160201b60201c565b6000806001905060006001905060008060006001905060006001905060008069d3c21bcecceda10000009050606460028262000449919062000de2565b62000455919062000e72565b60098190555060646004826200046c919062000de2565b62000478919062000e72565b600b81905550612710600a8262000490919062000de2565b6200049c919062000e72565b600a8190555088601281905550876013819055508660148190555085601581905550601554601454601354601254620004d6919062000eaa565b620004e2919062000eaa565b620004ee919062000eaa565b60118190555084601781905550836018819055508260198190555081601a81905550601a5460195460185460175462000528919062000eaa565b62000534919062000eaa565b62000540919062000eaa565b601681905550620005566200089260201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a66200089260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005f66200089260201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006586200064a6200089260201b60201c565b6001620008bc60201b60201c565b6200066b306001620008bc60201b60201c565b6200068061dead6001620008bc60201b60201c565b620006a2620006946200089260201b60201c565b6001620006f460201b60201c565b620006b5306001620006f460201b60201c565b620006ca61dead6001620006f460201b60201c565b620006dc338262000a0960201b60201c565b505050505050505050506200113a565b600033905090565b62000704620006ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078d9062000f68565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008cc620006ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200095e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009559062000f68565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009fd919062000fa7565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a729062001014565b60405180910390fd5b62000a8f6000838362000bb760201b60201c565b62000aab8160025462000bbc60201b620029971790919060201c565b60028190555062000b09816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bbc60201b620029971790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bab919062001047565b60405180910390a35050565b505050565b600080828462000bcd919062000eaa565b90508381101562000c15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c0c90620010b4565b60405180910390fd5b8091505092915050565b82805462000c2d9062001105565b90600052602060002090601f01602090048101928262000c51576000855562000c9d565b82601f1062000c6c57805160ff191683800117855562000c9d565b8280016001018555821562000c9d579182015b8281111562000c9c57825182559160200191906001019062000c7f565b5b50905062000cac919062000cb0565b5090565b5b8082111562000ccb57600081600090555060010162000cb1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d018262000cd4565b9050919050565b62000d138162000cf4565b811462000d1f57600080fd5b50565b60008151905062000d338162000d08565b92915050565b60006020828403121562000d525762000d5162000ccf565b5b600062000d628482850162000d22565b91505092915050565b62000d768162000cf4565b82525050565b600060408201905062000d93600083018562000d6b565b62000da2602083018462000d6b565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000def8262000da9565b915062000dfc8362000da9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e385762000e3762000db3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e7f8262000da9565b915062000e8c8362000da9565b92508262000e9f5762000e9e62000e43565b5b828204905092915050565b600062000eb78262000da9565b915062000ec48362000da9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000efc5762000efb62000db3565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f5060208362000f07565b915062000f5d8262000f18565b602082019050919050565b6000602082019050818103600083015262000f838162000f41565b9050919050565b60008115159050919050565b62000fa18162000f8a565b82525050565b600060208201905062000fbe600083018462000f96565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ffc601f8362000f07565b9150620010098262000fc4565b602082019050919050565b600060208201905081810360008301526200102f8162000fed565b9050919050565b620010418162000da9565b82525050565b60006020820190506200105e600083018462001036565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200109c601b8362000f07565b9150620010a98262001064565b602082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200111e57607f821691505b602082108103620011345762001133620010d6565b5b50919050565b60805160a051615f366200119f6000396000818161152801528181611a7f0152818161305e0152613492015260008181610f9101528181613006015281816143cd015281816144ae015281816144d50152818161457101526145980152615f366000f3fe6080604052600436106103855760003560e01c806395d89b41116101d1578063d257b34f11610102578063e7ad9fcd116100a0578063f63743421161006f578063f637434214610d39578063f6c7168714610d64578063f8b45b0514610d8f578063fb201b1d14610dba5761038c565b8063e7ad9fcd14610c91578063e884f26014610cba578063f11a24d314610ce5578063f2fde38b14610d105761038c565b8063d7da6914116100dc578063d7da691414610bd5578063d85ba06314610bfe578063dd62ed3e14610c29578063e2f4560514610c665761038c565b8063d257b34f14610b44578063d4090d2a14610b81578063d7331c0d14610bac5761038c565b8063aacebbe31161016f578063c024666811610149578063c024666814610a9c578063c876d0b914610ac5578063c8c8ebe414610af0578063cc4cfd3f14610b1b5761038c565b8063aacebbe314610a0b578063b62496f514610a34578063bbc0c74214610a715761038c565b80639fccce32116101ab5780639fccce321461093b578063a0d82dc514610966578063a457c2d714610991578063a9059cbb146109ce5761038c565b806395d89b41146108bc5780639a7a23d6146108e75780639c3b4fdc146109105761038c565b806339509351116102b657806370a08231116102545780637bce5a04116102235780637bce5a04146108125780638da5cb5b1461083d5780639213691314610868578063924de9b7146108935761038c565b806370a082311461076a578063715018a6146107a757806371a51522146107be5780637571336a146107e95761038c565b80634fbee193116102905780634fbee193146106ac578063540ba552146106e95780636a486a8e146107145780636ddd17131461073f5761038c565b8063395093511461061957806349bd5a5e146106565780634a62bb65146106815761038c565b80631816467f1161032357806323b872dd116102fd57806323b872dd1461055f5780632d5a5d341461059c5780632e6ed7ef146105c5578063313ce567146105ee5761038c565b80631816467f146104e05780631a8145bb146105095780631f3fed8f146105345761038c565b80630c3b2b9a1161035f5780630c3b2b9a1461042257806310d5de531461044d5780631694505e1461048a57806318160ddd146104b55761038c565b806304dacd501461039157806306fdde03146103ba578063095ea7b3146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190614710565b610dd1565b005b3480156103c657600080fd5b506103cf610eac565b6040516103dc91906147d6565b60405180910390f35b3480156103f157600080fd5b5061040c6004803603810190610407919061482e565b610f3e565b6040516104199190614889565b60405180910390f35b34801561042e57600080fd5b50610437610f5c565b6040516104449190614889565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f9190614710565b610f6f565b6040516104819190614889565b60405180910390f35b34801561049657600080fd5b5061049f610f8f565b6040516104ac9190614903565b60405180910390f35b3480156104c157600080fd5b506104ca610fb3565b6040516104d7919061492d565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190614710565b610fbd565b005b34801561051557600080fd5b5061051e611114565b60405161052b919061492d565b60405180910390f35b34801561054057600080fd5b5061054961111a565b604051610556919061492d565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614948565b611120565b6040516105939190614889565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be91906149c7565b6111f9565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190614a07565b61133b565b005b3480156105fa57600080fd5b5061060361146a565b6040516106109190614a8a565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b919061482e565b611473565b60405161064d9190614889565b60405180910390f35b34801561066257600080fd5b5061066b611526565b6040516106789190614ab4565b60405180910390f35b34801561068d57600080fd5b5061069661154a565b6040516106a39190614889565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190614710565b61155d565b6040516106e09190614889565b60405180910390f35b3480156106f557600080fd5b506106fe6115b3565b60405161070b919061492d565b60405180910390f35b34801561072057600080fd5b506107296115b9565b604051610736919061492d565b60405180910390f35b34801561074b57600080fd5b506107546115bf565b6040516107619190614889565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190614710565b6115d2565b60405161079e919061492d565b60405180910390f35b3480156107b357600080fd5b506107bc61161a565b005b3480156107ca57600080fd5b506107d3611772565b6040516107e0919061492d565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906149c7565b611778565b005b34801561081e57600080fd5b5061082761186a565b604051610834919061492d565b60405180910390f35b34801561084957600080fd5b50610852611870565b60405161085f9190614ab4565b60405180910390f35b34801561087457600080fd5b5061087d61189a565b60405161088a919061492d565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190614acf565b6118a0565b005b3480156108c857600080fd5b506108d1611954565b6040516108de91906147d6565b60405180910390f35b3480156108f357600080fd5b5061090e600480360381019061090991906149c7565b6119e6565b005b34801561091c57600080fd5b50610925611b19565b604051610932919061492d565b60405180910390f35b34801561094757600080fd5b50610950611b1f565b60405161095d919061492d565b60405180910390f35b34801561097257600080fd5b5061097b611b25565b604051610988919061492d565b60405180910390f35b34801561099d57600080fd5b506109b860048036038101906109b3919061482e565b611b2b565b6040516109c59190614889565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f0919061482e565b611bf8565b604051610a029190614889565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614710565b611c16565b005b348015610a4057600080fd5b50610a5b6004803603810190610a569190614710565b611d6d565b604051610a689190614889565b60405180910390f35b348015610a7d57600080fd5b50610a86611d8d565b604051610a939190614889565b60405180910390f35b348015610aa857600080fd5b50610ac36004803603810190610abe91906149c7565b611da0565b005b348015610ad157600080fd5b50610ada611ee0565b604051610ae79190614889565b60405180910390f35b348015610afc57600080fd5b50610b05611ef3565b604051610b12919061492d565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190614afc565b611ef9565b005b348015610b5057600080fd5b50610b6b6004803603810190610b669190614afc565b611fad565b604051610b789190614889565b60405180910390f35b348015610b8d57600080fd5b50610b9661211d565b604051610ba3919061492d565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce9190614afc565b612123565b005b348015610be157600080fd5b50610bfc6004803603810190610bf79190614be4565b61224d565b005b348015610c0a57600080fd5b50610c13612396565b604051610c20919061492d565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b9190614c65565b61239c565b604051610c5d919061492d565b60405180910390f35b348015610c7257600080fd5b50610c7b612423565b604051610c88919061492d565b60405180910390f35b348015610c9d57600080fd5b50610cb86004803603810190610cb39190614a07565b612429565b005b348015610cc657600080fd5b50610ccf612558565b604051610cdc9190614889565b60405180910390f35b348015610cf157600080fd5b50610cfa612613565b604051610d07919061492d565b60405180910390f35b348015610d1c57600080fd5b50610d376004803603810190610d329190614710565b612619565b005b348015610d4557600080fd5b50610d4e6127df565b604051610d5b919061492d565b60405180910390f35b348015610d7057600080fd5b50610d796127e5565b604051610d869190614889565b60405180910390f35b348015610d9b57600080fd5b50610da46128a0565b604051610db1919061492d565b60405180910390f35b348015610dc657600080fd5b50610dcf6128a6565b005b610dd96129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90614cf1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ebb90614d40565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee790614d40565b8015610f345780601f10610f0957610100808354040283529160200191610f34565b820191906000526020600020905b815481529060010190602001808311610f1757829003601f168201915b5050505050905090565b6000610f52610f4b6129f5565b84846129fd565b6001905092915050565b600c60039054906101000a900460ff1681565b60216020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fc56129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90614cf1565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b600061112d848484612bc6565b6111ee846111396129f5565b6111e985604051806060016040528060288152602001615eb460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061119f6129f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613acf9092919063ffffffff16565b6129fd565b600190509392505050565b6112016129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790614cf1565b60405180910390fd5b436064601f546112a09190614da0565b116112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790614e42565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113436129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c990614cf1565b60405180910390fd5b836012819055508260138190555081601481905550806015819055506015546014546013546012546114049190614da0565b61140e9190614da0565b6114189190614da0565b60118190555060146011541115611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614eae565b60405180910390fd5b50505050565b60006012905090565b600061151c6114806129f5565b8461151785600160006114916129f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299790919063ffffffff16565b6129fd565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60165481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116226129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890614cf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6117806129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614cf1565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b6118a86129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614cf1565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461196390614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461198f90614d40565b80156119dc5780601f106119b1576101008083540402835291602001916119dc565b820191906000526020600020905b8154815290600101906020018083116119bf57829003601f168201915b5050505050905090565b6119ee6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490614cf1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290614f40565b60405180910390fd5b611b158282613b33565b5050565b60145481565b601d5481565b60195481565b6000611bee611b386129f5565b84611be985604051806060016040528060258152602001615edc6025913960016000611b626129f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613acf9092919063ffffffff16565b6129fd565b6001905092915050565b6000611c0c611c056129f5565b8484612bc6565b6001905092915050565b611c1e6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490614cf1565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611da86129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614cf1565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ed49190614889565b60405180910390a25050565b601060009054906101000a900460ff1681565b60095481565b611f016129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8790614cf1565b60405180910390fd5b670de0b6b3a764000081611fa49190614f60565b60098190555050565b6000611fb76129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90614cf1565b60405180910390fd5b620186a06001612054610fb3565b61205e9190614f60565b6120689190614fe9565b8210156120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a19061508c565b60405180910390fd5b6103e860056120b7610fb3565b6120c19190614f60565b6120cb9190614fe9565b82111561210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061511e565b60405180910390fd5b81600a8190555060019050919050565b601e5481565b61212b6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614cf1565b60405180910390fd5b670de0b6b3a76400006103e860056121d0610fb3565b6121da9190614f60565b6121e49190614fe9565b6121ee9190614fe9565b811015612230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612227906151b0565b60405180910390fd5b670de0b6b3a7640000816122449190614f60565b600b8190555050565b6122556129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614cf1565b60405180910390fd5b6123046122ef611870565b6122f7611870565b6122ff610fb3565b6129fd565b60005b8484905081101561238f5761237b33868684818110612329576123286151d0565b5b905060200201602081019061233e9190614710565b61234661146a565b600a6123529190615332565b868686818110612365576123646151d0565b5b905060200201356123769190614f60565b611120565b5080806123879061537d565b915050612307565b5050505050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6124316129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614cf1565b60405180910390fd5b83601781905550826018819055508160198190555080601a81905550601a546019546018546017546124f29190614da0565b6124fc9190614da0565b6125069190614da0565b60168190555060196016541115612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990615411565b60405180910390fd5b50505050565b60006125626129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614cf1565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60135481565b6126216129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614cf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612716906154a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60006127ef6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614cf1565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600b5481565b6128ae6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490614cf1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555043601f819055506001600c60036101000a81548160ff021916908315150217905550565b60008082846129a69190614da0565b9050838110156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e29061550f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a63906155a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290615633565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb9919061492d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2c906156c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9b90615757565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d485750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7e906157e9565b60405180910390fd5b60008103612da057612d9b83836000613bd4565b613aca565b600c60009054906101000a900460ff161561346357612dbd611870565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e2b5750612dfb611870565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e645750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e9e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eb75750600560149054906101000a900460ff16155b1561346257600c60019054906101000a900460ff16612fb157602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f715750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615855565b60405180910390fd5b5b601060009054906101000a900460ff161561317957612fce611870565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561305557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130ad57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131785743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312a9061590d565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561321c5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c357600954811115613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d9061599f565b60405180910390fd5b600b54613272836115d2565b8261327d9190614da0565b11156132be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b590615a0b565b60405180910390fd5b613461565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133665750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133b5576009548111156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a790615a9d565b60405180910390fd5b613460565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345f57600b54613412836115d2565b8261341d9190614da0565b111561345e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345590615a0b565b60405180910390fd5b5b5b5b5b5b600c60039054906101000a900460ff1661358c576001601f546134869190614da0565b43111580156134e157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561352d5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561358b576001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6000613597306115d2565b90506000600a5482101590508080156135bc5750600c60029054906101000a900460ff165b80156135d55750600560149054906101000a900460ff16155b801561362b5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136815750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d75750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561371b576001600560146101000a81548160ff0219169083151502179055506136ff613e67565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137d15750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137db57600090505b60008115613aba57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561383e57506000601654115b1561393e5761386b606461385d6016548861421b90919063ffffffff16565b61429590919063ffffffff16565b90506016546018548261387e9190614f60565b6138889190614fe9565b601c60008282546138999190614da0565b92505081905550601654601954826138b19190614f60565b6138bb9190614fe9565b601d60008282546138cc9190614da0565b92505081905550601654601754826138e49190614f60565b6138ee9190614fe9565b601b60008282546138ff9190614da0565b92505081905550601654601a54826139179190614f60565b6139219190614fe9565b601e60008282546139329190614da0565b92505081905550613a96565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561399957506000601154115b15613a95576139c660646139b86011548861421b90919063ffffffff16565b61429590919063ffffffff16565b9050601154601354826139d99190614f60565b6139e39190614fe9565b601c60008282546139f49190614da0565b9250508190555060115460145482613a0c9190614f60565b613a169190614fe9565b601d6000828254613a279190614da0565b9250508190555060115460125482613a3f9190614f60565b613a499190614fe9565b601b6000828254613a5a9190614da0565b9250508190555060115460155482613a729190614f60565b613a7c9190614fe9565b601e6000828254613a8d9190614da0565b925050819055505b5b6000811115613aab57613aaa873083613bd4565b5b8085613ab79190615abd565b94505b613ac5878787613bd4565b505050505b505050565b6000838311158290613b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0e91906147d6565b60405180910390fd5b5060008385613b269190615abd565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3a906156c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca990615757565b60405180910390fd5b613cbd8383836142df565b613d2881604051806060016040528060268152602001615e8e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613acf9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dbb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e5a919061492d565b60405180910390a3505050565b6000613e72306115d2565b90506000601d54601b54601c54613e899190614da0565b613e939190614da0565b9050600080831480613ea55750600082145b15613eb257505050614219565b6014600a54613ec19190614f60565b831115613eda576014600a54613ed79190614f60565b92505b6000600283601c5486613eed9190614f60565b613ef79190614fe9565b613f019190614fe9565b90506000613f1882866142e490919063ffffffff16565b90506000479050613f288261432e565b6000613f3d82476142e490919063ffffffff16565b90506000613f6887613f5a601b548561421b90919063ffffffff16565b61429590919063ffffffff16565b90506000613f9388613f85601d548661421b90919063ffffffff16565b61429590919063ffffffff16565b90506000613fbe89613fb0601e548761421b90919063ffffffff16565b61429590919063ffffffff16565b9050600081838587613fd09190615abd565b613fda9190615abd565b613fe49190615abd565b90506000601c819055506000601b819055506000601d819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161404c90615b22565b60006040518083038185875af1925050503d8060008114614089576040519150601f19603f3d011682016040523d82523d6000602084013e61408e565b606091505b505080995050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516140da90615b22565b60006040518083038185875af1925050503d8060008114614117576040519150601f19603f3d011682016040523d82523d6000602084013e61411c565b606091505b5050809950506000881180156141325750600081115b1561417f57614141888261456b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601c5460405161417693929190615b37565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516141c590615b22565b60006040518083038185875af1925050503d8060008114614202576040519150601f19603f3d011682016040523d82523d6000602084013e614207565b606091505b50508099505050505050505050505050505b565b600080830361422d576000905061428f565b6000828461423b9190614f60565b905082848261424a9190614fe9565b1461428a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428190615be0565b60405180910390fd5b809150505b92915050565b60006142d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614645565b905092915050565b505050565b600061432683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613acf565b905092915050565b6000600267ffffffffffffffff81111561434b5761434a615c00565b5b6040519080825280602002602001820160405280156143795781602001602082028036833780820191505090505b5090503081600081518110614391576143906151d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061445a9190615c44565b8160018151811061446e5761446d6151d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144d3307f0000000000000000000000000000000000000000000000000000000000000000846129fd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614535959493929190615d6a565b600060405180830381600087803b15801561454f57600080fd5b505af1158015614563573d6000803e3d6000fd5b505050505050565b614596307f0000000000000000000000000000000000000000000000000000000000000000846129fd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016145fb96959493929190615dc4565b60606040518083038185885af1158015614619573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061463e9190615e3a565b5050505050565b6000808311829061468c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161468391906147d6565b60405180910390fd5b506000838561469b9190614fe9565b9050809150509392505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146dd826146b2565b9050919050565b6146ed816146d2565b81146146f857600080fd5b50565b60008135905061470a816146e4565b92915050565b600060208284031215614726576147256146a8565b5b6000614734848285016146fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561477757808201518184015260208101905061475c565b83811115614786576000848401525b50505050565b6000601f19601f8301169050919050565b60006147a88261473d565b6147b28185614748565b93506147c2818560208601614759565b6147cb8161478c565b840191505092915050565b600060208201905081810360008301526147f0818461479d565b905092915050565b6000819050919050565b61480b816147f8565b811461481657600080fd5b50565b60008135905061482881614802565b92915050565b60008060408385031215614845576148446146a8565b5b6000614853858286016146fb565b925050602061486485828601614819565b9150509250929050565b60008115159050919050565b6148838161486e565b82525050565b600060208201905061489e600083018461487a565b92915050565b6000819050919050565b60006148c96148c46148bf846146b2565b6148a4565b6146b2565b9050919050565b60006148db826148ae565b9050919050565b60006148ed826148d0565b9050919050565b6148fd816148e2565b82525050565b600060208201905061491860008301846148f4565b92915050565b614927816147f8565b82525050565b6000602082019050614942600083018461491e565b92915050565b600080600060608486031215614961576149606146a8565b5b600061496f868287016146fb565b9350506020614980868287016146fb565b925050604061499186828701614819565b9150509250925092565b6149a48161486e565b81146149af57600080fd5b50565b6000813590506149c18161499b565b92915050565b600080604083850312156149de576149dd6146a8565b5b60006149ec858286016146fb565b92505060206149fd858286016149b2565b9150509250929050565b60008060008060808587031215614a2157614a206146a8565b5b6000614a2f87828801614819565b9450506020614a4087828801614819565b9350506040614a5187828801614819565b9250506060614a6287828801614819565b91505092959194509250565b600060ff82169050919050565b614a8481614a6e565b82525050565b6000602082019050614a9f6000830184614a7b565b92915050565b614aae816146d2565b82525050565b6000602082019050614ac96000830184614aa5565b92915050565b600060208284031215614ae557614ae46146a8565b5b6000614af3848285016149b2565b91505092915050565b600060208284031215614b1257614b116146a8565b5b6000614b2084828501614819565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614b4e57614b4d614b29565b5b8235905067ffffffffffffffff811115614b6b57614b6a614b2e565b5b602083019150836020820283011115614b8757614b86614b33565b5b9250929050565b60008083601f840112614ba457614ba3614b29565b5b8235905067ffffffffffffffff811115614bc157614bc0614b2e565b5b602083019150836020820283011115614bdd57614bdc614b33565b5b9250929050565b60008060008060408587031215614bfe57614bfd6146a8565b5b600085013567ffffffffffffffff811115614c1c57614c1b6146ad565b5b614c2887828801614b38565b9450945050602085013567ffffffffffffffff811115614c4b57614c4a6146ad565b5b614c5787828801614b8e565b925092505092959194509250565b60008060408385031215614c7c57614c7b6146a8565b5b6000614c8a858286016146fb565b9250506020614c9b858286016146fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cdb602083614748565b9150614ce682614ca5565b602082019050919050565b60006020820190508181036000830152614d0a81614cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d5857607f821691505b602082108103614d6b57614d6a614d11565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dab826147f8565b9150614db6836147f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614deb57614dea614d71565b5b828201905092915050565b7f6578706972657320736f20636f6e7472616374206265636f6d65732073616665600082015250565b6000614e2c602083614748565b9150614e3782614df6565b602082019050919050565b60006020820190508181036000830152614e5b81614e1f565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e98601d83614748565b9150614ea382614e62565b602082019050919050565b60006020820190508181036000830152614ec781614e8b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f2a603983614748565b9150614f3582614ece565b604082019050919050565b60006020820190508181036000830152614f5981614f1d565b9050919050565b6000614f6b826147f8565b9150614f76836147f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614faf57614fae614d71565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ff4826147f8565b9150614fff836147f8565b92508261500f5761500e614fba565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615076603583614748565b91506150818261501a565b604082019050919050565b600060208201905081810360008301526150a581615069565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615108603483614748565b9150615113826150ac565b604082019050919050565b60006020820190508181036000830152615137816150fb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061519a602483614748565b91506151a58261513e565b604082019050919050565b600060208201905081810360008301526151c98161518d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156152565780860481111561523257615231614d71565b5b60018516156152415780820291505b808102905061524f856151ff565b9450615216565b94509492505050565b60008261526f576001905061532b565b8161527d576000905061532b565b8160018114615293576002811461529d576152cc565b600191505061532b565b60ff8411156152af576152ae614d71565b5b8360020a9150848211156152c6576152c5614d71565b5b5061532b565b5060208310610133831016604e8410600b84101617156153015782820a9050838111156152fc576152fb614d71565b5b61532b565b61530e848484600161520c565b9250905081840481111561532557615324614d71565b5b81810290505b9392505050565b600061533d826147f8565b915061534883614a6e565b92506153757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461525f565b905092915050565b6000615388826147f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153ba576153b9614d71565b5b600182019050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006153fb601d83614748565b9150615406826153c5565b602082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061548d602683614748565b915061549882615431565b604082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006154f9601b83614748565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061558b602483614748565b91506155968261552f565b604082019050919050565b600060208201905081810360008301526155ba8161557e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061561d602283614748565b9150615628826155c1565b604082019050919050565b6000602082019050818103600083015261564c81615610565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156af602583614748565b91506156ba82615653565b604082019050919050565b600060208201905081810360008301526156de816156a2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615741602383614748565b915061574c826156e5565b604082019050919050565b6000602082019050818103600083015261577081615734565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006157d3603183614748565b91506157de82615777565b604082019050919050565b60006020820190508181036000830152615802816157c6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061583f601683614748565b915061584a82615809565b602082019050919050565b6000602082019050818103600083015261586e81615832565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158f7604983614748565b915061590282615875565b606082019050919050565b60006020820190508181036000830152615926816158ea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615989603583614748565b91506159948261592d565b604082019050919050565b600060208201905081810360008301526159b88161597c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159f5601383614748565b9150615a00826159bf565b602082019050919050565b60006020820190508181036000830152615a24816159e8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a87603683614748565b9150615a9282615a2b565b604082019050919050565b60006020820190508181036000830152615ab681615a7a565b9050919050565b6000615ac8826147f8565b9150615ad3836147f8565b925082821015615ae657615ae5614d71565b5b828203905092915050565b600081905092915050565b50565b6000615b0c600083615af1565b9150615b1782615afc565b600082019050919050565b6000615b2d82615aff565b9150819050919050565b6000606082019050615b4c600083018661491e565b615b59602083018561491e565b615b66604083018461491e565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615bca602183614748565b9150615bd582615b6e565b604082019050919050565b60006020820190508181036000830152615bf981615bbd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615c3e816146e4565b92915050565b600060208284031215615c5a57615c596146a8565b5b6000615c6884828501615c2f565b91505092915050565b6000819050919050565b6000615c96615c91615c8c84615c71565b6148a4565b6147f8565b9050919050565b615ca681615c7b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ce1816146d2565b82525050565b6000615cf38383615cd8565b60208301905092915050565b6000602082019050919050565b6000615d1782615cac565b615d218185615cb7565b9350615d2c83615cc8565b8060005b83811015615d5d578151615d448882615ce7565b9750615d4f83615cff565b925050600181019050615d30565b5085935050505092915050565b600060a082019050615d7f600083018861491e565b615d8c6020830187615c9d565b8181036040830152615d9e8186615d0c565b9050615dad6060830185614aa5565b615dba608083018461491e565b9695505050505050565b600060c082019050615dd96000830189614aa5565b615de6602083018861491e565b615df36040830187615c9d565b615e006060830186615c9d565b615e0d6080830185614aa5565b615e1a60a083018461491e565b979650505050505050565b600081519050615e3481614802565b92915050565b600080600060608486031215615e5357615e526146a8565b5b6000615e6186828701615e25565b9350506020615e7286828701615e25565b9250506040615e8386828701615e25565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122038e7099c5d4157fbcb88abd2567fc3d1c56bedd37aa6921aa2637441505976c164736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806395d89b41116101d1578063d257b34f11610102578063e7ad9fcd116100a0578063f63743421161006f578063f637434214610d39578063f6c7168714610d64578063f8b45b0514610d8f578063fb201b1d14610dba5761038c565b8063e7ad9fcd14610c91578063e884f26014610cba578063f11a24d314610ce5578063f2fde38b14610d105761038c565b8063d7da6914116100dc578063d7da691414610bd5578063d85ba06314610bfe578063dd62ed3e14610c29578063e2f4560514610c665761038c565b8063d257b34f14610b44578063d4090d2a14610b81578063d7331c0d14610bac5761038c565b8063aacebbe31161016f578063c024666811610149578063c024666814610a9c578063c876d0b914610ac5578063c8c8ebe414610af0578063cc4cfd3f14610b1b5761038c565b8063aacebbe314610a0b578063b62496f514610a34578063bbc0c74214610a715761038c565b80639fccce32116101ab5780639fccce321461093b578063a0d82dc514610966578063a457c2d714610991578063a9059cbb146109ce5761038c565b806395d89b41146108bc5780639a7a23d6146108e75780639c3b4fdc146109105761038c565b806339509351116102b657806370a08231116102545780637bce5a04116102235780637bce5a04146108125780638da5cb5b1461083d5780639213691314610868578063924de9b7146108935761038c565b806370a082311461076a578063715018a6146107a757806371a51522146107be5780637571336a146107e95761038c565b80634fbee193116102905780634fbee193146106ac578063540ba552146106e95780636a486a8e146107145780636ddd17131461073f5761038c565b8063395093511461061957806349bd5a5e146106565780634a62bb65146106815761038c565b80631816467f1161032357806323b872dd116102fd57806323b872dd1461055f5780632d5a5d341461059c5780632e6ed7ef146105c5578063313ce567146105ee5761038c565b80631816467f146104e05780631a8145bb146105095780631f3fed8f146105345761038c565b80630c3b2b9a1161035f5780630c3b2b9a1461042257806310d5de531461044d5780631694505e1461048a57806318160ddd146104b55761038c565b806304dacd501461039157806306fdde03146103ba578063095ea7b3146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190614710565b610dd1565b005b3480156103c657600080fd5b506103cf610eac565b6040516103dc91906147d6565b60405180910390f35b3480156103f157600080fd5b5061040c6004803603810190610407919061482e565b610f3e565b6040516104199190614889565b60405180910390f35b34801561042e57600080fd5b50610437610f5c565b6040516104449190614889565b60405180910390f35b34801561045957600080fd5b50610474600480360381019061046f9190614710565b610f6f565b6040516104819190614889565b60405180910390f35b34801561049657600080fd5b5061049f610f8f565b6040516104ac9190614903565b60405180910390f35b3480156104c157600080fd5b506104ca610fb3565b6040516104d7919061492d565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190614710565b610fbd565b005b34801561051557600080fd5b5061051e611114565b60405161052b919061492d565b60405180910390f35b34801561054057600080fd5b5061054961111a565b604051610556919061492d565b60405180910390f35b34801561056b57600080fd5b5061058660048036038101906105819190614948565b611120565b6040516105939190614889565b60405180910390f35b3480156105a857600080fd5b506105c360048036038101906105be91906149c7565b6111f9565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190614a07565b61133b565b005b3480156105fa57600080fd5b5061060361146a565b6040516106109190614a8a565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b919061482e565b611473565b60405161064d9190614889565b60405180910390f35b34801561066257600080fd5b5061066b611526565b6040516106789190614ab4565b60405180910390f35b34801561068d57600080fd5b5061069661154a565b6040516106a39190614889565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce9190614710565b61155d565b6040516106e09190614889565b60405180910390f35b3480156106f557600080fd5b506106fe6115b3565b60405161070b919061492d565b60405180910390f35b34801561072057600080fd5b506107296115b9565b604051610736919061492d565b60405180910390f35b34801561074b57600080fd5b506107546115bf565b6040516107619190614889565b60405180910390f35b34801561077657600080fd5b50610791600480360381019061078c9190614710565b6115d2565b60405161079e919061492d565b60405180910390f35b3480156107b357600080fd5b506107bc61161a565b005b3480156107ca57600080fd5b506107d3611772565b6040516107e0919061492d565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906149c7565b611778565b005b34801561081e57600080fd5b5061082761186a565b604051610834919061492d565b60405180910390f35b34801561084957600080fd5b50610852611870565b60405161085f9190614ab4565b60405180910390f35b34801561087457600080fd5b5061087d61189a565b60405161088a919061492d565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190614acf565b6118a0565b005b3480156108c857600080fd5b506108d1611954565b6040516108de91906147d6565b60405180910390f35b3480156108f357600080fd5b5061090e600480360381019061090991906149c7565b6119e6565b005b34801561091c57600080fd5b50610925611b19565b604051610932919061492d565b60405180910390f35b34801561094757600080fd5b50610950611b1f565b60405161095d919061492d565b60405180910390f35b34801561097257600080fd5b5061097b611b25565b604051610988919061492d565b60405180910390f35b34801561099d57600080fd5b506109b860048036038101906109b3919061482e565b611b2b565b6040516109c59190614889565b60405180910390f35b3480156109da57600080fd5b506109f560048036038101906109f0919061482e565b611bf8565b604051610a029190614889565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614710565b611c16565b005b348015610a4057600080fd5b50610a5b6004803603810190610a569190614710565b611d6d565b604051610a689190614889565b60405180910390f35b348015610a7d57600080fd5b50610a86611d8d565b604051610a939190614889565b60405180910390f35b348015610aa857600080fd5b50610ac36004803603810190610abe91906149c7565b611da0565b005b348015610ad157600080fd5b50610ada611ee0565b604051610ae79190614889565b60405180910390f35b348015610afc57600080fd5b50610b05611ef3565b604051610b12919061492d565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190614afc565b611ef9565b005b348015610b5057600080fd5b50610b6b6004803603810190610b669190614afc565b611fad565b604051610b789190614889565b60405180910390f35b348015610b8d57600080fd5b50610b9661211d565b604051610ba3919061492d565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce9190614afc565b612123565b005b348015610be157600080fd5b50610bfc6004803603810190610bf79190614be4565b61224d565b005b348015610c0a57600080fd5b50610c13612396565b604051610c20919061492d565b60405180910390f35b348015610c3557600080fd5b50610c506004803603810190610c4b9190614c65565b61239c565b604051610c5d919061492d565b60405180910390f35b348015610c7257600080fd5b50610c7b612423565b604051610c88919061492d565b60405180910390f35b348015610c9d57600080fd5b50610cb86004803603810190610cb39190614a07565b612429565b005b348015610cc657600080fd5b50610ccf612558565b604051610cdc9190614889565b60405180910390f35b348015610cf157600080fd5b50610cfa612613565b604051610d07919061492d565b60405180910390f35b348015610d1c57600080fd5b50610d376004803603810190610d329190614710565b612619565b005b348015610d4557600080fd5b50610d4e6127df565b604051610d5b919061492d565b60405180910390f35b348015610d7057600080fd5b50610d796127e5565b604051610d869190614889565b60405180910390f35b348015610d9b57600080fd5b50610da46128a0565b604051610db1919061492d565b60405180910390f35b348015610dc657600080fd5b50610dcf6128a6565b005b610dd96129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90614cf1565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ebb90614d40565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee790614d40565b8015610f345780601f10610f0957610100808354040283529160200191610f34565b820191906000526020600020905b815481529060010190602001808311610f1757829003601f168201915b5050505050905090565b6000610f52610f4b6129f5565b84846129fd565b6001905092915050565b600c60039054906101000a900460ff1681565b60216020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fc56129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90614cf1565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b600061112d848484612bc6565b6111ee846111396129f5565b6111e985604051806060016040528060288152602001615eb460289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061119f6129f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613acf9092919063ffffffff16565b6129fd565b600190509392505050565b6112016129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128790614cf1565b60405180910390fd5b436064601f546112a09190614da0565b116112e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d790614e42565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113436129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c990614cf1565b60405180910390fd5b836012819055508260138190555081601481905550806015819055506015546014546013546012546114049190614da0565b61140e9190614da0565b6114189190614da0565b60118190555060146011541115611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614eae565b60405180910390fd5b50505050565b60006012905090565b600061151c6114806129f5565b8461151785600160006114916129f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299790919063ffffffff16565b6129fd565b6001905092915050565b7f000000000000000000000000c5625d2f338247b59cd7137f555efc719fa0c38581565b600c60009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60155481565b60165481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116226129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890614cf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6117806129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690614cf1565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60125481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b6118a86129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e90614cf1565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461196390614d40565b80601f016020809104026020016040519081016040528092919081815260200182805461198f90614d40565b80156119dc5780601f106119b1576101008083540402835291602001916119dc565b820191906000526020600020905b8154815290600101906020018083116119bf57829003601f168201915b5050505050905090565b6119ee6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7490614cf1565b60405180910390fd5b7f000000000000000000000000c5625d2f338247b59cd7137f555efc719fa0c38573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0290614f40565b60405180910390fd5b611b158282613b33565b5050565b60145481565b601d5481565b60195481565b6000611bee611b386129f5565b84611be985604051806060016040528060258152602001615edc6025913960016000611b626129f5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613acf9092919063ffffffff16565b6129fd565b6001905092915050565b6000611c0c611c056129f5565b8484612bc6565b6001905092915050565b611c1e6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca490614cf1565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611da86129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90614cf1565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ed49190614889565b60405180910390a25050565b601060009054906101000a900460ff1681565b60095481565b611f016129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8790614cf1565b60405180910390fd5b670de0b6b3a764000081611fa49190614f60565b60098190555050565b6000611fb76129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d90614cf1565b60405180910390fd5b620186a06001612054610fb3565b61205e9190614f60565b6120689190614fe9565b8210156120aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a19061508c565b60405180910390fd5b6103e860056120b7610fb3565b6120c19190614f60565b6120cb9190614fe9565b82111561210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061511e565b60405180910390fd5b81600a8190555060019050919050565b601e5481565b61212b6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b190614cf1565b60405180910390fd5b670de0b6b3a76400006103e860056121d0610fb3565b6121da9190614f60565b6121e49190614fe9565b6121ee9190614fe9565b811015612230576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612227906151b0565b60405180910390fd5b670de0b6b3a7640000816122449190614f60565b600b8190555050565b6122556129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122db90614cf1565b60405180910390fd5b6123046122ef611870565b6122f7611870565b6122ff610fb3565b6129fd565b60005b8484905081101561238f5761237b33868684818110612329576123286151d0565b5b905060200201602081019061233e9190614710565b61234661146a565b600a6123529190615332565b868686818110612365576123646151d0565b5b905060200201356123769190614f60565b611120565b5080806123879061537d565b915050612307565b5050505050565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6124316129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614cf1565b60405180910390fd5b83601781905550826018819055508160198190555080601a81905550601a546019546018546017546124f29190614da0565b6124fc9190614da0565b6125069190614da0565b60168190555060196016541115612552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254990615411565b60405180910390fd5b50505050565b60006125626129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e890614cf1565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b60135481565b6126216129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a790614cf1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361271f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612716906154a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60006127ef6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590614cf1565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b600b5481565b6128ae6129f5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490614cf1565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555043601f819055506001600c60036101000a81548160ff021916908315150217905550565b60008082846129a69190614da0565b9050838110156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e29061550f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a63906155a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290615633565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bb9919061492d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2c906156c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9b90615757565b60405180910390fd5b600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d485750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7e906157e9565b60405180910390fd5b60008103612da057612d9b83836000613bd4565b613aca565b600c60009054906101000a900460ff161561346357612dbd611870565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e2b5750612dfb611870565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e645750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e9e575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eb75750600560149054906101000a900460ff16155b1561346257600c60019054906101000a900460ff16612fb157602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f715750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615855565b60405180910390fd5b5b601060009054906101000a900460ff161561317957612fce611870565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561305557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130ad57507f000000000000000000000000c5625d2f338247b59cd7137f555efc719fa0c38573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156131785743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312a9061590d565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561321c5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c357600954811115613266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325d9061599f565b60405180910390fd5b600b54613272836115d2565b8261327d9190614da0565b11156132be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b590615a0b565b60405180910390fd5b613461565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133665750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133b5576009548111156133b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a790615a9d565b60405180910390fd5b613460565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661345f57600b54613412836115d2565b8261341d9190614da0565b111561345e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345590615a0b565b60405180910390fd5b5b5b5b5b5b600c60039054906101000a900460ff1661358c576001601f546134869190614da0565b43111580156134e157507f000000000000000000000000c5625d2f338247b59cd7137f555efc719fa0c38573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561352d5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561358b576001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b6000613597306115d2565b90506000600a5482101590508080156135bc5750600c60029054906101000a900460ff165b80156135d55750600560149054906101000a900460ff16155b801561362b5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136815750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136d75750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561371b576001600560146101000a81548160ff0219169083151502179055506136ff613e67565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137d15750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137db57600090505b60008115613aba57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561383e57506000601654115b1561393e5761386b606461385d6016548861421b90919063ffffffff16565b61429590919063ffffffff16565b90506016546018548261387e9190614f60565b6138889190614fe9565b601c60008282546138999190614da0565b92505081905550601654601954826138b19190614f60565b6138bb9190614fe9565b601d60008282546138cc9190614da0565b92505081905550601654601754826138e49190614f60565b6138ee9190614fe9565b601b60008282546138ff9190614da0565b92505081905550601654601a54826139179190614f60565b6139219190614fe9565b601e60008282546139329190614da0565b92505081905550613a96565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561399957506000601154115b15613a95576139c660646139b86011548861421b90919063ffffffff16565b61429590919063ffffffff16565b9050601154601354826139d99190614f60565b6139e39190614fe9565b601c60008282546139f49190614da0565b9250508190555060115460145482613a0c9190614f60565b613a169190614fe9565b601d6000828254613a279190614da0565b9250508190555060115460125482613a3f9190614f60565b613a499190614fe9565b601b6000828254613a5a9190614da0565b9250508190555060115460155482613a729190614f60565b613a7c9190614fe9565b601e6000828254613a8d9190614da0565b925050819055505b5b6000811115613aab57613aaa873083613bd4565b5b8085613ab79190615abd565b94505b613ac5878787613bd4565b505050505b505050565b6000838311158290613b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0e91906147d6565b60405180910390fd5b5060008385613b269190615abd565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3a906156c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca990615757565b60405180910390fd5b613cbd8383836142df565b613d2881604051806060016040528060268152602001615e8e602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613acf9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613dbb816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613e5a919061492d565b60405180910390a3505050565b6000613e72306115d2565b90506000601d54601b54601c54613e899190614da0565b613e939190614da0565b9050600080831480613ea55750600082145b15613eb257505050614219565b6014600a54613ec19190614f60565b831115613eda576014600a54613ed79190614f60565b92505b6000600283601c5486613eed9190614f60565b613ef79190614fe9565b613f019190614fe9565b90506000613f1882866142e490919063ffffffff16565b90506000479050613f288261432e565b6000613f3d82476142e490919063ffffffff16565b90506000613f6887613f5a601b548561421b90919063ffffffff16565b61429590919063ffffffff16565b90506000613f9388613f85601d548661421b90919063ffffffff16565b61429590919063ffffffff16565b90506000613fbe89613fb0601e548761421b90919063ffffffff16565b61429590919063ffffffff16565b9050600081838587613fd09190615abd565b613fda9190615abd565b613fe49190615abd565b90506000601c819055506000601b819055506000601d819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161404c90615b22565b60006040518083038185875af1925050503d8060008114614089576040519150601f19603f3d011682016040523d82523d6000602084013e61408e565b606091505b505080995050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516140da90615b22565b60006040518083038185875af1925050503d8060008114614117576040519150601f19603f3d011682016040523d82523d6000602084013e61411c565b606091505b5050809950506000881180156141325750600081115b1561417f57614141888261456b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601c5460405161417693929190615b37565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516141c590615b22565b60006040518083038185875af1925050503d8060008114614202576040519150601f19603f3d011682016040523d82523d6000602084013e614207565b606091505b50508099505050505050505050505050505b565b600080830361422d576000905061428f565b6000828461423b9190614f60565b905082848261424a9190614fe9565b1461428a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428190615be0565b60405180910390fd5b809150505b92915050565b60006142d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614645565b905092915050565b505050565b600061432683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613acf565b905092915050565b6000600267ffffffffffffffff81111561434b5761434a615c00565b5b6040519080825280602002602001820160405280156143795781602001602082028036833780820191505090505b5090503081600081518110614391576143906151d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614436573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061445a9190615c44565b8160018151811061446e5761446d6151d0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144d3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129fd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614535959493929190615d6a565b600060405180830381600087803b15801561454f57600080fd5b505af1158015614563573d6000803e3d6000fd5b505050505050565b614596307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129fd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016145fb96959493929190615dc4565b60606040518083038185885af1158015614619573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061463e9190615e3a565b5050505050565b6000808311829061468c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161468391906147d6565b60405180910390fd5b506000838561469b9190614fe9565b9050809150509392505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146dd826146b2565b9050919050565b6146ed816146d2565b81146146f857600080fd5b50565b60008135905061470a816146e4565b92915050565b600060208284031215614726576147256146a8565b5b6000614734848285016146fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561477757808201518184015260208101905061475c565b83811115614786576000848401525b50505050565b6000601f19601f8301169050919050565b60006147a88261473d565b6147b28185614748565b93506147c2818560208601614759565b6147cb8161478c565b840191505092915050565b600060208201905081810360008301526147f0818461479d565b905092915050565b6000819050919050565b61480b816147f8565b811461481657600080fd5b50565b60008135905061482881614802565b92915050565b60008060408385031215614845576148446146a8565b5b6000614853858286016146fb565b925050602061486485828601614819565b9150509250929050565b60008115159050919050565b6148838161486e565b82525050565b600060208201905061489e600083018461487a565b92915050565b6000819050919050565b60006148c96148c46148bf846146b2565b6148a4565b6146b2565b9050919050565b60006148db826148ae565b9050919050565b60006148ed826148d0565b9050919050565b6148fd816148e2565b82525050565b600060208201905061491860008301846148f4565b92915050565b614927816147f8565b82525050565b6000602082019050614942600083018461491e565b92915050565b600080600060608486031215614961576149606146a8565b5b600061496f868287016146fb565b9350506020614980868287016146fb565b925050604061499186828701614819565b9150509250925092565b6149a48161486e565b81146149af57600080fd5b50565b6000813590506149c18161499b565b92915050565b600080604083850312156149de576149dd6146a8565b5b60006149ec858286016146fb565b92505060206149fd858286016149b2565b9150509250929050565b60008060008060808587031215614a2157614a206146a8565b5b6000614a2f87828801614819565b9450506020614a4087828801614819565b9350506040614a5187828801614819565b9250506060614a6287828801614819565b91505092959194509250565b600060ff82169050919050565b614a8481614a6e565b82525050565b6000602082019050614a9f6000830184614a7b565b92915050565b614aae816146d2565b82525050565b6000602082019050614ac96000830184614aa5565b92915050565b600060208284031215614ae557614ae46146a8565b5b6000614af3848285016149b2565b91505092915050565b600060208284031215614b1257614b116146a8565b5b6000614b2084828501614819565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614b4e57614b4d614b29565b5b8235905067ffffffffffffffff811115614b6b57614b6a614b2e565b5b602083019150836020820283011115614b8757614b86614b33565b5b9250929050565b60008083601f840112614ba457614ba3614b29565b5b8235905067ffffffffffffffff811115614bc157614bc0614b2e565b5b602083019150836020820283011115614bdd57614bdc614b33565b5b9250929050565b60008060008060408587031215614bfe57614bfd6146a8565b5b600085013567ffffffffffffffff811115614c1c57614c1b6146ad565b5b614c2887828801614b38565b9450945050602085013567ffffffffffffffff811115614c4b57614c4a6146ad565b5b614c5787828801614b8e565b925092505092959194509250565b60008060408385031215614c7c57614c7b6146a8565b5b6000614c8a858286016146fb565b9250506020614c9b858286016146fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cdb602083614748565b9150614ce682614ca5565b602082019050919050565b60006020820190508181036000830152614d0a81614cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d5857607f821691505b602082108103614d6b57614d6a614d11565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614dab826147f8565b9150614db6836147f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614deb57614dea614d71565b5b828201905092915050565b7f6578706972657320736f20636f6e7472616374206265636f6d65732073616665600082015250565b6000614e2c602083614748565b9150614e3782614df6565b602082019050919050565b60006020820190508181036000830152614e5b81614e1f565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614e98601d83614748565b9150614ea382614e62565b602082019050919050565b60006020820190508181036000830152614ec781614e8b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614f2a603983614748565b9150614f3582614ece565b604082019050919050565b60006020820190508181036000830152614f5981614f1d565b9050919050565b6000614f6b826147f8565b9150614f76836147f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614faf57614fae614d71565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ff4826147f8565b9150614fff836147f8565b92508261500f5761500e614fba565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000615076603583614748565b91506150818261501a565b604082019050919050565b600060208201905081810360008301526150a581615069565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000615108603483614748565b9150615113826150ac565b604082019050919050565b60006020820190508181036000830152615137816150fb565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061519a602483614748565b91506151a58261513e565b604082019050919050565b600060208201905081810360008301526151c98161518d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156152565780860481111561523257615231614d71565b5b60018516156152415780820291505b808102905061524f856151ff565b9450615216565b94509492505050565b60008261526f576001905061532b565b8161527d576000905061532b565b8160018114615293576002811461529d576152cc565b600191505061532b565b60ff8411156152af576152ae614d71565b5b8360020a9150848211156152c6576152c5614d71565b5b5061532b565b5060208310610133831016604e8410600b84101617156153015782820a9050838111156152fc576152fb614d71565b5b61532b565b61530e848484600161520c565b9250905081840481111561532557615324614d71565b5b81810290505b9392505050565b600061533d826147f8565b915061534883614a6e565b92506153757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461525f565b905092915050565b6000615388826147f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036153ba576153b9614d71565b5b600182019050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b60006153fb601d83614748565b9150615406826153c5565b602082019050919050565b6000602082019050818103600083015261542a816153ee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061548d602683614748565b915061549882615431565b604082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006154f9601b83614748565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061558b602483614748565b91506155968261552f565b604082019050919050565b600060208201905081810360008301526155ba8161557e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061561d602283614748565b9150615628826155c1565b604082019050919050565b6000602082019050818103600083015261564c81615610565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006156af602583614748565b91506156ba82615653565b604082019050919050565b600060208201905081810360008301526156de816156a2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615741602383614748565b915061574c826156e5565b604082019050919050565b6000602082019050818103600083015261577081615734565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006157d3603183614748565b91506157de82615777565b604082019050919050565b60006020820190508181036000830152615802816157c6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061583f601683614748565b915061584a82615809565b602082019050919050565b6000602082019050818103600083015261586e81615832565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158f7604983614748565b915061590282615875565b606082019050919050565b60006020820190508181036000830152615926816158ea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615989603583614748565b91506159948261592d565b604082019050919050565b600060208201905081810360008301526159b88161597c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159f5601383614748565b9150615a00826159bf565b602082019050919050565b60006020820190508181036000830152615a24816159e8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615a87603683614748565b9150615a9282615a2b565b604082019050919050565b60006020820190508181036000830152615ab681615a7a565b9050919050565b6000615ac8826147f8565b9150615ad3836147f8565b925082821015615ae657615ae5614d71565b5b828203905092915050565b600081905092915050565b50565b6000615b0c600083615af1565b9150615b1782615afc565b600082019050919050565b6000615b2d82615aff565b9150819050919050565b6000606082019050615b4c600083018661491e565b615b59602083018561491e565b615b66604083018461491e565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615bca602183614748565b9150615bd582615b6e565b604082019050919050565b60006020820190508181036000830152615bf981615bbd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615c3e816146e4565b92915050565b600060208284031215615c5a57615c596146a8565b5b6000615c6884828501615c2f565b91505092915050565b6000819050919050565b6000615c96615c91615c8c84615c71565b6148a4565b6147f8565b9050919050565b615ca681615c7b565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ce1816146d2565b82525050565b6000615cf38383615cd8565b60208301905092915050565b6000602082019050919050565b6000615d1782615cac565b615d218185615cb7565b9350615d2c83615cc8565b8060005b83811015615d5d578151615d448882615ce7565b9750615d4f83615cff565b925050600181019050615d30565b5085935050505092915050565b600060a082019050615d7f600083018861491e565b615d8c6020830187615c9d565b8181036040830152615d9e8186615d0c565b9050615dad6060830185614aa5565b615dba608083018461491e565b9695505050505050565b600060c082019050615dd96000830189614aa5565b615de6602083018861491e565b615df36040830187615c9d565b615e006060830186615c9d565b615e0d6080830185614aa5565b615e1a60a083018461491e565b979650505050505050565b600081519050615e3481614802565b92915050565b600080600060608486031215615e5357615e526146a8565b5b6000615e6186828701615e25565b9350506020615e7286828701615e25565b9250506040615e8386828701615e25565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122038e7099c5d4157fbcb88abd2567fc3d1c56bedd37aa6921aa2637441505976c164736f6c634300080e0033

Deployed Bytecode Sourcemap

29879:17238:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39075:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7977:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10151:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30437:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31592:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29957:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9100:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39208:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31268:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31228;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10803:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38172:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37064:444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8941:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11568:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30015:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30319:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39377:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31008:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31046;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30399:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9272:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22479:148;;;;;;;;;;;;;:::i;:::-;;31189:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36713:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30903:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21835:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31081:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36954:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8197:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38403:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30977:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31308:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31157:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12290:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9613:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38855:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31815:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30359:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37981:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30820:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30203:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36360:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35965:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31342:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36490:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35212:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30869:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9852:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30245:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37517:455;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35760:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30940:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22783:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31119:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35583:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30285:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35033:170;;;;;;;;;;;;;:::i;:::-;;39075:125;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39176:16:::1;39160:13;;:32;;;;;;;;;;;;;;;;;;39075:125:::0;:::o;7977:100::-;8031:13;8064:5;8057:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7977:100;:::o;10151:169::-;10234:4;10251:39;10260:12;:10;:12::i;:::-;10274:7;10283:6;10251:8;:39::i;:::-;10308:4;10301:11;;10151:169;;;;:::o;30437:28::-;;;;;;;;;;;;;:::o;31592:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29957:51::-;;;:::o;9100:108::-;9161:7;9188:12;;9181:19;;9100:108;:::o;39208:157::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39315:9:::1;;;;;;;;;;;39287:38;;39304:9;39287:38;;;;;;;;;;;;39348:9;39336;;:21;;;;;;;;;;;;;;;;;;39208:157:::0;:::o;31268:33::-;;;;:::o;31228:::-;;;;:::o;10803:355::-;10943:4;10960:36;10970:6;10978:9;10989:6;10960:9;:36::i;:::-;11007:121;11016:6;11024:12;:10;:12::i;:::-;11038:89;11076:6;11038:89;;;;;;;;;;;;;;;;;:11;:19;11050:6;11038:19;;;;;;;;;;;;;;;:33;11058:12;:10;:12::i;:::-;11038:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11007:8;:121::i;:::-;11146:4;11139:11;;10803:355;;;;;:::o;38172:222::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38291:12:::1;38285:3;38272:10;;:16;;;;:::i;:::-;:31;38264:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38373:13;38351:10;:19;38362:7;38351:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;38172:222:::0;;:::o;37064:444::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37219:13:::1;37201:15;:31;;;;37261:13;37243:15;:31;;;;37297:7;37285:9;:19;;;;37331:11;37315:13;:27;;;;37416:13;;37404:9;;37386:15;;37368;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;37353:12;:76;;;;37464:2;37448:12;;:18;;37440:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37064:444:::0;;;;:::o;8941:93::-;8999:5;9024:2;9017:9;;8941:93;:::o;11568:218::-;11656:4;11673:83;11682:12;:10;:12::i;:::-;11696:7;11705:50;11744:10;11705:11;:25;11717:12;:10;:12::i;:::-;11705:25;;;;;;;;;;;;;;;:34;11731:7;11705:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11673:8;:83::i;:::-;11774:4;11767:11;;11568:218;;;;:::o;30015:38::-;;;:::o;30319:33::-;;;;;;;;;;;;;:::o;39377:125::-;39442:4;39466:19;:28;39486:7;39466:28;;;;;;;;;;;;;;;;;;;;;;;;;39459:35;;39377:125;;;:::o;31008:28::-;;;;:::o;31046:::-;;;;:::o;30399:31::-;;;;;;;;;;;;;:::o;9272:127::-;9346:7;9373:9;:18;9383:7;9373:18;;;;;;;;;;;;;;;;9366:25;;9272:127;;;:::o;22479:148::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22586:1:::1;22549:40;;22570:6;;;;;;;;;;;22549:40;;;;;;;;;;;;22617:1;22600:6;;:19;;;;;;;;;;;;;;;;;;22479:148::o:0;31189:29::-;;;;:::o;36713:144::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36845:4:::1;36803:31;:39;36835:6;36803:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36713:144:::0;;:::o;30903:30::-;;;;:::o;21835:79::-;21873:7;21900:6;;;;;;;;;;;21893:13;;21835:79;:::o;31081:31::-;;;;:::o;36954:101::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37040:7:::1;37026:11;;:21;;;;;;;;;;;;;;;;;;36954:101:::0;:::o;8197:104::-;8253:13;8286:7;8279:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8197:104;:::o;38403:245::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38510:13:::1;38502:21;;:4;:21;;::::0;38494:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38599:41;38628:4;38634:5;38599:28;:41::i;:::-;38403:245:::0;;:::o;30977:24::-;;;;:::o;31308:27::-;;;;:::o;31157:25::-;;;;:::o;12290:269::-;12383:4;12400:129;12409:12;:10;:12::i;:::-;12423:7;12432:96;12471:15;12432:96;;;;;;;;;;;;;;;;;:11;:25;12444:12;:10;:12::i;:::-;12432:25;;;;;;;;;;;;;;;:34;12458:7;12432:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12400:8;:129::i;:::-;12547:4;12540:11;;12290:269;;;;:::o;9613:175::-;9699:4;9716:42;9726:12;:10;:12::i;:::-;9740:9;9751:6;9716:9;:42::i;:::-;9776:4;9769:11;;9613:175;;;;:::o;38855:208::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38992:15:::1;;;;;;;;;;;38949:59;;38972:18;38949:59;;;;;;;;;;;;39037:18;39019:15;;:36;;;;;;;;;;;;;;;;;;38855:208:::0;:::o;31815:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30359:33::-;;;;;;;;;;;;;:::o;37981:182::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38097:8:::1;38066:19;:28;38086:7;38066:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38137:7;38121:34;;;38146:8;38121:34;;;;;;:::i;:::-;;;;;;;;37981:182:::0;;:::o;30820:39::-;;;;;;;;;;;;;:::o;30203:35::-;;;;:::o;36360:121::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36466:6:::1;36456;:17;;;;:::i;:::-;36433:20;:40;;;;36360:121:::0;:::o;35965:386::-;36046:4;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36103:6:::1;36099:1;36083:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;36070:9;:39;;36062:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;36219:4;36215:1;36199:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36186:9;:37;;36178:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36312:9;36291:18;:30;;;;36339:4;36332:11;;35965:386:::0;;;:::o;31342:31::-;;;;:::o;36490:214::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36611:4:::1;36605;36601:1;36585:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36584:31;;;;:::i;:::-;36574:6;:41;;36566:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36689:6;36679;:17;;;;:::i;:::-;36667:9;:29;;;;36490:214:::0;:::o;35212:319::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35328:41:::1;35337:7;:5;:7::i;:::-;35346;:5;:7::i;:::-;35355:13;:11;:13::i;:::-;35328:8;:41::i;:::-;35385:9;35380:144;35404:10;;:17;;35400:1;:21;35380:144;;;35443:69;35456:10;35468;;35479:1;35468:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;35501:10;:8;:10::i;:::-;35495:2;:16;;;;:::i;:::-;35483:6;;35490:1;35483:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;35443:12;:69::i;:::-;;35423:3;;;;;:::i;:::-;;;;35380:144;;;;35212:319:::0;;;;:::o;30869:27::-;;;;:::o;9852:151::-;9941:7;9968:11;:18;9980:5;9968:18;;;;;;;;;;;;;;;:27;9987:7;9968:27;;;;;;;;;;;;;;;;9961:34;;9852:151;;;;:::o;30245:33::-;;;;:::o;37517:455::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37674:13:::1;37655:16;:32;;;;37717:13;37698:16;:32;;;;37754:7;37741:10;:20;;;;37789:11;37772:14;:28;;;;37878:14;;37865:10;;37846:16;;37827;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;37811:13;:81;;;;37928:2;37911:13;;:19;;37903:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37517:455:::0;;;;:::o;35760:134::-;35820:4;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35859:5:::1;35836:20;;:28;;;;;;;;;;;;;;;;;;35882:4;35875:11;;35760:134:::0;:::o;30940:30::-;;;;:::o;22783:244::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22892:1:::1;22872:22;;:8;:22;;::::0;22864:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22982:8;22953:38;;22974:6;;;;;;;;;;;22953:38;;;;;;;;;;;;23011:8;23002:6;;:17;;;;;;;;;;;;;;;;;;22783:244:::0;:::o;31119:31::-;;;;:::o;35583:115::-;35630:4;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35663:5:::1;35646:14;;:22;;;;;;;;;;;;;;;;;;35686:4;35679:11;;35583:115:::0;:::o;30285:24::-;;;;:::o;35033:170::-;22058:12;:10;:12::i;:::-;22048:22;;:6;;;;;;;;;;;:22;;;22040:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35100:4:::1;35084:13;;:20;;;;;;;;;;;;;;;;;;35129:4;35115:11;;:18;;;;;;;;;;;;;;;;;;35157:12;35144:10;:25;;;;35191:4;35180:8;;:15;;;;;;;;;;;;;;;;;;35033:170::o:0;16867:182::-;16925:7;16945:9;16961:1;16957;:5;;;;:::i;:::-;16945:17;;16986:1;16981;:6;;16973:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17040:1;17033:8;;;16867:182;;;;:::o;668:98::-;721:7;748:10;741:17;;668:98;:::o;15486:381::-;15639:1;15622:19;;:5;:19;;;15614:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15720:1;15701:21;;:7;:21;;;15693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15805:6;15775:11;:18;15787:5;15775:18;;;;;;;;;;;;;;;:27;15794:7;15775:27;;;;;;;;;;;;;;;:36;;;;15843:7;15827:32;;15836:5;15827:32;;;15852:6;15827:32;;;;;;:::i;:::-;;;;;;;;15486:381;;;:::o;39562:4624::-;39710:1;39694:18;;:4;:18;;;39686:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39787:1;39773:16;;:2;:16;;;39765:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39849:10;:14;39860:2;39849:14;;;;;;;;;;;;;;;;;;;;;;;;;39848:15;:36;;;;;39868:10;:16;39879:4;39868:16;;;;;;;;;;;;;;;;;;;;;;;;;39867:17;39848:36;39840:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39963:1;39953:6;:11;39950:92;;39981:28;39997:4;40003:2;40007:1;39981:15;:28::i;:::-;40024:7;;39950:92;40058:14;;;;;;;;;;;40055:1811;;;40118:7;:5;:7::i;:::-;40110:15;;:4;:15;;;;:49;;;;;40152:7;:5;:7::i;:::-;40146:13;;:2;:13;;;;40110:49;:86;;;;;40194:1;40180:16;;:2;:16;;;;40110:86;:128;;;;;40231:6;40217:21;;:2;:21;;;;40110:128;:158;;;;;40260:8;;;;;;;;;;;40259:9;40110:158;40088:1767;;;40306:13;;;;;;;;;;;40302:148;;40351:19;:25;40371:4;40351:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40380:19;:23;40400:2;40380:23;;;;;;;;;;;;;;;;;;;;;;;;;40351:52;40343:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40302:148;40609:20;;;;;;;;;;;40605:423;;;40663:7;:5;:7::i;:::-;40657:13;;:2;:13;;;;:47;;;;;40688:15;40674:30;;:2;:30;;;;40657:47;:79;;;;;40722:13;40708:28;;:2;:28;;;;40657:79;40653:356;;;40814:12;40772:28;:39;40801:9;40772:39;;;;;;;;;;;;;;;;:54;40764:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40973:12;40931:28;:39;40960:9;40931:39;;;;;;;;;;;;;;;:54;;;;40653:356;40605:423;41081:25;:31;41107:4;41081:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;41117:31;:35;41149:2;41117:35;;;;;;;;;;;;;;;;;;;;;;;;;41116:36;41081:71;41077:763;;;41199:20;;41189:6;:30;;41181:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;41338:9;;41321:13;41331:2;41321:9;:13::i;:::-;41312:6;:22;;;;:::i;:::-;:35;;41304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41077:763;;;41450:25;:29;41476:2;41450:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;41484:31;:37;41516:4;41484:37;;;;;;;;;;;;;;;;;;;;;;;;;41483:38;41450:71;41446:394;;;41568:20;;41558:6;:30;;41550:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;41446:394;;;41694:31;:35;41726:2;41694:35;;;;;;;;;;;;;;;;;;;;;;;;;41690:150;;41787:9;;41770:13;41780:2;41770:9;:13::i;:::-;41761:6;:22;;;;:::i;:::-;:35;;41753:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41690:150;41446:394;41077:763;40088:1767;40055:1811;41881:8;;;;;;;;;;;41876:315;;41983:1;41970:10;;:14;;;;:::i;:::-;41953:12;:32;;:73;;;;;42013:13;42007:19;;:2;:19;;;;41953:73;:152;;;;;42062:42;42048:57;;:2;:57;;;;41953:152;41949:221;;;42154:4;42137:10;:14;42148:2;42137:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41949:221;41876:315;42201:28;42232:24;42250:4;42232:9;:24::i;:::-;42201:55;;42270:12;42309:18;;42285:20;:42;;42270:57;;42359:7;:35;;;;;42383:11;;;;;;;;;;;42359:35;:61;;;;;42412:8;;;;;;;;;;;42411:9;42359:61;:110;;;;;42438:25;:31;42464:4;42438:31;;;;;;;;;;;;;;;;;;;;;;;;;42437:32;42359:110;:153;;;;;42487:19;:25;42507:4;42487:25;;;;;;;;;;;;;;;;;;;;;;;;;42486:26;42359:153;:194;;;;;42530:19;:23;42550:2;42530:23;;;;;;;;;;;;;;;;;;;;;;;;;42529:24;42359:194;42341:328;;;42591:4;42580:8;;:15;;;;;;;;;;;;;;;;;;42613:10;:8;:10::i;:::-;42652:5;42641:8;;:16;;;;;;;;;;;;;;;;;;42341:328;42689:12;42705:8;;;;;;;;;;;42704:9;42689:24;;42815:19;:25;42835:4;42815:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42844:19;:23;42864:2;42844:23;;;;;;;;;;;;;;;;;;;;;;;;;42815:52;42812:99;;;42894:5;42884:15;;42812:99;42924:12;43028:7;43025:1107;;;43079:25;:29;43105:2;43079:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43128:1;43112:13;;:17;43079:50;43075:904;;;43156:34;43186:3;43156:25;43167:13;;43156:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43149:41;;43257:13;;43238:16;;43231:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43209:18;;:61;;;;;;;:::i;:::-;;;;;;;;43325:13;;43312:10;;43305:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;43289:12;;:49;;;;;;;:::i;:::-;;;;;;;;43405:13;;43386:16;;43379:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43357:18;;:61;;;;;;;:::i;:::-;;;;;;;;43481:13;;43464:14;;43457:4;:21;;;;:::i;:::-;:37;;;;:::i;:::-;43437:16;;:57;;;;;;;:::i;:::-;;;;;;;;43075:904;;;43555:25;:31;43581:4;43555:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43605:1;43590:12;;:16;43555:51;43552:427;;;43634:33;43663:3;43634:24;43645:12;;43634:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43627:40;;43733:12;;43715:15;;43708:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43686:18;;:59;;;;;;;:::i;:::-;;;;;;;;43799:12;;43787:9;;43780:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;43764:12;;:47;;;;;;;:::i;:::-;;;;;;;;43877:12;;43859:15;;43852:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43830:18;;:59;;;;;;;:::i;:::-;;;;;;;;43951:12;;43935:13;;43928:4;:20;;;;:::i;:::-;:35;;;;:::i;:::-;43908:16;;:55;;;;;;;:::i;:::-;;;;;;;;43552:427;43075:904;44006:1;43999:4;:8;43996:93;;;44031:42;44047:4;44061;44068;44031:15;:42::i;:::-;43996:93;44116:4;44106:14;;;;;:::i;:::-;;;43025:1107;44145:33;44161:4;44167:2;44171:6;44145:15;:33::i;:::-;39675:4511;;;;39562:4624;;;;:::o;17773:193::-;17859:7;17892:1;17887;:6;;17895:12;17879:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17919:9;17935:1;17931;:5;;;;:::i;:::-;17919:17;;17957:1;17950:8;;;17773:193;;;;;:::o;38657:189::-;38774:5;38740:25;:31;38766:4;38740:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38832:5;38798:40;;38826:4;38798:40;;;;;;;;;;;;38657:189;;:::o;13050:575::-;13208:1;13190:20;;:6;:20;;;13182:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13292:1;13271:23;;:9;:23;;;13263:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13348:47;13369:6;13377:9;13388:6;13348:20;:47::i;:::-;13429:71;13451:6;13429:71;;;;;;;;;;;;;;;;;:9;:17;13439:6;13429:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13409:9;:17;13419:6;13409:17;;;;;;;;;;;;;;;:91;;;;13534:32;13559:6;13534:9;:20;13544:9;13534:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13511:9;:20;13521:9;13511:20;;;;;;;;;;;;;;;:55;;;;13599:9;13582:35;;13591:6;13582:35;;;13610:6;13582:35;;;;;;:::i;:::-;;;;;;;;13050:575;;;:::o;45330:1782::-;45369:23;45395:24;45413:4;45395:9;:24::i;:::-;45369:50;;45430:25;45500:12;;45479:18;;45458;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45430:82;;45523:12;45571:1;45552:15;:20;:46;;;;45597:1;45576:17;:22;45552:46;45549:60;;;45601:7;;;;;45549:60;45664:2;45643:18;;:23;;;;:::i;:::-;45625:15;:41;45622:111;;;45719:2;45698:18;;:23;;;;:::i;:::-;45680:41;;45622:111;45795:23;45880:1;45860:17;45839:18;;45821:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45795:86;;45892:26;45921:36;45941:15;45921;:19;;:36;;;;:::i;:::-;45892:65;;45971:25;45999:21;45971:49;;46034:36;46051:18;46034:16;:36::i;:::-;46085:18;46106:44;46132:17;46106:21;:25;;:44;;;;:::i;:::-;46085:65;;46164:23;46190:57;46229:17;46190:34;46205:18;;46190:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;46164:83;;46258:17;46278:51;46311:17;46278:28;46293:12;;46278:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46258:71;;46340:21;46364:55;46401:17;46364:32;46379:16;;46364:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;46340:79;;46430:23;46499:13;46487:9;46469:15;46456:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;:56;;;;:::i;:::-;46430:82;;46550:1;46529:18;:22;;;;46583:1;46562:18;:22;;;;46610:1;46595:12;:16;;;;46641:1;46622:16;:20;;;;46677:9;;;;;;;;;;;46669:23;;46700:9;46669:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46656:58;;;;;46746:13;;;;;;;;;;;46738:27;;46773:13;46738:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46725:66;;;;;46826:1;46808:15;:19;:42;;;;;46849:1;46831:15;:19;46808:42;46805:210;;;46866:46;46879:15;46896;46866:12;:46::i;:::-;46932:71;46947:18;46967:15;46984:18;;46932:71;;;;;;;;:::i;:::-;;;;;;;;46805:210;47049:15;;;;;;;;;;;47041:29;;47078:21;47041:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47028:76;;;;;45358:1754;;;;;;;;;;;45330:1782;:::o;18226:473::-;18284:7;18534:1;18529;:6;18525:47;;18559:1;18552:8;;;;18525:47;18585:9;18601:1;18597;:5;;;;:::i;:::-;18585:17;;18630:1;18625;18621;:5;;;;:::i;:::-;:10;18613:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18690:1;18683:8;;;18226:473;;;;;:::o;19176:132::-;19234:7;19261:39;19265:1;19268;19261:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19254:46;;19176:132;;;;:::o;16471:125::-;;;;:::o;17333:136::-;17391:7;17418:43;17422:1;17425;17418:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17411:50;;17333:136;;;;:::o;44195:597::-;44324:21;44362:1;44348:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44324:40;;44393:4;44375;44380:1;44375:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44419:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44409:4;44414:1;44409:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44455:62;44472:4;44487:15;44505:11;44455:8;:62::i;:::-;44557:15;:66;;;44638:11;44664:1;44708:4;44735;44755:15;44557:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44250:542;44195:597;:::o;44801:520::-;44949:62;44966:4;44981:15;44999:11;44949:8;:62::i;:::-;45055:15;:31;;;45094:9;45127:4;45147:11;45173:1;45216;45267:4;45287:15;45055:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44801:520;;:::o;19805:279::-;19891:7;19923:1;19919;:5;19926:12;19911:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19950:9;19966:1;19962;:5;;;;:::i;:::-;19950:17;;20075:1;20068:8;;;19805:279;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:307::-;1524:1;1534:113;1548:6;1545:1;1542:13;1534:113;;;1633:1;1628:3;1624:11;1618:18;1614:1;1609:3;1605:11;1598:39;1570:2;1567:1;1563:10;1558:15;;1534:113;;;1665:6;1662:1;1659:13;1656:101;;;1745:1;1736:6;1731:3;1727:16;1720:27;1656:101;1505:258;1456:307;;;:::o;1769:102::-;1810:6;1861:2;1857:7;1852:2;1845:5;1841:14;1837:28;1827:38;;1769:102;;;:::o;1877:364::-;1965:3;1993:39;2026:5;1993:39;:::i;:::-;2048:71;2112:6;2107:3;2048:71;:::i;:::-;2041:78;;2128:52;2173:6;2168:3;2161:4;2154:5;2150:16;2128:52;:::i;:::-;2205:29;2227:6;2205:29;:::i;:::-;2200:3;2196:39;2189:46;;1969:272;1877:364;;;;:::o;2247:313::-;2360:4;2398:2;2387:9;2383:18;2375:26;;2447:9;2441:4;2437:20;2433:1;2422:9;2418:17;2411:47;2475:78;2548:4;2539:6;2475:78;:::i;:::-;2467:86;;2247:313;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:116::-;5854:21;5869:5;5854:21;:::i;:::-;5847:5;5844:32;5834:60;;5890:1;5887;5880:12;5834:60;5784:116;:::o;5906:133::-;5949:5;5987:6;5974:20;5965:29;;6003:30;6027:5;6003:30;:::i;:::-;5906:133;;;;:::o;6045:468::-;6110:6;6118;6167:2;6155:9;6146:7;6142:23;6138:32;6135:119;;;6173:79;;:::i;:::-;6135:119;6293:1;6318:53;6363:7;6354:6;6343:9;6339:22;6318:53;:::i;:::-;6308:63;;6264:117;6420:2;6446:50;6488:7;6479:6;6468:9;6464:22;6446:50;:::i;:::-;6436:60;;6391:115;6045:468;;;;;:::o;6519:765::-;6605:6;6613;6621;6629;6678:3;6666:9;6657:7;6653:23;6649:33;6646:120;;;6685:79;;:::i;:::-;6646:120;6805:1;6830:53;6875:7;6866:6;6855:9;6851:22;6830:53;:::i;:::-;6820:63;;6776:117;6932:2;6958:53;7003:7;6994:6;6983:9;6979:22;6958:53;:::i;:::-;6948:63;;6903:118;7060:2;7086:53;7131:7;7122:6;7111:9;7107:22;7086:53;:::i;:::-;7076:63;;7031:118;7188:2;7214:53;7259:7;7250:6;7239:9;7235:22;7214:53;:::i;:::-;7204:63;;7159:118;6519:765;;;;;;;:::o;7290:86::-;7325:7;7365:4;7358:5;7354:16;7343:27;;7290:86;;;:::o;7382:112::-;7465:22;7481:5;7465:22;:::i;:::-;7460:3;7453:35;7382:112;;:::o;7500:214::-;7589:4;7627:2;7616:9;7612:18;7604:26;;7640:67;7704:1;7693:9;7689:17;7680:6;7640:67;:::i;:::-;7500:214;;;;:::o;7720:118::-;7807:24;7825:5;7807:24;:::i;:::-;7802:3;7795:37;7720:118;;:::o;7844:222::-;7937:4;7975:2;7964:9;7960:18;7952:26;;7988:71;8056:1;8045:9;8041:17;8032:6;7988:71;:::i;:::-;7844:222;;;;:::o;8072:323::-;8128:6;8177:2;8165:9;8156:7;8152:23;8148:32;8145:119;;;8183:79;;:::i;:::-;8145:119;8303:1;8328:50;8370:7;8361:6;8350:9;8346:22;8328:50;:::i;:::-;8318:60;;8274:114;8072:323;;;;:::o;8401:329::-;8460:6;8509:2;8497:9;8488:7;8484:23;8480:32;8477:119;;;8515:79;;:::i;:::-;8477:119;8635:1;8660:53;8705:7;8696:6;8685:9;8681:22;8660:53;:::i;:::-;8650:63;;8606:117;8401:329;;;;:::o;8736:117::-;8845:1;8842;8835:12;8859:117;8968:1;8965;8958:12;8982:117;9091:1;9088;9081:12;9122:568;9195:8;9205:6;9255:3;9248:4;9240:6;9236:17;9232:27;9222:122;;9263:79;;:::i;:::-;9222:122;9376:6;9363:20;9353:30;;9406:18;9398:6;9395:30;9392:117;;;9428:79;;:::i;:::-;9392:117;9542:4;9534:6;9530:17;9518:29;;9596:3;9588:4;9580:6;9576:17;9566:8;9562:32;9559:41;9556:128;;;9603:79;;:::i;:::-;9556:128;9122:568;;;;;:::o;9713:::-;9786:8;9796:6;9846:3;9839:4;9831:6;9827:17;9823:27;9813:122;;9854:79;;:::i;:::-;9813:122;9967:6;9954:20;9944:30;;9997:18;9989:6;9986:30;9983:117;;;10019:79;;:::i;:::-;9983:117;10133:4;10125:6;10121:17;10109:29;;10187:3;10179:4;10171:6;10167:17;10157:8;10153:32;10150:41;10147:128;;;10194:79;;:::i;:::-;10147:128;9713:568;;;;;:::o;10287:934::-;10409:6;10417;10425;10433;10482:2;10470:9;10461:7;10457:23;10453:32;10450:119;;;10488:79;;:::i;:::-;10450:119;10636:1;10625:9;10621:17;10608:31;10666:18;10658:6;10655:30;10652:117;;;10688:79;;:::i;:::-;10652:117;10801:80;10873:7;10864:6;10853:9;10849:22;10801:80;:::i;:::-;10783:98;;;;10579:312;10958:2;10947:9;10943:18;10930:32;10989:18;10981:6;10978:30;10975:117;;;11011:79;;:::i;:::-;10975:117;11124:80;11196:7;11187:6;11176:9;11172:22;11124:80;:::i;:::-;11106:98;;;;10901:313;10287:934;;;;;;;:::o;11227:474::-;11295:6;11303;11352:2;11340:9;11331:7;11327:23;11323:32;11320:119;;;11358:79;;:::i;:::-;11320:119;11478:1;11503:53;11548:7;11539:6;11528:9;11524:22;11503:53;:::i;:::-;11493:63;;11449:117;11605:2;11631:53;11676:7;11667:6;11656:9;11652:22;11631:53;:::i;:::-;11621:63;;11576:118;11227:474;;;;;:::o;11707:182::-;11847:34;11843:1;11835:6;11831:14;11824:58;11707:182;:::o;11895:366::-;12037:3;12058:67;12122:2;12117:3;12058:67;:::i;:::-;12051:74;;12134:93;12223:3;12134:93;:::i;:::-;12252:2;12247:3;12243:12;12236:19;;11895:366;;;:::o;12267:419::-;12433:4;12471:2;12460:9;12456:18;12448:26;;12520:9;12514:4;12510:20;12506:1;12495:9;12491:17;12484:47;12548:131;12674:4;12548:131;:::i;:::-;12540:139;;12267:419;;;:::o;12692:180::-;12740:77;12737:1;12730:88;12837:4;12834:1;12827:15;12861:4;12858:1;12851:15;12878:320;12922:6;12959:1;12953:4;12949:12;12939:22;;13006:1;13000:4;12996:12;13027:18;13017:81;;13083:4;13075:6;13071:17;13061:27;;13017:81;13145:2;13137:6;13134:14;13114:18;13111:38;13108:84;;13164:18;;:::i;:::-;13108:84;12929:269;12878:320;;;:::o;13204:180::-;13252:77;13249:1;13242:88;13349:4;13346:1;13339:15;13373:4;13370:1;13363:15;13390:305;13430:3;13449:20;13467:1;13449:20;:::i;:::-;13444:25;;13483:20;13501:1;13483:20;:::i;:::-;13478:25;;13637:1;13569:66;13565:74;13562:1;13559:81;13556:107;;;13643:18;;:::i;:::-;13556:107;13687:1;13684;13680:9;13673:16;;13390:305;;;;:::o;13701:182::-;13841:34;13837:1;13829:6;13825:14;13818:58;13701:182;:::o;13889:366::-;14031:3;14052:67;14116:2;14111:3;14052:67;:::i;:::-;14045:74;;14128:93;14217:3;14128:93;:::i;:::-;14246:2;14241:3;14237:12;14230:19;;13889:366;;;:::o;14261:419::-;14427:4;14465:2;14454:9;14450:18;14442:26;;14514:9;14508:4;14504:20;14500:1;14489:9;14485:17;14478:47;14542:131;14668:4;14542:131;:::i;:::-;14534:139;;14261:419;;;:::o;14686:179::-;14826:31;14822:1;14814:6;14810:14;14803:55;14686:179;:::o;14871:366::-;15013:3;15034:67;15098:2;15093:3;15034:67;:::i;:::-;15027:74;;15110:93;15199:3;15110:93;:::i;:::-;15228:2;15223:3;15219:12;15212:19;;14871:366;;;:::o;15243:419::-;15409:4;15447:2;15436:9;15432:18;15424:26;;15496:9;15490:4;15486:20;15482:1;15471:9;15467:17;15460:47;15524:131;15650:4;15524:131;:::i;:::-;15516:139;;15243:419;;;:::o;15668:244::-;15808:34;15804:1;15796:6;15792:14;15785:58;15877:27;15872:2;15864:6;15860:15;15853:52;15668:244;:::o;15918:366::-;16060:3;16081:67;16145:2;16140:3;16081:67;:::i;:::-;16074:74;;16157:93;16246:3;16157:93;:::i;:::-;16275:2;16270:3;16266:12;16259:19;;15918:366;;;:::o;16290:419::-;16456:4;16494:2;16483:9;16479:18;16471:26;;16543:9;16537:4;16533:20;16529:1;16518:9;16514:17;16507:47;16571:131;16697:4;16571:131;:::i;:::-;16563:139;;16290:419;;;:::o;16715:348::-;16755:7;16778:20;16796:1;16778:20;:::i;:::-;16773:25;;16812:20;16830:1;16812:20;:::i;:::-;16807:25;;17000:1;16932:66;16928:74;16925:1;16922:81;16917:1;16910:9;16903:17;16899:105;16896:131;;;17007:18;;:::i;:::-;16896:131;17055:1;17052;17048:9;17037:20;;16715:348;;;;:::o;17069:180::-;17117:77;17114:1;17107:88;17214:4;17211:1;17204:15;17238:4;17235:1;17228:15;17255:185;17295:1;17312:20;17330:1;17312:20;:::i;:::-;17307:25;;17346:20;17364:1;17346:20;:::i;:::-;17341:25;;17385:1;17375:35;;17390:18;;:::i;:::-;17375:35;17432:1;17429;17425:9;17420:14;;17255:185;;;;:::o;17446:240::-;17586:34;17582:1;17574:6;17570:14;17563:58;17655:23;17650:2;17642:6;17638:15;17631:48;17446:240;:::o;17692:366::-;17834:3;17855:67;17919:2;17914:3;17855:67;:::i;:::-;17848:74;;17931:93;18020:3;17931:93;:::i;:::-;18049:2;18044:3;18040:12;18033:19;;17692:366;;;:::o;18064:419::-;18230:4;18268:2;18257:9;18253:18;18245:26;;18317:9;18311:4;18307:20;18303:1;18292:9;18288:17;18281:47;18345:131;18471:4;18345:131;:::i;:::-;18337:139;;18064:419;;;:::o;18489:239::-;18629:34;18625:1;18617:6;18613:14;18606:58;18698:22;18693:2;18685:6;18681:15;18674:47;18489:239;:::o;18734:366::-;18876:3;18897:67;18961:2;18956:3;18897:67;:::i;:::-;18890:74;;18973:93;19062:3;18973:93;:::i;:::-;19091:2;19086:3;19082:12;19075:19;;18734:366;;;:::o;19106:419::-;19272:4;19310:2;19299:9;19295:18;19287:26;;19359:9;19353:4;19349:20;19345:1;19334:9;19330:17;19323:47;19387:131;19513:4;19387:131;:::i;:::-;19379:139;;19106:419;;;:::o;19531:223::-;19671:34;19667:1;19659:6;19655:14;19648:58;19740:6;19735:2;19727:6;19723:15;19716:31;19531:223;:::o;19760:366::-;19902:3;19923:67;19987:2;19982:3;19923:67;:::i;:::-;19916:74;;19999:93;20088:3;19999:93;:::i;:::-;20117:2;20112:3;20108:12;20101:19;;19760:366;;;:::o;20132:419::-;20298:4;20336:2;20325:9;20321:18;20313:26;;20385:9;20379:4;20375:20;20371:1;20360:9;20356:17;20349:47;20413:131;20539:4;20413:131;:::i;:::-;20405:139;;20132:419;;;:::o;20557:180::-;20605:77;20602:1;20595:88;20702:4;20699:1;20692:15;20726:4;20723:1;20716:15;20743:102;20785:8;20832:5;20829:1;20825:13;20804:34;;20743:102;;;:::o;20851:848::-;20912:5;20919:4;20943:6;20934:15;;20967:5;20958:14;;20981:712;21002:1;20992:8;20989:15;20981:712;;;21097:4;21092:3;21088:14;21082:4;21079:24;21076:50;;;21106:18;;:::i;:::-;21076:50;21156:1;21146:8;21142:16;21139:451;;;21571:4;21564:5;21560:16;21551:25;;21139:451;21621:4;21615;21611:15;21603:23;;21651:32;21674:8;21651:32;:::i;:::-;21639:44;;20981:712;;;20851:848;;;;;;;:::o;21705:1073::-;21759:5;21950:8;21940:40;;21971:1;21962:10;;21973:5;;21940:40;21999:4;21989:36;;22016:1;22007:10;;22018:5;;21989:36;22085:4;22133:1;22128:27;;;;22169:1;22164:191;;;;22078:277;;22128:27;22146:1;22137:10;;22148:5;;;22164:191;22209:3;22199:8;22196:17;22193:43;;;22216:18;;:::i;:::-;22193:43;22265:8;22262:1;22258:16;22249:25;;22300:3;22293:5;22290:14;22287:40;;;22307:18;;:::i;:::-;22287:40;22340:5;;;22078:277;;22464:2;22454:8;22451:16;22445:3;22439:4;22436:13;22432:36;22414:2;22404:8;22401:16;22396:2;22390:4;22387:12;22383:35;22367:111;22364:246;;;22520:8;22514:4;22510:19;22501:28;;22555:3;22548:5;22545:14;22542:40;;;22562:18;;:::i;:::-;22542:40;22595:5;;22364:246;22635:42;22673:3;22663:8;22657:4;22654:1;22635:42;:::i;:::-;22620:57;;;;22709:4;22704:3;22700:14;22693:5;22690:25;22687:51;;;22718:18;;:::i;:::-;22687:51;22767:4;22760:5;22756:16;22747:25;;21705:1073;;;;;;:::o;22784:281::-;22842:5;22866:23;22884:4;22866:23;:::i;:::-;22858:31;;22910:25;22926:8;22910:25;:::i;:::-;22898:37;;22954:104;22991:66;22981:8;22975:4;22954:104;:::i;:::-;22945:113;;22784:281;;;;:::o;23071:233::-;23110:3;23133:24;23151:5;23133:24;:::i;:::-;23124:33;;23179:66;23172:5;23169:77;23166:103;;23249:18;;:::i;:::-;23166:103;23296:1;23289:5;23285:13;23278:20;;23071:233;;;:::o;23310:179::-;23450:31;23446:1;23438:6;23434:14;23427:55;23310:179;:::o;23495:366::-;23637:3;23658:67;23722:2;23717:3;23658:67;:::i;:::-;23651:74;;23734:93;23823:3;23734:93;:::i;:::-;23852:2;23847:3;23843:12;23836:19;;23495:366;;;:::o;23867:419::-;24033:4;24071:2;24060:9;24056:18;24048:26;;24120:9;24114:4;24110:20;24106:1;24095:9;24091:17;24084:47;24148:131;24274:4;24148:131;:::i;:::-;24140:139;;23867:419;;;:::o;24292:225::-;24432:34;24428:1;24420:6;24416:14;24409:58;24501:8;24496:2;24488:6;24484:15;24477:33;24292:225;:::o;24523:366::-;24665:3;24686:67;24750:2;24745:3;24686:67;:::i;:::-;24679:74;;24762:93;24851:3;24762:93;:::i;:::-;24880:2;24875:3;24871:12;24864:19;;24523:366;;;:::o;24895:419::-;25061:4;25099:2;25088:9;25084:18;25076:26;;25148:9;25142:4;25138:20;25134:1;25123:9;25119:17;25112:47;25176:131;25302:4;25176:131;:::i;:::-;25168:139;;24895:419;;;:::o;25320:177::-;25460:29;25456:1;25448:6;25444:14;25437:53;25320:177;:::o;25503:366::-;25645:3;25666:67;25730:2;25725:3;25666:67;:::i;:::-;25659:74;;25742:93;25831:3;25742:93;:::i;:::-;25860:2;25855:3;25851:12;25844:19;;25503:366;;;:::o;25875:419::-;26041:4;26079:2;26068:9;26064:18;26056:26;;26128:9;26122:4;26118:20;26114:1;26103:9;26099:17;26092:47;26156:131;26282:4;26156:131;:::i;:::-;26148:139;;25875:419;;;:::o;26300:223::-;26440:34;26436:1;26428:6;26424:14;26417:58;26509:6;26504:2;26496:6;26492:15;26485:31;26300:223;:::o;26529:366::-;26671:3;26692:67;26756:2;26751:3;26692:67;:::i;:::-;26685:74;;26768:93;26857:3;26768:93;:::i;:::-;26886:2;26881:3;26877:12;26870:19;;26529:366;;;:::o;26901:419::-;27067:4;27105:2;27094:9;27090:18;27082:26;;27154:9;27148:4;27144:20;27140:1;27129:9;27125:17;27118:47;27182:131;27308:4;27182:131;:::i;:::-;27174:139;;26901:419;;;:::o;27326:221::-;27466:34;27462:1;27454:6;27450:14;27443:58;27535:4;27530:2;27522:6;27518:15;27511:29;27326:221;:::o;27553:366::-;27695:3;27716:67;27780:2;27775:3;27716:67;:::i;:::-;27709:74;;27792:93;27881:3;27792:93;:::i;:::-;27910:2;27905:3;27901:12;27894:19;;27553:366;;;:::o;27925:419::-;28091:4;28129:2;28118:9;28114:18;28106:26;;28178:9;28172:4;28168:20;28164:1;28153:9;28149:17;28142:47;28206:131;28332:4;28206:131;:::i;:::-;28198:139;;27925:419;;;:::o;28350:224::-;28490:34;28486:1;28478:6;28474:14;28467:58;28559:7;28554:2;28546:6;28542:15;28535:32;28350:224;:::o;28580:366::-;28722:3;28743:67;28807:2;28802:3;28743:67;:::i;:::-;28736:74;;28819:93;28908:3;28819:93;:::i;:::-;28937:2;28932:3;28928:12;28921:19;;28580:366;;;:::o;28952:419::-;29118:4;29156:2;29145:9;29141:18;29133:26;;29205:9;29199:4;29195:20;29191:1;29180:9;29176:17;29169:47;29233:131;29359:4;29233:131;:::i;:::-;29225:139;;28952:419;;;:::o;29377:222::-;29517:34;29513:1;29505:6;29501:14;29494:58;29586:5;29581:2;29573:6;29569:15;29562:30;29377:222;:::o;29605:366::-;29747:3;29768:67;29832:2;29827:3;29768:67;:::i;:::-;29761:74;;29844:93;29933:3;29844:93;:::i;:::-;29962:2;29957:3;29953:12;29946:19;;29605:366;;;:::o;29977:419::-;30143:4;30181:2;30170:9;30166:18;30158:26;;30230:9;30224:4;30220:20;30216:1;30205:9;30201:17;30194:47;30258:131;30384:4;30258:131;:::i;:::-;30250:139;;29977:419;;;:::o;30402:236::-;30542:34;30538:1;30530:6;30526:14;30519:58;30611:19;30606:2;30598:6;30594:15;30587:44;30402:236;:::o;30644:366::-;30786:3;30807:67;30871:2;30866:3;30807:67;:::i;:::-;30800:74;;30883:93;30972:3;30883:93;:::i;:::-;31001:2;30996:3;30992:12;30985:19;;30644:366;;;:::o;31016:419::-;31182:4;31220:2;31209:9;31205:18;31197:26;;31269:9;31263:4;31259:20;31255:1;31244:9;31240:17;31233:47;31297:131;31423:4;31297:131;:::i;:::-;31289:139;;31016:419;;;:::o;31441:172::-;31581:24;31577:1;31569:6;31565:14;31558:48;31441:172;:::o;31619:366::-;31761:3;31782:67;31846:2;31841:3;31782:67;:::i;:::-;31775:74;;31858:93;31947:3;31858:93;:::i;:::-;31976:2;31971:3;31967:12;31960:19;;31619:366;;;:::o;31991:419::-;32157:4;32195:2;32184:9;32180:18;32172:26;;32244:9;32238:4;32234:20;32230:1;32219:9;32215:17;32208:47;32272:131;32398:4;32272:131;:::i;:::-;32264:139;;31991:419;;;:::o;32416:297::-;32556:34;32552:1;32544:6;32540:14;32533:58;32625:34;32620:2;32612:6;32608:15;32601:59;32694:11;32689:2;32681:6;32677:15;32670:36;32416:297;:::o;32719:366::-;32861:3;32882:67;32946:2;32941:3;32882:67;:::i;:::-;32875:74;;32958:93;33047:3;32958:93;:::i;:::-;33076:2;33071:3;33067:12;33060:19;;32719:366;;;:::o;33091:419::-;33257:4;33295:2;33284:9;33280:18;33272:26;;33344:9;33338:4;33334:20;33330:1;33319:9;33315:17;33308:47;33372:131;33498:4;33372:131;:::i;:::-;33364:139;;33091:419;;;:::o;33516:240::-;33656:34;33652:1;33644:6;33640:14;33633:58;33725:23;33720:2;33712:6;33708:15;33701:48;33516:240;:::o;33762:366::-;33904:3;33925:67;33989:2;33984:3;33925:67;:::i;:::-;33918:74;;34001:93;34090:3;34001:93;:::i;:::-;34119:2;34114:3;34110:12;34103:19;;33762:366;;;:::o;34134:419::-;34300:4;34338:2;34327:9;34323:18;34315:26;;34387:9;34381:4;34377:20;34373:1;34362:9;34358:17;34351:47;34415:131;34541:4;34415:131;:::i;:::-;34407:139;;34134:419;;;:::o;34559:169::-;34699:21;34695:1;34687:6;34683:14;34676:45;34559:169;:::o;34734:366::-;34876:3;34897:67;34961:2;34956:3;34897:67;:::i;:::-;34890:74;;34973:93;35062:3;34973:93;:::i;:::-;35091:2;35086:3;35082:12;35075:19;;34734:366;;;:::o;35106:419::-;35272:4;35310:2;35299:9;35295:18;35287:26;;35359:9;35353:4;35349:20;35345:1;35334:9;35330:17;35323:47;35387:131;35513:4;35387:131;:::i;:::-;35379:139;;35106:419;;;:::o;35531:241::-;35671:34;35667:1;35659:6;35655:14;35648:58;35740:24;35735:2;35727:6;35723:15;35716:49;35531:241;:::o;35778:366::-;35920:3;35941:67;36005:2;36000:3;35941:67;:::i;:::-;35934:74;;36017:93;36106:3;36017:93;:::i;:::-;36135:2;36130:3;36126:12;36119:19;;35778:366;;;:::o;36150:419::-;36316:4;36354:2;36343:9;36339:18;36331:26;;36403:9;36397:4;36393:20;36389:1;36378:9;36374:17;36367:47;36431:131;36557:4;36431:131;:::i;:::-;36423:139;;36150:419;;;:::o;36575:191::-;36615:4;36635:20;36653:1;36635:20;:::i;:::-;36630:25;;36669:20;36687:1;36669:20;:::i;:::-;36664:25;;36708:1;36705;36702:8;36699:34;;;36713:18;;:::i;:::-;36699:34;36758:1;36755;36751:9;36743:17;;36575:191;;;;:::o;36772:147::-;36873:11;36910:3;36895:18;;36772:147;;;;:::o;36925:114::-;;:::o;37045:398::-;37204:3;37225:83;37306:1;37301:3;37225:83;:::i;:::-;37218:90;;37317:93;37406:3;37317:93;:::i;:::-;37435:1;37430:3;37426:11;37419:18;;37045:398;;;:::o;37449:379::-;37633:3;37655:147;37798:3;37655:147;:::i;:::-;37648:154;;37819:3;37812:10;;37449:379;;;:::o;37834:442::-;37983:4;38021:2;38010:9;38006:18;37998:26;;38034:71;38102:1;38091:9;38087:17;38078:6;38034:71;:::i;:::-;38115:72;38183:2;38172:9;38168:18;38159:6;38115:72;:::i;:::-;38197;38265:2;38254:9;38250:18;38241:6;38197:72;:::i;:::-;37834:442;;;;;;:::o;38282:220::-;38422:34;38418:1;38410:6;38406:14;38399:58;38491:3;38486:2;38478:6;38474:15;38467:28;38282:220;:::o;38508:366::-;38650:3;38671:67;38735:2;38730:3;38671:67;:::i;:::-;38664:74;;38747:93;38836:3;38747:93;:::i;:::-;38865:2;38860:3;38856:12;38849:19;;38508:366;;;:::o;38880:419::-;39046:4;39084:2;39073:9;39069:18;39061:26;;39133:9;39127:4;39123:20;39119:1;39108:9;39104:17;39097:47;39161:131;39287:4;39161:131;:::i;:::-;39153:139;;38880:419;;;:::o;39305:180::-;39353:77;39350:1;39343:88;39450:4;39447:1;39440:15;39474:4;39471:1;39464:15;39491:143;39548:5;39579:6;39573:13;39564:22;;39595:33;39622:5;39595:33;:::i;:::-;39491:143;;;;:::o;39640:351::-;39710:6;39759:2;39747:9;39738:7;39734:23;39730:32;39727:119;;;39765:79;;:::i;:::-;39727:119;39885:1;39910:64;39966:7;39957:6;39946:9;39942:22;39910:64;:::i;:::-;39900:74;;39856:128;39640:351;;;;:::o;39997:85::-;40042:7;40071:5;40060:16;;39997:85;;;:::o;40088:158::-;40146:9;40179:61;40197:42;40206:32;40232:5;40206:32;:::i;:::-;40197:42;:::i;:::-;40179:61;:::i;:::-;40166:74;;40088:158;;;:::o;40252:147::-;40347:45;40386:5;40347:45;:::i;:::-;40342:3;40335:58;40252:147;;:::o;40405:114::-;40472:6;40506:5;40500:12;40490:22;;40405:114;;;:::o;40525:184::-;40624:11;40658:6;40653:3;40646:19;40698:4;40693:3;40689:14;40674:29;;40525:184;;;;:::o;40715:132::-;40782:4;40805:3;40797:11;;40835:4;40830:3;40826:14;40818:22;;40715:132;;;:::o;40853:108::-;40930:24;40948:5;40930:24;:::i;:::-;40925:3;40918:37;40853:108;;:::o;40967:179::-;41036:10;41057:46;41099:3;41091:6;41057:46;:::i;:::-;41135:4;41130:3;41126:14;41112:28;;40967:179;;;;:::o;41152:113::-;41222:4;41254;41249:3;41245:14;41237:22;;41152:113;;;:::o;41301:732::-;41420:3;41449:54;41497:5;41449:54;:::i;:::-;41519:86;41598:6;41593:3;41519:86;:::i;:::-;41512:93;;41629:56;41679:5;41629:56;:::i;:::-;41708:7;41739:1;41724:284;41749:6;41746:1;41743:13;41724:284;;;41825:6;41819:13;41852:63;41911:3;41896:13;41852:63;:::i;:::-;41845:70;;41938:60;41991:6;41938:60;:::i;:::-;41928:70;;41784:224;41771:1;41768;41764:9;41759:14;;41724:284;;;41728:14;42024:3;42017:10;;41425:608;;;41301:732;;;;:::o;42039:831::-;42302:4;42340:3;42329:9;42325:19;42317:27;;42354:71;42422:1;42411:9;42407:17;42398:6;42354:71;:::i;:::-;42435:80;42511:2;42500:9;42496:18;42487:6;42435:80;:::i;:::-;42562:9;42556:4;42552:20;42547:2;42536:9;42532:18;42525:48;42590:108;42693:4;42684:6;42590:108;:::i;:::-;42582:116;;42708:72;42776:2;42765:9;42761:18;42752:6;42708:72;:::i;:::-;42790:73;42858:3;42847:9;42843:19;42834:6;42790:73;:::i;:::-;42039:831;;;;;;;;:::o;42876:807::-;43125:4;43163:3;43152:9;43148:19;43140:27;;43177:71;43245:1;43234:9;43230:17;43221:6;43177:71;:::i;:::-;43258:72;43326:2;43315:9;43311:18;43302:6;43258:72;:::i;:::-;43340:80;43416:2;43405:9;43401:18;43392:6;43340:80;:::i;:::-;43430;43506:2;43495:9;43491:18;43482:6;43430:80;:::i;:::-;43520:73;43588:3;43577:9;43573:19;43564:6;43520:73;:::i;:::-;43603;43671:3;43660:9;43656:19;43647:6;43603:73;:::i;:::-;42876:807;;;;;;;;;:::o;43689:143::-;43746:5;43777:6;43771:13;43762:22;;43793:33;43820:5;43793:33;:::i;:::-;43689:143;;;;:::o;43838:663::-;43926:6;43934;43942;43991:2;43979:9;43970:7;43966:23;43962:32;43959:119;;;43997:79;;:::i;:::-;43959:119;44117:1;44142:64;44198:7;44189:6;44178:9;44174:22;44142:64;:::i;:::-;44132:74;;44088:128;44255:2;44281:64;44337:7;44328:6;44317:9;44313:22;44281:64;:::i;:::-;44271:74;;44226:129;44394:2;44420:64;44476:7;44467:6;44456:9;44452:22;44420:64;:::i;:::-;44410:74;;44365:129;43838:663;;;;;:::o

Swarm Source

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