ETH Price: $3,359.34 (-2.72%)
Gas: 3 Gwei

Token

PRIEST (PRIEST)
 

Overview

Max Total Supply

100,000,000,000 PRIEST

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.522599472746316524 PRIEST

Value
$0.00
0x1a273c9f542ea8f7f7a77417dde33c18ab445287
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:
PRIEST

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.0;
// SPDX-License-Identifier: MIT

// https://t.me/PriestWorship
// You're too far gone for Jesus
// Come see a Priest. 

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @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);
}

pragma solidity ^0.8.0;

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

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







pragma solidity ^0.8.0;



/**
 * @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:
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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







pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}







pragma solidity ^0.8.0;







pragma solidity ^0.8.0;

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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




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

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}


interface IUniswapV2ERC20 {
    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;
}






pragma solidity ^0.8.15;




contract PRIEST is ERC20Burnable, Ownable {
    uint256 private constant TOTAL_SUPPLY = 100_000_000_000e18;
    address public marketingWallet;
    uint256 public maxPercentToSwap = 5;
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isTEnabled;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account);
    event FeesUpdated(uint256 sellFee, uint256 buyFee);
    event MarketingWalletChanged(address marketingWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    uint256 public sellFee;
    uint256 public buyFee;

    
    bool public isBotProtectionDisabledPermanently;
    uint256 public maxTxAmount;
    uint256 public maxHolding;
    bool public buyCooldownEnabled = true;
    uint256 public buyCooldown = 30;
    mapping(address => bool) public isExempt;
    mapping(address => uint256) public lastBuy;

    constructor (address operator) ERC20("PRIEST", "PRIEST")
    {
        _mint(owner(), TOTAL_SUPPLY);

        swapTokensAtAmount = TOTAL_SUPPLY / 1000;
        maxHolding = TOTAL_SUPPLY / 100;
        maxTxAmount = TOTAL_SUPPLY / 100;
        marketingWallet = operator;

        sellFee = 30;
        buyFee = 10;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;

        
        isExempt[address(uniswapV2Router)] = true;
        isExempt[owner()] = true;
    }

    receive() external payable {
    }

    function resurrection() public onlyOwner {
        require(isTEnabled == false, "Trading is already open!");
        isTEnabled = true;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function sendETH(address payable recipient, uint256 amount) internal {
        recipient.call{gas : 2300, value : amount}("");
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The Uniswap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    
    function excludeFromFees(address account) external onlyOwner {
        require(!_isExcludedFromFees[account], "Account is already the value of true");
        _isExcludedFromFees[account] = true;

        emit ExcludeFromFees(account);
    }

    function includeInFees(address account) external onlyOwner {
        require(_isExcludedFromFees[account], "Account already included");
        _isExcludedFromFees[account] = false;
    }

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

    function updateFees(uint256 _sellFee, uint256 _buyFee) external onlyOwner {
        require(_sellFee <= 18, "Fees must be less than 10%");
        require(_buyFee <= 18, "Fees must be less than 10%");
        sellFee = _sellFee;
        buyFee = _buyFee;

        emit FeesUpdated(sellFee, buyFee);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "same wallet");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

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

        if (!swapping) {
            _check(from, to, amount);
        }

        uint _buyFee = buyFee;
        uint _sellFee = sellFee;

        if (!isExempt[from] && !isExempt[to]) {
            require(isTEnabled, "Trade is not open");
        }

        if (amount == 0) {
            return;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 toSwap = balanceOf(address(this));

        bool canSwap = toSwap >= swapTokensAtAmount && toSwap > 0 && !automatedMarketMakerPairs[from] && takeFee;
        if (canSwap &&
            !swapping) {
            swapping = true;
            uint256 pairBalance = balanceOf(uniswapV2Pair);
            if (toSwap > pairBalance * maxPercentToSwap / 100) {
                toSwap = pairBalance * maxPercentToSwap / 100;
            }
            swapAndSendMarketing(toSwap);
            swapping = false;
        }

        if (takeFee && to == uniswapV2Pair && _sellFee > 0) {
            uint256 fees = (amount * _sellFee) / 100;
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }
        else if (takeFee && from == uniswapV2Pair && _buyFee > 0) {
            uint256 fees = (amount * _buyFee) / 100;
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }

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

    function swapAndSendMarketing(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp) {}
        catch {
        }

        uint256 newBalance = address(this).balance;
        sendETH(payable(marketingWallet), newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount > 0);
        swapTokensAtAmount = newAmount;
    }

    function setMaxPercentToSwap(uint256 newAmount) external onlyOwner {
        require(newAmount > 1, "too low");
        require(newAmount <= 10, "too high");
        maxPercentToSwap = newAmount;
    }

    function _check(
        address from,
        address to,
        uint256 amount
    ) internal {
        
        if (!isBotProtectionDisabledPermanently) {
            
            if (!isSpecialAddresses(from, to) && !isExempt[to]) {

                _checkBuyCooldown(from, to);
                _checkMaxTxAmount(to, amount);
                
                _checkMaxHoldingLimit(to, amount);
            }
        }

    }

    function _checkBuyCooldown(address from, address to) internal {
        if (buyCooldownEnabled && from == uniswapV2Pair) {
            require(block.timestamp - lastBuy[tx.origin] >= buyCooldown, "buy cooldown");
            lastBuy[tx.origin] = block.timestamp;
        }

    }

    function _checkMaxTxAmount(address to, uint256 amount) internal view {
        require(amount <= maxTxAmount, "Amount exceeds max");

    }

    function _checkMaxHoldingLimit(address to, uint256 amount) internal view {
        if (to == uniswapV2Pair) {
            return;
        }

        require(balanceOf(to) + amount <= maxHolding, "Max holding exceeded max");

    }

    function isSpecialAddresses(address from, address to) view public returns (bool){
        
        return (from == owner() || to == owner() || from == address(this) || to == address(this));
    }

    function disableBotProtectionPermanently() external onlyOwner {
        isBotProtectionDisabledPermanently = true;
    }

    function setMaxTxAmount(uint256 maxTxAmount_) external onlyOwner {
        maxTxAmount = maxTxAmount_;
    }


    function setMaxHolding(uint256 maxHolding_) external onlyOwner {
        maxHolding = maxHolding_;
    }

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

    function setBuyCooldownStatus(bool status) external onlyOwner {
        buyCooldownEnabled = status;
    }

    function setBuyCooldown(uint256 buyCooldown_) external onlyOwner {
        buyCooldown = buyCooldown_;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","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":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBotProtectionDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isSpecialAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPercentToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resurrection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyCooldown_","type":"uint256"}],"name":"setBuyCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setBuyCooldownStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHolding_","type":"uint256"}],"name":"setMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxPercentToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260056007556001601360006101000a81548160ff021916908315150217905550601e6014553480156200003657600080fd5b50604051620059ad380380620059ad83398181016040528101906200005c919062000cc8565b6040518060400160405280600681526020017f50524945535400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f50524945535400000000000000000000000000000000000000000000000000008152508160039081620000d9919062000f74565b508060049081620000eb919062000f74565b5050506200010e62000102620006dd60201b60201c565b620006e560201b60201c565b6200013c62000122620007ab60201b60201c565b6c01431e0fae6d7217caa0000000620007d560201b60201c565b6103e86c01431e0fae6d7217caa0000000620001599190620010b9565b600a8190555060646c01431e0fae6d7217caa00000006200017b9190620010b9565b60128190555060646c01431e0fae6d7217caa00000006200019d9190620010b9565b60118190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e600e81905550600a600f819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000281919062000cc8565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030f919062000cc8565b6040518363ffffffff1660e01b81526004016200032e92919062001102565b6020604051808303816000875af11580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000374919062000cc8565b905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200044d30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200094d60201b60201c565b6200046081600162000b1e60201b60201c565b6001600c600062000476620007ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600062000683620007ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505062001405565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083e9062001190565b60405180910390fd5b6200085b6000838362000c5460201b60201c565b80600260008282546200086f9190620011b2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008c69190620011b2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200092d919062001220565b60405180910390a3620009496000838362000c5960201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620009bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009b690620012b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a28906200134b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b11919062001220565b60405180910390a3505050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362000bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000baa90620013e3565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c908262000c63565b9050919050565b62000ca28162000c83565b811462000cae57600080fd5b50565b60008151905062000cc28162000c97565b92915050565b60006020828403121562000ce15762000ce062000c5e565b5b600062000cf18482850162000cb1565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d7c57607f821691505b60208210810362000d925762000d9162000d34565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dfc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dbd565b62000e08868362000dbd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e5562000e4f62000e498462000e20565b62000e2a565b62000e20565b9050919050565b6000819050919050565b62000e718362000e34565b62000e8962000e808262000e5c565b84845462000dca565b825550505050565b600090565b62000ea062000e91565b62000ead81848462000e66565b505050565b5b8181101562000ed55762000ec960008262000e96565b60018101905062000eb3565b5050565b601f82111562000f245762000eee8162000d98565b62000ef98462000dad565b8101602085101562000f09578190505b62000f2162000f188562000dad565b83018262000eb2565b50505b505050565b600082821c905092915050565b600062000f496000198460080262000f29565b1980831691505092915050565b600062000f64838362000f36565b9150826002028217905092915050565b62000f7f8262000cfa565b67ffffffffffffffff81111562000f9b5762000f9a62000d05565b5b62000fa7825462000d63565b62000fb482828562000ed9565b600060209050601f83116001811462000fec576000841562000fd7578287015190505b62000fe3858262000f56565b86555062001053565b601f19841662000ffc8662000d98565b60005b82811015620010265784890151825560018201915060208501945060208101905062000fff565b8683101562001046578489015162001042601f89168262000f36565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010c68262000e20565b9150620010d38362000e20565b925082620010e657620010e56200105b565b5b828204905092915050565b620010fc8162000c83565b82525050565b6000604082019050620011196000830185620010f1565b620011286020830184620010f1565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001178601f836200112f565b9150620011858262001140565b602082019050919050565b60006020820190508181036000830152620011ab8162001169565b9050919050565b6000620011bf8262000e20565b9150620011cc8362000e20565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200120457620012036200108a565b5b828201905092915050565b6200121a8162000e20565b82525050565b60006020820190506200123760008301846200120f565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200129b6024836200112f565b9150620012a8826200123d565b604082019050919050565b60006020820190508181036000830152620012ce816200128c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620013336022836200112f565b91506200134082620012d5565b604082019050919050565b60006020820190508181036000830152620013668162001324565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b6000620013cb6038836200112f565b9150620013d8826200136d565b604082019050919050565b60006020820190508181036000830152620013fe81620013bc565b9050919050565b61459880620014156000396000f3fe6080604052600436106102b25760003560e01c806379cc679011610175578063afa4f3b2116100dc578063e2f4560511610095578063ec11ba341161006f578063ec11ba3414610ae3578063ec28438a14610afa578063f2fde38b14610b23578063f9d0831a14610b4c576102b9565b8063e2f4560514610a52578063e3084d9e14610a7d578063e57f14e114610aba576102b9565b8063afa4f3b214610920578063b62496f514610949578063bb85c6d114610986578063c1adf7bc146109af578063c29632bd146109ec578063dd62ed3e14610a15576102b9565b80639c7d15a21161012e5780639c7d15a2146107fe5780639f6473bd146108295780639fde54f514610840578063a457c2d714610869578063a9059cbb146108a6578063ad5dff73146108e3576102b9565b806379cc6790146107025780638c0b5e221461072b5780638da5cb5b1461075657806395d89b41146107815780639a7a23d6146107ac5780639bc7c8c0146107d5576102b9565b806342966c68116102195780636457c4c3116101d25780636457c4c3146106065780636db794371461062f578063704fbfe51461065857806370a0823114610683578063715018a6146106c057806375f0a874146106d7576102b9565b806342966c68146104f45780634589aaea1461051d578063470624021461054857806349bd5a5e146105735780634fbee1931461059e578063617fe0ed146105db576102b9565b8063205187581161026b57806320518758146103d057806323b872dd146103f95780632b14ca5614610436578063313ce56714610461578063333e6f061461048c57806339509351146104b7576102b9565b806306fdde03146102be578063095ea7b3146102e95780631694505e1461032657806316a2f82a1461035157806318160ddd1461037a5780631cb36755146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b75565b6040516102e0919061300a565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906130c5565b610c07565b60405161031d9190613120565b60405180910390f35b34801561033257600080fd5b5061033b610c2a565b604051610348919061319a565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906131b5565b610c50565b005b34801561038657600080fd5b5061038f610d3f565b60405161039c91906131f1565b60405180910390f35b3480156103b157600080fd5b506103ba610d49565b6040516103c79190613120565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f2919061320c565b610d5c565b005b34801561040557600080fd5b50610420600480360381019061041b9190613239565b610df5565b60405161042d9190613120565b60405180910390f35b34801561044257600080fd5b5061044b610e24565b60405161045891906131f1565b60405180910390f35b34801561046d57600080fd5b50610476610e2a565b60405161048391906132a8565b60405180910390f35b34801561049857600080fd5b506104a1610e33565b6040516104ae91906131f1565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906130c5565b610e39565b6040516104eb9190613120565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061320c565b610e70565b005b34801561052957600080fd5b50610532610e84565b60405161053f9190613120565b60405180910390f35b34801561055457600080fd5b5061055d610e97565b60405161056a91906131f1565b60405180910390f35b34801561057f57600080fd5b50610588610e9d565b60405161059591906132d2565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906131b5565b610ec3565b6040516105d29190613120565b60405180910390f35b3480156105e757600080fd5b506105f0610f19565b6040516105fd9190613120565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613319565b610f2c565b005b34801561063b57600080fd5b5061065660048036038101906106519190613346565b610f51565b005b34801561066457600080fd5b5061066d611030565b60405161067a91906131f1565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906131b5565b611036565b6040516106b791906131f1565b60405180910390f35b3480156106cc57600080fd5b506106d561107e565b005b3480156106e357600080fd5b506106ec611092565b6040516106f991906132d2565b60405180910390f35b34801561070e57600080fd5b50610729600480360381019061072491906130c5565b6110b8565b005b34801561073757600080fd5b506107406110d8565b60405161074d91906131f1565b60405180910390f35b34801561076257600080fd5b5061076b6110de565b60405161077891906132d2565b60405180910390f35b34801561078d57600080fd5b50610796611108565b6040516107a3919061300a565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190613386565b61119a565b005b3480156107e157600080fd5b506107fc60048036038101906107f7919061320c565b611240565b005b34801561080a57600080fd5b50610813611252565b60405161082091906131f1565b60405180910390f35b34801561083557600080fd5b5061083e611258565b005b34801561084c57600080fd5b5061086760048036038101906108629190613386565b6112d3565b005b34801561087557600080fd5b50610890600480360381019061088b91906130c5565b611336565b60405161089d9190613120565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906130c5565b6113ad565b6040516108da9190613120565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906131b5565b6113d0565b6040516109179190613120565b60405180910390f35b34801561092c57600080fd5b506109476004803603810190610942919061320c565b6113f0565b005b34801561095557600080fd5b50610970600480360381019061096b91906131b5565b61140f565b60405161097d9190613120565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a891906131b5565b61142f565b005b3480156109bb57600080fd5b506109d660048036038101906109d191906131b5565b611564565b6040516109e391906131f1565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e919061320c565b61157c565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906133c6565b61158e565b604051610a4991906131f1565b60405180910390f35b348015610a5e57600080fd5b50610a67611615565b604051610a7491906131f1565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906133c6565b61161b565b604051610ab19190613120565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906131b5565b611704565b005b348015610aef57600080fd5b50610af8611837565b005b348015610b0657600080fd5b50610b216004803603810190610b1c919061320c565b61185c565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906131b5565b61186e565b005b348015610b5857600080fd5b50610b736004803603810190610b6e91906131b5565b6118f1565b005b606060038054610b8490613435565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb090613435565b8015610bfd5780601f10610bd257610100808354040283529160200191610bfd565b820191906000526020600020905b815481529060010190602001808311610be057829003601f168201915b5050505050905090565b600080610c12611aef565b9050610c1f818585611af7565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c58611cc0565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906134b2565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b600b60009054906101000a900460ff1681565b610d64611cc0565b60018111610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e9061351e565b60405180910390fd5b600a811115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de29061358a565b60405180910390fd5b8060078190555050565b600080610e00611aef565b9050610e0d858285611d3e565b610e18858585611dca565b60019150509392505050565b600e5481565b60006012905090565b60125481565b600080610e44611aef565b9050610e65818585610e56858961158e565b610e6091906135d9565b611af7565b600191505092915050565b610e81610e7b611aef565b8261234c565b50565b601060009054906101000a900460ff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601360009054906101000a900460ff1681565b610f34611cc0565b80601360006101000a81548160ff02191690831515021790555050565b610f59611cc0565b6012821115610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061367b565b60405180910390fd5b6012811115610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd89061367b565b60405180910390fd5b81600e8190555080600f819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1600e54600f5460405161102492919061369b565b60405180910390a15050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611086611cc0565b6110906000612522565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ca826110c4611aef565b83611d3e565b6110d4828261234c565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461111790613435565b80601f016020809104026020016040519081016040528092919081815260200182805461114390613435565b80156111905780601f1061116557610100808354040283529160200191611190565b820191906000526020600020905b81548152906001019060200180831161117357829003601f168201915b5050505050905090565b6111a2611cc0565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611232576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112299061375c565b60405180910390fd5b61123c82826125e8565b5050565b611248611cc0565b8060128190555050565b60075481565b611260611cc0565b60001515600b60009054906101000a900460ff161515146112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad906137c8565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b6112db611cc0565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611341611aef565b9050600061134f828661158e565b905083811015611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b9061385a565b60405180910390fd5b6113a18286868403611af7565b60019250505092915050565b6000806113b8611aef565b90506113c5818585611dca565b600191505092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b6113f8611cc0565b6000811161140557600080fd5b80600a8190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611437611cc0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be906138c6565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161155991906132d2565b60405180910390a150565b60166020528060005260406000206000915090505481565b611584611cc0565b8060148190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006116256110de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061169057506116616110de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116c657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806116fc57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61170c611cc0565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613958565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b61183f611cc0565b6001601060006101000a81548160ff021916908315150217905550565b611864611cc0565b8060118190555050565b611876611cc0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc906139ea565b60405180910390fd5b6118ee81612522565b50565b6118f9611cc0565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613a56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e7573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119e1573d6000803e3d6000fd5b50611aec565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a2791906132d2565b602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a689190613a8b565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611aa5929190613ab8565b6020604051808303816000875af1158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae89190613af6565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613c27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cb391906131f1565b60405180910390a3505050565b611cc8611aef565b73ffffffffffffffffffffffffffffffffffffffff16611ce66110de565b73ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613c93565b60405180910390fd5b565b6000611d4a848461158e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611dc45781811015611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613cff565b60405180910390fd5b611dc38484848403611af7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3090613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613e23565b60405180910390fd5b600960149054906101000a900460ff16611ec857611ec783838361271b565b5b6000600f5490506000600e549050601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f7a5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fcf57600b60009054906101000a900460ff16611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc590613e8f565b60405180910390fd5b5b60008303611fde575050612347565b6000600960149054906101000a900460ff16159050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120945750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561209e57600090505b60006120a930611036565b90506000600a5482101580156120bf5750600082115b80156121155750600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561211e5750825b905080801561213a5750600960149054906101000a900460ff16155b156121ed576001600960146101000a81548160ff0219169083151502179055506000612187600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611036565b90506064600754826121999190613eaf565b6121a39190613f38565b8311156121c7576064600754826121ba9190613eaf565b6121c49190613f38565b92505b6121d0836127ba565b6000600960146101000a81548160ff021916908315150217905550505b8280156122475750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80156122535750600084115b15612293576000606485886122689190613eaf565b6122729190613f38565b905080876122809190613f69565b965061228d893083612a35565b50612336565b8280156122ed5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b80156122f95750600085115b156123355760006064868861230e9190613eaf565b6123189190613f38565b905080876123269190613f69565b9650612333893083612a35565b505b5b612341888888612a35565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b29061400f565b60405180910390fd5b6123c782600083612cb4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561244d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612444906140a1565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546124a49190613f69565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250991906131f1565b60405180910390a361251d83600084612cb9565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361267a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267190614133565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601060009054906101000a900460ff166127b557612739838361161b565b1580156127905750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b45761279f8383612cbe565b6127a98282612e04565b6127b38282612e4d565b5b5b505050565b6000600267ffffffffffffffff8111156127d7576127d6614153565b5b6040519080825280602002602001820160405280156128055781602001602082028036833780820191505090505b509050308160008151811061281d5761281c614182565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e891906141c6565b816001815181106128fc576128fb614182565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161299a9594939291906142ec565b600060405180830381600087803b1580156129b457600080fd5b505af19250505080156129c5575060015b5060004790506129f7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f00565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612a2892919061369b565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9b90613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0a90613e23565b60405180910390fd5b612b1e838383612cb4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b906143b8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3791906135d9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c9b91906131f1565b60405180910390a3612cae848484612cb9565b50505050565b505050565b505050565b601360009054906101000a900460ff168015612d275750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612e0057601454601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442612d7a9190613f69565b1015612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290614424565b60405180910390fd5b42601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b601154811115612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090614490565b60405180910390fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315612efc5760125481612eb084611036565b612eba91906135d9565b1115612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906144fc565b60405180910390fd5b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612f279061454d565b600060405180830381858888f193505050503d8060008114612f65576040519150601f19603f3d011682016040523d82523d6000602084013e612f6a565b606091505b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fab578082015181840152602081019050612f90565b83811115612fba576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fdc82612f71565b612fe68185612f7c565b9350612ff6818560208601612f8d565b612fff81612fc0565b840191505092915050565b600060208201905081810360008301526130248184612fd1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061305c82613031565b9050919050565b61306c81613051565b811461307757600080fd5b50565b60008135905061308981613063565b92915050565b6000819050919050565b6130a28161308f565b81146130ad57600080fd5b50565b6000813590506130bf81613099565b92915050565b600080604083850312156130dc576130db61302c565b5b60006130ea8582860161307a565b92505060206130fb858286016130b0565b9150509250929050565b60008115159050919050565b61311a81613105565b82525050565b60006020820190506131356000830184613111565b92915050565b6000819050919050565b600061316061315b61315684613031565b61313b565b613031565b9050919050565b600061317282613145565b9050919050565b600061318482613167565b9050919050565b61319481613179565b82525050565b60006020820190506131af600083018461318b565b92915050565b6000602082840312156131cb576131ca61302c565b5b60006131d98482850161307a565b91505092915050565b6131eb8161308f565b82525050565b600060208201905061320660008301846131e2565b92915050565b6000602082840312156132225761322161302c565b5b6000613230848285016130b0565b91505092915050565b6000806000606084860312156132525761325161302c565b5b60006132608682870161307a565b93505060206132718682870161307a565b9250506040613282868287016130b0565b9150509250925092565b600060ff82169050919050565b6132a28161328c565b82525050565b60006020820190506132bd6000830184613299565b92915050565b6132cc81613051565b82525050565b60006020820190506132e760008301846132c3565b92915050565b6132f681613105565b811461330157600080fd5b50565b600081359050613313816132ed565b92915050565b60006020828403121561332f5761332e61302c565b5b600061333d84828501613304565b91505092915050565b6000806040838503121561335d5761335c61302c565b5b600061336b858286016130b0565b925050602061337c858286016130b0565b9150509250929050565b6000806040838503121561339d5761339c61302c565b5b60006133ab8582860161307a565b92505060206133bc85828601613304565b9150509250929050565b600080604083850312156133dd576133dc61302c565b5b60006133eb8582860161307a565b92505060206133fc8582860161307a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061344d57607f821691505b6020821081036134605761345f613406565b5b50919050565b7f4163636f756e7420616c726561647920696e636c756465640000000000000000600082015250565b600061349c601883612f7c565b91506134a782613466565b602082019050919050565b600060208201905081810360008301526134cb8161348f565b9050919050565b7f746f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b6000613508600783612f7c565b9150613513826134d2565b602082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b6000613574600883612f7c565b915061357f8261353e565b602082019050919050565b600060208201905081810360008301526135a381613567565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135e48261308f565b91506135ef8361308f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613624576136236135aa565b5b828201905092915050565b7f46656573206d757374206265206c657373207468616e20313025000000000000600082015250565b6000613665601a83612f7c565b91506136708261362f565b602082019050919050565b6000602082019050818103600083015261369481613658565b9050919050565b60006040820190506136b060008301856131e2565b6136bd60208301846131e2565b9392505050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b6000613746604183612f7c565b9150613751826136c4565b606082019050919050565b6000602082019050818103600083015261377581613739565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e210000000000000000600082015250565b60006137b2601883612f7c565b91506137bd8261377c565b602082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613844602583612f7c565b915061384f826137e8565b604082019050919050565b6000602082019050818103600083015261387381613837565b9050919050565b7f73616d652077616c6c6574000000000000000000000000000000000000000000600082015250565b60006138b0600b83612f7c565b91506138bb8261387a565b602082019050919050565b600060208201905081810360008301526138df816138a3565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f7472756500000000000000000000000000000000000000000000000000000000602082015250565b6000613942602483612f7c565b915061394d826138e6565b604082019050919050565b6000602082019050818103600083015261397181613935565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139d4602683612f7c565b91506139df82613978565b604082019050919050565b60006020820190508181036000830152613a03816139c7565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000613a40602083612f7c565b9150613a4b82613a0a565b602082019050919050565b60006020820190508181036000830152613a6f81613a33565b9050919050565b600081519050613a8581613099565b92915050565b600060208284031215613aa157613aa061302c565b5b6000613aaf84828501613a76565b91505092915050565b6000604082019050613acd60008301856132c3565b613ada60208301846131e2565b9392505050565b600081519050613af0816132ed565b92915050565b600060208284031215613b0c57613b0b61302c565b5b6000613b1a84828501613ae1565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b7f602483612f7c565b9150613b8a82613b23565b604082019050919050565b60006020820190508181036000830152613bae81613b72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c11602283612f7c565b9150613c1c82613bb5565b604082019050919050565b60006020820190508181036000830152613c4081613c04565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c7d602083612f7c565b9150613c8882613c47565b602082019050919050565b60006020820190508181036000830152613cac81613c70565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ce9601d83612f7c565b9150613cf482613cb3565b602082019050919050565b60006020820190508181036000830152613d1881613cdc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d7b602583612f7c565b9150613d8682613d1f565b604082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0d602383612f7c565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f5472616465206973206e6f74206f70656e000000000000000000000000000000600082015250565b6000613e79601183612f7c565b9150613e8482613e43565b602082019050919050565b60006020820190508181036000830152613ea881613e6c565b9050919050565b6000613eba8261308f565b9150613ec58361308f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613efe57613efd6135aa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f438261308f565b9150613f4e8361308f565b925082613f5e57613f5d613f09565b5b828204905092915050565b6000613f748261308f565b9150613f7f8361308f565b925082821015613f9257613f916135aa565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff9602183612f7c565b915061400482613f9d565b604082019050919050565b6000602082019050818103600083015261402881613fec565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061408b602283612f7c565b91506140968261402f565b604082019050919050565b600060208201905081810360008301526140ba8161407e565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061411d603883612f7c565b9150614128826140c1565b604082019050919050565b6000602082019050818103600083015261414c81614110565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141c081613063565b92915050565b6000602082840312156141dc576141db61302c565b5b60006141ea848285016141b1565b91505092915050565b6000819050919050565b600061421861421361420e846141f3565b61313b565b61308f565b9050919050565b614228816141fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61426381613051565b82525050565b6000614275838361425a565b60208301905092915050565b6000602082019050919050565b60006142998261422e565b6142a38185614239565b93506142ae8361424a565b8060005b838110156142df5781516142c68882614269565b97506142d183614281565b9250506001810190506142b2565b5085935050505092915050565b600060a08201905061430160008301886131e2565b61430e602083018761421f565b8181036040830152614320818661428e565b905061432f60608301856132c3565b61433c60808301846131e2565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143a2602683612f7c565b91506143ad82614346565b604082019050919050565b600060208201905081810360008301526143d181614395565b9050919050565b7f62757920636f6f6c646f776e0000000000000000000000000000000000000000600082015250565b600061440e600c83612f7c565b9150614419826143d8565b602082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f416d6f756e742065786365656473206d61780000000000000000000000000000600082015250565b600061447a601283612f7c565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f4d617820686f6c64696e67206578636565646564206d61780000000000000000600082015250565b60006144e6601883612f7c565b91506144f1826144b0565b602082019050919050565b60006020820190508181036000830152614515816144d9565b9050919050565b600081905092915050565b50565b600061453760008361451c565b915061454282614527565b600082019050919050565b60006145588261452a565b915081905091905056fea26469706673582212208772e23fbe90e9639b56de8852744726fe40e952cfd2edab9e9b6cc3f09b2ddf64736f6c634300080f00330000000000000000000000003b5c5b6c638b09edc47c44d6e297f536a3cb0eb4

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806379cc679011610175578063afa4f3b2116100dc578063e2f4560511610095578063ec11ba341161006f578063ec11ba3414610ae3578063ec28438a14610afa578063f2fde38b14610b23578063f9d0831a14610b4c576102b9565b8063e2f4560514610a52578063e3084d9e14610a7d578063e57f14e114610aba576102b9565b8063afa4f3b214610920578063b62496f514610949578063bb85c6d114610986578063c1adf7bc146109af578063c29632bd146109ec578063dd62ed3e14610a15576102b9565b80639c7d15a21161012e5780639c7d15a2146107fe5780639f6473bd146108295780639fde54f514610840578063a457c2d714610869578063a9059cbb146108a6578063ad5dff73146108e3576102b9565b806379cc6790146107025780638c0b5e221461072b5780638da5cb5b1461075657806395d89b41146107815780639a7a23d6146107ac5780639bc7c8c0146107d5576102b9565b806342966c68116102195780636457c4c3116101d25780636457c4c3146106065780636db794371461062f578063704fbfe51461065857806370a0823114610683578063715018a6146106c057806375f0a874146106d7576102b9565b806342966c68146104f45780634589aaea1461051d578063470624021461054857806349bd5a5e146105735780634fbee1931461059e578063617fe0ed146105db576102b9565b8063205187581161026b57806320518758146103d057806323b872dd146103f95780632b14ca5614610436578063313ce56714610461578063333e6f061461048c57806339509351146104b7576102b9565b806306fdde03146102be578063095ea7b3146102e95780631694505e1461032657806316a2f82a1461035157806318160ddd1461037a5780631cb36755146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b75565b6040516102e0919061300a565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b91906130c5565b610c07565b60405161031d9190613120565b60405180910390f35b34801561033257600080fd5b5061033b610c2a565b604051610348919061319a565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906131b5565b610c50565b005b34801561038657600080fd5b5061038f610d3f565b60405161039c91906131f1565b60405180910390f35b3480156103b157600080fd5b506103ba610d49565b6040516103c79190613120565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f2919061320c565b610d5c565b005b34801561040557600080fd5b50610420600480360381019061041b9190613239565b610df5565b60405161042d9190613120565b60405180910390f35b34801561044257600080fd5b5061044b610e24565b60405161045891906131f1565b60405180910390f35b34801561046d57600080fd5b50610476610e2a565b60405161048391906132a8565b60405180910390f35b34801561049857600080fd5b506104a1610e33565b6040516104ae91906131f1565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906130c5565b610e39565b6040516104eb9190613120565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061320c565b610e70565b005b34801561052957600080fd5b50610532610e84565b60405161053f9190613120565b60405180910390f35b34801561055457600080fd5b5061055d610e97565b60405161056a91906131f1565b60405180910390f35b34801561057f57600080fd5b50610588610e9d565b60405161059591906132d2565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906131b5565b610ec3565b6040516105d29190613120565b60405180910390f35b3480156105e757600080fd5b506105f0610f19565b6040516105fd9190613120565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190613319565b610f2c565b005b34801561063b57600080fd5b5061065660048036038101906106519190613346565b610f51565b005b34801561066457600080fd5b5061066d611030565b60405161067a91906131f1565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906131b5565b611036565b6040516106b791906131f1565b60405180910390f35b3480156106cc57600080fd5b506106d561107e565b005b3480156106e357600080fd5b506106ec611092565b6040516106f991906132d2565b60405180910390f35b34801561070e57600080fd5b50610729600480360381019061072491906130c5565b6110b8565b005b34801561073757600080fd5b506107406110d8565b60405161074d91906131f1565b60405180910390f35b34801561076257600080fd5b5061076b6110de565b60405161077891906132d2565b60405180910390f35b34801561078d57600080fd5b50610796611108565b6040516107a3919061300a565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190613386565b61119a565b005b3480156107e157600080fd5b506107fc60048036038101906107f7919061320c565b611240565b005b34801561080a57600080fd5b50610813611252565b60405161082091906131f1565b60405180910390f35b34801561083557600080fd5b5061083e611258565b005b34801561084c57600080fd5b5061086760048036038101906108629190613386565b6112d3565b005b34801561087557600080fd5b50610890600480360381019061088b91906130c5565b611336565b60405161089d9190613120565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906130c5565b6113ad565b6040516108da9190613120565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906131b5565b6113d0565b6040516109179190613120565b60405180910390f35b34801561092c57600080fd5b506109476004803603810190610942919061320c565b6113f0565b005b34801561095557600080fd5b50610970600480360381019061096b91906131b5565b61140f565b60405161097d9190613120565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a891906131b5565b61142f565b005b3480156109bb57600080fd5b506109d660048036038101906109d191906131b5565b611564565b6040516109e391906131f1565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e919061320c565b61157c565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906133c6565b61158e565b604051610a4991906131f1565b60405180910390f35b348015610a5e57600080fd5b50610a67611615565b604051610a7491906131f1565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906133c6565b61161b565b604051610ab19190613120565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906131b5565b611704565b005b348015610aef57600080fd5b50610af8611837565b005b348015610b0657600080fd5b50610b216004803603810190610b1c919061320c565b61185c565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906131b5565b61186e565b005b348015610b5857600080fd5b50610b736004803603810190610b6e91906131b5565b6118f1565b005b606060038054610b8490613435565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb090613435565b8015610bfd5780601f10610bd257610100808354040283529160200191610bfd565b820191906000526020600020905b815481529060010190602001808311610be057829003601f168201915b5050505050905090565b600080610c12611aef565b9050610c1f818585611af7565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c58611cc0565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdb906134b2565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b600b60009054906101000a900460ff1681565b610d64611cc0565b60018111610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e9061351e565b60405180910390fd5b600a811115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de29061358a565b60405180910390fd5b8060078190555050565b600080610e00611aef565b9050610e0d858285611d3e565b610e18858585611dca565b60019150509392505050565b600e5481565b60006012905090565b60125481565b600080610e44611aef565b9050610e65818585610e56858961158e565b610e6091906135d9565b611af7565b600191505092915050565b610e81610e7b611aef565b8261234c565b50565b601060009054906101000a900460ff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601360009054906101000a900460ff1681565b610f34611cc0565b80601360006101000a81548160ff02191690831515021790555050565b610f59611cc0565b6012821115610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f949061367b565b60405180910390fd5b6012811115610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd89061367b565b60405180910390fd5b81600e8190555080600f819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1600e54600f5460405161102492919061369b565b60405180910390a15050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611086611cc0565b6110906000612522565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ca826110c4611aef565b83611d3e565b6110d4828261234c565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461111790613435565b80601f016020809104026020016040519081016040528092919081815260200182805461114390613435565b80156111905780601f1061116557610100808354040283529160200191611190565b820191906000526020600020905b81548152906001019060200180831161117357829003601f168201915b5050505050905090565b6111a2611cc0565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611232576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112299061375c565b60405180910390fd5b61123c82826125e8565b5050565b611248611cc0565b8060128190555050565b60075481565b611260611cc0565b60001515600b60009054906101000a900460ff161515146112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad906137c8565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b6112db611cc0565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080611341611aef565b9050600061134f828661158e565b905083811015611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b9061385a565b60405180910390fd5b6113a18286868403611af7565b60019250505092915050565b6000806113b8611aef565b90506113c5818585611dca565b600191505092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b6113f8611cc0565b6000811161140557600080fd5b80600a8190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b611437611cc0565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be906138c6565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161155991906132d2565b60405180910390a150565b60166020528060005260406000206000915090505481565b611584611cc0565b8060148190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006116256110de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061169057506116616110de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116c657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806116fc57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61170c611cc0565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179090613958565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b61183f611cc0565b6001601060006101000a81548160ff021916908315150217905550565b611864611cc0565b8060118190555050565b611876611cc0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc906139ea565b60405180910390fd5b6118ee81612522565b50565b6118f9611cc0565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e90613a56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119e7573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119e1573d6000803e3d6000fd5b50611aec565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a2791906132d2565b602060405180830381865afa158015611a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a689190613a8b565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611aa5929190613ab8565b6020604051808303816000875af1158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae89190613af6565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d90613b95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90613c27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cb391906131f1565b60405180910390a3505050565b611cc8611aef565b73ffffffffffffffffffffffffffffffffffffffff16611ce66110de565b73ffffffffffffffffffffffffffffffffffffffff1614611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3390613c93565b60405180910390fd5b565b6000611d4a848461158e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611dc45781811015611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613cff565b60405180910390fd5b611dc38484848403611af7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3090613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90613e23565b60405180910390fd5b600960149054906101000a900460ff16611ec857611ec783838361271b565b5b6000600f5490506000600e549050601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f7a5750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fcf57600b60009054906101000a900460ff16611fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc590613e8f565b60405180910390fd5b5b60008303611fde575050612347565b6000600960149054906101000a900460ff16159050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120945750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561209e57600090505b60006120a930611036565b90506000600a5482101580156120bf5750600082115b80156121155750600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561211e5750825b905080801561213a5750600960149054906101000a900460ff16155b156121ed576001600960146101000a81548160ff0219169083151502179055506000612187600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611036565b90506064600754826121999190613eaf565b6121a39190613f38565b8311156121c7576064600754826121ba9190613eaf565b6121c49190613f38565b92505b6121d0836127ba565b6000600960146101000a81548160ff021916908315150217905550505b8280156122475750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b80156122535750600084115b15612293576000606485886122689190613eaf565b6122729190613f38565b905080876122809190613f69565b965061228d893083612a35565b50612336565b8280156122ed5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b80156122f95750600085115b156123355760006064868861230e9190613eaf565b6123189190613f38565b905080876123269190613f69565b9650612333893083612a35565b505b5b612341888888612a35565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b29061400f565b60405180910390fd5b6123c782600083612cb4565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561244d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612444906140a1565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546124a49190613f69565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161250991906131f1565b60405180910390a361251d83600084612cb9565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361267a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267190614133565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601060009054906101000a900460ff166127b557612739838361161b565b1580156127905750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b45761279f8383612cbe565b6127a98282612e04565b6127b38282612e4d565b5b5b505050565b6000600267ffffffffffffffff8111156127d7576127d6614153565b5b6040519080825280602002602001820160405280156128055781602001602082028036833780820191505090505b509050308160008151811061281d5761281c614182565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e891906141c6565b816001815181106128fc576128fb614182565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161299a9594939291906142ec565b600060405180830381600087803b1580156129b457600080fd5b505af19250505080156129c5575060015b5060004790506129f7600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612f00565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612a2892919061369b565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9b90613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0a90613e23565b60405180910390fd5b612b1e838383612cb4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9b906143b8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c3791906135d9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c9b91906131f1565b60405180910390a3612cae848484612cb9565b50505050565b505050565b505050565b601360009054906101000a900460ff168015612d275750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612e0057601454601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442612d7a9190613f69565b1015612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db290614424565b60405180910390fd5b42601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b601154811115612e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4090614490565b60405180910390fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315612efc5760125481612eb084611036565b612eba91906135d9565b1115612efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef2906144fc565b60405180910390fd5b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612f279061454d565b600060405180830381858888f193505050503d8060008114612f65576040519150601f19603f3d011682016040523d82523d6000602084013e612f6a565b606091505b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fab578082015181840152602081019050612f90565b83811115612fba576000848401525b50505050565b6000601f19601f8301169050919050565b6000612fdc82612f71565b612fe68185612f7c565b9350612ff6818560208601612f8d565b612fff81612fc0565b840191505092915050565b600060208201905081810360008301526130248184612fd1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061305c82613031565b9050919050565b61306c81613051565b811461307757600080fd5b50565b60008135905061308981613063565b92915050565b6000819050919050565b6130a28161308f565b81146130ad57600080fd5b50565b6000813590506130bf81613099565b92915050565b600080604083850312156130dc576130db61302c565b5b60006130ea8582860161307a565b92505060206130fb858286016130b0565b9150509250929050565b60008115159050919050565b61311a81613105565b82525050565b60006020820190506131356000830184613111565b92915050565b6000819050919050565b600061316061315b61315684613031565b61313b565b613031565b9050919050565b600061317282613145565b9050919050565b600061318482613167565b9050919050565b61319481613179565b82525050565b60006020820190506131af600083018461318b565b92915050565b6000602082840312156131cb576131ca61302c565b5b60006131d98482850161307a565b91505092915050565b6131eb8161308f565b82525050565b600060208201905061320660008301846131e2565b92915050565b6000602082840312156132225761322161302c565b5b6000613230848285016130b0565b91505092915050565b6000806000606084860312156132525761325161302c565b5b60006132608682870161307a565b93505060206132718682870161307a565b9250506040613282868287016130b0565b9150509250925092565b600060ff82169050919050565b6132a28161328c565b82525050565b60006020820190506132bd6000830184613299565b92915050565b6132cc81613051565b82525050565b60006020820190506132e760008301846132c3565b92915050565b6132f681613105565b811461330157600080fd5b50565b600081359050613313816132ed565b92915050565b60006020828403121561332f5761332e61302c565b5b600061333d84828501613304565b91505092915050565b6000806040838503121561335d5761335c61302c565b5b600061336b858286016130b0565b925050602061337c858286016130b0565b9150509250929050565b6000806040838503121561339d5761339c61302c565b5b60006133ab8582860161307a565b92505060206133bc85828601613304565b9150509250929050565b600080604083850312156133dd576133dc61302c565b5b60006133eb8582860161307a565b92505060206133fc8582860161307a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061344d57607f821691505b6020821081036134605761345f613406565b5b50919050565b7f4163636f756e7420616c726561647920696e636c756465640000000000000000600082015250565b600061349c601883612f7c565b91506134a782613466565b602082019050919050565b600060208201905081810360008301526134cb8161348f565b9050919050565b7f746f6f206c6f7700000000000000000000000000000000000000000000000000600082015250565b6000613508600783612f7c565b9150613513826134d2565b602082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b7f746f6f2068696768000000000000000000000000000000000000000000000000600082015250565b6000613574600883612f7c565b915061357f8261353e565b602082019050919050565b600060208201905081810360008301526135a381613567565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135e48261308f565b91506135ef8361308f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613624576136236135aa565b5b828201905092915050565b7f46656573206d757374206265206c657373207468616e20313025000000000000600082015250565b6000613665601a83612f7c565b91506136708261362f565b602082019050919050565b6000602082019050818103600083015261369481613658565b9050919050565b60006040820190506136b060008301856131e2565b6136bd60208301846131e2565b9392505050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b6000613746604183612f7c565b9150613751826136c4565b606082019050919050565b6000602082019050818103600083015261377581613739565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e210000000000000000600082015250565b60006137b2601883612f7c565b91506137bd8261377c565b602082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613844602583612f7c565b915061384f826137e8565b604082019050919050565b6000602082019050818103600083015261387381613837565b9050919050565b7f73616d652077616c6c6574000000000000000000000000000000000000000000600082015250565b60006138b0600b83612f7c565b91506138bb8261387a565b602082019050919050565b600060208201905081810360008301526138df816138a3565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008201527f7472756500000000000000000000000000000000000000000000000000000000602082015250565b6000613942602483612f7c565b915061394d826138e6565b604082019050919050565b6000602082019050818103600083015261397181613935565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139d4602683612f7c565b91506139df82613978565b604082019050919050565b60006020820190508181036000830152613a03816139c7565b9050919050565b7f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e73600082015250565b6000613a40602083612f7c565b9150613a4b82613a0a565b602082019050919050565b60006020820190508181036000830152613a6f81613a33565b9050919050565b600081519050613a8581613099565b92915050565b600060208284031215613aa157613aa061302c565b5b6000613aaf84828501613a76565b91505092915050565b6000604082019050613acd60008301856132c3565b613ada60208301846131e2565b9392505050565b600081519050613af0816132ed565b92915050565b600060208284031215613b0c57613b0b61302c565b5b6000613b1a84828501613ae1565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b7f602483612f7c565b9150613b8a82613b23565b604082019050919050565b60006020820190508181036000830152613bae81613b72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c11602283612f7c565b9150613c1c82613bb5565b604082019050919050565b60006020820190508181036000830152613c4081613c04565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c7d602083612f7c565b9150613c8882613c47565b602082019050919050565b60006020820190508181036000830152613cac81613c70565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ce9601d83612f7c565b9150613cf482613cb3565b602082019050919050565b60006020820190508181036000830152613d1881613cdc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613d7b602583612f7c565b9150613d8682613d1f565b604082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0d602383612f7c565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f5472616465206973206e6f74206f70656e000000000000000000000000000000600082015250565b6000613e79601183612f7c565b9150613e8482613e43565b602082019050919050565b60006020820190508181036000830152613ea881613e6c565b9050919050565b6000613eba8261308f565b9150613ec58361308f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613efe57613efd6135aa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f438261308f565b9150613f4e8361308f565b925082613f5e57613f5d613f09565b5b828204905092915050565b6000613f748261308f565b9150613f7f8361308f565b925082821015613f9257613f916135aa565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff9602183612f7c565b915061400482613f9d565b604082019050919050565b6000602082019050818103600083015261402881613fec565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061408b602283612f7c565b91506140968261402f565b604082019050919050565b600060208201905081810360008301526140ba8161407e565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b600061411d603883612f7c565b9150614128826140c1565b604082019050919050565b6000602082019050818103600083015261414c81614110565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141c081613063565b92915050565b6000602082840312156141dc576141db61302c565b5b60006141ea848285016141b1565b91505092915050565b6000819050919050565b600061421861421361420e846141f3565b61313b565b61308f565b9050919050565b614228816141fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61426381613051565b82525050565b6000614275838361425a565b60208301905092915050565b6000602082019050919050565b60006142998261422e565b6142a38185614239565b93506142ae8361424a565b8060005b838110156142df5781516142c68882614269565b97506142d183614281565b9250506001810190506142b2565b5085935050505092915050565b600060a08201905061430160008301886131e2565b61430e602083018761421f565b8181036040830152614320818661428e565b905061432f60608301856132c3565b61433c60808301846131e2565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006143a2602683612f7c565b91506143ad82614346565b604082019050919050565b600060208201905081810360008301526143d181614395565b9050919050565b7f62757920636f6f6c646f776e0000000000000000000000000000000000000000600082015250565b600061440e600c83612f7c565b9150614419826143d8565b602082019050919050565b6000602082019050818103600083015261443d81614401565b9050919050565b7f416d6f756e742065786365656473206d61780000000000000000000000000000600082015250565b600061447a601283612f7c565b915061448582614444565b602082019050919050565b600060208201905081810360008301526144a98161446d565b9050919050565b7f4d617820686f6c64696e67206578636565646564206d61780000000000000000600082015250565b60006144e6601883612f7c565b91506144f1826144b0565b602082019050919050565b60006020820190508181036000830152614515816144d9565b9050919050565b600081905092915050565b50565b600061453760008361451c565b915061454282614527565b600082019050919050565b60006145588261452a565b915081905091905056fea26469706673582212208772e23fbe90e9639b56de8852744726fe40e952cfd2edab9e9b6cc3f09b2ddf64736f6c634300080f0033

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

0000000000000000000000003b5c5b6c638b09edc47c44d6e297f536a3cb0eb4

-----Decoded View---------------
Arg [0] : operator (address): 0x3B5c5B6C638b09edC47c44D6e297F536a3CB0eB4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003b5c5b6c638b09edc47c44d6e297f536a3cb0eb4


Deployed Bytecode Sourcemap

29301:9952:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7949:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29494:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33501:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6718:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29812:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36988:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8730:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30385:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6560:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30536:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9434:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16804:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30450:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30414:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29542:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33699:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30568:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39024:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33833:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30612:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6889:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19188:103;;;;;;;;;;;;;:::i;:::-;;29415:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17214:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30503:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18540:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5817:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32665:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38799:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29452:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31922:144;;;;;;;;;;;;;:::i;:::-;;38913:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10175:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7222:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30650:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36829:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29902:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34152:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30697:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39140:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7478:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29772:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38343:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33247:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38549:122;;;;;;;;;;;;;:::i;:::-;;38679:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19446:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32074:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5598:100;5652:13;5685:5;5678:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:100;:::o;7949:201::-;8032:4;8049:13;8065:12;:10;:12::i;:::-;8049:28;;8088:32;8097:5;8104:7;8113:6;8088:8;:32::i;:::-;8138:4;8131:11;;;7949:201;;;;:::o;29494:41::-;;;;;;;;;;;;;:::o;33501:190::-;18426:13;:11;:13::i;:::-;33579:19:::1;:28;33599:7;33579:28;;;;;;;;;;;;;;;;;;;;;;;;;33571:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33678:5;33647:19;:28;33667:7;33647:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;33501:190:::0;:::o;6718:108::-;6779:7;6806:12;;6799:19;;6718:108;:::o;29812:22::-;;;;;;;;;;;;;:::o;36988:205::-;18426:13;:11;:13::i;:::-;37086:1:::1;37074:9;:13;37066:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;37131:2;37118:9;:15;;37110:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;37176:9;37157:16;:28;;;;36988:205:::0;:::o;8730:295::-;8861:4;8878:15;8896:12;:10;:12::i;:::-;8878:30;;8919:38;8935:4;8941:7;8950:6;8919:15;:38::i;:::-;8968:27;8978:4;8984:2;8988:6;8968:9;:27::i;:::-;9013:4;9006:11;;;8730:295;;;;;:::o;30385:22::-;;;;:::o;6560:93::-;6618:5;6643:2;6636:9;;6560:93;:::o;30536:25::-;;;;:::o;9434:238::-;9522:4;9539:13;9555:12;:10;:12::i;:::-;9539:28;;9578:64;9587:5;9594:7;9631:10;9603:25;9613:5;9620:7;9603:9;:25::i;:::-;:38;;;;:::i;:::-;9578:8;:64::i;:::-;9660:4;9653:11;;;9434:238;;;;:::o;16804:91::-;16860:27;16866:12;:10;:12::i;:::-;16880:6;16860:5;:27::i;:::-;16804:91;:::o;30450:46::-;;;;;;;;;;;;;:::o;30414:21::-;;;;:::o;29542:29::-;;;;;;;;;;;;;:::o;33699:126::-;33765:4;33789:19;:28;33809:7;33789:28;;;;;;;;;;;;;;;;;;;;;;;;;33782:35;;33699:126;;;:::o;30568:37::-;;;;;;;;;;;;;:::o;39024:108::-;18426:13;:11;:13::i;:::-;39118:6:::1;39097:18;;:27;;;;;;;;;;;;;;;;;;39024:108:::0;:::o;33833:311::-;18426:13;:11;:13::i;:::-;33938:2:::1;33926:8;:14;;33918:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;34001:2;33990:7;:13;;33982:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;34055:8;34045:7;:18;;;;34083:7;34074:6;:16;;;;34108:28;34120:7;;34129:6;;34108:28;;;;;;;:::i;:::-;;;;;;;;33833:311:::0;;:::o;30612:31::-;;;;:::o;6889:127::-;6963:7;6990:9;:18;7000:7;6990:18;;;;;;;;;;;;;;;;6983:25;;6889:127;;;:::o;19188:103::-;18426:13;:11;:13::i;:::-;19253:30:::1;19280:1;19253:18;:30::i;:::-;19188:103::o:0;29415:30::-;;;;;;;;;;;;;:::o;17214:164::-;17291:46;17307:7;17316:12;:10;:12::i;:::-;17330:6;17291:15;:46::i;:::-;17348:22;17354:7;17363:6;17348:5;:22::i;:::-;17214:164;;:::o;30503:26::-;;;;:::o;18540:87::-;18586:7;18613:6;;;;;;;;;;;18606:13;;18540:87;:::o;5817:104::-;5873:13;5906:7;5899:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5817:104;:::o;32665:252::-;18426:13;:11;:13::i;:::-;32772::::1;;;;;;;;;;;32764:21;;:4;:21;;::::0;32756:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32868:41;32897:4;32903:5;32868:28;:41::i;:::-;32665:252:::0;;:::o;38799:106::-;18426:13;:11;:13::i;:::-;38886:11:::1;38873:10;:24;;;;38799:106:::0;:::o;29452:35::-;;;;:::o;31922:144::-;18426:13;:11;:13::i;:::-;31996:5:::1;31982:19;;:10;;;;;;;;;;;:19;;;31974:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32054:4;32041:10;;:17;;;;;;;;;;;;;;;;;;31922:144::o:0;38913:103::-;18426:13;:11;:13::i;:::-;39002:6:::1;38986:8;:13;38995:3;38986:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;38913:103:::0;;:::o;10175:436::-;10268:4;10285:13;10301:12;:10;:12::i;:::-;10285:28;;10324:24;10351:25;10361:5;10368:7;10351:9;:25::i;:::-;10324:52;;10415:15;10395:16;:35;;10387:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10508:60;10517:5;10524:7;10552:15;10533:16;:34;10508:8;:60::i;:::-;10599:4;10592:11;;;;10175:436;;;;:::o;7222:193::-;7301:4;7318:13;7334:12;:10;:12::i;:::-;7318:28;;7357;7367:5;7374:2;7378:6;7357:9;:28::i;:::-;7403:4;7396:11;;;7222:193;;;;:::o;30650:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;36829:151::-;18426:13;:11;:13::i;:::-;36929:1:::1;36917:9;:13;36909:22;;;::::0;::::1;;36963:9;36942:18;:30;;;;36829:151:::0;:::o;29902:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34152:254::-;18426:13;:11;:13::i;:::-;34267:15:::1;;;;;;;;;;;34247:35;;:16;:35;;::::0;34239:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34327:16;34309:15;;:34;;;;;;;;;;;;;;;;;;34359:39;34382:15;;;;;;;;;;;34359:39;;;;;;:::i;:::-;;;;;;;;34152:254:::0;:::o;30697:42::-;;;;;;;;;;;;;;;;;:::o;39140:110::-;18426:13;:11;:13::i;:::-;39230:12:::1;39216:11;:26;;;;39140:110:::0;:::o;7478:151::-;7567:7;7594:11;:18;7606:5;7594:18;;;;;;;;;;;;;;;:27;7613:7;7594:27;;;;;;;;;;;;;;;;7587:34;;7478:151;;;;:::o;29772:33::-;;;;:::o;38343:198::-;38418:4;38460:7;:5;:7::i;:::-;38452:15;;:4;:15;;;:32;;;;38477:7;:5;:7::i;:::-;38471:13;;:2;:13;;;38452:32;:57;;;;38504:4;38488:21;;:4;:21;;;38452:57;:80;;;;38527:4;38513:19;;:2;:19;;;38452:80;38444:89;;38343:198;;;;:::o;33247:246::-;18426:13;:11;:13::i;:::-;33328:19:::1;:28;33348:7;33328:28;;;;;;;;;;;;;;;;;;;;;;;;;33327:29;33319:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33439:4;33408:19;:28;33428:7;33408:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;33477:7;33461:24;;;;;;;;;;;;33247:246:::0;:::o;38549:122::-;18426:13;:11;:13::i;:::-;38659:4:::1;38622:34;;:41;;;;;;;;;;;;;;;;;;38549:122::o:0;38679:110::-;18426:13;:11;:13::i;:::-;38769:12:::1;38755:11;:26;;;;38679:110:::0;:::o;19446:201::-;18426:13;:11;:13::i;:::-;19555:1:::1;19535:22;;:8;:22;;::::0;19527:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19611:28;19630:8;19611:18;:28::i;:::-;19446:201:::0;:::o;32074:441::-;18426:13;:11;:13::i;:::-;32170:4:::1;32153:22;;:5;:22;;::::0;32145:67:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32244:3;32227:21;;:5;:21;;::::0;32223:126:::1;;32273:10;32265:28;;:51;32294:21;32265:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32331:7;;32223:126;32359:17;32386:5;32359:33;;32403:15;32421:10;:20;;;32450:4;32421:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32403:53;;32467:10;:19;;;32487:10;32499:7;32467:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32134:381;;18450:1;32074:441:::0;:::o;3440:98::-;3493:7;3520:10;3513:17;;3440:98;:::o;13800:380::-;13953:1;13936:19;;:5;:19;;;13928:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14034:1;14015:21;;:7;:21;;;14007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14118:6;14088:11;:18;14100:5;14088:18;;;;;;;;;;;;;;;:27;14107:7;14088:27;;;;;;;;;;;;;;;:36;;;;14156:7;14140:32;;14149:5;14140:32;;;14165:6;14140:32;;;;;;:::i;:::-;;;;;;;;13800:380;;;:::o;18705:132::-;18780:12;:10;:12::i;:::-;18769:23;;:7;:5;:7::i;:::-;:23;;;18761:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18705:132::o;14471:453::-;14606:24;14633:25;14643:5;14650:7;14633:9;:25::i;:::-;14606:52;;14693:17;14673:16;:37;14669:248;;14755:6;14735:16;:26;;14727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14839:51;14848:5;14855:7;14883:6;14864:16;:25;14839:8;:51::i;:::-;14669:248;14595:329;14471:453;;;:::o;34414:1794::-;34562:1;34546:18;;:4;:18;;;34538:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34639:1;34625:16;;:2;:16;;;34617:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34699:8;;;;;;;;;;;34694:66;;34724:24;34731:4;34737:2;34741:6;34724;:24::i;:::-;34694:66;34772:12;34787:6;;34772:21;;34804:13;34820:7;;34804:23;;34845:8;:14;34854:4;34845:14;;;;;;;;;;;;;;;;;;;;;;;;;34844:15;:32;;;;;34864:8;:12;34873:2;34864:12;;;;;;;;;;;;;;;;;;;;;;;;;34863:13;34844:32;34840:105;;;34901:10;;;;;;;;;;;34893:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;34840:105;34971:1;34961:6;:11;34957:50;;34989:7;;;;34957:50;35019:12;35035:8;;;;;;;;;;;35034:9;35019:24;;35060:19;:25;35080:4;35060:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35089:19;:23;35109:2;35089:23;;;;;;;;;;;;;;;;;;;;;;;;;35060:52;35056:100;;;35139:5;35129:15;;35056:100;35168:14;35185:24;35203:4;35185:9;:24::i;:::-;35168:41;;35222:12;35247:18;;35237:6;:28;;:42;;;;;35278:1;35269:6;:10;35237:42;:78;;;;;35284:25;:31;35310:4;35284:31;;;;;;;;;;;;;;;;;;;;;;;;;35283:32;35237:78;:89;;;;;35319:7;35237:89;35222:104;;35341:7;:33;;;;;35366:8;;;;;;;;;;;35365:9;35341:33;35337:361;;;35402:4;35391:8;;:15;;;;;;;;;;;;;;;;;;35421:19;35443:24;35453:13;;;;;;;;;;;35443:9;:24::i;:::-;35421:46;;35528:3;35509:16;;35495:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;35486:6;:45;35482:131;;;35594:3;35575:16;;35561:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;35552:45;;35482:131;35627:28;35648:6;35627:20;:28::i;:::-;35681:5;35670:8;;:16;;;;;;;;;;;;;;;;;;35376:322;35337:361;35714:7;:30;;;;;35731:13;;;;;;;;;;;35725:19;;:2;:19;;;35714:30;:46;;;;;35759:1;35748:8;:12;35714:46;35710:445;;;35777:12;35814:3;35802:8;35793:6;:17;;;;:::i;:::-;35792:25;;;;:::i;:::-;35777:40;;35850:4;35841:6;:13;;;;:::i;:::-;35832:22;;35871:42;35887:4;35901;35908;35871:15;:42::i;:::-;35762:163;35710:445;;;35944:7;:32;;;;;35963:13;;;;;;;;;;;35955:21;;:4;:21;;;35944:32;:47;;;;;35990:1;35980:7;:11;35944:47;35940:215;;;36008:12;36044:3;36033:7;36024:6;:16;;;;:::i;:::-;36023:24;;;;:::i;:::-;36008:39;;36080:4;36071:6;:13;;;;:::i;:::-;36062:22;;36101:42;36117:4;36131;36138;36101:15;:42::i;:::-;35993:162;35940:215;35710:445;36167:33;36183:4;36189:2;36193:6;36167:15;:33::i;:::-;34527:1681;;;;;34414:1794;;;;:::o;12771:591::-;12874:1;12855:21;;:7;:21;;;12847:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12927:49;12948:7;12965:1;12969:6;12927:20;:49::i;:::-;12989:22;13014:9;:18;13024:7;13014:18;;;;;;;;;;;;;;;;12989:43;;13069:6;13051:14;:24;;13043:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13188:6;13171:14;:23;13150:9;:18;13160:7;13150:18;;;;;;;;;;;;;;;:44;;;;13232:6;13216:12;;:22;;;;;;;:::i;:::-;;;;;;;;13282:1;13256:37;;13265:7;13256:37;;;13286:6;13256:37;;;;;;:::i;:::-;;;;;;;;13306:48;13326:7;13343:1;13347:6;13306:19;:48::i;:::-;12836:526;12771:591;;:::o;19807:191::-;19881:16;19900:6;;;;;;;;;;;19881:25;;19926:8;19917:6;;:17;;;;;;;;;;;;;;;;;;19981:8;19950:40;;19971:8;19950:40;;;;;;;;;;;;19870:128;19807:191;:::o;32925:308::-;33051:5;33016:40;;:25;:31;33042:4;33016:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;33008:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;33162:5;33128:25;:31;33154:4;33128:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33219:5;33185:40;;33213:4;33185:40;;;;;;;;;;;;32925:308;;:::o;37201:446::-;37328:34;;;;;;;;;;;37323:315;;37398:28;37417:4;37423:2;37398:18;:28::i;:::-;37397:29;:46;;;;;37431:8;:12;37440:2;37431:12;;;;;;;;;;;;;;;;;;;;;;;;;37430:13;37397:46;37393:234;;;37466:27;37484:4;37490:2;37466:17;:27::i;:::-;37512:29;37530:2;37534:6;37512:17;:29::i;:::-;37578:33;37600:2;37604:6;37578:21;:33::i;:::-;37393:234;37323:315;37201:446;;;:::o;36216:605::-;36288:21;36326:1;36312:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36288:40;;36357:4;36339;36344:1;36339:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36383:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36373:4;36378:1;36373:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36422:15;;;;;;;;;;;:66;;;36503:11;36529:1;36546:4;36573;36593:15;36422:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36418:222;36652:18;36673:21;36652:42;;36705:45;36721:15;;;;;;;;;;;36739:10;36705:7;:45::i;:::-;36768;36789:11;36802:10;36768:45;;;;;;;:::i;:::-;;;;;;;;36275:546;;36216:605;:::o;11081:671::-;11228:1;11212:18;;:4;:18;;;11204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11305:1;11291:16;;:2;:16;;;11283:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11360:38;11381:4;11387:2;11391:6;11360:20;:38::i;:::-;11411:19;11433:9;:15;11443:4;11433:15;;;;;;;;;;;;;;;;11411:37;;11482:6;11467:11;:21;;11459:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11599:6;11585:11;:20;11567:9;:15;11577:4;11567:15;;;;;;;;;;;;;;;:38;;;;11644:6;11627:9;:13;11637:2;11627:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;11683:2;11668:26;;11677:4;11668:26;;;11687:6;11668:26;;;;;;:::i;:::-;;;;;;;;11707:37;11727:4;11733:2;11737:6;11707:19;:37::i;:::-;11193:559;11081:671;;;:::o;15524:125::-;;;;:::o;16253:124::-;;;;:::o;37655:285::-;37732:18;;;;;;;;;;;:43;;;;;37762:13;;;;;;;;;;;37754:21;;:4;:21;;;37732:43;37728:203;;;37840:11;;37818:7;:18;37826:9;37818:18;;;;;;;;;;;;;;;;37800:15;:36;;;;:::i;:::-;:51;;37792:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37904:15;37883:7;:18;37891:9;37883:18;;;;;;;;;;;;;;;:36;;;;37728:203;37655:285;;:::o;37948:142::-;38046:11;;38036:6;:21;;38028:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;37948:142;;:::o;38098:237::-;38192:13;;;;;;;;;;;38186:19;;:2;:19;;;38182:58;38222:7;38182:58;38286:10;;38276:6;38260:13;38270:2;38260:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;38252:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38098:237;;;:::o;32523:134::-;32603:9;:14;;32624:4;32638:6;32603:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32523:134;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:153::-;3917:9;3950:37;3981:5;3950:37;:::i;:::-;3937:50;;3840:153;;;:::o;3999:185::-;4113:64;4171:5;4113:64;:::i;:::-;4108:3;4101:77;3999:185;;:::o;4190:276::-;4310:4;4348:2;4337:9;4333:18;4325:26;;4361:98;4456:1;4445:9;4441:17;4432:6;4361:98;:::i;:::-;4190:276;;;;:::o;4472:329::-;4531:6;4580:2;4568:9;4559:7;4555:23;4551:32;4548:119;;;4586:79;;:::i;:::-;4548:119;4706:1;4731:53;4776:7;4767:6;4756:9;4752:22;4731:53;:::i;:::-;4721:63;;4677:117;4472:329;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:323::-;7218:6;7267:2;7255:9;7246:7;7242:23;7238:32;7235:119;;;7273:79;;:::i;:::-;7235:119;7393:1;7418:50;7460:7;7451:6;7440:9;7436:22;7418:50;:::i;:::-;7408:60;;7364:114;7162:323;;;;:::o;7491:474::-;7559:6;7567;7616:2;7604:9;7595:7;7591:23;7587:32;7584:119;;;7622:79;;:::i;:::-;7584:119;7742:1;7767:53;7812:7;7803:6;7792:9;7788:22;7767:53;:::i;:::-;7757:63;;7713:117;7869:2;7895:53;7940:7;7931:6;7920:9;7916:22;7895:53;:::i;:::-;7885:63;;7840:118;7491:474;;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:180::-;8973:77;8970:1;8963:88;9070:4;9067:1;9060:15;9094:4;9091:1;9084:15;9111:320;9155:6;9192:1;9186:4;9182:12;9172:22;;9239:1;9233:4;9229:12;9260:18;9250:81;;9316:4;9308:6;9304:17;9294:27;;9250:81;9378:2;9370:6;9367:14;9347:18;9344:38;9341:84;;9397:18;;:::i;:::-;9341:84;9162:269;9111:320;;;:::o;9437:174::-;9577:26;9573:1;9565:6;9561:14;9554:50;9437:174;:::o;9617:366::-;9759:3;9780:67;9844:2;9839:3;9780:67;:::i;:::-;9773:74;;9856:93;9945:3;9856:93;:::i;:::-;9974:2;9969:3;9965:12;9958:19;;9617:366;;;:::o;9989:419::-;10155:4;10193:2;10182:9;10178:18;10170:26;;10242:9;10236:4;10232:20;10228:1;10217:9;10213:17;10206:47;10270:131;10396:4;10270:131;:::i;:::-;10262:139;;9989:419;;;:::o;10414:157::-;10554:9;10550:1;10542:6;10538:14;10531:33;10414:157;:::o;10577:365::-;10719:3;10740:66;10804:1;10799:3;10740:66;:::i;:::-;10733:73;;10815:93;10904:3;10815:93;:::i;:::-;10933:2;10928:3;10924:12;10917:19;;10577:365;;;:::o;10948:419::-;11114:4;11152:2;11141:9;11137:18;11129:26;;11201:9;11195:4;11191:20;11187:1;11176:9;11172:17;11165:47;11229:131;11355:4;11229:131;:::i;:::-;11221:139;;10948:419;;;:::o;11373:158::-;11513:10;11509:1;11501:6;11497:14;11490:34;11373:158;:::o;11537:365::-;11679:3;11700:66;11764:1;11759:3;11700:66;:::i;:::-;11693:73;;11775:93;11864:3;11775:93;:::i;:::-;11893:2;11888:3;11884:12;11877:19;;11537:365;;;:::o;11908:419::-;12074:4;12112:2;12101:9;12097:18;12089:26;;12161:9;12155:4;12151:20;12147:1;12136:9;12132:17;12125:47;12189:131;12315:4;12189:131;:::i;:::-;12181:139;;11908:419;;;:::o;12333:180::-;12381:77;12378:1;12371:88;12478:4;12475:1;12468:15;12502:4;12499:1;12492:15;12519:305;12559:3;12578:20;12596:1;12578:20;:::i;:::-;12573:25;;12612:20;12630:1;12612:20;:::i;:::-;12607:25;;12766:1;12698:66;12694:74;12691:1;12688:81;12685:107;;;12772:18;;:::i;:::-;12685:107;12816:1;12813;12809:9;12802:16;;12519:305;;;;:::o;12830:176::-;12970:28;12966:1;12958:6;12954:14;12947:52;12830:176;:::o;13012:366::-;13154:3;13175:67;13239:2;13234:3;13175:67;:::i;:::-;13168:74;;13251:93;13340:3;13251:93;:::i;:::-;13369:2;13364:3;13360:12;13353:19;;13012:366;;;:::o;13384:419::-;13550:4;13588:2;13577:9;13573:18;13565:26;;13637:9;13631:4;13627:20;13623:1;13612:9;13608:17;13601:47;13665:131;13791:4;13665:131;:::i;:::-;13657:139;;13384:419;;;:::o;13809:332::-;13930:4;13968:2;13957:9;13953:18;13945:26;;13981:71;14049:1;14038:9;14034:17;14025:6;13981:71;:::i;:::-;14062:72;14130:2;14119:9;14115:18;14106:6;14062:72;:::i;:::-;13809:332;;;;;:::o;14147:289::-;14287:34;14283:1;14275:6;14271:14;14264:58;14356:34;14351:2;14343:6;14339:15;14332:59;14425:3;14420:2;14412:6;14408:15;14401:28;14147:289;:::o;14442:366::-;14584:3;14605:67;14669:2;14664:3;14605:67;:::i;:::-;14598:74;;14681:93;14770:3;14681:93;:::i;:::-;14799:2;14794:3;14790:12;14783:19;;14442:366;;;:::o;14814:419::-;14980:4;15018:2;15007:9;15003:18;14995:26;;15067:9;15061:4;15057:20;15053:1;15042:9;15038:17;15031:47;15095:131;15221:4;15095:131;:::i;:::-;15087:139;;14814:419;;;:::o;15239:174::-;15379:26;15375:1;15367:6;15363:14;15356:50;15239:174;:::o;15419:366::-;15561:3;15582:67;15646:2;15641:3;15582:67;:::i;:::-;15575:74;;15658:93;15747:3;15658:93;:::i;:::-;15776:2;15771:3;15767:12;15760:19;;15419:366;;;:::o;15791:419::-;15957:4;15995:2;15984:9;15980:18;15972:26;;16044:9;16038:4;16034:20;16030:1;16019:9;16015:17;16008:47;16072:131;16198:4;16072:131;:::i;:::-;16064:139;;15791:419;;;:::o;16216:224::-;16356:34;16352:1;16344:6;16340:14;16333:58;16425:7;16420:2;16412:6;16408:15;16401:32;16216:224;:::o;16446:366::-;16588:3;16609:67;16673:2;16668:3;16609:67;:::i;:::-;16602:74;;16685:93;16774:3;16685:93;:::i;:::-;16803:2;16798:3;16794:12;16787:19;;16446:366;;;:::o;16818:419::-;16984:4;17022:2;17011:9;17007:18;16999:26;;17071:9;17065:4;17061:20;17057:1;17046:9;17042:17;17035:47;17099:131;17225:4;17099:131;:::i;:::-;17091:139;;16818:419;;;:::o;17243:161::-;17383:13;17379:1;17371:6;17367:14;17360:37;17243:161;:::o;17410:366::-;17552:3;17573:67;17637:2;17632:3;17573:67;:::i;:::-;17566:74;;17649:93;17738:3;17649:93;:::i;:::-;17767:2;17762:3;17758:12;17751:19;;17410:366;;;:::o;17782:419::-;17948:4;17986:2;17975:9;17971:18;17963:26;;18035:9;18029:4;18025:20;18021:1;18010:9;18006:17;17999:47;18063:131;18189:4;18063:131;:::i;:::-;18055:139;;17782:419;;;:::o;18207:223::-;18347:34;18343:1;18335:6;18331:14;18324:58;18416:6;18411:2;18403:6;18399:15;18392:31;18207:223;:::o;18436:366::-;18578:3;18599:67;18663:2;18658:3;18599:67;:::i;:::-;18592:74;;18675:93;18764:3;18675:93;:::i;:::-;18793:2;18788:3;18784:12;18777:19;;18436:366;;;:::o;18808:419::-;18974:4;19012:2;19001:9;18997:18;18989:26;;19061:9;19055:4;19051:20;19047:1;19036:9;19032:17;19025:47;19089:131;19215:4;19089:131;:::i;:::-;19081:139;;18808:419;;;:::o;19233:225::-;19373:34;19369:1;19361:6;19357:14;19350:58;19442:8;19437:2;19429:6;19425:15;19418:33;19233:225;:::o;19464:366::-;19606:3;19627:67;19691:2;19686:3;19627:67;:::i;:::-;19620:74;;19703:93;19792:3;19703:93;:::i;:::-;19821:2;19816:3;19812:12;19805:19;;19464:366;;;:::o;19836:419::-;20002:4;20040:2;20029:9;20025:18;20017:26;;20089:9;20083:4;20079:20;20075:1;20064:9;20060:17;20053:47;20117:131;20243:4;20117:131;:::i;:::-;20109:139;;19836:419;;;:::o;20261:182::-;20401:34;20397:1;20389:6;20385:14;20378:58;20261:182;:::o;20449:366::-;20591:3;20612:67;20676:2;20671:3;20612:67;:::i;:::-;20605:74;;20688:93;20777:3;20688:93;:::i;:::-;20806:2;20801:3;20797:12;20790:19;;20449:366;;;:::o;20821:419::-;20987:4;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:131;21228:4;21102:131;:::i;:::-;21094:139;;20821:419;;;:::o;21246:143::-;21303:5;21334:6;21328:13;21319:22;;21350:33;21377:5;21350:33;:::i;:::-;21246:143;;;;:::o;21395:351::-;21465:6;21514:2;21502:9;21493:7;21489:23;21485:32;21482:119;;;21520:79;;:::i;:::-;21482:119;21640:1;21665:64;21721:7;21712:6;21701:9;21697:22;21665:64;:::i;:::-;21655:74;;21611:128;21395:351;;;;:::o;21752:332::-;21873:4;21911:2;21900:9;21896:18;21888:26;;21924:71;21992:1;21981:9;21977:17;21968:6;21924:71;:::i;:::-;22005:72;22073:2;22062:9;22058:18;22049:6;22005:72;:::i;:::-;21752:332;;;;;:::o;22090:137::-;22144:5;22175:6;22169:13;22160:22;;22191:30;22215:5;22191:30;:::i;:::-;22090:137;;;;:::o;22233:345::-;22300:6;22349:2;22337:9;22328:7;22324:23;22320:32;22317:119;;;22355:79;;:::i;:::-;22317:119;22475:1;22500:61;22553:7;22544:6;22533:9;22529:22;22500:61;:::i;:::-;22490:71;;22446:125;22233:345;;;;:::o;22584:223::-;22724:34;22720:1;22712:6;22708:14;22701:58;22793:6;22788:2;22780:6;22776:15;22769:31;22584:223;:::o;22813:366::-;22955:3;22976:67;23040:2;23035:3;22976:67;:::i;:::-;22969:74;;23052:93;23141:3;23052:93;:::i;:::-;23170:2;23165:3;23161:12;23154:19;;22813:366;;;:::o;23185:419::-;23351:4;23389:2;23378:9;23374:18;23366:26;;23438:9;23432:4;23428:20;23424:1;23413:9;23409:17;23402:47;23466:131;23592:4;23466:131;:::i;:::-;23458:139;;23185:419;;;:::o;23610:221::-;23750:34;23746:1;23738:6;23734:14;23727:58;23819:4;23814:2;23806:6;23802:15;23795:29;23610:221;:::o;23837:366::-;23979:3;24000:67;24064:2;24059:3;24000:67;:::i;:::-;23993:74;;24076:93;24165:3;24076:93;:::i;:::-;24194:2;24189:3;24185:12;24178:19;;23837:366;;;:::o;24209:419::-;24375:4;24413:2;24402:9;24398:18;24390:26;;24462:9;24456:4;24452:20;24448:1;24437:9;24433:17;24426:47;24490:131;24616:4;24490:131;:::i;:::-;24482:139;;24209:419;;;:::o;24634:182::-;24774:34;24770:1;24762:6;24758:14;24751:58;24634:182;:::o;24822:366::-;24964:3;24985:67;25049:2;25044:3;24985:67;:::i;:::-;24978:74;;25061:93;25150:3;25061:93;:::i;:::-;25179:2;25174:3;25170:12;25163:19;;24822:366;;;:::o;25194:419::-;25360:4;25398:2;25387:9;25383:18;25375:26;;25447:9;25441:4;25437:20;25433:1;25422:9;25418:17;25411:47;25475:131;25601:4;25475:131;:::i;:::-;25467:139;;25194:419;;;:::o;25619:179::-;25759:31;25755:1;25747:6;25743:14;25736:55;25619:179;:::o;25804:366::-;25946:3;25967:67;26031:2;26026:3;25967:67;:::i;:::-;25960:74;;26043:93;26132:3;26043:93;:::i;:::-;26161:2;26156:3;26152:12;26145:19;;25804:366;;;:::o;26176:419::-;26342:4;26380:2;26369:9;26365:18;26357:26;;26429:9;26423:4;26419:20;26415:1;26404:9;26400:17;26393:47;26457:131;26583:4;26457:131;:::i;:::-;26449:139;;26176:419;;;:::o;26601:224::-;26741:34;26737:1;26729:6;26725:14;26718:58;26810:7;26805:2;26797:6;26793:15;26786:32;26601:224;:::o;26831:366::-;26973:3;26994:67;27058:2;27053:3;26994:67;:::i;:::-;26987:74;;27070:93;27159:3;27070:93;:::i;:::-;27188:2;27183:3;27179:12;27172:19;;26831:366;;;:::o;27203:419::-;27369:4;27407:2;27396:9;27392:18;27384:26;;27456:9;27450:4;27446:20;27442:1;27431:9;27427:17;27420:47;27484:131;27610:4;27484:131;:::i;:::-;27476:139;;27203:419;;;:::o;27628:222::-;27768:34;27764:1;27756:6;27752:14;27745:58;27837:5;27832:2;27824:6;27820:15;27813:30;27628:222;:::o;27856:366::-;27998:3;28019:67;28083:2;28078:3;28019:67;:::i;:::-;28012:74;;28095:93;28184:3;28095:93;:::i;:::-;28213:2;28208:3;28204:12;28197:19;;27856:366;;;:::o;28228:419::-;28394:4;28432:2;28421:9;28417:18;28409:26;;28481:9;28475:4;28471:20;28467:1;28456:9;28452:17;28445:47;28509:131;28635:4;28509:131;:::i;:::-;28501:139;;28228:419;;;:::o;28653:167::-;28793:19;28789:1;28781:6;28777:14;28770:43;28653:167;:::o;28826:366::-;28968:3;28989:67;29053:2;29048:3;28989:67;:::i;:::-;28982:74;;29065:93;29154:3;29065:93;:::i;:::-;29183:2;29178:3;29174:12;29167:19;;28826:366;;;:::o;29198:419::-;29364:4;29402:2;29391:9;29387:18;29379:26;;29451:9;29445:4;29441:20;29437:1;29426:9;29422:17;29415:47;29479:131;29605:4;29479:131;:::i;:::-;29471:139;;29198:419;;;:::o;29623:348::-;29663:7;29686:20;29704:1;29686:20;:::i;:::-;29681:25;;29720:20;29738:1;29720:20;:::i;:::-;29715:25;;29908:1;29840:66;29836:74;29833:1;29830:81;29825:1;29818:9;29811:17;29807:105;29804:131;;;29915:18;;:::i;:::-;29804:131;29963:1;29960;29956:9;29945:20;;29623:348;;;;:::o;29977:180::-;30025:77;30022:1;30015:88;30122:4;30119:1;30112:15;30146:4;30143:1;30136:15;30163:185;30203:1;30220:20;30238:1;30220:20;:::i;:::-;30215:25;;30254:20;30272:1;30254:20;:::i;:::-;30249:25;;30293:1;30283:35;;30298:18;;:::i;:::-;30283:35;30340:1;30337;30333:9;30328:14;;30163:185;;;;:::o;30354:191::-;30394:4;30414:20;30432:1;30414:20;:::i;:::-;30409:25;;30448:20;30466:1;30448:20;:::i;:::-;30443:25;;30487:1;30484;30481:8;30478:34;;;30492:18;;:::i;:::-;30478:34;30537:1;30534;30530:9;30522:17;;30354:191;;;;:::o;30551:220::-;30691:34;30687:1;30679:6;30675:14;30668:58;30760:3;30755:2;30747:6;30743:15;30736:28;30551:220;:::o;30777:366::-;30919:3;30940:67;31004:2;30999:3;30940:67;:::i;:::-;30933:74;;31016:93;31105:3;31016:93;:::i;:::-;31134:2;31129:3;31125:12;31118:19;;30777:366;;;:::o;31149:419::-;31315:4;31353:2;31342:9;31338:18;31330:26;;31402:9;31396:4;31392:20;31388:1;31377:9;31373:17;31366:47;31430:131;31556:4;31430:131;:::i;:::-;31422:139;;31149:419;;;:::o;31574:221::-;31714:34;31710:1;31702:6;31698:14;31691:58;31783:4;31778:2;31770:6;31766:15;31759:29;31574:221;:::o;31801:366::-;31943:3;31964:67;32028:2;32023:3;31964:67;:::i;:::-;31957:74;;32040:93;32129:3;32040:93;:::i;:::-;32158:2;32153:3;32149:12;32142:19;;31801:366;;;:::o;32173:419::-;32339:4;32377:2;32366:9;32362:18;32354:26;;32426:9;32420:4;32416:20;32412:1;32401:9;32397:17;32390:47;32454:131;32580:4;32454:131;:::i;:::-;32446:139;;32173:419;;;:::o;32598:243::-;32738:34;32734:1;32726:6;32722:14;32715:58;32807:26;32802:2;32794:6;32790:15;32783:51;32598:243;:::o;32847:366::-;32989:3;33010:67;33074:2;33069:3;33010:67;:::i;:::-;33003:74;;33086:93;33175:3;33086:93;:::i;:::-;33204:2;33199:3;33195:12;33188:19;;32847:366;;;:::o;33219:419::-;33385:4;33423:2;33412:9;33408:18;33400:26;;33472:9;33466:4;33462:20;33458:1;33447:9;33443:17;33436:47;33500:131;33626:4;33500:131;:::i;:::-;33492:139;;33219:419;;;:::o;33644:180::-;33692:77;33689:1;33682:88;33789:4;33786:1;33779:15;33813:4;33810:1;33803:15;33830:180;33878:77;33875:1;33868:88;33975:4;33972:1;33965:15;33999:4;33996:1;33989:15;34016:143;34073:5;34104:6;34098:13;34089:22;;34120:33;34147:5;34120:33;:::i;:::-;34016:143;;;;:::o;34165:351::-;34235:6;34284:2;34272:9;34263:7;34259:23;34255:32;34252:119;;;34290:79;;:::i;:::-;34252:119;34410:1;34435:64;34491:7;34482:6;34471:9;34467:22;34435:64;:::i;:::-;34425:74;;34381:128;34165:351;;;;:::o;34522:85::-;34567:7;34596:5;34585:16;;34522:85;;;:::o;34613:158::-;34671:9;34704:61;34722:42;34731:32;34757:5;34731:32;:::i;:::-;34722:42;:::i;:::-;34704:61;:::i;:::-;34691:74;;34613:158;;;:::o;34777:147::-;34872:45;34911:5;34872:45;:::i;:::-;34867:3;34860:58;34777:147;;:::o;34930:114::-;34997:6;35031:5;35025:12;35015:22;;34930:114;;;:::o;35050:184::-;35149:11;35183:6;35178:3;35171:19;35223:4;35218:3;35214:14;35199:29;;35050:184;;;;:::o;35240:132::-;35307:4;35330:3;35322:11;;35360:4;35355:3;35351:14;35343:22;;35240:132;;;:::o;35378:108::-;35455:24;35473:5;35455:24;:::i;:::-;35450:3;35443:37;35378:108;;:::o;35492:179::-;35561:10;35582:46;35624:3;35616:6;35582:46;:::i;:::-;35660:4;35655:3;35651:14;35637:28;;35492:179;;;;:::o;35677:113::-;35747:4;35779;35774:3;35770:14;35762:22;;35677:113;;;:::o;35826:732::-;35945:3;35974:54;36022:5;35974:54;:::i;:::-;36044:86;36123:6;36118:3;36044:86;:::i;:::-;36037:93;;36154:56;36204:5;36154:56;:::i;:::-;36233:7;36264:1;36249:284;36274:6;36271:1;36268:13;36249:284;;;36350:6;36344:13;36377:63;36436:3;36421:13;36377:63;:::i;:::-;36370:70;;36463:60;36516:6;36463:60;:::i;:::-;36453:70;;36309:224;36296:1;36293;36289:9;36284:14;;36249:284;;;36253:14;36549:3;36542:10;;35950:608;;;35826:732;;;;:::o;36564:831::-;36827:4;36865:3;36854:9;36850:19;36842:27;;36879:71;36947:1;36936:9;36932:17;36923:6;36879:71;:::i;:::-;36960:80;37036:2;37025:9;37021:18;37012:6;36960:80;:::i;:::-;37087:9;37081:4;37077:20;37072:2;37061:9;37057:18;37050:48;37115:108;37218:4;37209:6;37115:108;:::i;:::-;37107:116;;37233:72;37301:2;37290:9;37286:18;37277:6;37233:72;:::i;:::-;37315:73;37383:3;37372:9;37368:19;37359:6;37315:73;:::i;:::-;36564:831;;;;;;;;:::o;37401:225::-;37541:34;37537:1;37529:6;37525:14;37518:58;37610:8;37605:2;37597:6;37593:15;37586:33;37401:225;:::o;37632:366::-;37774:3;37795:67;37859:2;37854:3;37795:67;:::i;:::-;37788:74;;37871:93;37960:3;37871:93;:::i;:::-;37989:2;37984:3;37980:12;37973:19;;37632:366;;;:::o;38004:419::-;38170:4;38208:2;38197:9;38193:18;38185:26;;38257:9;38251:4;38247:20;38243:1;38232:9;38228:17;38221:47;38285:131;38411:4;38285:131;:::i;:::-;38277:139;;38004:419;;;:::o;38429:162::-;38569:14;38565:1;38557:6;38553:14;38546:38;38429:162;:::o;38597:366::-;38739:3;38760:67;38824:2;38819:3;38760:67;:::i;:::-;38753:74;;38836:93;38925:3;38836:93;:::i;:::-;38954:2;38949:3;38945:12;38938:19;;38597:366;;;:::o;38969:419::-;39135:4;39173:2;39162:9;39158:18;39150:26;;39222:9;39216:4;39212:20;39208:1;39197:9;39193:17;39186:47;39250:131;39376:4;39250:131;:::i;:::-;39242:139;;38969:419;;;:::o;39394:168::-;39534:20;39530:1;39522:6;39518:14;39511:44;39394:168;:::o;39568:366::-;39710:3;39731:67;39795:2;39790:3;39731:67;:::i;:::-;39724:74;;39807:93;39896:3;39807:93;:::i;:::-;39925:2;39920:3;39916:12;39909:19;;39568:366;;;:::o;39940:419::-;40106:4;40144:2;40133:9;40129:18;40121:26;;40193:9;40187:4;40183:20;40179:1;40168:9;40164:17;40157:47;40221:131;40347:4;40221:131;:::i;:::-;40213:139;;39940:419;;;:::o;40365:174::-;40505:26;40501:1;40493:6;40489:14;40482:50;40365:174;:::o;40545:366::-;40687:3;40708:67;40772:2;40767:3;40708:67;:::i;:::-;40701:74;;40784:93;40873:3;40784:93;:::i;:::-;40902:2;40897:3;40893:12;40886:19;;40545:366;;;:::o;40917:419::-;41083:4;41121:2;41110:9;41106:18;41098:26;;41170:9;41164:4;41160:20;41156:1;41145:9;41141:17;41134:47;41198:131;41324:4;41198:131;:::i;:::-;41190:139;;40917:419;;;:::o;41342:147::-;41443:11;41480:3;41465:18;;41342:147;;;;:::o;41495:114::-;;:::o;41615:398::-;41774:3;41795:83;41876:1;41871:3;41795:83;:::i;:::-;41788:90;;41887:93;41976:3;41887:93;:::i;:::-;42005:1;42000:3;41996:11;41989:18;;41615:398;;;:::o;42019:379::-;42203:3;42225:147;42368:3;42225:147;:::i;:::-;42218:154;;42389:3;42382:10;;42019:379;;;:::o

Swarm Source

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