ETH Price: $3,011.51 (+4.53%)
Gas: 2 Gwei

Token

Shichi (七)
 

Overview

Max Total Supply

1,000,000,000

Holders

294

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,418.818816608245801415 七

Value
$0.00
0x44c9ee68cc14590c8d0d41a4db40f7d2f4ca32a0
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:
Shichi

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-23
*/

/*

https://medium.com/@shichiERC/
https://twitter.com/ShichiToken
https://t.me/shichifukujin


 */


// SPDX-License-Identifier: MIT


pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    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 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 Shichi is ERC20, Ownable, Pausable {

    // variables
    
    uint256 private initialSupply;
   
    uint256 private denominator = 100;

    uint256 private swapThreshold = 0.00005 ether; //
    
    uint256 private devTaxBuy;
    uint256 private liquidityTaxBuy;
   
    
    uint256 private devTaxSell;
    uint256 private liquidityTaxSell;
    uint256 public maxWallet;
    
    address private devTaxWallet;
    address private liquidityTaxWallet;
    
    
    // Mappings
    
    mapping (address => bool) private blacklist;
    mapping (address => bool) private excludeList;
   
    
    mapping (string => uint256) private buyTaxes;
    mapping (string => uint256) private sellTaxes;
    mapping (string => address) private taxWallets;
    
    bool public taxStatus = true;
    
    IUniswapV2Router02 private uniswapV2Router02;
    IUniswapV2Factory private uniswapV2Factory;
    IUniswapV2Pair private uniswapV2Pair;
    
    constructor(string memory _tokenName,string memory _tokenSymbol,uint256 _supply) ERC20(_tokenName, _tokenSymbol) payable
    {
        initialSupply =_supply * (10**18);
        maxWallet = initialSupply * 2 / 100; 
        _setOwner(msg.sender);
        uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
        uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
        taxWallets["liquidity"] = address(0);
        setBuyTax(15,5); 
        setSellTax(15,5); 
        setTaxWallets(0x9D1f2a6BFa0e89c3Ad79aB5780254297f0281965); // 
        exclude(msg.sender);
        exclude(address(this));
        exclude(devTaxWallet);
        _mint(msg.sender, initialSupply);
    }
    
    
    uint256 private devTokens;
    uint256 private liquidityTokens;
    
    
    /**
     * @dev Calculates the tax, transfer it to the contract. If the user is selling, and the swap threshold is met, it executes the tax.
     */
    function handleTax(address from, address to, uint256 amount) private returns (uint256) {
        address[] memory sellPath = new address[](2);
        sellPath[0] = address(this);
        sellPath[1] = uniswapV2Router02.WETH();
        
        if(!isExcluded(from) && !isExcluded(to)) {
            uint256 tax;
            uint256 baseUnit = amount / denominator;
            if(from == address(uniswapV2Pair)) {
                tax += baseUnit * buyTaxes["dev"];
                tax += baseUnit * buyTaxes["liquidity"];
               
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
                
                devTokens += baseUnit * buyTaxes["dev"];
                liquidityTokens += baseUnit * buyTaxes["liquidity"];

            } else if(to == address(uniswapV2Pair)) {
                
                tax += baseUnit * sellTaxes["dev"];
                tax += baseUnit * sellTaxes["liquidity"];
                
                
                if(tax > 0) {
                    _transfer(from, address(this), tax);   
                }
                
               
                devTokens += baseUnit * sellTaxes["dev"];
                liquidityTokens += baseUnit * sellTaxes["liquidity"];
                
                
                uint256 taxSum =  devTokens + liquidityTokens;
                
                if(taxSum == 0) return amount;
                
                uint256 ethValue = uniswapV2Router02.getAmountsOut( devTokens + liquidityTokens, sellPath)[1];
                
                if(ethValue >= swapThreshold) {
                    uint256 startBalance = address(this).balance;

                    uint256 toSell = devTokens + liquidityTokens / 2 ;
                    
                    _approve(address(this), address(uniswapV2Router02), toSell);
            
                    uniswapV2Router02.swapExactTokensForETH(
                        toSell,
                        0,
                        sellPath,
                        address(this),
                        block.timestamp
                    );
                    
                    uint256 ethGained = address(this).balance - startBalance;
                    
                    uint256 liquidityToken = liquidityTokens / 2;
                    uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                    
                    
                    uint256 devETH = (ethGained * ((devTokens * 10**18) / taxSum)) / 10**18;
                   
                    
                    _approve(address(this), address(uniswapV2Router02), liquidityToken);
                    
                    uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                        address(this),
                        liquidityToken,
                        0,
                        0,
                        taxWallets["liquidity"],
                        block.timestamp
                    );
                    
                    uint256 remainingTokens = (devTokens + liquidityTokens) - (toSell + liquidityToken);
                    
                    if(remainingTokens > 0) {
                        _transfer(address(this), taxWallets["dev"], remainingTokens);
                    }
                    
                    
                   (bool success,) = taxWallets["dev"].call{value: devETH}("");
                   require(success, "transfer to  dev wallet failed");
                    
                    
                    if(ethGained - ( devETH + liquidityETH) > 0) {
                       (bool success1,) = taxWallets["dev"].call{value: ethGained - (devETH + liquidityETH)}("");
                        require(success1, "transfer to  dev wallet failed");
                    }

                    
                    
                    
                    devTokens = 0;
                    liquidityTokens = 0;
                    
                }
                
            }
            
            amount -= tax;
            if (to != address(uniswapV2Pair)){
                require(balanceOf(to) + amount <= maxWallet, "maxWallet limit exceeded");
            }
           
        }
        
        return amount;
    }
    
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override virtual {
        require(!paused(), "ERC20: token transfer while paused");
        require(!isBlacklisted(msg.sender), "ERC20: sender blacklisted");
        require(!isBlacklisted(recipient), "ERC20: recipient blacklisted");
        require(!isBlacklisted(tx.origin), "ERC20: sender blacklisted");
        
        if(taxStatus) {
            amount = handleTax(sender, recipient, amount);   
        }

        super._transfer(sender, recipient, amount);
    }
    
    /**
     * @dev Triggers the tax handling functionality
     */
    function triggerTax() public onlyOwner {
        handleTax(address(0), address(uniswapV2Pair), 0);
    }
    
    /**
     * @dev Pauses transfers on the token.
     */
    function pause() public onlyOwner {
        require(!paused(), "ERC20: Contract is already paused");
        _pause();
    }

    /**
     * @dev Unpauses transfers on the token.
     */
    function unpause() public onlyOwner {
        require(paused(), "ERC20: Contract is not paused");
        _unpause();
    }

     /**
     * @dev set max wallet limit per address.
     */

    function setMaxWallet (uint256 amount) external onlyOwner {
        require (amount > 10000, "NO rug pull");
        maxWallet = amount * 10**18;
    }
    
    /**
     * @dev Burns tokens from caller address.
     */
    function burn(uint256 amount) public onlyOwner {
        _burn(msg.sender, amount);
    }
    
    /**
     * @dev Blacklists the specified account (Disables transfers to and from the account).
     */
    function enableBlacklist(address account) public onlyOwner {
        require(!blacklist[account], "ERC20: Account is already blacklisted");
        blacklist[account] = true;
    }
    
    /**
     * @dev Remove the specified account from the blacklist.
     */
    function disableBlacklist(address account) public onlyOwner {
        require(blacklist[account], "ERC20: Account is not blacklisted");
        blacklist[account] = false;
    }
    
    /**
     * @dev Excludes the specified account from tax.
     */
    function exclude(address account) public onlyOwner {
        require(!isExcluded(account), "ERC20: Account is already excluded");
        excludeList[account] = true;
    }
    
    /**
     * @dev Re-enables tax on the specified account.
     */
    function removeExclude(address account) public onlyOwner {
        require(isExcluded(account), "ERC20: Account is not excluded");
        excludeList[account] = false;
    }
    
    /**
     * @dev Sets tax for buys.
     */
    function setBuyTax(uint256 dev,uint256 liquidity) public onlyOwner {
        buyTaxes["dev"] = dev;
        buyTaxes["liquidity"] = liquidity;
       
    }
    
    /**
     * @dev Sets tax for sells.
     */
    function setSellTax(uint256 dev, uint256 liquidity) public onlyOwner {

        sellTaxes["dev"] = dev;
        sellTaxes["liquidity"] = liquidity;
        
    }
    
    /**
     * @dev Sets wallets for taxes.
     */
    function setTaxWallets(address dev) public onlyOwner {
        taxWallets["dev"] = dev;
        
    }

    function claimStuckTokens(address _token) external onlyOwner {
 
        if (_token == address(0x0)) {
            payable(owner()).transfer(address(this).balance);
            return;
        }
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }
    
    /**
     * @dev Enables tax globally.
     */
    function enableTax() public onlyOwner {
        require(!taxStatus, "ERC20: Tax is already enabled");
        taxStatus = true;
    }
    
    /**
     * @dev Disables tax globally.
     */
    function disableTax() public onlyOwner {
        require(taxStatus, "ERC20: Tax is already disabled");
        taxStatus = false;
    }
    
    /**
     * @dev Returns true if the account is blacklisted, and false otherwise.
     */
    function isBlacklisted(address account) public view returns (bool) {
        return blacklist[account];
    }
    
    /**
     * @dev Returns true if the account is excluded, and false otherwise.
     */
    function isExcluded(address account) public view returns (bool) {
        return excludeList[account];
    }
    
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"uint256","name":"_supply","type":"uint256"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","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":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExclude","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dev","type":"address"}],"name":"setTaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526064600755652d79883d20006008556001601560006101000a81548160ff021916908315150217905550604051620060e3380380620060e3833981810160405281019062000053919062000e1c565b828281600390805190602001906200006d92919062000b94565b5080600490805190602001906200008692919062000b94565b5050506000600560146101000a81548160ff021916908315150217905550670de0b6b3a764000081620000ba919062000ee5565b60068190555060646002600654620000d3919062000ee5565b620000df919062000f75565b600d81905550620000f633620004e460201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d601560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b457600080fd5b505afa158015620001c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ef919062001012565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d757600080fd5b505afa158015620002ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000312919062001012565b6040518363ffffffff1660e01b81526004016200033192919062001055565b602060405180830381600087803b1580156200034c57600080fd5b505af115801562000361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000387919062001012565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006014604051620003d990620010dd565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000439600f6005620005aa60201b60201c565b6200044d600f60056200068360201b60201c565b62000472739d1f2a6bfa0e89c3ad79ab5780254297f02819656200075c60201b60201c565b62000483336200084b60201b60201c565b62000494306200084b60201b60201c565b620004c7600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200084b60201b60201c565b620004db336006546200098960201b60201c565b505050620013d8565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005ba62000b0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e062000b0a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006309062001155565b60405180910390fd5b8160126040516200064a90620011c7565b9081526020016040518091039020819055508060126040516200066d90620010dd565b9081526020016040518091039020819055505050565b6200069362000b0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006b962000b0a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007099062001155565b60405180910390fd5b8160136040516200072390620011c7565b9081526020016040518091039020819055508060136040516200074690620010dd565b9081526020016040518091039020819055505050565b6200076c62000b0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200079262000b0a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e29062001155565b60405180910390fd5b806014604051620007fc90620011c7565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200085b62000b0260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200088162000b0a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008da576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d19062001155565b60405180910390fd5b620008eb8162000b3460201b60201c565b156200092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009259062001254565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f390620012c6565b60405180910390fd5b62000a106000838362000b8a60201b60201c565b806002600082825462000a249190620012e8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a7b9190620012e8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ae2919062001356565b60405180910390a362000afe6000838362000b8f60201b60201c565b5050565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b505050565b505050565b82805462000ba290620013a2565b90600052602060002090601f01602090048101928262000bc6576000855562000c12565b82601f1062000be157805160ff191683800117855562000c12565b8280016001018555821562000c12579182015b8281111562000c1157825182559160200191906001019062000bf4565b5b50905062000c21919062000c25565b5090565b5b8082111562000c4057600081600090555060010162000c26565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000cad8262000c62565b810181811067ffffffffffffffff8211171562000ccf5762000cce62000c73565b5b80604052505050565b600062000ce462000c44565b905062000cf2828262000ca2565b919050565b600067ffffffffffffffff82111562000d155762000d1462000c73565b5b62000d208262000c62565b9050602081019050919050565b60005b8381101562000d4d57808201518184015260208101905062000d30565b8381111562000d5d576000848401525b50505050565b600062000d7a62000d748462000cf7565b62000cd8565b90508281526020810184848401111562000d995762000d9862000c5d565b5b62000da684828562000d2d565b509392505050565b600082601f83011262000dc65762000dc562000c58565b5b815162000dd884826020860162000d63565b91505092915050565b6000819050919050565b62000df68162000de1565b811462000e0257600080fd5b50565b60008151905062000e168162000deb565b92915050565b60008060006060848603121562000e385762000e3762000c4e565b5b600084015167ffffffffffffffff81111562000e595762000e5862000c53565b5b62000e678682870162000dae565b935050602084015167ffffffffffffffff81111562000e8b5762000e8a62000c53565b5b62000e998682870162000dae565b925050604062000eac8682870162000e05565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ef28262000de1565b915062000eff8362000de1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f3b5762000f3a62000eb6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f828262000de1565b915062000f8f8362000de1565b92508262000fa25762000fa162000f46565b5b828204905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fda8262000fad565b9050919050565b62000fec8162000fcd565b811462000ff857600080fd5b50565b6000815190506200100c8162000fe1565b92915050565b6000602082840312156200102b576200102a62000c4e565b5b60006200103b8482850162000ffb565b91505092915050565b6200104f8162000fcd565b82525050565b60006040820190506200106c600083018562001044565b6200107b602083018462001044565b9392505050565b600081905092915050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b6000620010c560098362001082565b9150620010d2826200108d565b600982019050919050565b6000620010ea82620010b6565b9150819050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200113d602083620010f4565b91506200114a8262001105565b602082019050919050565b6000602082019050818103600083015262001170816200112e565b9050919050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b6000620011af60038362001082565b9150620011bc8262001177565b600382019050919050565b6000620011d482620011a0565b9150819050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b60006200123c602283620010f4565b91506200124982620011de565b604082019050919050565b600060208201905081810360008301526200126f816200122d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012ae601f83620010f4565b9150620012bb8262001276565b602082019050919050565b60006020820190508181036000830152620012e1816200129f565b9050919050565b6000620012f58262000de1565b9150620013028362000de1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200133a576200133962000eb6565b5b828201905092915050565b620013508162000de1565b82525050565b60006020820190506200136d600083018462001345565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620013bb57607f821691505b60208210811415620013d257620013d162001373565b5b50919050565b614cfb80620013e86000396000f3fe6080604052600436106101fd5760003560e01c8063715018a61161010d578063cba0e996116100a0578063dd62ed3e1161006f578063dd62ed3e146106dc578063f2fde38b14610719578063f8b45b0514610742578063f9d0831a1461076d578063fe575a871461079657610204565b8063cba0e99614610636578063ced695a414610673578063cfefd79e1461068a578063d01dc84b146106b357610204565b806395d89b41116100dc57806395d89b4114610568578063a457c2d714610593578063a9059cbb146105d0578063abe4f11d1461060d57610204565b8063715018a6146104e6578063717a8651146104fd5780638456cb59146105265780638da5cb5b1461053d57610204565b8063313ce567116101905780634febf53d1161015f5780634febf53d1461041557806353eb3bcf1461043e5780635c975abb146104555780635d0044ca1461048057806370a08231146104a957610204565b8063313ce5671461036d57806339509351146103985780633f4ba83a146103d557806342966c68146103ec57610204565b806323a38a38116101cc57806323a38a38146102c557806323b872dd146102f0578063247b912d1461032d5780632c32abc21461035657610204565b806305a1f36d1461020957806306fdde0314610232578063095ea7b31461025d57806318160ddd1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906133f2565b6107d3565b005b34801561023e57600080fd5b50610247610895565b60405161025491906134cb565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f919061354b565b610927565b60405161029191906135a6565b60405180910390f35b3480156102a657600080fd5b506102af610945565b6040516102bc91906135d0565b60405180910390f35b3480156102d157600080fd5b506102da61094f565b6040516102e791906135a6565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135eb565b610962565b60405161032491906135a6565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906133f2565b610a5a565b005b34801561036257600080fd5b5061036b610b1c565b005b34801561037957600080fd5b50610382610bca565b60405161038f919061365a565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061354b565b610bd3565b6040516103cc91906135a6565b60405180910390f35b3480156103e157600080fd5b506103ea610c7f565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613675565b610d4c565b005b34801561042157600080fd5b5061043c600480360381019061043791906136a2565b610dd5565b005b34801561044a57600080fd5b50610453610ef5565b005b34801561046157600080fd5b5061046a610fde565b60405161047791906135a6565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613675565b610ff5565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906136a2565b6110d2565b6040516104dd91906135d0565b60405180910390f35b3480156104f257600080fd5b506104fb61111a565b005b34801561050957600080fd5b50610524600480360381019061051f91906136a2565b6111a2565b005b34801561053257600080fd5b5061053b611306565b005b34801561054957600080fd5b506105526113d4565b60405161055f91906136de565b60405180910390f35b34801561057457600080fd5b5061057d6113fe565b60405161058a91906134cb565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061354b565b611490565b6040516105c791906135a6565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f2919061354b565b61157b565b60405161060491906135a6565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f91906136a2565b611599565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b6116b8565b60405161066a91906135a6565b60405180910390f35b34801561067f57600080fd5b5061068861170e565b005b34801561069657600080fd5b506106b160048036038101906106ac91906136a2565b6117f6565b005b3480156106bf57600080fd5b506106da60048036038101906106d591906136a2565b611959565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906136f9565b611a33565b60405161071091906135d0565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906136a2565b611aba565b005b34801561074e57600080fd5b50610757611bb2565b60405161076491906135d0565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906136a2565b611bb8565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906136a2565b611de9565b6040516107ca91906135a6565b60405180910390f35b6107db611e3f565b73ffffffffffffffffffffffffffffffffffffffff166107f96113d4565b73ffffffffffffffffffffffffffffffffffffffff161461084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690613785565b60405180910390fd5b81601260405161085e906137fc565b90815260200160405180910390208190555080601260405161087f9061385d565b9081526020016040518091039020819055505050565b6060600380546108a4906138a1565b80601f01602080910402602001604051908101604052809291908181526020018280546108d0906138a1565b801561091d5780601f106108f25761010080835404028352916020019161091d565b820191906000526020600020905b81548152906001019060200180831161090057829003601f168201915b5050505050905090565b600061093b610934611e3f565b8484611e47565b6001905092915050565b6000600254905090565b601560009054906101000a900460ff1681565b600061096f848484612012565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ba611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613945565b60405180910390fd5b610a4e85610a46611e3f565b858403611e47565b60019150509392505050565b610a62611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610a806113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90613785565b60405180910390fd5b816013604051610ae5906137fc565b908152602001604051809103902081905550806013604051610b069061385d565b9081526020016040518091039020819055505050565b610b24611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610b426113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613785565b60405180910390fd5b610bc76000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612168565b50565b60006012905090565b6000610c75610be0611e3f565b848460016000610bee611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c709190613994565b611e47565b6001905092915050565b610c87611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610ca56113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290613785565b60405180910390fd5b610d03610fde565b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613a36565b60405180910390fd5b610d4a612d3b565b565b610d54611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610d726113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90613785565b60405180910390fd5b610dd23382612ddd565b50565b610ddd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613785565b60405180910390fd5b610e5a816116b8565b15610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613ac8565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610efd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610f1b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613785565b60405180910390fd5b601560009054906101000a900460ff1615610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890613b34565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b6000600560149054906101000a900460ff16905090565b610ffd611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661101b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613785565b60405180910390fd5b61271081116110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613ba0565b60405180910390fd5b670de0b6b3a7640000816110c99190613bc0565b600d8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611122611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111406113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90613785565b60405180910390fd5b6111a06000612fb4565b565b6111aa611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111c86113d4565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c8c565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61130e611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661132c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613785565b60405180910390fd5b61138a610fde565b156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613d1e565b60405180910390fd5b6113d261307a565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461140d906138a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611439906138a1565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b5050505050905090565b6000806001600061149f611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613db0565b60405180910390fd5b611570611567611e3f565b85858403611e47565b600191505092915050565b600061158f611588611e3f565b8484612012565b6001905092915050565b6115a1611e3f565b73ffffffffffffffffffffffffffffffffffffffff166115bf6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613785565b60405180910390fd5b61161e816116b8565b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613e1c565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611716611e3f565b73ffffffffffffffffffffffffffffffffffffffff166117346113d4565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613785565b60405180910390fd5b601560009054906101000a900460ff166117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090613e88565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6117fe611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661181c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613f1a565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611961611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661197f6113d4565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613785565b60405180910390fd5b8060146040516119e4906137fc565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac2611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611ae06113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90613fac565b60405180910390fd5b611baf81612fb4565b50565b600d5481565b611bc0611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611bde6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cbc57611c716113d4565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611cb6573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cfc91906136de565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c9190613fe1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d726113d4565b836040518363ffffffff1660e01b8152600401611d9092919061400e565b602060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de29190614063565b5050505b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae90614102565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614194565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200591906135d0565b60405180910390a3505050565b61201a610fde565b1561205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614226565b60405180910390fd5b61206333611de9565b156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90614292565b60405180910390fd5b6120ac82611de9565b156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906142fe565b60405180910390fd5b6120f532611de9565b15612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614292565b60405180910390fd5b601560009054906101000a900460ff161561215857612155838383612168565b90505b61216383838361311d565b505050565b600080600267ffffffffffffffff8111156121865761218561431e565b5b6040519080825280602002602001820160405280156121b45781602001602082028036833780820191505090505b50905030816000815181106121cc576121cb61434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561226e57600080fd5b505afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190614391565b816001815181106122ba576122b961434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122fd856116b8565b158015612310575061230e846116b8565b155b15612d2f576000806007548561232691906143ed565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561248257601260405161238c906137fc565b908152602001604051809103902054816123a69190613bc0565b826123b19190613994565b915060126040516123c19061385d565b908152602001604051809103902054816123db9190613bc0565b826123e69190613994565b915060008211156123fd576123fc873084612012565b5b601260405161240b906137fc565b908152602001604051809103902054816124259190613bc0565b601860008282546124369190613994565b92505081905550601260405161244b9061385d565b908152602001604051809103902054816124659190613bc0565b601960008282546124769190613994565b92505081905550612c70565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612c6f5760136040516124e6906137fc565b908152602001604051809103902054816125009190613bc0565b8261250b9190613994565b9150601360405161251b9061385d565b908152602001604051809103902054816125359190613bc0565b826125409190613994565b9150600082111561255757612556873084612012565b5b6013604051612565906137fc565b9081526020016040518091039020548161257f9190613bc0565b601860008282546125909190613994565b9250508190555060136040516125a59061385d565b908152602001604051809103902054816125bf9190613bc0565b601960008282546125d09190613994565b9250508190555060006019546018546125e99190613994565b905060008114156126005785945050505050612d34565b6000601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6019546018546126509190613994565b876040518363ffffffff1660e01b815260040161266e9291906144dc565b60006040518083038186803b15801561268657600080fd5b505afa15801561269a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126c39190614625565b6001815181106126d6576126d561434d565b5b602002602001015190506008548110612c6c576000479050600060026019546126ff91906143ed565b60185461270c9190613994565b905061273b30601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b815260040161279f9594939291906146b3565b600060405180830381600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906127f69190614625565b5060008247612805919061470d565b90506000600260195461281891906143ed565b90506000670de0b6b3a764000087670de0b6b3a7640000600260195461283e91906143ed565b6128489190613bc0565b61285291906143ed565b8461285d9190613bc0565b61286791906143ed565b90506000670de0b6b3a764000088670de0b6b3a764000060185461288b9190613bc0565b61289591906143ed565b856128a09190613bc0565b6128aa91906143ed565b90506128d930601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719833086600080601460405161292b9061385d565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161297c96959493929190614741565b6060604051808303818588803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129ce91906147a2565b505050600083866129df9190613994565b6019546018546129ef9190613994565b6129f9919061470d565b90506000811115612a4c57612a4b306014604051612a16906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612012565b5b60006014604051612a5c906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612aae90614826565b60006040518083038185875af1925050503d8060008114612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b5050905080612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614887565b60405180910390fd5b60008484612b429190613994565b87612b4d919061470d565b1115612c535760006014604051612b63906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585612bb49190613994565b88612bbf919061470d565b604051612bcb90614826565b60006040518083038185875af1925050503d8060008114612c08576040519150601f19603f3d011682016040523d82523d6000602084013e612c0d565b606091505b5050905080612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614887565b60405180910390fd5b505b6000601881905550600060198190555050505050505050505b50505b5b8185612c7c919061470d565b9450601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612d2c57600d5485612ce0886110d2565b612cea9190613994565b1115612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d22906148f3565b60405180910390fd5b5b50505b829150505b9392505050565b612d43610fde565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d799061495f565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612dc6611e3f565b604051612dd391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e44906149f1565b60405180910390fd5b612e598260008361339e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed690614a83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612f36919061470d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f9b91906135d0565b60405180910390a3612faf836000846133a3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613082610fde565b156130c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b990614aef565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613106611e3f565b60405161311391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318490614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490614c13565b60405180910390fd5b61320883838361339e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328590614ca5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133219190613994565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161338591906135d0565b60405180910390a36133988484846133a3565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6133cf816133bc565b81146133da57600080fd5b50565b6000813590506133ec816133c6565b92915050565b60008060408385031215613409576134086133b2565b5b6000613417858286016133dd565b9250506020613428858286016133dd565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346c578082015181840152602081019050613451565b8381111561347b576000848401525b50505050565b6000601f19601f8301169050919050565b600061349d82613432565b6134a7818561343d565b93506134b781856020860161344e565b6134c081613481565b840191505092915050565b600060208201905081810360008301526134e58184613492565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613518826134ed565b9050919050565b6135288161350d565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b60008060408385031215613562576135616133b2565b5b600061357085828601613536565b9250506020613581858286016133dd565b9150509250929050565b60008115159050919050565b6135a08161358b565b82525050565b60006020820190506135bb6000830184613597565b92915050565b6135ca816133bc565b82525050565b60006020820190506135e560008301846135c1565b92915050565b600080600060608486031215613604576136036133b2565b5b600061361286828701613536565b935050602061362386828701613536565b9250506040613634868287016133dd565b9150509250925092565b600060ff82169050919050565b6136548161363e565b82525050565b600060208201905061366f600083018461364b565b92915050565b60006020828403121561368b5761368a6133b2565b5b6000613699848285016133dd565b91505092915050565b6000602082840312156136b8576136b76133b2565b5b60006136c684828501613536565b91505092915050565b6136d88161350d565b82525050565b60006020820190506136f360008301846136cf565b92915050565b600080604083850312156137105761370f6133b2565b5b600061371e85828601613536565b925050602061372f85828601613536565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061376f60208361343d565b915061377a82613739565b602082019050919050565b6000602082019050818103600083015261379e81613762565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b60006137e66003836137a5565b91506137f1826137b0565b600382019050919050565b6000613807826137d9565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b60006138476009836137a5565b915061385282613811565b600982019050919050565b60006138688261383a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138b957607f821691505b602082108114156138cd576138cc613872565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061392f60288361343d565b915061393a826138d3565b604082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399f826133bc565b91506139aa836133bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139df576139de613965565b5b828201905092915050565b7f45524332303a20436f6e7472616374206973206e6f7420706175736564000000600082015250565b6000613a20601d8361343d565b9150613a2b826139ea565b602082019050919050565b60006020820190508181036000830152613a4f81613a13565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab260228361343d565b9150613abd82613a56565b604082019050919050565b60006020820190508181036000830152613ae181613aa5565b9050919050565b7f45524332303a2054617820697320616c726561647920656e61626c6564000000600082015250565b6000613b1e601d8361343d565b9150613b2982613ae8565b602082019050919050565b60006020820190508181036000830152613b4d81613b11565b9050919050565b7f4e4f207275672070756c6c000000000000000000000000000000000000000000600082015250565b6000613b8a600b8361343d565b9150613b9582613b54565b602082019050919050565b60006020820190508181036000830152613bb981613b7d565b9050919050565b6000613bcb826133bc565b9150613bd6836133bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0f57613c0e613965565b5b828202905092915050565b7f45524332303a204163636f756e7420697320616c726561647920626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b6000613c7660258361343d565b9150613c8182613c1a565b604082019050919050565b60006020820190508181036000830152613ca581613c69565b9050919050565b7f45524332303a20436f6e747261637420697320616c726561647920706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d0860218361343d565b9150613d1382613cac565b604082019050919050565b60006020820190508181036000830152613d3781613cfb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d9a60258361343d565b9150613da582613d3e565b604082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b7f45524332303a204163636f756e74206973206e6f74206578636c756465640000600082015250565b6000613e06601e8361343d565b9150613e1182613dd0565b602082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f45524332303a2054617820697320616c72656164792064697361626c65640000600082015250565b6000613e72601e8361343d565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f45524332303a204163636f756e74206973206e6f7420626c61636b6c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0460218361343d565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9660268361343d565b9150613fa182613f3a565b604082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b600081519050613fdb816133c6565b92915050565b600060208284031215613ff757613ff66133b2565b5b600061400584828501613fcc565b91505092915050565b600060408201905061402360008301856136cf565b61403060208301846135c1565b9392505050565b6140408161358b565b811461404b57600080fd5b50565b60008151905061405d81614037565b92915050565b600060208284031215614079576140786133b2565b5b60006140878482850161404e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ec60248361343d565b91506140f782614090565b604082019050919050565b6000602082019050818103600083015261411b816140df565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061417e60228361343d565b915061418982614122565b604082019050919050565b600060208201905081810360008301526141ad81614171565b9050919050565b7f45524332303a20746f6b656e207472616e73666572207768696c65207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061421060228361343d565b915061421b826141b4565b604082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b7f45524332303a2073656e64657220626c61636b6c697374656400000000000000600082015250565b600061427c60198361343d565b915061428782614246565b602082019050919050565b600060208201905081810360008301526142ab8161426f565b9050919050565b7f45524332303a20726563697069656e7420626c61636b6c697374656400000000600082015250565b60006142e8601c8361343d565b91506142f3826142b2565b602082019050919050565b60006020820190508181036000830152614317816142db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061438b8161351f565b92915050565b6000602082840312156143a7576143a66133b2565b5b60006143b58482850161437c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143f8826133bc565b9150614403836133bc565b925082614413576144126143be565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144538161350d565b82525050565b6000614465838361444a565b60208301905092915050565b6000602082019050919050565b60006144898261441e565b6144938185614429565b935061449e8361443a565b8060005b838110156144cf5781516144b68882614459565b97506144c183614471565b9250506001810190506144a2565b5085935050505092915050565b60006040820190506144f160008301856135c1565b8181036020830152614503818461447e565b90509392505050565b600080fd5b61451a82613481565b810181811067ffffffffffffffff821117156145395761453861431e565b5b80604052505050565b600061454c6133a8565b90506145588282614511565b919050565b600067ffffffffffffffff8211156145785761457761431e565b5b602082029050602081019050919050565b600080fd5b60006145a161459c8461455d565b614542565b905080838252602082019050602084028301858111156145c4576145c3614589565b5b835b818110156145ed57806145d98882613fcc565b8452602084019350506020810190506145c6565b5050509392505050565b600082601f83011261460c5761460b61450c565b5b815161461c84826020860161458e565b91505092915050565b60006020828403121561463b5761463a6133b2565b5b600082015167ffffffffffffffff811115614659576146586133b7565b5b614665848285016145f7565b91505092915050565b6000819050919050565b6000819050919050565b600061469d6146986146938461466e565b614678565b6133bc565b9050919050565b6146ad81614682565b82525050565b600060a0820190506146c860008301886135c1565b6146d560208301876146a4565b81810360408301526146e7818661447e565b90506146f660608301856136cf565b61470360808301846135c1565b9695505050505050565b6000614718826133bc565b9150614723836133bc565b92508282101561473657614735613965565b5b828203905092915050565b600060c08201905061475660008301896136cf565b61476360208301886135c1565b61477060408301876146a4565b61477d60608301866146a4565b61478a60808301856136cf565b61479760a08301846135c1565b979650505050505050565b6000806000606084860312156147bb576147ba6133b2565b5b60006147c986828701613fcc565b93505060206147da86828701613fcc565b92505060406147eb86828701613fcc565b9150509250925092565b600081905092915050565b50565b60006148106000836147f5565b915061481b82614800565b600082019050919050565b600061483182614803565b9150819050919050565b7f7472616e7366657220746f20206465762077616c6c6574206661696c65640000600082015250565b6000614871601e8361343d565b915061487c8261483b565b602082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b60006148dd60188361343d565b91506148e8826148a7565b602082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061494960148361343d565b915061495482614913565b602082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149db60218361343d565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6d60228361343d565b9150614a7882614a11565b604082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614ad960108361343d565b9150614ae482614aa3565b602082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b6b60258361343d565b9150614b7682614b0f565b604082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bfd60238361343d565b9150614c0882614ba1565b604082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c8f60268361343d565b9150614c9a82614c33565b604082019050919050565b60006020820190508181036000830152614cbe81614c82565b905091905056fea2646970667358221220e7ed3889e78d8f034d3fefb6a9e45f5f85783bcdc330fcdb38f4d8c15ac76e0564736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000653686963686900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4b8830000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c8063715018a61161010d578063cba0e996116100a0578063dd62ed3e1161006f578063dd62ed3e146106dc578063f2fde38b14610719578063f8b45b0514610742578063f9d0831a1461076d578063fe575a871461079657610204565b8063cba0e99614610636578063ced695a414610673578063cfefd79e1461068a578063d01dc84b146106b357610204565b806395d89b41116100dc57806395d89b4114610568578063a457c2d714610593578063a9059cbb146105d0578063abe4f11d1461060d57610204565b8063715018a6146104e6578063717a8651146104fd5780638456cb59146105265780638da5cb5b1461053d57610204565b8063313ce567116101905780634febf53d1161015f5780634febf53d1461041557806353eb3bcf1461043e5780635c975abb146104555780635d0044ca1461048057806370a08231146104a957610204565b8063313ce5671461036d57806339509351146103985780633f4ba83a146103d557806342966c68146103ec57610204565b806323a38a38116101cc57806323a38a38146102c557806323b872dd146102f0578063247b912d1461032d5780632c32abc21461035657610204565b806305a1f36d1461020957806306fdde0314610232578063095ea7b31461025d57806318160ddd1461029a57610204565b3661020457005b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906133f2565b6107d3565b005b34801561023e57600080fd5b50610247610895565b60405161025491906134cb565b60405180910390f35b34801561026957600080fd5b50610284600480360381019061027f919061354b565b610927565b60405161029191906135a6565b60405180910390f35b3480156102a657600080fd5b506102af610945565b6040516102bc91906135d0565b60405180910390f35b3480156102d157600080fd5b506102da61094f565b6040516102e791906135a6565b60405180910390f35b3480156102fc57600080fd5b50610317600480360381019061031291906135eb565b610962565b60405161032491906135a6565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906133f2565b610a5a565b005b34801561036257600080fd5b5061036b610b1c565b005b34801561037957600080fd5b50610382610bca565b60405161038f919061365a565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba919061354b565b610bd3565b6040516103cc91906135a6565b60405180910390f35b3480156103e157600080fd5b506103ea610c7f565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613675565b610d4c565b005b34801561042157600080fd5b5061043c600480360381019061043791906136a2565b610dd5565b005b34801561044a57600080fd5b50610453610ef5565b005b34801561046157600080fd5b5061046a610fde565b60405161047791906135a6565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190613675565b610ff5565b005b3480156104b557600080fd5b506104d060048036038101906104cb91906136a2565b6110d2565b6040516104dd91906135d0565b60405180910390f35b3480156104f257600080fd5b506104fb61111a565b005b34801561050957600080fd5b50610524600480360381019061051f91906136a2565b6111a2565b005b34801561053257600080fd5b5061053b611306565b005b34801561054957600080fd5b506105526113d4565b60405161055f91906136de565b60405180910390f35b34801561057457600080fd5b5061057d6113fe565b60405161058a91906134cb565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061354b565b611490565b6040516105c791906135a6565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f2919061354b565b61157b565b60405161060491906135a6565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f91906136a2565b611599565b005b34801561064257600080fd5b5061065d600480360381019061065891906136a2565b6116b8565b60405161066a91906135a6565b60405180910390f35b34801561067f57600080fd5b5061068861170e565b005b34801561069657600080fd5b506106b160048036038101906106ac91906136a2565b6117f6565b005b3480156106bf57600080fd5b506106da60048036038101906106d591906136a2565b611959565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906136f9565b611a33565b60405161071091906135d0565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906136a2565b611aba565b005b34801561074e57600080fd5b50610757611bb2565b60405161076491906135d0565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906136a2565b611bb8565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906136a2565b611de9565b6040516107ca91906135a6565b60405180910390f35b6107db611e3f565b73ffffffffffffffffffffffffffffffffffffffff166107f96113d4565b73ffffffffffffffffffffffffffffffffffffffff161461084f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084690613785565b60405180910390fd5b81601260405161085e906137fc565b90815260200160405180910390208190555080601260405161087f9061385d565b9081526020016040518091039020819055505050565b6060600380546108a4906138a1565b80601f01602080910402602001604051908101604052809291908181526020018280546108d0906138a1565b801561091d5780601f106108f25761010080835404028352916020019161091d565b820191906000526020600020905b81548152906001019060200180831161090057829003601f168201915b5050505050905090565b600061093b610934611e3f565b8484611e47565b6001905092915050565b6000600254905090565b601560009054906101000a900460ff1681565b600061096f848484612012565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ba611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613945565b60405180910390fd5b610a4e85610a46611e3f565b858403611e47565b60019150509392505050565b610a62611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610a806113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd90613785565b60405180910390fd5b816013604051610ae5906137fc565b908152602001604051809103902081905550806013604051610b069061385d565b9081526020016040518091039020819055505050565b610b24611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610b426113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610b98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8f90613785565b60405180910390fd5b610bc76000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612168565b50565b60006012905090565b6000610c75610be0611e3f565b848460016000610bee611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c709190613994565b611e47565b6001905092915050565b610c87611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610ca56113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610cfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf290613785565b60405180910390fd5b610d03610fde565b610d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3990613a36565b60405180910390fd5b610d4a612d3b565b565b610d54611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610d726113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90613785565b60405180910390fd5b610dd23382612ddd565b50565b610ddd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610dfb6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4890613785565b60405180910390fd5b610e5a816116b8565b15610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9190613ac8565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610efd611e3f565b73ffffffffffffffffffffffffffffffffffffffff16610f1b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890613785565b60405180910390fd5b601560009054906101000a900460ff1615610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890613b34565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b6000600560149054906101000a900460ff16905090565b610ffd611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661101b6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890613785565b60405180910390fd5b61271081116110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613ba0565b60405180910390fd5b670de0b6b3a7640000816110c99190613bc0565b600d8190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611122611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111406113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90613785565b60405180910390fd5b6111a06000612fb4565b565b6111aa611e3f565b73ffffffffffffffffffffffffffffffffffffffff166111c86113d4565b73ffffffffffffffffffffffffffffffffffffffff161461121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121590613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a290613c8c565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61130e611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661132c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990613785565b60405180910390fd5b61138a610fde565b156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c190613d1e565b60405180910390fd5b6113d261307a565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461140d906138a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611439906138a1565b80156114865780601f1061145b57610100808354040283529160200191611486565b820191906000526020600020905b81548152906001019060200180831161146957829003601f168201915b5050505050905090565b6000806001600061149f611e3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390613db0565b60405180910390fd5b611570611567611e3f565b85858403611e47565b600191505092915050565b600061158f611588611e3f565b8484612012565b6001905092915050565b6115a1611e3f565b73ffffffffffffffffffffffffffffffffffffffff166115bf6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90613785565b60405180910390fd5b61161e816116b8565b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613e1c565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611716611e3f565b73ffffffffffffffffffffffffffffffffffffffff166117346113d4565b73ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190613785565b60405180910390fd5b601560009054906101000a900460ff166117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090613e88565b60405180910390fd5b6000601560006101000a81548160ff021916908315150217905550565b6117fe611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661181c6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186990613785565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613f1a565b60405180910390fd5b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611961611e3f565b73ffffffffffffffffffffffffffffffffffffffff1661197f6113d4565b73ffffffffffffffffffffffffffffffffffffffff16146119d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cc90613785565b60405180910390fd5b8060146040516119e4906137fc565b908152602001604051809103902060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac2611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611ae06113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d90613fac565b60405180910390fd5b611baf81612fb4565b50565b600d5481565b611bc0611e3f565b73ffffffffffffffffffffffffffffffffffffffff16611bde6113d4565b73ffffffffffffffffffffffffffffffffffffffff1614611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cbc57611c716113d4565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611cb6573d6000803e3d6000fd5b50611de6565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cfc91906136de565b60206040518083038186803b158015611d1457600080fd5b505afa158015611d28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4c9190613fe1565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611d726113d4565b836040518363ffffffff1660e01b8152600401611d9092919061400e565b602060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de29190614063565b5050505b50565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eae90614102565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614194565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161200591906135d0565b60405180910390a3505050565b61201a610fde565b1561205a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205190614226565b60405180910390fd5b61206333611de9565b156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90614292565b60405180910390fd5b6120ac82611de9565b156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e3906142fe565b60405180910390fd5b6120f532611de9565b15612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90614292565b60405180910390fd5b601560009054906101000a900460ff161561215857612155838383612168565b90505b61216383838361311d565b505050565b600080600267ffffffffffffffff8111156121865761218561431e565b5b6040519080825280602002602001820160405280156121b45781602001602082028036833780820191505090505b50905030816000815181106121cc576121cb61434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561226e57600080fd5b505afa158015612282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a69190614391565b816001815181106122ba576122b961434d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506122fd856116b8565b158015612310575061230e846116b8565b155b15612d2f576000806007548561232691906143ed565b9050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561248257601260405161238c906137fc565b908152602001604051809103902054816123a69190613bc0565b826123b19190613994565b915060126040516123c19061385d565b908152602001604051809103902054816123db9190613bc0565b826123e69190613994565b915060008211156123fd576123fc873084612012565b5b601260405161240b906137fc565b908152602001604051809103902054816124259190613bc0565b601860008282546124369190613994565b92505081905550601260405161244b9061385d565b908152602001604051809103902054816124659190613bc0565b601960008282546124769190613994565b92505081905550612c70565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415612c6f5760136040516124e6906137fc565b908152602001604051809103902054816125009190613bc0565b8261250b9190613994565b9150601360405161251b9061385d565b908152602001604051809103902054816125359190613bc0565b826125409190613994565b9150600082111561255757612556873084612012565b5b6013604051612565906137fc565b9081526020016040518091039020548161257f9190613bc0565b601860008282546125909190613994565b9250508190555060136040516125a59061385d565b908152602001604051809103902054816125bf9190613bc0565b601960008282546125d09190613994565b9250508190555060006019546018546125e99190613994565b905060008114156126005785945050505050612d34565b6000601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f6019546018546126509190613994565b876040518363ffffffff1660e01b815260040161266e9291906144dc565b60006040518083038186803b15801561268657600080fd5b505afa15801561269a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126c39190614625565b6001815181106126d6576126d561434d565b5b602002602001015190506008548110612c6c576000479050600060026019546126ff91906143ed565b60185461270c9190613994565b905061273b30601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58260008a30426040518663ffffffff1660e01b815260040161279f9594939291906146b3565b600060405180830381600087803b1580156127b957600080fd5b505af11580156127cd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906127f69190614625565b5060008247612805919061470d565b90506000600260195461281891906143ed565b90506000670de0b6b3a764000087670de0b6b3a7640000600260195461283e91906143ed565b6128489190613bc0565b61285291906143ed565b8461285d9190613bc0565b61286791906143ed565b90506000670de0b6b3a764000088670de0b6b3a764000060185461288b9190613bc0565b61289591906143ed565b856128a09190613bc0565b6128aa91906143ed565b90506128d930601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611e47565b601560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719833086600080601460405161292b9061385d565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161297c96959493929190614741565b6060604051808303818588803b15801561299557600080fd5b505af11580156129a9573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129ce91906147a2565b505050600083866129df9190613994565b6019546018546129ef9190613994565b6129f9919061470d565b90506000811115612a4c57612a4b306014604051612a16906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612012565b5b60006014604051612a5c906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051612aae90614826565b60006040518083038185875af1925050503d8060008114612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b5050905080612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b90614887565b60405180910390fd5b60008484612b429190613994565b87612b4d919061470d565b1115612c535760006014604051612b63906137fc565b908152602001604051809103902060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168585612bb49190613994565b88612bbf919061470d565b604051612bcb90614826565b60006040518083038185875af1925050503d8060008114612c08576040519150601f19603f3d011682016040523d82523d6000602084013e612c0d565b606091505b5050905080612c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4890614887565b60405180910390fd5b505b6000601881905550600060198190555050505050505050505b50505b5b8185612c7c919061470d565b9450601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614612d2c57600d5485612ce0886110d2565b612cea9190613994565b1115612d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d22906148f3565b60405180910390fd5b5b50505b829150505b9392505050565b612d43610fde565b612d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d799061495f565b60405180910390fd5b6000600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612dc6611e3f565b604051612dd391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e44906149f1565b60405180910390fd5b612e598260008361339e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed690614a83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612f36919061470d565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f9b91906135d0565b60405180910390a3612faf836000846133a3565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613082610fde565b156130c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b990614aef565b60405180910390fd5b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613106611e3f565b60405161311391906136de565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561318d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318490614b81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f490614c13565b60405180910390fd5b61320883838361339e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561328e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328590614ca5565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133219190613994565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161338591906135d0565b60405180910390a36133988484846133a3565b50505050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6133cf816133bc565b81146133da57600080fd5b50565b6000813590506133ec816133c6565b92915050565b60008060408385031215613409576134086133b2565b5b6000613417858286016133dd565b9250506020613428858286016133dd565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561346c578082015181840152602081019050613451565b8381111561347b576000848401525b50505050565b6000601f19601f8301169050919050565b600061349d82613432565b6134a7818561343d565b93506134b781856020860161344e565b6134c081613481565b840191505092915050565b600060208201905081810360008301526134e58184613492565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613518826134ed565b9050919050565b6135288161350d565b811461353357600080fd5b50565b6000813590506135458161351f565b92915050565b60008060408385031215613562576135616133b2565b5b600061357085828601613536565b9250506020613581858286016133dd565b9150509250929050565b60008115159050919050565b6135a08161358b565b82525050565b60006020820190506135bb6000830184613597565b92915050565b6135ca816133bc565b82525050565b60006020820190506135e560008301846135c1565b92915050565b600080600060608486031215613604576136036133b2565b5b600061361286828701613536565b935050602061362386828701613536565b9250506040613634868287016133dd565b9150509250925092565b600060ff82169050919050565b6136548161363e565b82525050565b600060208201905061366f600083018461364b565b92915050565b60006020828403121561368b5761368a6133b2565b5b6000613699848285016133dd565b91505092915050565b6000602082840312156136b8576136b76133b2565b5b60006136c684828501613536565b91505092915050565b6136d88161350d565b82525050565b60006020820190506136f360008301846136cf565b92915050565b600080604083850312156137105761370f6133b2565b5b600061371e85828601613536565b925050602061372f85828601613536565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061376f60208361343d565b915061377a82613739565b602082019050919050565b6000602082019050818103600083015261379e81613762565b9050919050565b600081905092915050565b7f6465760000000000000000000000000000000000000000000000000000000000600082015250565b60006137e66003836137a5565b91506137f1826137b0565b600382019050919050565b6000613807826137d9565b9150819050919050565b7f6c69717569646974790000000000000000000000000000000000000000000000600082015250565b60006138476009836137a5565b915061385282613811565b600982019050919050565b60006138688261383a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806138b957607f821691505b602082108114156138cd576138cc613872565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061392f60288361343d565b915061393a826138d3565b604082019050919050565b6000602082019050818103600083015261395e81613922565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061399f826133bc565b91506139aa836133bc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139df576139de613965565b5b828201905092915050565b7f45524332303a20436f6e7472616374206973206e6f7420706175736564000000600082015250565b6000613a20601d8361343d565b9150613a2b826139ea565b602082019050919050565b60006020820190508181036000830152613a4f81613a13565b9050919050565b7f45524332303a204163636f756e7420697320616c7265616479206578636c756460008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ab260228361343d565b9150613abd82613a56565b604082019050919050565b60006020820190508181036000830152613ae181613aa5565b9050919050565b7f45524332303a2054617820697320616c726561647920656e61626c6564000000600082015250565b6000613b1e601d8361343d565b9150613b2982613ae8565b602082019050919050565b60006020820190508181036000830152613b4d81613b11565b9050919050565b7f4e4f207275672070756c6c000000000000000000000000000000000000000000600082015250565b6000613b8a600b8361343d565b9150613b9582613b54565b602082019050919050565b60006020820190508181036000830152613bb981613b7d565b9050919050565b6000613bcb826133bc565b9150613bd6836133bc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c0f57613c0e613965565b5b828202905092915050565b7f45524332303a204163636f756e7420697320616c726561647920626c61636b6c60008201527f6973746564000000000000000000000000000000000000000000000000000000602082015250565b6000613c7660258361343d565b9150613c8182613c1a565b604082019050919050565b60006020820190508181036000830152613ca581613c69565b9050919050565b7f45524332303a20436f6e747261637420697320616c726561647920706175736560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d0860218361343d565b9150613d1382613cac565b604082019050919050565b60006020820190508181036000830152613d3781613cfb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613d9a60258361343d565b9150613da582613d3e565b604082019050919050565b60006020820190508181036000830152613dc981613d8d565b9050919050565b7f45524332303a204163636f756e74206973206e6f74206578636c756465640000600082015250565b6000613e06601e8361343d565b9150613e1182613dd0565b602082019050919050565b60006020820190508181036000830152613e3581613df9565b9050919050565b7f45524332303a2054617820697320616c72656164792064697361626c65640000600082015250565b6000613e72601e8361343d565b9150613e7d82613e3c565b602082019050919050565b60006020820190508181036000830152613ea181613e65565b9050919050565b7f45524332303a204163636f756e74206973206e6f7420626c61636b6c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f0460218361343d565b9150613f0f82613ea8565b604082019050919050565b60006020820190508181036000830152613f3381613ef7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f9660268361343d565b9150613fa182613f3a565b604082019050919050565b60006020820190508181036000830152613fc581613f89565b9050919050565b600081519050613fdb816133c6565b92915050565b600060208284031215613ff757613ff66133b2565b5b600061400584828501613fcc565b91505092915050565b600060408201905061402360008301856136cf565b61403060208301846135c1565b9392505050565b6140408161358b565b811461404b57600080fd5b50565b60008151905061405d81614037565b92915050565b600060208284031215614079576140786133b2565b5b60006140878482850161404e565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140ec60248361343d565b91506140f782614090565b604082019050919050565b6000602082019050818103600083015261411b816140df565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061417e60228361343d565b915061418982614122565b604082019050919050565b600060208201905081810360008301526141ad81614171565b9050919050565b7f45524332303a20746f6b656e207472616e73666572207768696c65207061757360008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b600061421060228361343d565b915061421b826141b4565b604082019050919050565b6000602082019050818103600083015261423f81614203565b9050919050565b7f45524332303a2073656e64657220626c61636b6c697374656400000000000000600082015250565b600061427c60198361343d565b915061428782614246565b602082019050919050565b600060208201905081810360008301526142ab8161426f565b9050919050565b7f45524332303a20726563697069656e7420626c61636b6c697374656400000000600082015250565b60006142e8601c8361343d565b91506142f3826142b2565b602082019050919050565b60006020820190508181036000830152614317816142db565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061438b8161351f565b92915050565b6000602082840312156143a7576143a66133b2565b5b60006143b58482850161437c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143f8826133bc565b9150614403836133bc565b925082614413576144126143be565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144538161350d565b82525050565b6000614465838361444a565b60208301905092915050565b6000602082019050919050565b60006144898261441e565b6144938185614429565b935061449e8361443a565b8060005b838110156144cf5781516144b68882614459565b97506144c183614471565b9250506001810190506144a2565b5085935050505092915050565b60006040820190506144f160008301856135c1565b8181036020830152614503818461447e565b90509392505050565b600080fd5b61451a82613481565b810181811067ffffffffffffffff821117156145395761453861431e565b5b80604052505050565b600061454c6133a8565b90506145588282614511565b919050565b600067ffffffffffffffff8211156145785761457761431e565b5b602082029050602081019050919050565b600080fd5b60006145a161459c8461455d565b614542565b905080838252602082019050602084028301858111156145c4576145c3614589565b5b835b818110156145ed57806145d98882613fcc565b8452602084019350506020810190506145c6565b5050509392505050565b600082601f83011261460c5761460b61450c565b5b815161461c84826020860161458e565b91505092915050565b60006020828403121561463b5761463a6133b2565b5b600082015167ffffffffffffffff811115614659576146586133b7565b5b614665848285016145f7565b91505092915050565b6000819050919050565b6000819050919050565b600061469d6146986146938461466e565b614678565b6133bc565b9050919050565b6146ad81614682565b82525050565b600060a0820190506146c860008301886135c1565b6146d560208301876146a4565b81810360408301526146e7818661447e565b90506146f660608301856136cf565b61470360808301846135c1565b9695505050505050565b6000614718826133bc565b9150614723836133bc565b92508282101561473657614735613965565b5b828203905092915050565b600060c08201905061475660008301896136cf565b61476360208301886135c1565b61477060408301876146a4565b61477d60608301866146a4565b61478a60808301856136cf565b61479760a08301846135c1565b979650505050505050565b6000806000606084860312156147bb576147ba6133b2565b5b60006147c986828701613fcc565b93505060206147da86828701613fcc565b92505060406147eb86828701613fcc565b9150509250925092565b600081905092915050565b50565b60006148106000836147f5565b915061481b82614800565b600082019050919050565b600061483182614803565b9150819050919050565b7f7472616e7366657220746f20206465762077616c6c6574206661696c65640000600082015250565b6000614871601e8361343d565b915061487c8261483b565b602082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b7f6d617857616c6c6574206c696d69742065786365656465640000000000000000600082015250565b60006148dd60188361343d565b91506148e8826148a7565b602082019050919050565b6000602082019050818103600083015261490c816148d0565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061494960148361343d565b915061495482614913565b602082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149db60218361343d565b91506149e68261497f565b604082019050919050565b60006020820190508181036000830152614a0a816149ce565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a6d60228361343d565b9150614a7882614a11565b604082019050919050565b60006020820190508181036000830152614a9c81614a60565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614ad960108361343d565b9150614ae482614aa3565b602082019050919050565b60006020820190508181036000830152614b0881614acc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b6b60258361343d565b9150614b7682614b0f565b604082019050919050565b60006020820190508181036000830152614b9a81614b5e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bfd60238361343d565b9150614c0882614ba1565b604082019050919050565b60006020820190508181036000830152614c2c81614bf0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614c8f60268361343d565b9150614c9a82614c33565b604082019050919050565b60006020820190508181036000830152614cbe81614c82565b905091905056fea2646970667358221220e7ed3889e78d8f034d3fefb6a9e45f5f85783bcdc330fcdb38f4d8c15ac76e0564736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000653686963686900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e4b8830000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _tokenName (string): Shichi
Arg [1] : _tokenSymbol (string): 七
Arg [2] : _supply (uint256): 1000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [4] : 5368696368690000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : e4b8830000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

