ETH Price: $2,969.12 (-1.70%)
Gas: 2 Gwei

Token

Prospective (PROS)
 

Overview

Max Total Supply

30,897,177.845776520720587022 PROS

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.979485816512699564 PROS

Value
$0.00
0x3f1867f5105c4cf0ad4e91cde4775f2ce4499d17
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Prospective is a practical Web3 ecosystem that supports those that create, work, and play in the digital world.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ProspectiveToken

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 8 of 8: Token.sol
// SPDX-License-Identifier: UNLICENSED
// @Title JustMoney Bridged Token
// @Author Team JustMoney

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./BridgeOracle.sol";
import "./ReentrancyGuard.sol";
import "./Address.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin 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 ProspectiveToken is BridgeOracle, IERC20, ReentrancyGuard {
    mapping(address => uint256) private _balances;

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

    uint256 private constant _max = 1000000000 * (10**18);
    uint256 private _totalSupply;
    uint256 private _totalBurned;

    bool public isMintingEnabled = true;
    bool public isBurningEnabled = true;
    
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @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() {
        _name = "Prospective";
        _symbol = "PROS";
        _decimals = 18;
    }

    modifier mintingEnabled() {
        require(isMintingEnabled, Errors.MINT_DISABLED);
        _;
    }
    
    modifier burningEnabled() {
        require(isBurningEnabled, Errors.BURN_DISABLED);
        _;
    }
    
    modifier notZeroAddress(address _account) {
        require(_account != address(0), Errors.NOT_ZERO_ADDRESS);
        _;
    }
    
    modifier belowCap(uint256 amount) {
        require(amount <= (_max - _totalSupply - _totalBurned), Errors.ABOVE_CAP);
        _;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 override returns (uint8) {
        return _decimals;
    }

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

    function totalBurned() public view returns (uint256) {
        return _totalBurned;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view 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 override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view 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 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 override returns (bool) {
        address spender = _msgSender();
        require(amount <= _allowances[from][spender], Errors.NOT_APPROVED);
        
        _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 returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[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 returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, Errors.ALLOWANCE_BELOW_ZERO);
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function enableMinting() public onlyHandlerOracle returns (string memory retMsg) {
        require(!isMintingEnabled, Errors.MINT_ALREADY_ENABLED);
        
        isMintingEnabled = true;
        emit MintingEnabled();
        retMsg = "Enabled Minting";
    }

    function disableMinting() public onlyHandlerOracle returns (string memory retMsg) {
        require(isMintingEnabled, Errors.MINT_ALREADY_DISABLED);
        
        isMintingEnabled = false;
        emit MintingDisabled();
        retMsg = "Disabled Minting";
    }
    
    function enableBurning() public onlyHandlerOracle returns (string memory retMsg) {
        require(!isBurningEnabled, Errors.BURN_ALREADY_ENABLED);
        
        isBurningEnabled = true;
        emit BurningEnabled();
        retMsg = "Enabled Burning";
    }

    function disableBurning() public onlyHandlerOracle returns (string memory retMsg) {
        require(isBurningEnabled, Errors.BURN_ALREADY_DISABLED);
        
        isBurningEnabled = false;
        emit BurningDisabled();
        retMsg = "Disabled Burning";
    }
    
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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 notZeroAddress(from) notZeroAddress(to) {
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, Errors.TRANSFER_EXCEEDS_BALANCE);
        unchecked { _balances[from] = fromBalance - amount; }
        _balances[to] += amount;

        emit Transfer(from, to, amount);
    }
    
    /**
     * @dev Creates `amount` new tokens for `to`.
     *
     * See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must be the bridge or owner.
     */
    function mint(address to, uint256 amount) public onlyOracleAndBridge {
        _mint(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:
     *
     * - minting and burning must be enabled.
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal mintingEnabled notZeroAddress(account) belowCap(amount) {
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        address mintBy = _msgSender();
        if ( isBridgeHandler(mintBy) ) {
            emit BridgeMint(mintBy, account, amount);
        } else {
            require(oracleApprovedToManualMint == true, Errors.NOT_APPROVED_TO_MANUAL_MINT);
            emit ManualMint(mintBy, account, amount);
            oracleApprovedToManualMint = false;
        }
    }
    
    /**
     * @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 burningEnabled notZeroAddress(account) {
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, Errors.BURN_EXCEEDS_BALANCE);
        unchecked { _balances[account] = accountBalance - amount; }
        _totalSupply -= amount;

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

        address burnBy = _msgSender();
        if ( isBridgeHandler(burnBy) || burnBy == address(_handlerOracle) ) {
            emit BridgeBurn(account, burnBy, amount);
        } else {
            unchecked { _totalBurned += amount; }
            emit NormalBurn(account, burnBy, amount);
        }
    }
    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This private 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) private notZeroAddress(owner) notZeroAddress(spender) {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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 {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, Errors.INSUFFICIENT_ALLOWANCE);
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
    
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public {
        _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 {
        require(amount <= _allowances[account][_msgSender()], Errors.NOT_APPROVED);
        
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
    
    function withdrawBASE(address payable recipient) external onlyOwner notZeroAddress(recipient) nonReentrant {
        require(address(this).balance > 0, Errors.NOTHING_TO_WITHDRAW);

        Address.sendValue(recipient, address(this).balance);
    }

    function withdrawERC20token(address _token, address payable recipient) external onlyOwner notZeroAddress(recipient) returns (bool) {
        uint256 bal = IERC20(_token).balanceOf(address(this));
        require(bal > 0, Errors.NOTHING_TO_WITHDRAW);

        return IERC20(_token).transfer(recipient, bal);
    }
    
    event BridgeMint(address indexed by, address indexed to, uint256 value);
    event ManualMint(address indexed by, address indexed to, uint256 value);
    event BridgeBurn(address indexed from, address indexed by, uint256 value);
    event NormalBurn(address indexed from, address indexed to, uint256 value);
    event MintingEnabled();
    event MintingDisabled();
    event BurningEnabled();
    event BurningDisabled();
}

File 1 of 8: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

library Address {
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

File 2 of 8: BridgeOracle.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface HandlerOracle {
    function approveHandlerChange() external returns (bool);
    function approveManualMint() external returns (bool);
    function isTokenContract(address tokenContract) external view returns (bool);
    function isAllowedToChangeOracle(address tokenContract) external view returns (bool);
}

import "./Ownable.sol";

abstract contract BridgeOracle is Ownable {
    HandlerOracle internal _handlerOracle;
    address private _bridgeHandler;
    bool internal oracleApprovedToSetHandler = false;
    bool internal oracleApprovedToManualMint = false;

    event BridgeHandlerSet(address indexed added);

    /**
     * @dev Returns true if the address is a bridge handler.
     */
    function isBridgeHandler(address account) public view returns (bool) {
        return _bridgeHandler == account;
    }
    
    /**
     * @dev Throws if called by any account other than the oracle or a bridge handler.
     */
    modifier onlyOracleAndBridge() {
        require(_msgSender() != address(0), Errors.NOT_ZERO_ADDRESS_SENDER);
        require(isBridgeHandler(_msgSender()) || address(_handlerOracle) == _msgSender(), Errors.NOT_ORACLE_OR_HANDLER);
        _;
    }
    
    modifier onlyHandlerOracle() {
        require(_msgSender() != address(0), Errors.ORACLE_NOT_SET);
        require(_msgSender() == address(_handlerOracle), Errors.IS_NOT_ORACLE);
        _;
    }

    function oracleIsApprovedToSetHandler() public view returns (bool) {
        return oracleApprovedToSetHandler;
    }

    function oracleIsApprovedToManualMint() public view returns (bool) {
        return oracleApprovedToManualMint;
    }

    function approveOracleToSetHandler() public onlyOwner returns (bool) {
        require(address(_handlerOracle) != address(0), Errors.SET_HANDLER_ORACLE_FIRST);
        require(_handlerOracle.isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        oracleApprovedToSetHandler = true;
        return oracleApprovedToSetHandler;
    }
    
    function removeApproveForOracleToSetHandler() public onlyOwner {
        require(address(_handlerOracle) != address(0), Errors.SET_HANDLER_ORACLE_FIRST);
        require(_handlerOracle.isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        oracleApprovedToSetHandler = false;
    }

    function approveOracleToManualMint() public onlyOwner returns (bool) {
        require(address(_handlerOracle) != address(0), Errors.SET_HANDLER_ORACLE_FIRST);
        require(_handlerOracle.isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        oracleApprovedToManualMint = true;
        return oracleApprovedToManualMint;
    }

    function removeApproveForOracleToManualMint() public onlyOwner {
        require(address(_handlerOracle) != address(0), Errors.SET_HANDLER_ORACLE_FIRST);
        require(_handlerOracle.isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        oracleApprovedToManualMint = false;
    }

    /**
     * @dev Add handler address (`account`) that can mint and burn.
     * Can only be called by the 'Handler Oracle Contract' after it was approved.
     */
    function setBridgeHandler(address account) public onlyHandlerOracle {
        require(oracleApprovedToSetHandler == true, Errors.NOT_ALLOWED_TO_EDIT_HANDLER);
        require(account != address(0), Errors.OWNABLE_NOT_ZERO_ADDRESS);
        require(!isBridgeHandler(account), Errors.ADDRESS_IS_HANDLER);

        emit BridgeHandlerSet(account);
        _bridgeHandler = account;
        oracleApprovedToSetHandler = false;
    }

    function setHandlerOracle(address newHandlerOracle) public onlyOwner {
        require(HandlerOracle(newHandlerOracle).isTokenContract(address(this)) == true, Errors.TOKEN_NOT_ALLOWED_IN_BRIDGE);

        if ( address(_handlerOracle) == address(0) ) {
            _handlerOracle = HandlerOracle(newHandlerOracle);
        } else {
            require(_handlerOracle.isAllowedToChangeOracle(address(this)) == true, Errors.NOT_ALLOWED_TO_EDIT_ORACLE);

            _handlerOracle = HandlerOracle(newHandlerOracle);
        }
    }
}

File 3 of 8: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 4 of 8: Errors.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Errors {
    string constant MINT_DISABLED = "Token: Minting is disabled";
    string constant BURN_DISABLED = "Token: Burning is disabled";
    string constant MINT_ALREADY_ENABLED = "Token: Minting is already enabled";
    string constant MINT_ALREADY_DISABLED = "Token: Minting is already disabled";
    string constant BURN_ALREADY_ENABLED = "Token: Burning is already enabled";
    string constant BURN_ALREADY_DISABLED = "Token: Burning is already disabled";
    string constant NOT_ZERO_ADDRESS = "Token: Address can not be 0x0";
    string constant NOT_APPROVED = "Token: You are not approved to spend this amount of tokens";
    string constant NOT_APPROVED_TO_MANUAL_MINT = "Token: You are not approved to manual mint";
    string constant TRANSFER_EXCEEDS_BALANCE = "Token: Transfer amount exceeds balance";
    string constant BURN_EXCEEDS_BALANCE = "Token: Burn amount exceeds balance";
    string constant INSUFFICIENT_ALLOWANCE = "Token: Insufficient allowance";
    string constant NOTHING_TO_WITHDRAW = "Token: The balance must be greater than 0";
    string constant ALLOWANCE_BELOW_ZERO = "Token: Decreased allowance below zero";
    string constant ABOVE_CAP = "Token: Amount is above the cap";

    string constant NOT_OWNER = "Ownable: Caller is not the owner";
    string constant OWNABLE_NOT_ZERO_ADDRESS = "Ownable: Address can not be 0x0";

    string constant NOT_ORACLE_OR_HANDLER = "Oracle: Caller is not the oracle or handler";
    string constant ADDRESS_IS_HANDLER = "Oracle: Address is already a Bridge Handler";
    string constant ADDRESS_IS_NOT_HANDLER = "Oracle: Address is not a Bridge Handler";
    string constant TOKEN_NOT_ALLOWED_IN_BRIDGE = "Oracle: Your token is not allowed in JM Bridge";
    string constant SET_HANDLER_ORACLE_FIRST = "Oracle: Set the handler oracle address first";
    string constant ORACLE_NOT_SET = "Oracle: No oracle set";
    string constant IS_NOT_ORACLE = "Oracle: You are not the oracle";
    string constant NOT_ALLOWED_TO_EDIT_ORACLE = "Oracle: Not allowed to edit the Handler Oracle address";
    string constant NOT_ALLOWED_TO_EDIT_HANDLER = "Oracle: Not allowed to edit the Handler address";
    string constant NOT_ZERO_ADDRESS_SENDER = "Oracle: Sender can not be 0x0";
}

File 5 of 8: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

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

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

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

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

File 6 of 8: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";
import "./Errors.sol";

/**
 * @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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), Errors.NOT_OWNER);
        _;
    }

    /**
     * @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), Errors.OWNABLE_NOT_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);
    }
}

File 7 of 8: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BridgeBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"added","type":"address"}],"name":"BridgeHandlerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BridgeMint","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"BurningEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"by","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ManualMint","type":"event"},{"anonymous":false,"inputs":[],"name":"MintingDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"MintingEnabled","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":"NormalBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":[],"name":"approveOracleToManualMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveOracleToSetHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","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":"disableBurning","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMinting","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBurning","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMinting","outputs":[{"internalType":"string","name":"retMsg","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBridgeHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurningEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleIsApprovedToManualMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracleIsApprovedToSetHandler","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeApproveForOracleToManualMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeApproveForOracleToSetHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setBridgeHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newHandlerOracle","type":"address"}],"name":"setHandlerOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawBASE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdrawERC20token","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526000600260146101000a81548160ff0219169083151502179055506000600260156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506200009e620000926200015660201b60201c565b6200015e60201b60201c565b60016003819055506040518060400160405280600b81526020017f50726f737065637469766500000000000000000000000000000000000000000081525060099081620000ec91906200049c565b506040518060400160405280600481526020017f50524f5300000000000000000000000000000000000000000000000000000000815250600a90816200013391906200049c565b506012600b60006101000a81548160ff021916908360ff16021790555062000583565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002a457607f821691505b602082108103620002ba57620002b96200025c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002e5565b620003308683620002e5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200037d62000377620003718462000348565b62000352565b62000348565b9050919050565b6000819050919050565b62000399836200035c565b620003b1620003a88262000384565b848454620002f2565b825550505050565b600090565b620003c8620003b9565b620003d58184846200038e565b505050565b5b81811015620003fd57620003f1600082620003be565b600181019050620003db565b5050565b601f8211156200044c576200041681620002c0565b6200042184620002d5565b8101602085101562000431578190505b620004496200044085620002d5565b830182620003da565b50505b505050565b600082821c905092915050565b6000620004716000198460080262000451565b1980831691505092915050565b60006200048c83836200045e565b9150826002028217905092915050565b620004a78262000222565b67ffffffffffffffff811115620004c357620004c26200022d565b5b620004cf82546200028b565b620004dc82828562000401565b600060209050601f831160018114620005145760008415620004ff578287015190505b6200050b85826200047e565b8655506200057b565b601f1984166200052486620002c0565b60005b828110156200054e5784890151825560018201915060208501945060208101905062000527565b868310156200056e57848901516200056a601f8916826200045e565b8355505b6001600288020188555050505b505050505050565b614ab880620005936000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80637e5cd5c11161011a578063a9059cbb116100ad578063e797ec1b1161007c578063e797ec1b146105cd578063e7e11786146105eb578063edf07bb51461061b578063f2fde38b14610639578063f56a44a01461065557610206565b8063a9059cbb14610533578063b19f2fc414610563578063d89135cd1461057f578063dd62ed3e1461059d57610206565b80638da5cb5b116100e95780638da5cb5b146104a957806395d89b41146104c757806398603cca146104e5578063a457c2d71461050357610206565b80637e5cd5c114610433578063853fa8ce14610451578063859e0d3a1461045b57806388ee3b061461047957610206565b806340c10f191161019d5780636e3518f31161016c5780636e3518f31461038f57806370a08231146103ad5780637581a8e6146103dd57806375eb259b146103fb57806379cc67901461041757610206565b806340c10f191461032f57806342966c681461034b57806353d7a6261461036757806355c7ba141461037157610206565b806320c354bd116101d957806320c354bd1461029357806323b872dd146102b1578063313ce567146102e157806339509351146102ff57610206565b806306fdde031461020b57806307aa037a14610229578063095ea7b31461024557806318160ddd14610275575b600080fd5b610213610673565b60405161022091906140cf565b60405180910390f35b610243600480360381019061023e9190614154565b610705565b005b61025f600480360381019061025a91906141b7565b610a75565b60405161026c9190614212565b60405180910390f35b61027d610a98565b60405161028a919061423c565b60405180910390f35b61029b610aa2565b6040516102a89190614212565b60405180910390f35b6102cb60048036038101906102c69190614257565b610ab5565b6040516102d89190614212565b60405180910390f35b6102e9610bbf565b6040516102f691906142c6565b60405180910390f35b610319600480360381019061031491906141b7565b610bd6565b6040516103269190614212565b60405180910390f35b610349600480360381019061034491906141b7565b610c80565b005b610365600480360381019061036091906142e1565b610e08565b005b61036f610e1c565b005b61037961109a565b6040516103869190614212565b60405180910390f35b6103976110ad565b6040516103a49190614212565b60405180910390f35b6103c760048036038101906103c29190614154565b6110c4565b6040516103d4919061423c565b60405180910390f35b6103e561110d565b6040516103f291906140cf565b60405180910390f35b61041560048036038101906104109190614154565b61137d565b005b610431600480360381019061042c91906141b7565b61171f565b005b61043b611821565b60405161044891906140cf565b60405180910390f35b610459611a90565b005b610463611d0e565b6040516104709190614212565b60405180910390f35b610493600480360381019061048e9190614154565b611fa1565b6040516104a09190614212565b60405180910390f35b6104b1611ffb565b6040516104be919061431d565b60405180910390f35b6104cf612024565b6040516104dc91906140cf565b60405180910390f35b6104ed6120b6565b6040516104fa91906140cf565b60405180910390f35b61051d600480360381019061051891906141b7565b612325565b60405161052a9190614212565b60405180910390f35b61054d600480360381019061054891906141b7565b61242b565b60405161055a9190614212565b60405180910390f35b61057d60048036038101906105789190614376565b61244e565b005b61058761262a565b604051610594919061423c565b60405180910390f35b6105b760048036038101906105b291906143a3565b612634565b6040516105c4919061423c565b60405180910390f35b6105d56126bb565b6040516105e291906140cf565b60405180910390f35b610605600480360381019061060091906143e3565b61292b565b6040516106129190614212565b60405180910390f35b610623612bf1565b6040516106309190614212565b60405180910390f35b610653600480360381019061064e9190614154565b612e84565b005b61065d612fee565b60405161066a9190614212565b60405180910390f35b60606009805461068290614452565b80601f01602080910402602001604051908101604052809291908181526020018280546106ae90614452565b80156106fb5780601f106106d0576101008083540402835291602001916106fb565b820191906000526020600020905b8154815290600101906020018083116106de57829003601f168201915b5050505050905090565b61070d613005565b73ffffffffffffffffffffffffffffffffffffffff1661072b611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572815250906107b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b091906140cf565b60405180910390fd5b50600115158173ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b81526004016107f7919061431d565b602060405180830381865afa158015610814573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083891906144af565b1515146040518060600160405280602e8152602001614854602e913990610895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088c91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109325780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610a72565b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b235199306040518263ffffffff1660e01b8152600401610991919061431d565b602060405180830381865afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d291906144af565b1515146040518060600160405280603681526020016149b16036913990610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2691906140cf565b60405180910390fd5b5080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600080610a80613005565b9050610a8d81858561300d565b600191505092915050565b6000600654905090565b600860019054906101000a900460ff1681565b600080610ac0613005565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548311156040518060600160405280603a81526020016147ee603a913990610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9391906140cf565b60405180910390fd5b50610ba885828561324e565b610bb3858585613313565b60019150509392505050565b6000600b60009054906101000a900460ff16905090565b600080610be1613005565b9050610c75818585600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c70919061450b565b61300d565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff16610ca0613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f4f7261636c653a2053656e6465722063616e206e6f742062652030783000000081525090610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2691906140cf565b60405180910390fd5b50610d40610d3b613005565b611fa1565b80610d9f5750610d4e613005565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6040518060600160405280602b815260200161491a602b913990610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df091906140cf565b60405180910390fd5b50610e048282613613565b5050565b610e19610e13613005565b82613a3b565b50565b610e24613005565b73ffffffffffffffffffffffffffffffffffffffff16610e42611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec791906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7591906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401610fde919061431d565b602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f91906144af565b1515146040518060600160405280602e8152602001614854602e91399061107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107391906140cf565b60405180910390fd5b506000600260146101000a81548160ff021916908315150217905550565b600860009054906101000a900460ff1681565b6000600260149054906101000a900460ff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600073ffffffffffffffffffffffffffffffffffffffff1661112f613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c65207365740000000000000000000000815250906111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b591906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611200613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c6500008152509061128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128591906140cf565b60405180910390fd5b50600860019054906101000a900460ff161560405180606001604052806021815260200161494560219139906112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f191906140cf565b60405180910390fd5b506001600860016101000a81548160ff0219169083151502179055507f65521a0db60169023ef4718a72c0d13775b298d16968758a685e034d2ca1c87560405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204275726e696e670000000000000000000000000000000000815250905090565b600073ffffffffffffffffffffffffffffffffffffffff1661139d613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c652073657400000000000000000000008152509061142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142391906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661146e613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f391906140cf565b60405180910390fd5b5060011515600260149054906101000a900460ff161515146040518060600160405280602f8152602001614a09602f91399061156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156591906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e91906140cf565b60405180910390fd5b5061162181611fa1565b156040518060600160405280602b81526020016148a7602b91399061167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167391906140cf565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff167f29cf5705e8ef0d06742df5af365503ef11d8886f3122b65edca07d64cf3d2f0a60405160405180910390a280600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260146101000a81548160ff02191690831515021790555050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611768613005565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156040518060600160405280603a81526020016147ee603a913990611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f791906140cf565b60405180910390fd5b506118138261180d613005565b8361324e565b61181d8282613a3b565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff16611843613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c65207365740000000000000000000000815250906118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c991906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611914613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199991906140cf565b60405180910390fd5b50600860009054906101000a900460ff16604051806060016040528060228152602001614a616022913990611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0491906140cf565b60405180910390fd5b506000600860006101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a16040518060400160405280601081526020017f44697361626c6564204d696e74696e6700000000000000000000000000000000815250905090565b611a98613005565b73ffffffffffffffffffffffffffffffffffffffff16611ab6611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be991906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401611c52919061431d565b602060405180830381865afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9391906144af565b1515146040518060600160405280602e8152602001614854602e913990611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce791906140cf565b60405180910390fd5b506000600260156101000a81548160ff021916908315150217905550565b6000611d18613005565b73ffffffffffffffffffffffffffffffffffffffff16611d36611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6991906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401611ed2919061431d565b602060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1391906144af565b1515146040518060600160405280602e8152602001614854602e913990611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6791906140cf565b60405180910390fd5b506001600260156101000a81548160ff021916908315150217905550600260159054906101000a900460ff16905090565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461203390614452565b80601f016020809104026020016040519081016040528092919081815260200182805461205f90614452565b80156120ac5780601f10612081576101008083540402835291602001916120ac565b820191906000526020600020905b81548152906001019060200180831161208f57829003601f168201915b5050505050905090565b6060600073ffffffffffffffffffffffffffffffffffffffff166120d8613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e91906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121a9613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e91906140cf565b60405180910390fd5b50600860019054906101000a900460ff166040518060600160405280602281526020016148f860229139906122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229991906140cf565b60405180910390fd5b506000600860016101000a81548160ff0219169083151502179055507f9bdcd7b2de47aadf92905c62d9ed9e7d1f02a42a8187d0549f686c76148c7c3560405160405180910390a16040518060400160405280601081526020017f44697361626c6564204275726e696e6700000000000000000000000000000000815250905090565b600080612330613005565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156040518060600160405280602581526020016148826025913990612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240891906140cf565b60405180910390fd5b5061241f828686840361300d565b60019250505092915050565b600080612436613005565b9050612443818585613313565b600191505092915050565b612456613005565b73ffffffffffffffffffffffffffffffffffffffff16612474611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f991906140cf565b60405180910390fd5b5080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a391906140cf565b60405180910390fd5b506125b5613e2e565b60004711604051806060016040528060298152602001614a386029913990612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a91906140cf565b60405180910390fd5b5061261e8247613e7d565b612626613f71565b5050565b6000600754905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600073ffffffffffffffffffffffffffffffffffffffff166126dd613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c652073657400000000000000000000008152509061276c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276391906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127ae613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c6500008152509061283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283391906140cf565b60405180910390fd5b50600860009054906101000a900460ff161560405180606001604052806021815260200161496660219139906128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f91906140cf565b60405180910390fd5b506001600860006101000a81548160ff0219169083151502179055507f38cb976174a5c48b8f7b2f07f69b47c271ba7f019948915dc12efb770c2a542c60405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204d696e74696e670000000000000000000000000000000000815250905090565b6000612935613005565b73ffffffffffffffffffffffffffffffffffffffff16612953611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572815250906129e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d891906140cf565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8291906140cf565b60405180910390fd5b5060008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ac7919061431d565b602060405180830381865afa158015612ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b089190614554565b905060008111604051806060016040528060298152602001614a386029913990612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f91906140cf565b60405180910390fd5b508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b8152600401612ba49291906145e0565b6020604051808303816000875af1158015612bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be791906144af565b9250505092915050565b6000612bfb613005565b73ffffffffffffffffffffffffffffffffffffffff16612c19611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c91906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401612db5919061431d565b602060405180830381865afa158015612dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df691906144af565b1515146040518060600160405280602e8152602001614854602e913990612e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4a91906140cf565b60405180910390fd5b506001600260146101000a81548160ff021916908315150217905550600260149054906101000a900460ff16905090565b612e8c613005565b73ffffffffffffffffffffffffffffffffffffffff16612eaa611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090612fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd891906140cf565b60405180910390fd5b50612feb81613f7b565b50565b6000600260159054906101000a900460ff16905090565b600033905090565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad91906140cf565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315791906140cf565b60405180910390fd5b5082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161323f919061423c565b60405180910390a35050505050565b600061325a8484612634565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461330d57818110156040518060400160405280601d81526020017f546f6b656e3a20496e73756666696369656e7420616c6c6f77616e6365000000815250906132fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f591906140cf565b60405180910390fd5b5061330c848484840361300d565b5b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906133bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b391906140cf565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d91906140cf565b60405180910390fd5b506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156040518060600160405280602681526020016148d26026913990613509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350091906140cf565b60405180910390fd5b50838103600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359f919061450b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613603919061423c565b60405180910390a3505050505050565b600860009054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204d696e74696e672069732064697361626c65640000000000008152509061369a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369191906140cf565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b91906140cf565b60405180910390fd5b50816007546006546b033b2e3c9fd0803ce80000006137639190614609565b61376d9190614609565b8111156040518060400160405280601e81526020017f546f6b656e3a20416d6f756e742069732061626f766520746865206361700000815250906137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de91906140cf565b60405180910390fd5b5082600660008282546137fa919061450b565b9250508190555082600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613850919061450b565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138b5919061423c565b60405180910390a360006138c7613005565b90506138d281611fa1565b15613941578473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc3b8ae385c02b938fbbbd694d1da0761f755ee2c942f26bbfc6723c986d31b9b86604051613934919061423c565b60405180910390a3613a34565b60011515600260159054906101000a900460ff161515146040518060600160405280602a8152602001614987602a9139906139b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a991906140cf565b60405180910390fd5b508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6de547f9e15aa8eb4e186426345d83ce982c2e4a1f811761da74ff56a2a2373186604051613a10919061423c565b60405180910390a36000600260156101000a81548160ff0219169083151502179055505b5050505050565b600860019054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204275726e696e672069732064697361626c656400000000000081525090613ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab991906140cf565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6391906140cf565b60405180910390fd5b506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156040518060600160405280602281526020016149e76022913990613c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0691906140cf565b60405180910390fd5b50828103600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254613c689190614609565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ccd919061423c565b60405180910390a36000613cdf613005565b9050613cea81611fa1565b80613d425750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613db1578073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fabf8a0bc0c6341b64dfa026a551cda9d3beb0e0525758303026bacbc11ad1d8c86604051613da4919061423c565b60405180910390a3613e27565b836007600082825401925050819055508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe89157ccd232bcbcdb51b17ee427bcd37c60c0d26c4d97408b1309a9333c636e86604051613e1e919061423c565b60405180910390a35b5050505050565b600260035403613e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6a90614689565b60405180910390fd5b6002600381905550565b80471015613ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb7906146f5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051613ee690614746565b60006040518083038185875af1925050503d8060008114613f23576040519150601f19603f3d011682016040523d82523d6000602084013e613f28565b606091505b5050905080613f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f63906147cd565b60405180910390fd5b505050565b6001600381905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561407957808201518184015260208101905061405e565b60008484015250505050565b6000601f19601f8301169050919050565b60006140a18261403f565b6140ab818561404a565b93506140bb81856020860161405b565b6140c481614085565b840191505092915050565b600060208201905081810360008301526140e98184614096565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614121826140f6565b9050919050565b61413181614116565b811461413c57600080fd5b50565b60008135905061414e81614128565b92915050565b60006020828403121561416a576141696140f1565b5b60006141788482850161413f565b91505092915050565b6000819050919050565b61419481614181565b811461419f57600080fd5b50565b6000813590506141b18161418b565b92915050565b600080604083850312156141ce576141cd6140f1565b5b60006141dc8582860161413f565b92505060206141ed858286016141a2565b9150509250929050565b60008115159050919050565b61420c816141f7565b82525050565b60006020820190506142276000830184614203565b92915050565b61423681614181565b82525050565b6000602082019050614251600083018461422d565b92915050565b6000806000606084860312156142705761426f6140f1565b5b600061427e8682870161413f565b935050602061428f8682870161413f565b92505060406142a0868287016141a2565b9150509250925092565b600060ff82169050919050565b6142c0816142aa565b82525050565b60006020820190506142db60008301846142b7565b92915050565b6000602082840312156142f7576142f66140f1565b5b6000614305848285016141a2565b91505092915050565b61431781614116565b82525050565b6000602082019050614332600083018461430e565b92915050565b6000614343826140f6565b9050919050565b61435381614338565b811461435e57600080fd5b50565b6000813590506143708161434a565b92915050565b60006020828403121561438c5761438b6140f1565b5b600061439a84828501614361565b91505092915050565b600080604083850312156143ba576143b96140f1565b5b60006143c88582860161413f565b92505060206143d98582860161413f565b9150509250929050565b600080604083850312156143fa576143f96140f1565b5b60006144088582860161413f565b925050602061441985828601614361565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446a57607f821691505b60208210810361447d5761447c614423565b5b50919050565b61448c816141f7565b811461449757600080fd5b50565b6000815190506144a981614483565b92915050565b6000602082840312156144c5576144c46140f1565b5b60006144d38482850161449a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061451682614181565b915061452183614181565b9250828201905080821115614539576145386144dc565b5b92915050565b60008151905061454e8161418b565b92915050565b60006020828403121561456a576145696140f1565b5b60006145788482850161453f565b91505092915050565b6000819050919050565b60006145a66145a161459c846140f6565b614581565b6140f6565b9050919050565b60006145b88261458b565b9050919050565b60006145ca826145ad565b9050919050565b6145da816145bf565b82525050565b60006040820190506145f560008301856145d1565b614602602083018461422d565b9392505050565b600061461482614181565b915061461f83614181565b9250828203905081811115614637576146366144dc565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614673601f8361404a565b915061467e8261463d565b602082019050919050565b600060208201905081810360008301526146a281614666565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006146df601d8361404a565b91506146ea826146a9565b602082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b600081905092915050565b50565b6000614730600083614715565b915061473b82614720565b600082019050919050565b600061475182614723565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147b7603a8361404a565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b905091905056fe546f6b656e3a20596f7520617265206e6f7420617070726f76656420746f207370656e64207468697320616d6f756e74206f6620746f6b656e734f7261636c653a20536574207468652068616e646c6572206f7261636c6520616464726573732066697273744f7261636c653a20596f757220746f6b656e206973206e6f7420616c6c6f77656420696e204a4d20427269646765546f6b656e3a2044656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f7261636c653a204164647265737320697320616c72656164792061204272696467652048616e646c6572546f6b656e3a205472616e7366657220616d6f756e7420657863656564732062616c616e6365546f6b656e3a204275726e696e6720697320616c72656164792064697361626c65644f7261636c653a2043616c6c6572206973206e6f7420746865206f7261636c65206f722068616e646c6572546f6b656e3a204275726e696e6720697320616c726561647920656e61626c6564546f6b656e3a204d696e74696e6720697320616c726561647920656e61626c6564546f6b656e3a20596f7520617265206e6f7420617070726f76656420746f206d616e75616c206d696e744f7261636c653a204e6f7420616c6c6f77656420746f2065646974207468652048616e646c6572204f7261636c652061646472657373546f6b656e3a204275726e20616d6f756e7420657863656564732062616c616e63654f7261636c653a204e6f7420616c6c6f77656420746f2065646974207468652048616e646c65722061646472657373546f6b656e3a205468652062616c616e6365206d7573742062652067726561746572207468616e2030546f6b656e3a204d696e74696e6720697320616c72656164792064697361626c6564a2646970667358221220952ad89dbe38eb33491d9378f530e15470b6c325f5638cf5c928735b2d451d4264736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102065760003560e01c80637e5cd5c11161011a578063a9059cbb116100ad578063e797ec1b1161007c578063e797ec1b146105cd578063e7e11786146105eb578063edf07bb51461061b578063f2fde38b14610639578063f56a44a01461065557610206565b8063a9059cbb14610533578063b19f2fc414610563578063d89135cd1461057f578063dd62ed3e1461059d57610206565b80638da5cb5b116100e95780638da5cb5b146104a957806395d89b41146104c757806398603cca146104e5578063a457c2d71461050357610206565b80637e5cd5c114610433578063853fa8ce14610451578063859e0d3a1461045b57806388ee3b061461047957610206565b806340c10f191161019d5780636e3518f31161016c5780636e3518f31461038f57806370a08231146103ad5780637581a8e6146103dd57806375eb259b146103fb57806379cc67901461041757610206565b806340c10f191461032f57806342966c681461034b57806353d7a6261461036757806355c7ba141461037157610206565b806320c354bd116101d957806320c354bd1461029357806323b872dd146102b1578063313ce567146102e157806339509351146102ff57610206565b806306fdde031461020b57806307aa037a14610229578063095ea7b31461024557806318160ddd14610275575b600080fd5b610213610673565b60405161022091906140cf565b60405180910390f35b610243600480360381019061023e9190614154565b610705565b005b61025f600480360381019061025a91906141b7565b610a75565b60405161026c9190614212565b60405180910390f35b61027d610a98565b60405161028a919061423c565b60405180910390f35b61029b610aa2565b6040516102a89190614212565b60405180910390f35b6102cb60048036038101906102c69190614257565b610ab5565b6040516102d89190614212565b60405180910390f35b6102e9610bbf565b6040516102f691906142c6565b60405180910390f35b610319600480360381019061031491906141b7565b610bd6565b6040516103269190614212565b60405180910390f35b610349600480360381019061034491906141b7565b610c80565b005b610365600480360381019061036091906142e1565b610e08565b005b61036f610e1c565b005b61037961109a565b6040516103869190614212565b60405180910390f35b6103976110ad565b6040516103a49190614212565b60405180910390f35b6103c760048036038101906103c29190614154565b6110c4565b6040516103d4919061423c565b60405180910390f35b6103e561110d565b6040516103f291906140cf565b60405180910390f35b61041560048036038101906104109190614154565b61137d565b005b610431600480360381019061042c91906141b7565b61171f565b005b61043b611821565b60405161044891906140cf565b60405180910390f35b610459611a90565b005b610463611d0e565b6040516104709190614212565b60405180910390f35b610493600480360381019061048e9190614154565b611fa1565b6040516104a09190614212565b60405180910390f35b6104b1611ffb565b6040516104be919061431d565b60405180910390f35b6104cf612024565b6040516104dc91906140cf565b60405180910390f35b6104ed6120b6565b6040516104fa91906140cf565b60405180910390f35b61051d600480360381019061051891906141b7565b612325565b60405161052a9190614212565b60405180910390f35b61054d600480360381019061054891906141b7565b61242b565b60405161055a9190614212565b60405180910390f35b61057d60048036038101906105789190614376565b61244e565b005b61058761262a565b604051610594919061423c565b60405180910390f35b6105b760048036038101906105b291906143a3565b612634565b6040516105c4919061423c565b60405180910390f35b6105d56126bb565b6040516105e291906140cf565b60405180910390f35b610605600480360381019061060091906143e3565b61292b565b6040516106129190614212565b60405180910390f35b610623612bf1565b6040516106309190614212565b60405180910390f35b610653600480360381019061064e9190614154565b612e84565b005b61065d612fee565b60405161066a9190614212565b60405180910390f35b60606009805461068290614452565b80601f01602080910402602001604051908101604052809291908181526020018280546106ae90614452565b80156106fb5780601f106106d0576101008083540402835291602001916106fb565b820191906000526020600020905b8154815290600101906020018083116106de57829003601f168201915b5050505050905090565b61070d613005565b73ffffffffffffffffffffffffffffffffffffffff1661072b611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572815250906107b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b091906140cf565b60405180910390fd5b50600115158173ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b81526004016107f7919061431d565b602060405180830381865afa158015610814573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083891906144af565b1515146040518060600160405280602e8152602001614854602e913990610895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088c91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036109325780600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610a72565b60011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638b235199306040518263ffffffff1660e01b8152600401610991919061431d565b602060405180830381865afa1580156109ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d291906144af565b1515146040518060600160405280603681526020016149b16036913990610a2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2691906140cf565b60405180910390fd5b5080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600080610a80613005565b9050610a8d81858561300d565b600191505092915050565b6000600654905090565b600860019054906101000a900460ff1681565b600080610ac0613005565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548311156040518060600160405280603a81526020016147ee603a913990610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9391906140cf565b60405180910390fd5b50610ba885828561324e565b610bb3858585613313565b60019150509392505050565b6000600b60009054906101000a900460ff16905090565b600080610be1613005565b9050610c75818585600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c70919061450b565b61300d565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff16610ca0613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f4f7261636c653a2053656e6465722063616e206e6f742062652030783000000081525090610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2691906140cf565b60405180910390fd5b50610d40610d3b613005565b611fa1565b80610d9f5750610d4e613005565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6040518060600160405280602b815260200161491a602b913990610df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df091906140cf565b60405180910390fd5b50610e048282613613565b5050565b610e19610e13613005565b82613a3b565b50565b610e24613005565b73ffffffffffffffffffffffffffffffffffffffff16610e42611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec791906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990610f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7591906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401610fde919061431d565b602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f91906144af565b1515146040518060600160405280602e8152602001614854602e91399061107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107391906140cf565b60405180910390fd5b506000600260146101000a81548160ff021916908315150217905550565b600860009054906101000a900460ff1681565b6000600260149054906101000a900460ff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600073ffffffffffffffffffffffffffffffffffffffff1661112f613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c65207365740000000000000000000000815250906111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b591906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611200613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c6500008152509061128e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128591906140cf565b60405180910390fd5b50600860019054906101000a900460ff161560405180606001604052806021815260200161494560219139906112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f191906140cf565b60405180910390fd5b506001600860016101000a81548160ff0219169083151502179055507f65521a0db60169023ef4718a72c0d13775b298d16968758a685e034d2ca1c87560405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204275726e696e670000000000000000000000000000000000815250905090565b600073ffffffffffffffffffffffffffffffffffffffff1661139d613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c652073657400000000000000000000008152509061142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142391906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661146e613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906114fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f391906140cf565b60405180910390fd5b5060011515600260149054906101000a900460ff161515146040518060600160405280602f8152602001614a09602f91399061156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156591906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e91906140cf565b60405180910390fd5b5061162181611fa1565b156040518060600160405280602b81526020016148a7602b91399061167c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167391906140cf565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff167f29cf5705e8ef0d06742df5af365503ef11d8886f3122b65edca07d64cf3d2f0a60405160405180910390a280600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260146101000a81548160ff02191690831515021790555050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611768613005565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156040518060600160405280603a81526020016147ee603a913990611800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f791906140cf565b60405180910390fd5b506118138261180d613005565b8361324e565b61181d8282613a3b565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff16611843613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c65207365740000000000000000000000815250906118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c991906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611914613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c650000815250906119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199991906140cf565b60405180910390fd5b50600860009054906101000a900460ff16604051806060016040528060228152602001614a616022913990611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0491906140cf565b60405180910390fd5b506000600860006101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a16040518060400160405280601081526020017f44697361626c6564204d696e74696e6700000000000000000000000000000000815250905090565b611a98613005565b73ffffffffffffffffffffffffffffffffffffffff16611ab6611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be991906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401611c52919061431d565b602060405180830381865afa158015611c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9391906144af565b1515146040518060600160405280602e8152602001614854602e913990611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce791906140cf565b60405180910390fd5b506000600260156101000a81548160ff021916908315150217905550565b6000611d18613005565b73ffffffffffffffffffffffffffffffffffffffff16611d36611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990611e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6991906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401611ed2919061431d565b602060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1391906144af565b1515146040518060600160405280602e8152602001614854602e913990611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6791906140cf565b60405180910390fd5b506001600260156101000a81548160ff021916908315150217905550600260159054906101000a900460ff16905090565b60008173ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a805461203390614452565b80601f016020809104026020016040519081016040528092919081815260200182805461205f90614452565b80156120ac5780601f10612081576101008083540402835291602001916120ac565b820191906000526020600020905b81548152906001019060200180831161208f57829003601f168201915b5050505050905090565b6060600073ffffffffffffffffffffffffffffffffffffffff166120d8613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c6520736574000000000000000000000081525090612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e91906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166121a9613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c65000081525090612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e91906140cf565b60405180910390fd5b50600860019054906101000a900460ff166040518060600160405280602281526020016148f860229139906122a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229991906140cf565b60405180910390fd5b506000600860016101000a81548160ff0219169083151502179055507f9bdcd7b2de47aadf92905c62d9ed9e7d1f02a42a8187d0549f686c76148c7c3560405160405180910390a16040518060400160405280601081526020017f44697361626c6564204275726e696e6700000000000000000000000000000000815250905090565b600080612330613005565b90506000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156040518060600160405280602581526020016148826025913990612411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240891906140cf565b60405180910390fd5b5061241f828686840361300d565b60019250505092915050565b600080612436613005565b9050612443818585613313565b600191505092915050565b612456613005565b73ffffffffffffffffffffffffffffffffffffffff16612474611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f991906140cf565b60405180910390fd5b5080600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a391906140cf565b60405180910390fd5b506125b5613e2e565b60004711604051806060016040528060298152602001614a386029913990612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a91906140cf565b60405180910390fd5b5061261e8247613e7d565b612626613f71565b5050565b6000600754905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6060600073ffffffffffffffffffffffffffffffffffffffff166126dd613005565b73ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601581526020017f4f7261636c653a204e6f206f7261636c652073657400000000000000000000008152509061276c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276391906140cf565b60405180910390fd5b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166127ae613005565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601e81526020017f4f7261636c653a20596f7520617265206e6f7420746865206f7261636c6500008152509061283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283391906140cf565b60405180910390fd5b50600860009054906101000a900460ff161560405180606001604052806021815260200161496660219139906128a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289f91906140cf565b60405180910390fd5b506001600860006101000a81548160ff0219169083151502179055507f38cb976174a5c48b8f7b2f07f69b47c271ba7f019948915dc12efb770c2a542c60405160405180910390a16040518060400160405280600f81526020017f456e61626c6564204d696e74696e670000000000000000000000000000000000815250905090565b6000612935613005565b73ffffffffffffffffffffffffffffffffffffffff16612953611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e6572815250906129e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d891906140cf565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8291906140cf565b60405180910390fd5b5060008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ac7919061431d565b602060405180830381865afa158015612ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b089190614554565b905060008111604051806060016040528060298152602001614a386029913990612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f91906140cf565b60405180910390fd5b508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85836040518363ffffffff1660e01b8152600401612ba49291906145e0565b6020604051808303816000875af1158015612bc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be791906144af565b9250505092915050565b6000612bfb613005565b73ffffffffffffffffffffffffffffffffffffffff16612c19611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060600160405280602c8152602001614828602c913990612d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4c91906140cf565b60405180910390fd5b5060011515600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4cea52e306040518263ffffffff1660e01b8152600401612db5919061431d565b602060405180830381865afa158015612dd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df691906144af565b1515146040518060600160405280602e8152602001614854602e913990612e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4a91906140cf565b60405180910390fd5b506001600260146101000a81548160ff021916908315150217905550600260149054906101000a900460ff16905090565b612e8c613005565b73ffffffffffffffffffffffffffffffffffffffff16612eaa611ffb565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280602081526020017f4f776e61626c653a2043616c6c6572206973206e6f7420746865206f776e657281525090612f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2f91906140cf565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601f81526020017f4f776e61626c653a20416464726573732063616e206e6f74206265203078300081525090612fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd891906140cf565b60405180910390fd5b50612feb81613f7b565b50565b6000600260159054906101000a900460ff16905090565b600033905090565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad91906140cf565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315791906140cf565b60405180910390fd5b5082600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161323f919061423c565b60405180910390a35050505050565b600061325a8484612634565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461330d57818110156040518060400160405280601d81526020017f546f6b656e3a20496e73756666696369656e7420616c6c6f77616e6365000000815250906132fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f591906140cf565b60405180910390fd5b5061330c848484840361300d565b5b50505050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f7420626520307830000000815250906133bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b391906140cf565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345d91906140cf565b60405180910390fd5b506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156040518060600160405280602681526020016148d26026913990613509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350091906140cf565b60405180910390fd5b50838103600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359f919061450b565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613603919061423c565b60405180910390a3505050505050565b600860009054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204d696e74696e672069732064697361626c65640000000000008152509061369a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369191906140cf565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373b91906140cf565b60405180910390fd5b50816007546006546b033b2e3c9fd0803ce80000006137639190614609565b61376d9190614609565b8111156040518060400160405280601e81526020017f546f6b656e3a20416d6f756e742069732061626f766520746865206361700000815250906137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de91906140cf565b60405180910390fd5b5082600660008282546137fa919061450b565b9250508190555082600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613850919061450b565b925050819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138b5919061423c565b60405180910390a360006138c7613005565b90506138d281611fa1565b15613941578473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc3b8ae385c02b938fbbbd694d1da0761f755ee2c942f26bbfc6723c986d31b9b86604051613934919061423c565b60405180910390a3613a34565b60011515600260159054906101000a900460ff161515146040518060600160405280602a8152602001614987602a9139906139b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a991906140cf565b60405180910390fd5b508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f6de547f9e15aa8eb4e186426345d83ce982c2e4a1f811761da74ff56a2a2373186604051613a10919061423c565b60405180910390a36000600260156101000a81548160ff0219169083151502179055505b5050505050565b600860019054906101000a900460ff166040518060400160405280601a81526020017f546f6b656e3a204275726e696e672069732064697361626c656400000000000081525090613ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab991906140cf565b60405180910390fd5b5081600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601d81526020017f546f6b656e3a20416464726573732063616e206e6f742062652030783000000081525090613b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b6391906140cf565b60405180910390fd5b506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156040518060600160405280602281526020016149e76022913990613c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c0691906140cf565b60405180910390fd5b50828103600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508260066000828254613c689190614609565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ccd919061423c565b60405180910390a36000613cdf613005565b9050613cea81611fa1565b80613d425750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15613db1578073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fabf8a0bc0c6341b64dfa026a551cda9d3beb0e0525758303026bacbc11ad1d8c86604051613da4919061423c565b60405180910390a3613e27565b836007600082825401925050819055508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe89157ccd232bcbcdb51b17ee427bcd37c60c0d26c4d97408b1309a9333c636e86604051613e1e919061423c565b60405180910390a35b5050505050565b600260035403613e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6a90614689565b60405180910390fd5b6002600381905550565b80471015613ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb7906146f5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051613ee690614746565b60006040518083038185875af1925050503d8060008114613f23576040519150601f19603f3d011682016040523d82523d6000602084013e613f28565b606091505b5050905080613f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f63906147cd565b60405180910390fd5b505050565b6001600381905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561407957808201518184015260208101905061405e565b60008484015250505050565b6000601f19601f8301169050919050565b60006140a18261403f565b6140ab818561404a565b93506140bb81856020860161405b565b6140c481614085565b840191505092915050565b600060208201905081810360008301526140e98184614096565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614121826140f6565b9050919050565b61413181614116565b811461413c57600080fd5b50565b60008135905061414e81614128565b92915050565b60006020828403121561416a576141696140f1565b5b60006141788482850161413f565b91505092915050565b6000819050919050565b61419481614181565b811461419f57600080fd5b50565b6000813590506141b18161418b565b92915050565b600080604083850312156141ce576141cd6140f1565b5b60006141dc8582860161413f565b92505060206141ed858286016141a2565b9150509250929050565b60008115159050919050565b61420c816141f7565b82525050565b60006020820190506142276000830184614203565b92915050565b61423681614181565b82525050565b6000602082019050614251600083018461422d565b92915050565b6000806000606084860312156142705761426f6140f1565b5b600061427e8682870161413f565b935050602061428f8682870161413f565b92505060406142a0868287016141a2565b9150509250925092565b600060ff82169050919050565b6142c0816142aa565b82525050565b60006020820190506142db60008301846142b7565b92915050565b6000602082840312156142f7576142f66140f1565b5b6000614305848285016141a2565b91505092915050565b61431781614116565b82525050565b6000602082019050614332600083018461430e565b92915050565b6000614343826140f6565b9050919050565b61435381614338565b811461435e57600080fd5b50565b6000813590506143708161434a565b92915050565b60006020828403121561438c5761438b6140f1565b5b600061439a84828501614361565b91505092915050565b600080604083850312156143ba576143b96140f1565b5b60006143c88582860161413f565b92505060206143d98582860161413f565b9150509250929050565b600080604083850312156143fa576143f96140f1565b5b60006144088582860161413f565b925050602061441985828601614361565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061446a57607f821691505b60208210810361447d5761447c614423565b5b50919050565b61448c816141f7565b811461449757600080fd5b50565b6000815190506144a981614483565b92915050565b6000602082840312156144c5576144c46140f1565b5b60006144d38482850161449a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061451682614181565b915061452183614181565b9250828201905080821115614539576145386144dc565b5b92915050565b60008151905061454e8161418b565b92915050565b60006020828403121561456a576145696140f1565b5b60006145788482850161453f565b91505092915050565b6000819050919050565b60006145a66145a161459c846140f6565b614581565b6140f6565b9050919050565b60006145b88261458b565b9050919050565b60006145ca826145ad565b9050919050565b6145da816145bf565b82525050565b60006040820190506145f560008301856145d1565b614602602083018461422d565b9392505050565b600061461482614181565b915061461f83614181565b9250828203905081811115614637576146366144dc565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614673601f8361404a565b915061467e8261463d565b602082019050919050565b600060208201905081810360008301526146a281614666565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b60006146df601d8361404a565b91506146ea826146a9565b602082019050919050565b6000602082019050818103600083015261470e816146d2565b9050919050565b600081905092915050565b50565b6000614730600083614715565b915061473b82614720565b600082019050919050565b600061475182614723565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b60006147b7603a8361404a565b91506147c28261475b565b604082019050919050565b600060208201905081810360008301526147e6816147aa565b905091905056fe546f6b656e3a20596f7520617265206e6f7420617070726f76656420746f207370656e64207468697320616d6f756e74206f6620746f6b656e734f7261636c653a20536574207468652068616e646c6572206f7261636c6520616464726573732066697273744f7261636c653a20596f757220746f6b656e206973206e6f7420616c6c6f77656420696e204a4d20427269646765546f6b656e3a2044656372656173656420616c6c6f77616e63652062656c6f77207a65726f4f7261636c653a204164647265737320697320616c72656164792061204272696467652048616e646c6572546f6b656e3a205472616e7366657220616d6f756e7420657863656564732062616c616e6365546f6b656e3a204275726e696e6720697320616c72656164792064697361626c65644f7261636c653a2043616c6c6572206973206e6f7420746865206f7261636c65206f722068616e646c6572546f6b656e3a204275726e696e6720697320616c726561647920656e61626c6564546f6b656e3a204d696e74696e6720697320616c726561647920656e61626c6564546f6b656e3a20596f7520617265206e6f7420617070726f76656420746f206d616e75616c206d696e744f7261636c653a204e6f7420616c6c6f77656420746f2065646974207468652048616e646c6572204f7261636c652061646472657373546f6b656e3a204275726e20616d6f756e7420657863656564732062616c616e63654f7261636c653a204e6f7420616c6c6f77656420746f2065646974207468652048616e646c65722061646472657373546f6b656e3a205468652062616c616e6365206d7573742062652067726561746572207468616e2030546f6b656e3a204d696e74696e6720697320616c72656164792064697361626c6564a2646970667358221220952ad89dbe38eb33491d9378f530e15470b6c325f5638cf5c928735b2d451d4264736f6c63430008110033

Deployed Bytecode Sourcemap

1407:13635:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2874:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3674:528:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5201:189:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3945:98;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1775:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5952:333;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3795:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6680:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9926:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13395:81;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2073:312:1;;;:::i;:::-;;1734:35:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1457:117:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4196::7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8358:262;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3241:427:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13787:246:7;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8082:266;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2757:312:1;;;:::i;:::-;;2391:360;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;768:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1056:85:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3077:94:7;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8626:266;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7395:409;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4513:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14043:248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4049:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4752:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7814:262;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14297:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1703:360:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1477:189:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1580:117:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2874:90:7;2920:13;2952:5;2945:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2874:90;:::o;3674:528:1:-;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3827:4:1::1;3761:70;;3775:16;3761:47;;;3817:4;3761:62;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;;3833:34;;;;;;;;;;;;;;;;;3753:115;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3919:1;3884:37;;3892:14;;;;;;;;;;;3884:37;;::::0;3879:317:::1;;3969:16;3938:14;;:48;;;;;;;;;;;;;;;;;;3879:317;;;4082:4;4025:61;;:14;;;;;;;;;;;:38;;;4072:4;4025:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;4088:33;;;;;;;;;;;;;;;;;4017:105;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4168:16;4137:14;;:48;;;;;;;;;;;;;;;;;;3879:317;3674:528:::0;:::o;5201:189:7:-;5276:4;5292:13;5308:12;:10;:12::i;:::-;5292:28;;5330:32;5339:5;5346:7;5355:6;5330:8;:32::i;:::-;5379:4;5372:11;;;5201:189;;;;:::o;3945:98::-;3998:7;4024:12;;4017:19;;3945:98;:::o;1775:35::-;;;;;;;;;;;;;:::o;5952:333::-;6041:4;6057:15;6075:12;:10;:12::i;:::-;6057:30;;6115:11;:17;6127:4;6115:17;;;;;;;;;;;;;;;:26;6133:7;6115:26;;;;;;;;;;;;;;;;6105:6;:36;;6143:19;;;;;;;;;;;;;;;;;6097:66;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6182:38;6198:4;6204:7;6213:6;6182:15;:38::i;:::-;6230:27;6240:4;6246:2;6250:6;6230:9;:27::i;:::-;6274:4;6267:11;;;5952:333;;;;;:::o;3795:90::-;3845:5;3869:9;;;;;;;;;;;3862:16;;3795:90;:::o;6680:228::-;6760:4;6776:13;6792:12;:10;:12::i;:::-;6776:28;;6814:66;6823:5;6830:7;6869:10;6839:11;:18;6851:5;6839:18;;;;;;;;;;;;;;;:27;6858:7;6839:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6814:8;:66::i;:::-;6897:4;6890:11;;;6680:228;;;;:::o;9926:103::-;1072:1:1;1048:26;;:12;:10;:12::i;:::-;:26;;;;1076:30;;;;;;;;;;;;;;;;;1040:67;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1125:29;1141:12;:10;:12::i;:::-;1125:15;:29::i;:::-;:72;;;;1185:12;:10;:12::i;:::-;1158:39;;1166:14;;;;;;;;;;;1158:39;;;1125:72;1199:28;;;;;;;;;;;;;;;;;1117:111;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10005:17:7::1;10011:2;10015:6;10005:5;:17::i;:::-;9926:103:::0;;:::o;13395:81::-;13442:27;13448:12;:10;:12::i;:::-;13462:6;13442:5;:27::i;:::-;13395:81;:::o;2073:312:1:-;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2189:1:1::1;2154:37;;2162:14;;;;;;;;;;;2154:37;;;;2193:31;;;;;;;;;;;;;;;;;2146:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2292:4;2243:53;;:14;;;;;;;;;;;:30;;;2282:4;2243:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;2298:34;;;;;;;;;;;;;;;;;2235:98;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2373:5;2344:26;;:34;;;;;;;;;;;;;;;;;;2073:312::o:0;1734:35:7:-;;;;;;;;;;;;;:::o;1457:117:1:-;1518:4;1541:26;;;;;;;;;;;1534:33;;1457:117;:::o;4196::7:-;4262:7;4288:9;:18;4298:7;4288:18;;;;;;;;;;;;;;;;4281:25;;4196:117;;;:::o;8358:262::-;8417:20;1327:1:1;1303:26;;:12;:10;:12::i;:::-;:26;;;;1331:21;;;;;;;;;;;;;;;;;1295:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1395:14;;;;;;;;;;;1371:39;;:12;:10;:12::i;:::-;:39;;;1412:20;;;;;;;;;;;;;;;;;1363:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8458:16:7::1;;;;;;;;;;;8457:17;8476:27;;;;;;;;;;;;;;;;;8449:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8542:4;8523:16;;:23;;;;;;;;;;;;;;;;;;8561:16;;;;;;;;;;8587:26;;;;;;;;;;;;;;;;::::0;::::1;;8358:262:::0;:::o;3241:427:1:-;1327:1;1303:26;;:12;:10;:12::i;:::-;:26;;;;1331:21;;;;;;;;;;;;;;;;;1295:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1395:14;;;;;;;;;;;1371:39;;:12;:10;:12::i;:::-;:39;;;1412:20;;;;;;;;;;;;;;;;;1363:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3357:4:::1;3327:34;;:26;;;;;;;;;;;:34;;;3363;;;;;;;;;;;;;;;;;3319:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3435:1;3416:21;;:7;:21;;;;3439:31;;;;;;;;;;;;;;;;::::0;3408:63:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3490:24;3506:7;3490:15;:24::i;:::-;3489:25;3516;;;;;;;;;;;;;;;;;3481:61;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3575:7;3558:25;;;;;;;;;;;;3610:7;3593:14;;:24;;;;;;;;;;;;;;;;;;3656:5;3627:26;;:34;;;;;;;;;;;;;;;;;;3241:427:::0;:::o;13787:246:7:-;13873:11;:20;13885:7;13873:20;;;;;;;;;;;;;;;:34;13894:12;:10;:12::i;:::-;13873:34;;;;;;;;;;;;;;;;13863:6;:44;;13909:19;;;;;;;;;;;;;;;;;13855:74;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13948:46;13964:7;13973:12;:10;:12::i;:::-;13987:6;13948:15;:46::i;:::-;14004:22;14010:7;14019:6;14004:5;:22::i;:::-;13787:246;;:::o;8082:266::-;8142:20;1327:1:1;1303:26;;:12;:10;:12::i;:::-;:26;;;;1331:21;;;;;;;;;;;;;;;;;1295:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1395:14;;;;;;;;;;;1371:39;;:12;:10;:12::i;:::-;:39;;;1412:20;;;;;;;;;;;;;;;;;1363:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8182:16:7::1;;;;;;;;;;;8200:28;;;;;;;;;;;;;;;;;8174:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8267:5;8248:16;;:24;;;;;;;;;;;;;;;;;;8287:17;;;;;;;;;;8314:27;;;;;;;;;;;;;;;;::::0;::::1;;8082:266:::0;:::o;2757:312:1:-;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2873:1:1::1;2838:37;;2846:14;;;;;;;;;;;2838:37;;;;2877:31;;;;;;;;;;;;;;;;;2830:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2976:4;2927:53;;:14;;;;;;;;;;;:30;;;2966:4;2927:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;2982:34;;;;;;;;;;;;;;;;;2919:98;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3057:5;3028:26;;:34;;;;;;;;;;;;;;;;;;2757:312::o:0;2391:360::-;2454:4;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2513:1:1::1;2478:37;;2486:14;;;;;;;;;;;2478:37;;;;2517:31;;;;;;;;;;;;;;;;;2470:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2616:4;2567:53;;:14;;;;;;;;;;;:30;;;2606:4;2567:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;2622:34;;;;;;;;;;;;;;;;;2559:98;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2697:4;2668:26;;:33;;;;;;;;;;;;;;;;;;2718:26;;;;;;;;;;;2711:33;;2391:360:::0;:::o;768:118::-;831:4;872:7;854:25;;:14;;;;;;;;;;;:25;;;847:32;;768:118;;;:::o;1056:85:5:-;1102:7;1128:6;;;;;;;;;;;1121:13;;1056:85;:::o;3077:94:7:-;3125:13;3157:7;3150:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3077:94;:::o;8626:266::-;8686:20;1327:1:1;1303:26;;:12;:10;:12::i;:::-;:26;;;;1331:21;;;;;;;;;;;;;;;;;1295:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1395:14;;;;;;;;;;;1371:39;;:12;:10;:12::i;:::-;:39;;;1412:20;;;;;;;;;;;;;;;;;1363:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8726:16:7::1;;;;;;;;;;;8744:28;;;;;;;;;;;;;;;;;8718:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8811:5;8792:16;;:24;;;;;;;;;;;;;;;;;;8831:17;;;;;;;;;;8858:27;;;;;;;;;;;;;;;;::::0;::::1;;8626:266:::0;:::o;7395:409::-;7480:4;7496:13;7512:12;:10;:12::i;:::-;7496:28;;7534:24;7561:11;:18;7573:5;7561:18;;;;;;;;;;;;;;;:27;7580:7;7561:27;;;;;;;;;;;;;;;;7534:54;;7626:15;7606:16;:35;;7643:27;;;;;;;;;;;;;;;;;7598:73;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7705:60;7714:5;7721:7;7749:15;7730:16;:34;7705:8;:60::i;:::-;7793:4;7786:11;;;;7395:409;;;;:::o;4513:181::-;4584:4;4600:13;4616:12;:10;:12::i;:::-;4600:28;;4638;4648:5;4655:2;4659:6;4638:9;:28::i;:::-;4683:4;4676:11;;;4513:181;;;;:::o;14043:248::-;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14126:9:7::1;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;::::0;2590:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2246:21:6::2;:19;:21::i;:::-;14192:1:7::3;14168:21;:25;14195:26;;;;;;;;;;;;;;;;;14160:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14233:51;14251:9;14262:21;14233:17;:51::i;:::-;2288:20:6::2;:18;:20::i;:::-;1320:1:5::1;14043:248:7::0;:::o;4049:89::-;4093:7;4119:12;;4112:19;;4049:89;:::o;4752:141::-;4833:7;4859:11;:18;4871:5;4859:18;;;;;;;;;;;;;;;:27;4878:7;4859:27;;;;;;;;;;;;;;;;4852:34;;4752:141;;;;:::o;7814:262::-;7873:20;1327:1:1;1303:26;;:12;:10;:12::i;:::-;:26;;;;1331:21;;;;;;;;;;;;;;;;;1295:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1395:14;;;;;;;;;;;1371:39;;:12;:10;:12::i;:::-;:39;;;1412:20;;;;;;;;;;;;;;;;;1363:70;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7914:16:7::1;;;;;;;;;;;7913:17;7932:27;;;;;;;;;;;;;;;;;7905:55;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7998:4;7979:16;;:23;;;;;;;;;;;;;;;;;;8017:16;;;;;;;;;;8043:26;;;;;;;;;;;;;;;;::::0;::::1;;7814:262:::0;:::o;14297:312::-;14422:4;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14402:9:7::1;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;::::0;2590:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14438:11:::2;14459:6;14452:24;;;14485:4;14452:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14438:53;;14515:1;14509:3;:7;14518:26;;;;;;;;;;;;;;;;;14501:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14570:6;14563:23;;;14587:9;14598:3;14563:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14556:46;;;1320:1:5::1;14297:312:7::0;;;;:::o;1703:360:1:-;1766:4;1279:12:5;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1825:1:1::1;1790:37;;1798:14;;;;;;;;;;;1790:37;;;;1829:31;;;;;;;;;;;;;;;;;1782:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1928:4;1879:53;;:14;;;;;;;;;;;:30;;;1918:4;1879:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;;;1934:34;;;;;;;;;;;;;;;;;1871:98;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2009:4;1980:26;;:33;;;;;;;;;;;;;;;;;;2030:26;;;;;;;;;;;2023:33;;1703:360:::0;:::o;1477:189:5:-;1279:12;:10;:12::i;:::-;1268:23;;:7;:5;:7::i;:::-;:23;;;1293:16;;;;;;;;;;;;;;;;;1260:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1585:1:::1;1565:22;;:8;:22;;;;1589:31;;;;;;;;;;;;;;;;::::0;1557:64:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1631:28;1650:8;1631:18;:28::i;:::-;1477:189:::0;:::o;1580:117:1:-;1641:4;1664:26;;;;;;;;;;;1657:33;;1580:117;:::o;640:96:2:-;693:7;719:10;712:17;;640:96;:::o;12384:220:7:-;12473:5;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;;2590:56;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12495:7:::1;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;::::0;2590:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12544:6:::2;12514:11;:18;12526:5;12514:18;;;;;;;;;;;;;;;:27;12533:7;12514:27;;;;;;;;;;;;;;;:36;;;;12581:7;12565:32;;12574:5;12565:32;;;12590:6;12565:32;;;;;;:::i;:::-;;;;;;;;2656:1:::1;12384:220:::0;;;;:::o;12881:401::-;12973:24;13000:25;13010:5;13017:7;13000:9;:25::i;:::-;12973:52;;13059:17;13039:16;:37;13035:241;;13120:6;13100:16;:26;;13128:29;;;;;;;;;;;;;;;;;13092:66;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13200:51;13209:5;13216:7;13244:6;13225:16;:25;13200:8;:51::i;:::-;13035:241;12963:319;12881:401;;;:::o;9359:374::-;9444:4;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;;2590:56;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9465:2:::1;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;::::0;2590:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9479:19:::2;9501:9;:15;9511:4;9501:15;;;;;;;;;;;;;;;;9479:37;;9549:6;9534:11;:21;;9557:31;;;;;;;;;;;;;;;;;9526:63;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9643:6;9629:11;:20;9611:9;:15;9621:4;9611:15;;;;;;;;;;;;;;;:38;;;;9678:6;9661:9;:13;9671:2;9661:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;9715:2;9700:26;;9709:4;9700:26;;;9719:6;9700:26;;;;;;:::i;:::-;;;;;;;;9469:264;2656:1:::1;9359:374:::0;;;;:::o;10351:599::-;2360:16;;;;;;;;;;;2378:20;;;;;;;;;;;;;;;;;2352:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10438:7:::1;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;::::0;2590:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10456:6:::2;2759:12;;2744;;1638:21;2737:19;;;;:::i;:::-;:34;;;;:::i;:::-;2726:6;:46;;2774:16;;;;;;;;;;;;;;;;::::0;2718:73:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10490:6:::3;10474:12;;:22;;;;;;;:::i;:::-;;;;;;;;10528:6;10506:9;:18;10516:7;10506:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;10570:7;10549:37;;10566:1;10549:37;;;10579:6;10549:37;;;;;;:::i;:::-;;;;;;;;10597:14;10614:12;:10;:12::i;:::-;10597:29;;10641:23;10657:6;10641:15;:23::i;:::-;10636:308;;;10705:7;10686:35;;10697:6;10686:35;;;10714:6;10686:35;;;;;;:::i;:::-;;;;;;;;10636:308;;;10790:4;10760:34;;:26;;;;;;;;;;;:34;;;10796;;;;;;;;;;;;;;;;;10752:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10869:7;10850:35;;10861:6;10850:35;;;10878:6;10850:35;;;;;;:::i;:::-;;;;;;;;10928:5;10899:26;;:34;;;;;;;;;;;;;;;;;;10636:308;10464:486;2656:1:::2;2409::::1;10351:599:::0;;:::o;11274:684::-;2471:16;;;;;;;;;;;2489:20;;;;;;;;;;;;;;;;;2463:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11361:7:::1;2618:1;2598:22;;:8;:22;;;;2622:23;;;;;;;;;;;;;;;;::::0;2590:56:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11380:22:::2;11405:9;:18;11415:7;11405:18;;;;;;;;;;;;;;;;11380:43;;11459:6;11441:14;:24;;11467:27;;;;;;;;;;;;;;;;;11433:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11555:6;11538:14;:23;11517:9;:18;11527:7;11517:18;;;;;;;;;;;;;;;:44;;;;11589:6;11573:12;;:22;;;;;;;:::i;:::-;;;;;;;;11637:1;11611:37;;11620:7;11611:37;;;11641:6;11611:37;;;;;;:::i;:::-;;;;;;;;11659:14;11676:12;:10;:12::i;:::-;11659:29;;11703:23;11719:6;11703:15;:23::i;:::-;:60;;;;11748:14;;;;;;;;;;;11730:33;;:6;:33;;;11703:60;11698:254;;;11805:6;11785:35;;11796:7;11785:35;;;11813:6;11785:35;;;;;;:::i;:::-;;;;;;;;11698:254;;;11879:6;11863:12;;:22;;;;;;;;;;;11926:6;11906:35;;11917:7;11906:35;;;11934:6;11906:35;;;;;;:::i;:::-;;;;;;;;11698:254;11370:588;;2520:1:::1;11274:684:::0;;:::o;2321:283:6:-;1744:1;2449:7;;:19;2441:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2579:7;:18;;;;2321:283::o;1044:312:0:-;1158:6;1133:21;:31;;1125:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1210:12;1228:9;:14;;1250:6;1228:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1209:52;;;1279:7;1271:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1115:241;1044:312;;:::o;2610:209:6:-;1701:1;2790:7;:22;;;;2610:209::o;1820:187:5:-;1893:16;1912:6;;;;;;;;;;;1893:25;;1937:8;1928:6;;:17;;;;;;;;;;;;;;;;;;1991:8;1960:40;;1981:8;1960:40;;;;;;;;;;;;1883:124;1820:187;:::o;7:99:8:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:329::-;2242:6;2291:2;2279:9;2270:7;2266:23;2262:32;2259:119;;;2297:79;;:::i;:::-;2259:119;2417:1;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2388:117;2183:329;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:329::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:104::-;5920:7;5949:24;5967:5;5949:24;:::i;:::-;5938:35;;5875:104;;;:::o;5985:138::-;6066:32;6092:5;6066:32;:::i;:::-;6059:5;6056:43;6046:71;;6113:1;6110;6103:12;6046:71;5985:138;:::o;6129:155::-;6183:5;6221:6;6208:20;6199:29;;6237:41;6272:5;6237:41;:::i;:::-;6129:155;;;;:::o;6290:345::-;6357:6;6406:2;6394:9;6385:7;6381:23;6377:32;6374:119;;;6412:79;;:::i;:::-;6374:119;6532:1;6557:61;6610:7;6601:6;6590:9;6586:22;6557:61;:::i;:::-;6547:71;;6503:125;6290:345;;;;:::o;6641:474::-;6709:6;6717;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;7019:2;7045:53;7090:7;7081:6;7070:9;7066:22;7045:53;:::i;:::-;7035:63;;6990:118;6641:474;;;;;:::o;7121:490::-;7197:6;7205;7254:2;7242:9;7233:7;7229:23;7225:32;7222:119;;;7260:79;;:::i;:::-;7222:119;7380:1;7405:53;7450:7;7441:6;7430:9;7426:22;7405:53;:::i;:::-;7395:63;;7351:117;7507:2;7533:61;7586:7;7577:6;7566:9;7562:22;7533:61;:::i;:::-;7523:71;;7478:126;7121:490;;;;;:::o;7617:180::-;7665:77;7662:1;7655:88;7762:4;7759:1;7752:15;7786:4;7783:1;7776:15;7803:320;7847:6;7884:1;7878:4;7874:12;7864:22;;7931:1;7925:4;7921:12;7952:18;7942:81;;8008:4;8000:6;7996:17;7986:27;;7942:81;8070:2;8062:6;8059:14;8039:18;8036:38;8033:84;;8089:18;;:::i;:::-;8033:84;7854:269;7803:320;;;:::o;8129:116::-;8199:21;8214:5;8199:21;:::i;:::-;8192:5;8189:32;8179:60;;8235:1;8232;8225:12;8179:60;8129:116;:::o;8251:137::-;8305:5;8336:6;8330:13;8321:22;;8352:30;8376:5;8352:30;:::i;:::-;8251:137;;;;:::o;8394:345::-;8461:6;8510:2;8498:9;8489:7;8485:23;8481:32;8478:119;;;8516:79;;:::i;:::-;8478:119;8636:1;8661:61;8714:7;8705:6;8694:9;8690:22;8661:61;:::i;:::-;8651:71;;8607:125;8394:345;;;;:::o;8745:180::-;8793:77;8790:1;8783:88;8890:4;8887:1;8880:15;8914:4;8911:1;8904:15;8931:191;8971:3;8990:20;9008:1;8990:20;:::i;:::-;8985:25;;9024:20;9042:1;9024:20;:::i;:::-;9019:25;;9067:1;9064;9060:9;9053:16;;9088:3;9085:1;9082:10;9079:36;;;9095:18;;:::i;:::-;9079:36;8931:191;;;;:::o;9128:143::-;9185:5;9216:6;9210:13;9201:22;;9232:33;9259:5;9232:33;:::i;:::-;9128:143;;;;:::o;9277:351::-;9347:6;9396:2;9384:9;9375:7;9371:23;9367:32;9364:119;;;9402:79;;:::i;:::-;9364:119;9522:1;9547:64;9603:7;9594:6;9583:9;9579:22;9547:64;:::i;:::-;9537:74;;9493:128;9277:351;;;;:::o;9634:60::-;9662:3;9683:5;9676:12;;9634:60;;;:::o;9700:142::-;9750:9;9783:53;9801:34;9810:24;9828:5;9810:24;:::i;:::-;9801:34;:::i;:::-;9783:53;:::i;:::-;9770:66;;9700:142;;;:::o;9848:126::-;9898:9;9931:37;9962:5;9931:37;:::i;:::-;9918:50;;9848:126;;;:::o;9980:134::-;10038:9;10071:37;10102:5;10071:37;:::i;:::-;10058:50;;9980:134;;;:::o;10120:147::-;10215:45;10254:5;10215:45;:::i;:::-;10210:3;10203:58;10120:147;;:::o;10273:348::-;10402:4;10440:2;10429:9;10425:18;10417:26;;10453:79;10529:1;10518:9;10514:17;10505:6;10453:79;:::i;:::-;10542:72;10610:2;10599:9;10595:18;10586:6;10542:72;:::i;:::-;10273:348;;;;;:::o;10627:194::-;10667:4;10687:20;10705:1;10687:20;:::i;:::-;10682:25;;10721:20;10739:1;10721:20;:::i;:::-;10716:25;;10765:1;10762;10758:9;10750:17;;10789:1;10783:4;10780:11;10777:37;;;10794:18;;:::i;:::-;10777:37;10627:194;;;;:::o;10827:181::-;10967:33;10963:1;10955:6;10951:14;10944:57;10827:181;:::o;11014:366::-;11156:3;11177:67;11241:2;11236:3;11177:67;:::i;:::-;11170:74;;11253:93;11342:3;11253:93;:::i;:::-;11371:2;11366:3;11362:12;11355:19;;11014:366;;;:::o;11386:419::-;11552:4;11590:2;11579:9;11575:18;11567:26;;11639:9;11633:4;11629:20;11625:1;11614:9;11610:17;11603:47;11667:131;11793:4;11667:131;:::i;:::-;11659:139;;11386:419;;;:::o;11811:179::-;11951:31;11947:1;11939:6;11935:14;11928:55;11811:179;:::o;11996:366::-;12138:3;12159:67;12223:2;12218:3;12159:67;:::i;:::-;12152:74;;12235:93;12324:3;12235:93;:::i;:::-;12353:2;12348:3;12344:12;12337:19;;11996:366;;;:::o;12368:419::-;12534:4;12572:2;12561:9;12557:18;12549:26;;12621:9;12615:4;12611:20;12607:1;12596:9;12592:17;12585:47;12649:131;12775:4;12649:131;:::i;:::-;12641:139;;12368:419;;;:::o;12793:147::-;12894:11;12931:3;12916:18;;12793:147;;;;:::o;12946:114::-;;:::o;13066:398::-;13225:3;13246:83;13327:1;13322:3;13246:83;:::i;:::-;13239:90;;13338:93;13427:3;13338:93;:::i;:::-;13456:1;13451:3;13447:11;13440:18;;13066:398;;;:::o;13470:379::-;13654:3;13676:147;13819:3;13676:147;:::i;:::-;13669:154;;13840:3;13833:10;;13470:379;;;:::o;13855:245::-;13995:34;13991:1;13983:6;13979:14;13972:58;14064:28;14059:2;14051:6;14047:15;14040:53;13855:245;:::o;14106:366::-;14248:3;14269:67;14333:2;14328:3;14269:67;:::i;:::-;14262:74;;14345:93;14434:3;14345:93;:::i;:::-;14463:2;14458:3;14454:12;14447:19;;14106:366;;;:::o;14478:419::-;14644:4;14682:2;14671:9;14667:18;14659:26;;14731:9;14725:4;14721:20;14717:1;14706:9;14702:17;14695:47;14759:131;14885:4;14759:131;:::i;:::-;14751:139;;14478:419;;;:::o

Swarm Source

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