28439:11121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37744:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6189:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8356:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7309:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29236:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9007:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37967:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35682:106;;;;;;;;;;;;;:::i;:::-;;7151:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9908:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36061:126;;;;;;;;;;;;;:::i;:::-;;36494:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37246:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38742:136;;;;;;;;;;;;;:::i;:::-;;19290:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36263:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7480:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17677:94;;;;;;;;;;;;;:::i;:::-;;36707:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35862:127;;;;;;;;;;;;;:::i;:::-;;17026:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6408:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10626:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7820:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37505:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39406:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38944:138;;;;;;;;;;;;;:::i;:::-;;36982:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38201:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8058:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17926:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28813:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38314:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39190:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37744:160;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37840:3:::1;37822:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;:21;;;;37878:9;37854:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;:33;;;;37744:160:::0;;:::o;6189:100::-;6243:13;6276:5;6269:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6189:100;:::o;8356:169::-;8439:4;8456:39;8465:12;:10;:12::i;:::-;8479:7;8488:6;8456:8;:39::i;:::-;8513:4;8506:11;;8356:169;;;;:::o;7309:108::-;7370:7;7397:12;;7390:19;;7309:108;:::o;29236:28::-;;;;;;;;;;;;;:::o;9007:492::-;9147:4;9164:36;9174:6;9182:9;9193:6;9164:9;:36::i;:::-;9213:24;9240:11;:19;9252:6;9240:19;;;;;;;;;;;;;;;:33;9260:12;:10;:12::i;:::-;9240:33;;;;;;;;;;;;;;;;9213:60;;9312:6;9292:16;:26;;9284:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9399:57;9408:6;9416:12;:10;:12::i;:::-;9449:6;9430:16;:25;9399:8;:57::i;:::-;9487:4;9480:11;;;9007:492;;;;;:::o;37967:167::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38068:3:::1;38049:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;:22;;;;38107:9;38082;:22;;;;;:::i;:::-;;;;;;;;;;;;;:34;;;;37967:167:::0;;:::o;35682:106::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35732:48:::1;35750:1;35762:13;;;;;;;;;;;35778:1;35732:9;:48::i;:::-;;35682:106::o:0;7151:93::-;7209:5;7234:2;7227:9;;7151:93;:::o;9908:215::-;9996:4;10013:80;10022:12;:10;:12::i;:::-;10036:7;10082:10;10045:11;:25;10057:12;:10;:12::i;:::-;10045:25;;;;;;;;;;;;;;;:34;10071:7;10045:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10013:8;:80::i;:::-;10111:4;10104:11;;9908:215;;;;:::o;36061:126::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36116:8:::1;:6;:8::i;:::-;36108:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:10;:8;:10::i;:::-;36061:126::o:0;36494:91::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36552:25:::1;36558:10;36570:6;36552:5;:25::i;:::-;36494:91:::0;:::o;37246:175::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37317:19:::1;37328:7;37317:10;:19::i;:::-;37316:20;37308:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37409:4;37386:11;:20;37398:7;37386:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;37246:175:::0;:::o;38742:136::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38800:9:::1;;;;;;;;;;;38799:10;38791:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38866:4;38854:9;;:16;;;;;;;;;;;;;;;;;;38742:136::o:0;19290:86::-;19337:4;19361:7;;;;;;;;;;;19354:14;;19290:86;:::o;36263:154::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36350:5:::1;36341:6;:14;36332:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;36403:6;36394;:15;;;;:::i;:::-;36382:9;:27;;;;36263:154:::0;:::o;7480:127::-;7554:7;7581:9;:18;7591:7;7581:18;;;;;;;;;;;;;;;;7574:25;;7480:127;;;:::o;17677:94::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17742:21:::1;17760:1;17742:9;:21::i;:::-;17677:94::o:0;36707:183::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36786:9:::1;:18;36796:7;36786:18;;;;;;;;;;;;;;;;;;;;;;;;;36785:19;36777:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36878:4;36857:9;:18;36867:7;36857:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;36707:183:::0;:::o;35862:127::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35916:8:::1;:6;:8::i;:::-;35915:9;35907:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35973:8;:6;:8::i;:::-;35862:127::o:0;17026:87::-;17072:7;17099:6;;;;;;;;;;;17092:13;;17026:87;:::o;6408:104::-;6464:13;6497:7;6490:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6408:104;:::o;10626:413::-;10719:4;10736:24;10763:11;:25;10775:12;:10;:12::i;:::-;10763:25;;;;;;;;;;;;;;;:34;10789:7;10763:34;;;;;;;;;;;;;;;;10736:61;;10836:15;10816:16;:35;;10808:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10929:67;10938:12;:10;:12::i;:::-;10952:7;10980:15;10961:16;:34;10929:8;:67::i;:::-;11027:4;11020:11;;;10626:413;;;;:::o;7820:175::-;7906:4;7923:42;7933:12;:10;:12::i;:::-;7947:9;7958:6;7923:9;:42::i;:::-;7983:4;7976:11;;7820:175;;;;:::o;37505:177::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37581:19:::1;37592:7;37581:10;:19::i;:::-;37573:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37669:5;37646:11;:20;37658:7;37646:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;37505:177:::0;:::o;39406:110::-;39464:4;39488:11;:20;39500:7;39488:20;;;;;;;;;;;;;;;;;;;;;;;;;39481:27;;39406:110;;;:::o;38944:138::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39002:9:::1;;;;;;;;;;;38994:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;39069:5;39057:9;;:17;;;;;;;;;;;;;;;;;;38944:138::o:0;36982:180::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37061:9:::1;:18;37071:7;37061:18;;;;;;;;;;;;;;;;;;;;;;;;;37053:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37149:5;37128:9;:18;37138:7;37128:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;36982:180:::0;:::o;38201:105::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38285:3:::1;38265:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38201:105:::0;:::o;8058:151::-;8147:7;8174:11;:18;8186:5;8174:18;;;;;;;;;;;;;;;:27;8193:7;8174:27;;;;;;;;;;;;;;;;8167:34;;8058:151;;;;:::o;17926:192::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18035:1:::1;18015:22;;:8;:22;;;;18007:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18091:19;18101:8;18091:9;:19::i;:::-;17926:192:::0;:::o;28813:24::-;;;;:::o;38314:363::-;17257:12;:10;:12::i;:::-;17246:23;;:7;:5;:7::i;:::-;:23;;;17238:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38411:3:::1;38393:22;;:6;:22;;;38389:124;;;38440:7;:5;:7::i;:::-;38432:25;;:48;38458:21;38432:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38495:7;;38389:124;38523:17;38550:6;38523:34;;38568:15;38586:10;:20;;;38615:4;38586:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38568:53;;38632:10;:19;;;38652:7;:5;:7::i;:::-;38661;38632:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38375:302;;17317:1;38314:363:::0;:::o;39190:111::-;39251:4;39275:9;:18;39285:7;39275:18;;;;;;;;;;;;;;;;;;;;;;;;;39268:25;;39190:111;;;:::o;4008:98::-;4061:7;4088:10;4081:17;;4008:98;:::o;14310:380::-;14463:1;14446:19;;:5;:19;;;;14438:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14544:1;14525:21;;:7;:21;;;;14517:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14628:6;14598:11;:18;14610:5;14598:18;;;;;;;;;;;;;;;:27;14617:7;14598:27;;;;;;;;;;;;;;;:36;;;;14666:7;14650:32;;14659:5;14650:32;;;14675:6;14650:32;;;;;;:::i;:::-;;;;;;;;14310:380;;;:::o;35004:595::-;35154:8;:6;:8::i;:::-;35153:9;35145:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;35221:25;35235:10;35221:13;:25::i;:::-;35220:26;35212:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35296:24;35310:9;35296:13;:24::i;:::-;35295:25;35287:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35373:24;35387:9;35373:13;:24::i;:::-;35372:25;35364:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35451:9;;;;;;;;;;;35448:89;;;35486:36;35496:6;35504:9;35515:6;35486:9;:36::i;:::-;35477:45;;35448:89;35549:42;35565:6;35573:9;35584:6;35549:15;:42::i;:::-;35004:595;;;:::o;30531:4461::-;30609:7;30629:25;30671:1;30657:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30629:44;;30706:4;30684:8;30693:1;30684:11;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;30736:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30722:8;30731:1;30722:11;;;;;;;;:::i;:::-;;;;;;;:38;;;;;;;;;;;30785:16;30796:4;30785:10;:16::i;:::-;30784:17;:36;;;;;30806:14;30817:2;30806:10;:14::i;:::-;30805:15;30784:36;30781:4170;;;30837:11;30863:16;30891:11;;30882:6;:20;;;;:::i;:::-;30863:39;;30936:13;;;;;;;;;;;30920:30;;:4;:30;;;30917:3814;;;30989:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;30978:8;:26;;;;:::i;:::-;30971:33;;;;;:::i;:::-;;;31041:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31030:8;:32;;;;:::i;:::-;31023:39;;;;;:::i;:::-;;;31125:1;31119:3;:7;31116:93;;;31151:35;31161:4;31175;31182:3;31151:9;:35::i;:::-;31116:93;31287:8;:15;;;;;:::i;:::-;;;;;;;;;;;;;;31276:8;:26;;;;:::i;:::-;31263:9;;:39;;;;;;;:::i;:::-;;;;;;;;31351:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;31340:8;:32;;;;:::i;:::-;31321:15;;:51;;;;;;;:::i;:::-;;;;;;;;30917:3814;;;31413:13;;;;;;;;;;;31399:28;;:2;:28;;;31396:3335;;;31484:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;31473:8;:27;;;;:::i;:::-;31466:34;;;;;:::i;:::-;;;31537:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;31526:8;:33;;;;:::i;:::-;31519:40;;;;;:::i;:::-;;;31623:1;31617:3;:7;31614:93;;;31649:35;31659:4;31673;31680:3;31649:9;:35::i;:::-;31614:93;31784:9;:16;;;;;:::i;:::-;;;;;;;;;;;;;;31773:8;:27;;;;:::i;:::-;31760:9;;:40;;;;;;;:::i;:::-;;;;;;;;31849:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;31838:8;:33;;;;:::i;:::-;31819:15;;:52;;;;;;;:::i;:::-;;;;;;;;31926:14;31956:15;;31944:9;;:27;;;;:::i;:::-;31926:45;;32021:1;32011:6;:11;32008:29;;;32031:6;32024:13;;;;;;;;32008:29;32074:16;32093:17;;;;;;;;;;;:31;;;32138:15;;32126:9;;:27;;;;:::i;:::-;32155:8;32093:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32165:1;32093:74;;;;;;;;:::i;:::-;;;;;;;;32074:93;;32219:13;;32207:8;:25;32204:2494;;32257:20;32280:21;32257:44;;32326:14;32373:1;32355:15;;:19;;;;:::i;:::-;32343:9;;:31;;;;:::i;:::-;32326:48;;32420:59;32437:4;32452:17;;;;;;;;;;;32472:6;32420:8;:59::i;:::-;32516:17;;;;;;;;;;;:39;;;32582:6;32615:1;32643:8;32686:4;32718:15;32516:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32801:17;32845:12;32821:21;:36;;;;:::i;:::-;32801:56;;32902:22;32945:1;32927:15;;:19;;;;:::i;:::-;32902:44;;32969:20;33050:6;33039;33029;33025:1;33007:15;;:19;;;;:::i;:::-;:28;;;;:::i;:::-;33006:39;;;;:::i;:::-;32993:9;:53;;;;:::i;:::-;32992:64;;;;:::i;:::-;32969:87;;33123:14;33188:6;33177;33167;33155:9;;:18;;;;:::i;:::-;33154:29;;;;:::i;:::-;33141:9;:43;;;;:::i;:::-;33140:54;;;;:::i;:::-;33123:71;;33260:67;33277:4;33292:17;;;;;;;;;;;33312:14;33260:8;:67::i;:::-;33372:17;;;;;;;;;;;:33;;;33413:12;33461:4;33493:14;33534:1;33562;33590:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33640:15;33372:306;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;33723:23;33791:14;33782:6;:23;;;;:::i;:::-;33762:15;;33750:9;;:27;;;;:::i;:::-;33749:57;;;;:::i;:::-;33723:83;;33872:1;33854:15;:19;33851:135;;;33902:60;33920:4;33927:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33946:15;33902:9;:60::i;:::-;33851:135;34052:12;34069:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:22;;34099:6;34069:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34051:59;;;34140:7;34132:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;34291:1;34275:12;34266:6;:21;;;;:::i;:::-;34252:9;:36;;;;:::i;:::-;:40;34249:262;;;34321:13;34339:10;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:22;;34391:12;34382:6;:21;;;;:::i;:::-;34369:9;:35;;;;:::i;:::-;34339:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34320:89;;;34444:8;34436:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;34294:217;34249:262;34613:1;34601:9;:13;;;;34655:1;34637:15;:19;;;;32234:2464;;;;;;;;32204:2494;31429:3302;;31396:3335;30917:3814;34769:3;34759:13;;;;;:::i;:::-;;;34805;;;;;;;;;;;34791:28;;:2;:28;;;34787:140;;34873:9;;34863:6;34847:13;34857:2;34847:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;34839:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34787:140;30822:4129;;30781:4170;34978:6;34971:13;;;30531:4461;;;;;;:::o;20349:120::-;19893:8;:6;:8::i;:::-;19885:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;20418:5:::1;20408:7;;:15;;;;;;;;;;;;;;;;;;20439:22;20448:12;:10;:12::i;:::-;20439:22;;;;;;:::i;:::-;;;;;;;;20349:120::o:0;13281:591::-;13384:1;13365:21;;:7;:21;;;;13357:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13437:49;13458:7;13475:1;13479:6;13437:20;:49::i;:::-;13499:22;13524:9;:18;13534:7;13524:18;;;;;;;;;;;;;;;;13499:43;;13579:6;13561:14;:24;;13553:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13698:6;13681:14;:23;13660:9;:18;13670:7;13660:18;;;;;;;;;;;;;;;:44;;;;13742:6;13726:12;;:22;;;;;;;:::i;:::-;;;;;;;;13792:1;13766:37;;13775:7;13766:37;;;13796:6;13766:37;;;;;;:::i;:::-;;;;;;;;13816:48;13836:7;13853:1;13857:6;13816:19;:48::i;:::-;13346:526;13281:591;;:::o;18126:174::-;18183:16;18202:6;;;;;;;;;;;18183:25;;18228:8;18219:6;;:17;;;;;;;;;;;;;;;;;;18283:8;18252:40;;18273:8;18252:40;;;;;;;;;;;;18172:128;18126:174;:::o;20090:118::-;19616:8;:6;:8::i;:::-;19615:9;19607:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20160:4:::1;20150:7;;:14;;;;;;;;;;;;;;;;;;20180:20;20187:12;:10;:12::i;:::-;20180:20;;;;;;:::i;:::-;;;;;;;;20090:118::o:0;11529:733::-;11687:1;11669:20;;:6;:20;;;;11661:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11771:1;11750:23;;:9;:23;;;;11742:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11826:47;11847:6;11855:9;11866:6;11826:20;:47::i;:::-;11886:21;11910:9;:17;11920:6;11910:17;;;;;;;;;;;;;;;;11886:41;;11963:6;11946:13;:23;;11938:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12084:6;12068:13;:22;12048:9;:17;12058:6;12048:17;;;;;;;;;;;;;;;:42;;;;12136:6;12112:9;:20;12122:9;12112:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12177:9;12160:35;;12169:6;12160:35;;;12188:6;12160:35;;;;;;:::i;:::-;;;;;;;;12208:46;12228:6;12236:9;12247:6;12208:19;:46::i;:::-;11650:612;11529:733;;;:::o;15290:125::-;;;;:::o;16019:124::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:118::-;4061:24;4079:5;4061:24;:::i;:::-;4056:3;4049:37;3974:118;;:::o;4098:222::-;4191:4;4229:2;4218:9;4214:18;4206:26;;4242:71;4310:1;4299:9;4295:17;4286:6;4242:71;:::i;:::-;4098:222;;;;:::o;4326:619::-;4403:6;4411;4419;4468:2;4456:9;4447:7;4443:23;4439:32;4436:119;;;4474:79;;:::i;:::-;4436:119;4594:1;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4565:117;4721:2;4747:53;4792:7;4783:6;4772:9;4768:22;4747:53;:::i;:::-;4737:63;;4692:118;4849:2;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4820:118;4326:619;;;;;:::o;4951:86::-;4986:7;5026:4;5019:5;5015:16;5004:27;;4951:86;;;:::o;5043:112::-;5126:22;5142:5;5126:22;:::i;:::-;5121:3;5114:35;5043:112;;:::o;5161:214::-;5250:4;5288:2;5277:9;5273:18;5265:26;;5301:67;5365:1;5354:9;5350:17;5341:6;5301:67;:::i;:::-;5161:214;;;;:::o;5381:329::-;5440:6;5489:2;5477:9;5468:7;5464:23;5460:32;5457:119;;;5495:79;;:::i;:::-;5457:119;5615:1;5640:53;5685:7;5676:6;5665:9;5661:22;5640:53;:::i;:::-;5630:63;;5586:117;5381:329;;;;:::o;5716:::-;5775:6;5824:2;5812:9;5803:7;5799:23;5795:32;5792:119;;;5830:79;;:::i;:::-;5792:119;5950:1;5975:53;6020:7;6011:6;6000:9;5996:22;5975:53;:::i;:::-;5965:63;;5921:117;5716:329;;;;:::o;6051:118::-;6138:24;6156:5;6138:24;:::i;:::-;6133:3;6126:37;6051:118;;:::o;6175:222::-;6268:4;6306:2;6295:9;6291:18;6283:26;;6319:71;6387:1;6376:9;6372:17;6363:6;6319:71;:::i;:::-;6175:222;;;;:::o;6403:474::-;6471:6;6479;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6625:117;6781:2;6807:53;6852:7;6843:6;6832:9;6828:22;6807:53;:::i;:::-;6797:63;;6752:118;6403:474;;;;;:::o;6883:182::-;7023:34;7019:1;7011:6;7007:14;7000:58;6883:182;:::o;7071:366::-;7213:3;7234:67;7298:2;7293:3;7234:67;:::i;:::-;7227:74;;7310:93;7399:3;7310:93;:::i;:::-;7428:2;7423:3;7419:12;7412:19;;7071:366;;;:::o;7443:419::-;7609:4;7647:2;7636:9;7632:18;7624:26;;7696:9;7690:4;7686:20;7682:1;7671:9;7667:17;7660:47;7724:131;7850:4;7724:131;:::i;:::-;7716:139;;7443:419;;;:::o;7868:148::-;7970:11;8007:3;7992:18;;7868:148;;;;:::o;8022:153::-;8162:5;8158:1;8150:6;8146:14;8139:29;8022:153;:::o;8181:400::-;8341:3;8362:84;8444:1;8439:3;8362:84;:::i;:::-;8355:91;;8455:93;8544:3;8455:93;:::i;:::-;8573:1;8568:3;8564:11;8557:18;;8181:400;;;:::o;8587:381::-;8772:3;8794:148;8938:3;8794:148;:::i;:::-;8787:155;;8959:3;8952:10;;8587:381;;;:::o;8974:159::-;9114:11;9110:1;9102:6;9098:14;9091:35;8974:159;:::o;9139:400::-;9299:3;9320:84;9402:1;9397:3;9320:84;:::i;:::-;9313:91;;9413:93;9502:3;9413:93;:::i;:::-;9531:1;9526:3;9522:11;9515:18;;9139:400;;;:::o;9545:381::-;9730:3;9752:148;9896:3;9752:148;:::i;:::-;9745:155;;9917:3;9910:10;;9545:381;;;:::o;9932:180::-;9980:77;9977:1;9970:88;10077:4;10074:1;10067:15;10101:4;10098:1;10091:15;10118:320;10162:6;10199:1;10193:4;10189:12;10179:22;;10246:1;10240:4;10236:12;10267:18;10257:81;;10323:4;10315:6;10311:17;10301:27;;10257:81;10385:2;10377:6;10374:14;10354:18;10351:38;10348:84;;;10404:18;;:::i;:::-;10348:84;10169:269;10118:320;;;:::o;10444:227::-;10584:34;10580:1;10572:6;10568:14;10561:58;10653:10;10648:2;10640:6;10636:15;10629:35;10444:227;:::o;10677:366::-;10819:3;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10916:93;11005:3;10916:93;:::i;:::-;11034:2;11029:3;11025:12;11018:19;;10677:366;;;:::o;11049:419::-;11215:4;11253:2;11242:9;11238:18;11230:26;;11302:9;11296:4;11292:20;11288:1;11277:9;11273:17;11266:47;11330:131;11456:4;11330:131;:::i;:::-;11322:139;;11049:419;;;:::o;11474:180::-;11522:77;11519:1;11512:88;11619:4;11616:1;11609:15;11643:4;11640:1;11633:15;11660:305;11700:3;11719:20;11737:1;11719:20;:::i;:::-;11714:25;;11753:20;11771:1;11753:20;:::i;:::-;11748:25;;11907:1;11839:66;11835:74;11832:1;11829:81;11826:107;;;11913:18;;:::i;:::-;11826:107;11957:1;11954;11950:9;11943:16;;11660:305;;;;:::o;11971:179::-;12111:31;12107:1;12099:6;12095:14;12088:55;11971:179;:::o;12156:366::-;12298:3;12319:67;12383:2;12378:3;12319:67;:::i;:::-;12312:74;;12395:93;12484:3;12395:93;:::i;:::-;12513:2;12508:3;12504:12;12497:19;;12156:366;;;:::o;12528:419::-;12694:4;12732:2;12721:9;12717:18;12709:26;;12781:9;12775:4;12771:20;12767:1;12756:9;12752:17;12745:47;12809:131;12935:4;12809:131;:::i;:::-;12801:139;;12528:419;;;:::o;12953:221::-;13093:34;13089:1;13081:6;13077:14;13070:58;13162:4;13157:2;13149:6;13145:15;13138:29;12953:221;:::o;13180:366::-;13322:3;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13419:93;13508:3;13419:93;:::i;:::-;13537:2;13532:3;13528:12;13521:19;;13180:366;;;:::o;13552:419::-;13718:4;13756:2;13745:9;13741:18;13733:26;;13805:9;13799:4;13795:20;13791:1;13780:9;13776:17;13769:47;13833:131;13959:4;13833:131;:::i;:::-;13825:139;;13552:419;;;:::o;13977:179::-;14117:31;14113:1;14105:6;14101:14;14094:55;13977:179;:::o;14162:366::-;14304:3;14325:67;14389:2;14384:3;14325:67;:::i;:::-;14318:74;;14401:93;14490:3;14401:93;:::i;:::-;14519:2;14514:3;14510:12;14503:19;;14162:366;;;:::o;14534:419::-;14700:4;14738:2;14727:9;14723:18;14715:26;;14787:9;14781:4;14777:20;14773:1;14762:9;14758:17;14751:47;14815:131;14941:4;14815:131;:::i;:::-;14807:139;;14534:419;;;:::o;14959:161::-;15099:13;15095:1;15087:6;15083:14;15076:37;14959:161;:::o;15126:366::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:419::-;15664:4;15702:2;15691:9;15687:18;15679:26;;15751:9;15745:4;15741:20;15737:1;15726:9;15722:17;15715:47;15779:131;15905:4;15779:131;:::i;:::-;15771:139;;15498:419;;;:::o;15923:348::-;15963:7;15986:20;16004:1;15986:20;:::i;:::-;15981:25;;16020:20;16038:1;16020:20;:::i;:::-;16015:25;;16208:1;16140:66;16136:74;16133:1;16130:81;16125:1;16118:9;16111:17;16107:105;16104:131;;;16215:18;;:::i;:::-;16104:131;16263:1;16260;16256:9;16245:20;;15923:348;;;;:::o;16277:224::-;16417:34;16413:1;16405:6;16401:14;16394:58;16486:7;16481:2;16473:6;16469:15;16462:32;16277:224;:::o;16507:366::-;16649:3;16670:67;16734:2;16729:3;16670:67;:::i;:::-;16663:74;;16746:93;16835:3;16746:93;:::i;:::-;16864:2;16859:3;16855:12;16848:19;;16507:366;;;:::o;16879:419::-;17045:4;17083:2;17072:9;17068:18;17060:26;;17132:9;17126:4;17122:20;17118:1;17107:9;17103:17;17096:47;17160:131;17286:4;17160:131;:::i;:::-;17152:139;;16879:419;;;:::o;17304:220::-;17444:34;17440:1;17432:6;17428:14;17421:58;17513:3;17508:2;17500:6;17496:15;17489:28;17304:220;:::o;17530:366::-;17672:3;17693:67;17757:2;17752:3;17693:67;:::i;:::-;17686:74;;17769:93;17858:3;17769:93;:::i;:::-;17887:2;17882:3;17878:12;17871:19;;17530:366;;;:::o;17902:419::-;18068:4;18106:2;18095:9;18091:18;18083:26;;18155:9;18149:4;18145:20;18141:1;18130:9;18126:17;18119:47;18183:131;18309:4;18183:131;:::i;:::-;18175:139;;17902:419;;;:::o;18327:224::-;18467:34;18463:1;18455:6;18451:14;18444:58;18536:7;18531:2;18523:6;18519:15;18512:32;18327:224;:::o;18557:366::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:419::-;19095:4;19133:2;19122:9;19118:18;19110:26;;19182:9;19176:4;19172:20;19168:1;19157:9;19153:17;19146:47;19210:131;19336:4;19210:131;:::i;:::-;19202:139;;18929:419;;;:::o;19354:180::-;19494:32;19490:1;19482:6;19478:14;19471:56;19354:180;:::o;19540:366::-;19682:3;19703:67;19767:2;19762:3;19703:67;:::i;:::-;19696:74;;19779:93;19868:3;19779:93;:::i;:::-;19897:2;19892:3;19888:12;19881:19;;19540:366;;;:::o;19912:419::-;20078:4;20116:2;20105:9;20101:18;20093:26;;20165:9;20159:4;20155:20;20151:1;20140:9;20136:17;20129:47;20193:131;20319:4;20193:131;:::i;:::-;20185:139;;19912:419;;;:::o;20337:180::-;20477:32;20473:1;20465:6;20461:14;20454:56;20337:180;:::o;20523:366::-;20665:3;20686:67;20750:2;20745:3;20686:67;:::i;:::-;20679:74;;20762:93;20851:3;20762:93;:::i;:::-;20880:2;20875:3;20871:12;20864:19;;20523:366;;;:::o;20895:419::-;21061:4;21099:2;21088:9;21084:18;21076:26;;21148:9;21142:4;21138:20;21134:1;21123:9;21119:17;21112:47;21176:131;21302:4;21176:131;:::i;:::-;21168:139;;20895:419;;;:::o;21320:220::-;21460:34;21456:1;21448:6;21444:14;21437:58;21529:3;21524:2;21516:6;21512:15;21505:28;21320:220;:::o;21546:366::-;21688:3;21709:67;21773:2;21768:3;21709:67;:::i;:::-;21702:74;;21785:93;21874:3;21785:93;:::i;:::-;21903:2;21898:3;21894:12;21887:19;;21546:366;;;:::o;21918:419::-;22084:4;22122:2;22111:9;22107:18;22099:26;;22171:9;22165:4;22161:20;22157:1;22146:9;22142:17;22135:47;22199:131;22325:4;22199:131;:::i;:::-;22191:139;;21918:419;;;:::o;22343:225::-;22483:34;22479:1;22471:6;22467:14;22460:58;22552:8;22547:2;22539:6;22535:15;22528:33;22343:225;:::o;22574:366::-;22716:3;22737:67;22801:2;22796:3;22737:67;:::i;:::-;22730:74;;22813:93;22902:3;22813:93;:::i;:::-;22931:2;22926:3;22922:12;22915:19;;22574:366;;;:::o;22946:419::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23199:9;23193:4;23189:20;23185:1;23174:9;23170:17;23163:47;23227:131;23353:4;23227:131;:::i;:::-;23219:139;;22946:419;;;:::o;23371:143::-;23428:5;23459:6;23453:13;23444:22;;23475:33;23502:5;23475:33;:::i;:::-;23371:143;;;;:::o;23520:351::-;23590:6;23639:2;23627:9;23618:7;23614:23;23610:32;23607:119;;;23645:79;;:::i;:::-;23607:119;23765:1;23790:64;23846:7;23837:6;23826:9;23822:22;23790:64;:::i;:::-;23780:74;;23736:128;23520:351;;;;:::o;23877:332::-;23998:4;24036:2;24025:9;24021:18;24013:26;;24049:71;24117:1;24106:9;24102:17;24093:6;24049:71;:::i;:::-;24130:72;24198:2;24187:9;24183:18;24174:6;24130:72;:::i;:::-;23877:332;;;;;:::o;24215:116::-;24285:21;24300:5;24285:21;:::i;:::-;24278:5;24275:32;24265:60;;24321:1;24318;24311:12;24265:60;24215:116;:::o;24337:137::-;24391:5;24422:6;24416:13;24407:22;;24438:30;24462:5;24438:30;:::i;:::-;24337:137;;;;:::o;24480:345::-;24547:6;24596:2;24584:9;24575:7;24571:23;24567:32;24564:119;;;24602:79;;:::i;:::-;24564:119;24722:1;24747:61;24800:7;24791:6;24780:9;24776:22;24747:61;:::i;:::-;24737:71;;24693:125;24480:345;;;;:::o;24831:223::-;24971:34;24967:1;24959:6;24955:14;24948:58;25040:6;25035:2;25027:6;25023:15;25016:31;24831:223;:::o;25060:366::-;25202:3;25223:67;25287:2;25282:3;25223:67;:::i;:::-;25216:74;;25299:93;25388:3;25299:93;:::i;:::-;25417:2;25412:3;25408:12;25401:19;;25060:366;;;:::o;25432:419::-;25598:4;25636:2;25625:9;25621:18;25613:26;;25685:9;25679:4;25675:20;25671:1;25660:9;25656:17;25649:47;25713:131;25839:4;25713:131;:::i;:::-;25705:139;;25432:419;;;:::o;25857:221::-;25997:34;25993:1;25985:6;25981:14;25974:58;26066:4;26061:2;26053:6;26049:15;26042:29;25857:221;:::o;26084:366::-;26226:3;26247:67;26311:2;26306:3;26247:67;:::i;:::-;26240:74;;26323:93;26412:3;26323:93;:::i;:::-;26441:2;26436:3;26432:12;26425:19;;26084:366;;;:::o;26456:419::-;26622:4;26660:2;26649:9;26645:18;26637:26;;26709:9;26703:4;26699:20;26695:1;26684:9;26680:17;26673:47;26737:131;26863:4;26737:131;:::i;:::-;26729:139;;26456:419;;;:::o;26881:221::-;27021:34;27017:1;27009:6;27005:14;26998:58;27090:4;27085:2;27077:6;27073:15;27066:29;26881:221;:::o;27108:366::-;27250:3;27271:67;27335:2;27330:3;27271:67;:::i;:::-;27264:74;;27347:93;27436:3;27347:93;:::i;:::-;27465:2;27460:3;27456:12;27449:19;;27108:366;;;:::o;27480:419::-;27646:4;27684:2;27673:9;27669:18;27661:26;;27733:9;27727:4;27723:20;27719:1;27708:9;27704:17;27697:47;27761:131;27887:4;27761:131;:::i;:::-;27753:139;;27480:419;;;:::o;27905:175::-;28045:27;28041:1;28033:6;28029:14;28022:51;27905:175;:::o;28086:366::-;28228:3;28249:67;28313:2;28308:3;28249:67;:::i;:::-;28242:74;;28325:93;28414:3;28325:93;:::i;:::-;28443:2;28438:3;28434:12;28427:19;;28086:366;;;:::o;28458:419::-;28624:4;28662:2;28651:9;28647:18;28639:26;;28711:9;28705:4;28701:20;28697:1;28686:9;28682:17;28675:47;28739:131;28865:4;28739:131;:::i;:::-;28731:139;;28458:419;;;:::o;28883:178::-;29023:30;29019:1;29011:6;29007:14;29000:54;28883:178;:::o;29067:366::-;29209:3;29230:67;29294:2;29289:3;29230:67;:::i;:::-;29223:74;;29306:93;29395:3;29306:93;:::i;:::-;29424:2;29419:3;29415:12;29408:19;;29067:366;;;:::o;29439:419::-;29605:4;29643:2;29632:9;29628:18;29620:26;;29692:9;29686:4;29682:20;29678:1;29667:9;29663:17;29656:47;29720:131;29846:4;29720:131;:::i;:::-;29712:139;;29439:419;;;:::o;29864:180::-;29912:77;29909:1;29902:88;30009:4;30006:1;29999:15;30033:4;30030:1;30023:15;30050:180;30098:77;30095:1;30088:88;30195:4;30192:1;30185:15;30219:4;30216:1;30209:15;30236:143;30293:5;30324:6;30318:13;30309:22;;30340:33;30367:5;30340:33;:::i;:::-;30236:143;;;;:::o;30385:351::-;30455:6;30504:2;30492:9;30483:7;30479:23;30475:32;30472:119;;;30510:79;;:::i;:::-;30472:119;30630:1;30655:64;30711:7;30702:6;30691:9;30687:22;30655:64;:::i;:::-;30645:74;;30601:128;30385:351;;;;:::o;30742:180::-;30790:77;30787:1;30780:88;30887:4;30884:1;30877:15;30911:4;30908:1;30901:15;30928:185;30968:1;30985:20;31003:1;30985:20;:::i;:::-;30980:25;;31019:20;31037:1;31019:20;:::i;:::-;31014:25;;31058:1;31048:35;;31063:18;;:::i;:::-;31048:35;31105:1;31102;31098:9;31093:14;;30928:185;;;;:::o;31119:114::-;31186:6;31220:5;31214:12;31204:22;;31119:114;;;:::o;31239:184::-;31338:11;31372:6;31367:3;31360:19;31412:4;31407:3;31403:14;31388:29;;31239:184;;;;:::o;31429:132::-;31496:4;31519:3;31511:11;;31549:4;31544:3;31540:14;31532:22;;31429:132;;;:::o;31567:108::-;31644:24;31662:5;31644:24;:::i;:::-;31639:3;31632:37;31567:108;;:::o;31681:179::-;31750:10;31771:46;31813:3;31805:6;31771:46;:::i;:::-;31849:4;31844:3;31840:14;31826:28;;31681:179;;;;:::o;31866:113::-;31936:4;31968;31963:3;31959:14;31951:22;;31866:113;;;:::o;32015:732::-;32134:3;32163:54;32211:5;32163:54;:::i;:::-;32233:86;32312:6;32307:3;32233:86;:::i;:::-;32226:93;;32343:56;32393:5;32343:56;:::i;:::-;32422:7;32453:1;32438:284;32463:6;32460:1;32457:13;32438:284;;;32539:6;32533:13;32566:63;32625:3;32610:13;32566:63;:::i;:::-;32559:70;;32652:60;32705:6;32652:60;:::i;:::-;32642:70;;32498:224;32485:1;32482;32478:9;32473:14;;32438:284;;;32442:14;32738:3;32731:10;;32139:608;;;32015:732;;;;:::o;32753:483::-;32924:4;32962:2;32951:9;32947:18;32939:26;;32975:71;33043:1;33032:9;33028:17;33019:6;32975:71;:::i;:::-;33093:9;33087:4;33083:20;33078:2;33067:9;33063:18;33056:48;33121:108;33224:4;33215:6;33121:108;:::i;:::-;33113:116;;32753:483;;;;;:::o;33242:117::-;33351:1;33348;33341:12;33365:281;33448:27;33470:4;33448:27;:::i;:::-;33440:6;33436:40;33578:6;33566:10;33563:22;33542:18;33530:10;33527:34;33524:62;33521:88;;;33589:18;;:::i;:::-;33521:88;33629:10;33625:2;33618:22;33408:238;33365:281;;:::o;33652:129::-;33686:6;33713:20;;:::i;:::-;33703:30;;33742:33;33770:4;33762:6;33742:33;:::i;:::-;33652:129;;;:::o;33787:311::-;33864:4;33954:18;33946:6;33943:30;33940:56;;;33976:18;;:::i;:::-;33940:56;34026:4;34018:6;34014:17;34006:25;;34086:4;34080;34076:15;34068:23;;33787:311;;;:::o;34104:117::-;34213:1;34210;34203:12;34244:732;34351:5;34376:81;34392:64;34449:6;34392:64;:::i;:::-;34376:81;:::i;:::-;34367:90;;34477:5;34506:6;34499:5;34492:21;34540:4;34533:5;34529:16;34522:23;;34593:4;34585:6;34581:17;34573:6;34569:30;34622:3;34614:6;34611:15;34608:122;;;34641:79;;:::i;:::-;34608:122;34756:6;34739:231;34773:6;34768:3;34765:15;34739:231;;;34848:3;34877:48;34921:3;34909:10;34877:48;:::i;:::-;34872:3;34865:61;34955:4;34950:3;34946:14;34939:21;;34815:155;34799:4;34794:3;34790:14;34783:21;;34739:231;;;34743:21;34357:619;;34244:732;;;;;:::o;34999:385::-;35081:5;35130:3;35123:4;35115:6;35111:17;35107:27;35097:122;;35138:79;;:::i;:::-;35097:122;35248:6;35242:13;35273:105;35374:3;35366:6;35359:4;35351:6;35347:17;35273:105;:::i;:::-;35264:114;;35087:297;34999:385;;;;:::o;35390:554::-;35485:6;35534:2;35522:9;35513:7;35509:23;35505:32;35502:119;;;35540:79;;:::i;:::-;35502:119;35681:1;35670:9;35666:17;35660:24;35711:18;35703:6;35700:30;35697:117;;;35733:79;;:::i;:::-;35697:117;35838:89;35919:7;35910:6;35899:9;35895:22;35838:89;:::i;:::-;35828:99;;35631:306;35390:554;;;;:::o;35950:85::-;35995:7;36024:5;36013:16;;35950:85;;;:::o;36041:60::-;36069:3;36090:5;36083:12;;36041:60;;;:::o;36107:158::-;36165:9;36198:61;36216:42;36225:32;36251:5;36225:32;:::i;:::-;36216:42;:::i;:::-;36198:61;:::i;:::-;36185:74;;36107:158;;;:::o;36271:147::-;36366:45;36405:5;36366:45;:::i;:::-;36361:3;36354:58;36271:147;;:::o;36424:831::-;36687:4;36725:3;36714:9;36710:19;36702:27;;36739:71;36807:1;36796:9;36792:17;36783:6;36739:71;:::i;:::-;36820:80;36896:2;36885:9;36881:18;36872:6;36820:80;:::i;:::-;36947:9;36941:4;36937:20;36932:2;36921:9;36917:18;36910:48;36975:108;37078:4;37069:6;36975:108;:::i;:::-;36967:116;;37093:72;37161:2;37150:9;37146:18;37137:6;37093:72;:::i;:::-;37175:73;37243:3;37232:9;37228:19;37219:6;37175:73;:::i;:::-;36424:831;;;;;;;;:::o;37261:191::-;37301:4;37321:20;37339:1;37321:20;:::i;:::-;37316:25;;37355:20;37373:1;37355:20;:::i;:::-;37350:25;;37394:1;37391;37388:8;37385:34;;;37399:18;;:::i;:::-;37385:34;37444:1;37441;37437:9;37429:17;;37261:191;;;;:::o;37458:807::-;37707:4;37745:3;37734:9;37730:19;37722:27;;37759:71;37827:1;37816:9;37812:17;37803:6;37759:71;:::i;:::-;37840:72;37908:2;37897:9;37893:18;37884:6;37840:72;:::i;:::-;37922:80;37998:2;37987:9;37983:18;37974:6;37922:80;:::i;:::-;38012;38088:2;38077:9;38073:18;38064:6;38012:80;:::i;:::-;38102:73;38170:3;38159:9;38155:19;38146:6;38102:73;:::i;:::-;38185;38253:3;38242:9;38238:19;38229:6;38185:73;:::i;:::-;37458:807;;;;;;;;;:::o;38271:663::-;38359:6;38367;38375;38424:2;38412:9;38403:7;38399:23;38395:32;38392:119;;;38430:79;;:::i;:::-;38392:119;38550:1;38575:64;38631:7;38622:6;38611:9;38607:22;38575:64;:::i;:::-;38565:74;;38521:128;38688:2;38714:64;38770:7;38761:6;38750:9;38746:22;38714:64;:::i;:::-;38704:74;;38659:129;38827:2;38853:64;38909:7;38900:6;38889:9;38885:22;38853:64;:::i;:::-;38843:74;;38798:129;38271:663;;;;;:::o;38940:147::-;39041:11;39078:3;39063:18;;38940:147;;;;:::o;39093:114::-;;:::o;39213:398::-;39372:3;39393:83;39474:1;39469:3;39393:83;:::i;:::-;39386:90;;39485:93;39574:3;39485:93;:::i;:::-;39603:1;39598:3;39594:11;39587:18;;39213:398;;;:::o;39617:379::-;39801:3;39823:147;39966:3;39823:147;:::i;:::-;39816:154;;39987:3;39980:10;;39617:379;;;:::o;40002:180::-;40142:32;40138:1;40130:6;40126:14;40119:56;40002:180;:::o;40188:366::-;40330:3;40351:67;40415:2;40410:3;40351:67;:::i;:::-;40344:74;;40427:93;40516:3;40427:93;:::i;:::-;40545:2;40540:3;40536:12;40529:19;;40188:366;;;:::o;40560:419::-;40726:4;40764:2;40753:9;40749:18;40741:26;;40813:9;40807:4;40803:20;40799:1;40788:9;40784:17;40777:47;40841:131;40967:4;40841:131;:::i;:::-;40833:139;;40560:419;;;:::o;40985:174::-;41125:26;41121:1;41113:6;41109:14;41102:50;40985:174;:::o;41165:366::-;41307:3;41328:67;41392:2;41387:3;41328:67;:::i;:::-;41321:74;;41404:93;41493:3;41404:93;:::i;:::-;41522:2;41517:3;41513:12;41506:19;;41165:366;;;:::o;41537:419::-;41703:4;41741:2;41730:9;41726:18;41718:26;;41790:9;41784:4;41780:20;41776:1;41765:9;41761:17;41754:47;41818:131;41944:4;41818:131;:::i;:::-;41810:139;;41537:419;;;:::o;41962:170::-;42102:22;42098:1;42090:6;42086:14;42079:46;41962:170;:::o;42138:366::-;42280:3;42301:67;42365:2;42360:3;42301:67;:::i;:::-;42294:74;;42377:93;42466:3;42377:93;:::i;:::-;42495:2;42490:3;42486:12;42479:19;;42138:366;;;:::o;42510:419::-;42676:4;42714:2;42703:9;42699:18;42691:26;;42763:9;42757:4;42753:20;42749:1;42738:9;42734:17;42727:47;42791:131;42917:4;42791:131;:::i;:::-;42783:139;;42510:419;;;:::o;42935:220::-;43075:34;43071:1;43063:6;43059:14;43052:58;43144:3;43139:2;43131:6;43127:15;43120:28;42935:220;:::o;43161:366::-;43303:3;43324:67;43388:2;43383:3;43324:67;:::i;:::-;43317:74;;43400:93;43489:3;43400:93;:::i;:::-;43518:2;43513:3;43509:12;43502:19;;43161:366;;;:::o;43533:419::-;43699:4;43737:2;43726:9;43722:18;43714:26;;43786:9;43780:4;43776:20;43772:1;43761:9;43757:17;43750:47;43814:131;43940:4;43814:131;:::i;:::-;43806:139;;43533:419;;;:::o;43958:221::-;44098:34;44094:1;44086:6;44082:14;44075:58;44167:4;44162:2;44154:6;44150:15;44143:29;43958:221;:::o;44185:366::-;44327:3;44348:67;44412:2;44407:3;44348:67;:::i;:::-;44341:74;;44424:93;44513:3;44424:93;:::i;:::-;44542:2;44537:3;44533:12;44526:19;;44185:366;;;:::o;44557:419::-;44723:4;44761:2;44750:9;44746:18;44738:26;;44810:9;44804:4;44800:20;44796:1;44785:9;44781:17;44774:47;44838:131;44964:4;44838:131;:::i;:::-;44830:139;;44557:419;;;:::o;44982:166::-;45122:18;45118:1;45110:6;45106:14;45099:42;44982:166;:::o;45154:366::-;45296:3;45317:67;45381:2;45376:3;45317:67;:::i;:::-;45310:74;;45393:93;45482:3;45393:93;:::i;:::-;45511:2;45506:3;45502:12;45495:19;;45154:366;;;:::o;45526:419::-;45692:4;45730:2;45719:9;45715:18;45707:26;;45779:9;45773:4;45769:20;45765:1;45754:9;45750:17;45743:47;45807:131;45933:4;45807:131;:::i;:::-;45799:139;;45526:419;;;:::o;45951:224::-;46091:34;46087:1;46079:6;46075:14;46068:58;46160:7;46155:2;46147:6;46143:15;46136:32;45951:224;:::o;46181:366::-;46323:3;46344:67;46408:2;46403:3;46344:67;:::i;:::-;46337:74;;46420:93;46509:3;46420:93;:::i;:::-;46538:2;46533:3;46529:12;46522:19;;46181:366;;;:::o;46553:419::-;46719:4;46757:2;46746:9;46742:18;46734:26;;46806:9;46800:4;46796:20;46792:1;46781:9;46777:17;46770:47;46834:131;46960:4;46834:131;:::i;:::-;46826:139;;46553:419;;;:::o;46978:222::-;47118:34;47114:1;47106:6;47102:14;47095:58;47187:5;47182:2;47174:6;47170:15;47163:30;46978:222;:::o;47206:366::-;47348:3;47369:67;47433:2;47428:3;47369:67;:::i;:::-;47362:74;;47445:93;47534:3;47445:93;:::i;:::-;47563:2;47558:3;47554:12;47547:19;;47206:366;;;:::o;47578:419::-;47744:4;47782:2;47771:9;47767:18;47759:26;;47831:9;47825:4;47821:20;47817:1;47806:9;47802:17;47795:47;47859:131;47985:4;47859:131;:::i;:::-;47851:139;;47578:419;;;:::o;48003:225::-;48143:34;48139:1;48131:6;48127:14;48120:58;48212:8;48207:2;48199:6;48195:15;48188:33;48003:225;:::o;48234:366::-;48376:3;48397:67;48461:2;48456:3;48397:67;:::i;:::-;48390:74;;48473:93;48562:3;48473:93;:::i;:::-;48591:2;48586:3;48582:12;48575:19;;48234:366;;;:::o;48606:419::-;48772:4;48810:2;48799:9;48795:18;48787:26;;48859:9;48853:4;48849:20;48845:1;48834:9;48830:17;48823:47;48887:131;49013:4;48887:131;:::i;:::-;48879:139;;48606:419;;;:::o

Swarm Source

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