POL Price: $0.715181 (+2.15%)
 

Overview

Max Total Supply

3,640.92548262 TIME

Holders

148

Total Transfers

-

Market

Price

$0.00 @ 0.000000 POL

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
TimeToken

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 12 : BSCTimeToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./interfaces/IERC677.sol";
import "./interfaces/IERC677Receiver.sol";
import "./Validators.sol";

contract TimeToken is ERC20, IERC677, Validators {

    event Minted(address indexed _from, uint256 indexed _fromChainId, uint256 indexed _lockId, uint256 _amount);
    event Burned(address indexed _from, uint256 indexed _toChainId, uint256 indexed _burnId, uint256 _amount);

    uint256 public lastBurnId;
    mapping(uint256 =>  mapping(uint256 => bool)) public lockIdsUsed;

    constructor(
        string memory tokenName,
        string memory tokenSymbol
    ) ERC20(tokenName, tokenSymbol) {}

    function mint (uint256 _fromChainId, uint256 _lockId, uint256 _amount, bytes[] memory _signatures) external {
        require(!lockIdsUsed[_fromChainId][_lockId], "Lock id already used");
        bytes32 messageHash = keccak256(abi.encodePacked(_msgSender(), _fromChainId, block.chainid, _lockId, _amount));
        require(checkSignatures(messageHash, _signatures), "Incorrect signature(s)");
        lockIdsUsed[_fromChainId][_lockId] = true;
        _mint(_msgSender(), _amount);
        emit Minted(_msgSender(), _fromChainId, _lockId, _amount);
    }

    function burn (uint256 _toChainId, uint256 _amount) external {
        require(_amount > 0, "The amount of the lock must not be zero");
        (bool found,) = indexOfChainId(_toChainId);
        require(found, "ChainId not allowed");
        _burn(_msgSender(), _amount);
        lastBurnId++;
        emit Burned(_msgSender(), _toChainId, lastBurnId, _amount);
    }

    function transferAndCall(address _to, uint _value, bytes memory _data) public override returns (bool success)
    {
        transfer(_to, _value);
        emit Transfer(_msgSender(), _to, _value, _data);
        if (isContract(_to)) {
            contractFallback(_to, _value, _data);
        }
        return true;
    }

    function contractFallback(address _to, uint _value, bytes memory _data) private
    {
        IERC677Receiver receiver = IERC677Receiver(_to);
        receiver.onTokenTransfer(_msgSender(), _value, _data);
    }

    function isContract(address _addr) private view returns (bool hasCode)
    {
        uint length;
        assembly { length := extcodesize(_addr) }
        return length > 0;
    }

}

File 2 of 12 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./interfaces/IERC20.sol";
import "./interfaces/IERC20Metadata.sol";
import "./utils/Context.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 guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

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

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

return true;
}

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

_beforeTokenTransfer(sender, recipient, amount);

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

emit Transfer(sender, recipient, amount);
}

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

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

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

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

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

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

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

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

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

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

File 3 of 12 : IERC677.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./IERC20.sol";

interface IERC677 is IERC20 {
    function transferAndCall(
        address to,
        uint256 value,
        bytes memory data
    ) external returns (bool ok);

    event Transfer(address indexed from, address indexed to, uint256 value, bytes data);
}

File 4 of 12 : IERC677Receiver.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC677Receiver {
    function onTokenTransfer(address _sender, uint _value, bytes memory _data) external;
}

File 5 of 12 : Validators.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "./utils/ECDSA.sol";
import "./ChainIdValidators.sol";

contract Validators is ChainIdValidators {
    using ECDSA for bytes32;

    address[] public bridgeValidators;

    function addBridgeValidator(address _validator) external onlyOwner {
        (bool found,) = indexOfBridgeValidator(_validator);
        require(!found, 'Validator already added');
        bridgeValidators.push(_validator);
    }

    function removeBridgeValidator(address _validator) external onlyOwner {
        (bool found, uint index) = indexOfBridgeValidator(_validator);
        require(found, 'Validator not found');
        if (bridgeValidators.length > 1) {
            bridgeValidators[index] = bridgeValidators[bridgeValidators.length - 1];
        }
        bridgeValidators.pop();
    }

    function getListBridgeValidators() public view returns (address[] memory) {
        return bridgeValidators;
    }

    function indexOfBridgeValidator(address _validator) public view returns (bool found, uint index) {
        for (uint i = 0; i < bridgeValidators.length; i++) {
            if (bridgeValidators[i] == _validator) {
                return (true, i);
            }
        }
        return (false, 0);
    }

    function checkSignatures(bytes32 _messageHash, bytes[] memory _signatures) public view returns (bool) {
        require(bridgeValidators.length > 0, 'Validators not added');
        require(_signatures.length == bridgeValidators.length, 'The number of signatures does not match the number of validators');
        bool[] memory markedValidators = new bool[](bridgeValidators.length);
        for (uint i = 0; i < _signatures.length; i++) {
            address extractedAddress = _messageHash.toEthSignedMessageHash().recover(_signatures[i]);
            (bool found, uint index) = indexOfBridgeValidator(extractedAddress);
            if (found && !markedValidators[index]) {
                markedValidators[index] = true;
            } else {
                return false;
            }
        }
        return true;
    }
}

File 6 of 12 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 7 of 12 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

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

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

File 8 of 12 : Context.sol
// SPDX-License-Identifier: MIT

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 9 of 12 : ECDSA.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
        } else if (signature.length == 64) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                let vs := mload(add(signature, 0x40))
                r := mload(add(signature, 0x20))
                s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
                v := add(shr(255, vs), 27)
            }
        } else {
            revert("ECDSA: invalid signature length");
        }

        return recover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

File 10 of 12 : ChainIdValidators.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;

import "./access/Ownable.sol";
import "./utils/ECDSA.sol";

contract ChainIdValidators is Ownable {
    using ECDSA for bytes32;

    uint256[] public chainIds;

    function addChainId(uint256 _chainId) external onlyOwner {
        (bool found,) = indexOfChainId(_chainId);
        require(!found, 'ChainId already added');
        chainIds.push(_chainId);
    }

    function removeChainId(uint256 _chainId) external onlyOwner {
        (bool found, uint256 index) = indexOfChainId(_chainId);
        require(found, 'ChainId not found');
        if (chainIds.length > 1) {
            chainIds[index] = chainIds[chainIds.length - 1];
        }
        chainIds.pop();
    }

    function getListChainIds() public view returns (uint256[] memory) {
        return chainIds;
    }

    function indexOfChainId(uint256 _chainId) public view returns (bool found, uint256 index) {
        for (uint256 i = 0; i < chainIds.length; i++) {
            if (chainIds[i] == _chainId) {
                return (true, i);
            }
        }
        return (false, 0);
    }
}

File 11 of 12 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.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;
    address private _pendingOwner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
    * @dev Returns the address of the pending owner.
    */
    function pendingOwner() public view returns (address) {
        return _pendingOwner;
    }

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

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

    function transferOwnership(address newOwner) external onlyOwner {
        _pendingOwner = newOwner;
    }

    function claimOwnership() external onlyPendingOwner {
        _owner = _pendingOwner;
        _pendingOwner = address(0);
        emit OwnershipTransferred(_owner, _pendingOwner);
    }
}

File 12 of 12 : ETHTestTimeToken.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./interfaces/IERC677.sol";
import "./interfaces/IERC677Receiver.sol";

contract ETHTestTimeToken is ERC20, IERC677 {

    constructor (string memory name_, string memory symbol_) ERC20(name_, symbol_) {
    }

    function mint(address receiver,uint256 amount) public {
        _mint(receiver, amount);
    }

    function transferAndCall(address _to, uint256 _value, bytes memory _data) public override returns (bool success)
    {
        transfer(_to, _value);
        emit Transfer(msg.sender, _to, _value, _data);
        if (isContract(_to)) {
            contractFallback(_to, _value, _data);
        }
        return true;
    }

    function contractFallback(address _to, uint256 _value, bytes memory _data) private
    {
        IERC677Receiver receiver = IERC677Receiver(_to);
        receiver.onTokenTransfer(msg.sender, _value, _data);
    }

    function isContract(address _addr) private view returns (bool hasCode)
    {
        uint length;
        assembly { length := extcodesize(_addr) }
        return length > 0;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"}],"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":"uint256","name":"_toChainId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_burnId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"uint256","name":"_fromChainId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_lockId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Minted","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"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","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":"_validator","type":"address"}],"name":"addBridgeValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"addChainId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bridgeValidators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_toChainId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chainIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"name":"checkSignatures","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","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":"getListBridgeValidators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getListChainIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","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":"_validator","type":"address"}],"name":"indexOfBridgeValidator","outputs":[{"internalType":"bool","name":"found","type":"bool"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"indexOfChainId","outputs":[{"internalType":"bool","name":"found","type":"bool"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockIdsUsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fromChainId","type":"uint256"},{"internalType":"uint256","name":"_lockId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes[]","name":"_signatures","type":"bytes[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_validator","type":"address"}],"name":"removeBridgeValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chainId","type":"uint256"}],"name":"removeChainId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620043b0380380620043b0833981810160405281019062000037919062000250565b81818160039080519060200190620000519291906200012e565b5080600490805190602001906200006a9291906200012e565b50505060006200007f6200012660201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050620003f4565b600033905090565b8280546200013c9062000360565b90600052602060002090601f016020900481019282620001605760008555620001ac565b82601f106200017b57805160ff1916838001178555620001ac565b82800160010185558215620001ac579182015b82811115620001ab5782518255916020019190600101906200018e565b5b509050620001bb9190620001bf565b5090565b5b80821115620001da576000816000905550600101620001c0565b5090565b6000620001f5620001ef84620002f7565b620002c3565b9050828152602081018484840111156200020e57600080fd5b6200021b8482856200032a565b509392505050565b600082601f8301126200023557600080fd5b815162000247848260208601620001de565b91505092915050565b600080604083850312156200026457600080fd5b600083015167ffffffffffffffff8111156200027f57600080fd5b6200028d8582860162000223565b925050602083015167ffffffffffffffff811115620002ab57600080fd5b620002b98582860162000223565b9150509250929050565b6000604051905081810181811067ffffffffffffffff82111715620002ed57620002ec620003c5565b5b8060405250919050565b600067ffffffffffffffff821115620003155762000314620003c5565b5b601f19601f8301169050602081019050919050565b60005b838110156200034a5780820151818401526020810190506200032d565b838111156200035a576000848401525b50505050565b600060028204905060018216806200037957607f821691505b6020821081141562000390576200038f62000396565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fac80620004046000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638f3f5c841161010f578063ace09eab116100a2578063dd62ed3e11610071578063dd62ed3e146105e0578063e30c397814610610578063e8cf95011461062e578063f2fde38b1461064c576101e5565b8063ace09eab1461055c578063aebc314514610578578063b390c0ab146105a8578063c5eeb8af146105c4576101e5565b80639a53b070116100de5780639a53b070146104c45780639a74695d146104e0578063a457c2d7146104fc578063a9059cbb1461052c576101e5565b80638f3f5c841461043957806395d89b411461045757806396fd59e8146104755780639a4526ed14610493576101e5565b80634000aea011610187578063582f1da211610156578063582f1da21461039f5780635a0f8830146103bb57806370a08231146103eb5780638da5cb5b1461041b576101e5565b80634000aea0146103045780634ded9331146103345780634e71e0c81461036457806357e60b3e1461036e576101e5565b806321d93090116101c357806321d930901461025657806323b872dd14610286578063313ce567146102b657806339509351146102d4576101e5565b806306fdde03146101ea578063095ea7b31461020857806318160ddd14610238575b600080fd5b6101f2610668565b6040516101ff919061379e565b60405180910390f35b610222600480360381019061021d919061293c565b6106fa565b60405161022f9190613715565b60405180910390f35b610240610718565b60405161024d9190613b00565b60405180910390f35b610270600480360381019061026b9190612a33565b610722565b60405161027d9190613b00565b60405180910390f35b6102a0600480360381019061029b91906128ed565b610746565b6040516102ad9190613715565b60405180910390f35b6102be61083e565b6040516102cb9190613b4b565b60405180910390f35b6102ee60048036038101906102e9919061293c565b610847565b6040516102fb9190613715565b60405180910390f35b61031e60048036038101906103199190612978565b6108f3565b60405161032b9190613715565b60405180910390f35b61034e60048036038101906103499190612a5c565b610993565b60405161035b9190613715565b60405180910390f35b61036c6109c2565b005b61038860048036038101906103839190612888565b610b83565b604051610396929190613730565b60405180910390f35b6103b960048036038101906103b49190612a33565b610c5c565b005b6103d560048036038101906103d091906129df565b610d54565b6040516103e29190613715565b60405180910390f35b61040560048036038101906104009190612888565b610fab565b6040516104129190613b00565b60405180910390f35b610423610ff3565b6040516104309190613678565b60405180910390f35b61044161101d565b60405161044e9190613b00565b60405180910390f35b61045f611023565b60405161046c919061379e565b60405180910390f35b61047d6110b5565b60405161048a91906136f3565b60405180910390f35b6104ad60048036038101906104a89190612a33565b61110d565b6040516104bb929190613730565b60405180910390f35b6104de60048036038101906104d99190612888565b61119a565b005b6104fa60048036038101906104f59190612a98565b6113df565b005b6105166004803603810190610511919061293c565b611580565b6040516105239190613715565b60405180910390f35b6105466004803603810190610541919061293c565b61166b565b6040516105539190613715565b60405180910390f35b61057660048036038101906105719190612888565b611689565b005b610592600480360381019061058d9190612a33565b6117bb565b60405161059f9190613678565b60405180910390f35b6105c260048036038101906105bd9190612a5c565b6117fa565b005b6105de60048036038101906105d99190612a33565b611912565b005b6105fa60048036038101906105f591906128b1565b611ade565b6040516106079190613b00565b60405180910390f35b610618611b65565b6040516106259190613678565b60405180910390f35b610636611b8f565b60405161064391906136d1565b60405180910390f35b61066660048036038101906106619190612888565b611c1d565b005b60606003805461067790613dd3565b80601f01602080910402602001604051908101604052809291908181526020018280546106a390613dd3565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b5050505050905090565b600061070e610707611cdd565b8484611ce5565b6001905092915050565b6000600254905090565b6007818154811061073257600080fd5b906000526020600020016000915090505481565b6000610753848484611eb0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061079e611cdd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590613900565b60405180910390fd5b6108328561082a611cdd565b858403611ce5565b60019150509392505050565b60006008905090565b60006108e9610854611cdd565b848460016000610862611cdd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108e49190613ca8565b611ce5565b6001905092915050565b60006108ff848461166b565b508373ffffffffffffffffffffffffffffffffffffffff1661091f611cdd565b73ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c168585604051610966929190613b1b565b60405180910390a361097784612126565b1561098857610987848484612139565b5b600190509392505050565b600a6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6109ca611cdd565b73ffffffffffffffffffffffffffffffffffffffff166109e8611b65565b73ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590613a60565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60008060005b600880549050811015610c4e578373ffffffffffffffffffffffffffffffffffffffff1660088281548110610be7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c3b576001819250925050610c57565b8080610c4690613e05565b915050610b89565b50600080915091505b915091565b610c64611cdd565b73ffffffffffffffffffffffffffffffffffffffff16610c82610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613940565b60405180910390fd5b6000610ce38261110d565b5090508015610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613960565b60405180910390fd5b60078290806001815401808255809150506001900390600052602060002001600090919091909150555050565b60008060088054905011610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490613a40565b60405180910390fd5b600880549050825114610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc906139c0565b60405180910390fd5b600060088054905067ffffffffffffffff811115610e2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e5a5781602001602082028036833780820191505090505b50905060005b8351811015610f9e576000610ec6858381518110610ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610eb8886121ba565b6121ea90919063ffffffff16565b9050600080610ed483610b83565b91509150818015610f235750848181518110610f19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151155b15610f7a576001858281518110610f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050610f88565b600095505050505050610fa5565b5050508080610f9690613e05565b915050610e60565b5060019150505b92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b60606004805461103290613dd3565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613dd3565b80156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b5050505050905090565b6060600780548060200260200160405190810160405280929190818152602001828054801561110357602002820191906000526020600020905b8154815260200190600101908083116110ef575b5050505050905090565b60008060005b60078054905081101561118c57836007828154811061115b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001541415611179576001819250925050611195565b808061118490613e05565b915050611113565b50600080915091505b915091565b6111a2611cdd565b73ffffffffffffffffffffffffffffffffffffffff166111c0610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90613940565b60405180910390fd5b60008061122283610b83565b9150915081611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613ae0565b60405180910390fd5b6001600880549050111561136d57600860016008805490506112889190613cfe565b815481106112bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611324577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60088054806113a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b600a6000858152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615611451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611448906138c0565b60405180910390fd5b600061145b611cdd565b854686866040516020016114739594939291906135f3565b6040516020818303038152906040528051906020012090506114958183610d54565b6114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90613920565b60405180910390fd5b6001600a6000878152602001908152602001600020600086815260200190815260200160002060006101000a81548160ff02191690831515021790555061152261151c611cdd565b846122b4565b838561152c611cdd565b73ffffffffffffffffffffffffffffffffffffffff167f5a3358a3d27a5373c0df2604662088d37894d56b7cfd27f315770440f4e0d919866040516115719190613b00565b60405180910390a45050505050565b6000806001600061158f611cdd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390613a80565b60405180910390fd5b611660611657611cdd565b85858403611ce5565b600191505092915050565b600061167f611678611cdd565b8484611eb0565b6001905092915050565b611691611cdd565b73ffffffffffffffffffffffffffffffffffffffff166116af610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90613940565b60405180910390fd5b600061171082610b83565b5090508015611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613ac0565b60405180910390fd5b6008829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600881815481106117cb57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000811161183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490613a20565b60405180910390fd5b60006118488361110d565b5090508061188b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611882906139a0565b60405180910390fd5b61189c611896611cdd565b83612408565b600960008154809291906118af90613e05565b9190505550600954836118c0611cdd565b73ffffffffffffffffffffffffffffffffffffffff167f4c60206a5c1de41f3376d1d60f0949d96cb682033c90b1c2d9d9a62d4c4120c0856040516119059190613b00565b60405180910390a4505050565b61191a611cdd565b73ffffffffffffffffffffffffffffffffffffffff16611938610ff3565b73ffffffffffffffffffffffffffffffffffffffff161461198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590613940565b60405180910390fd5b60008061199a8361110d565b91509150816119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613880565b60405180910390fd5b60016007805490501115611a8b5760076001600780549050611a009190613cfe565b81548110611a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015460078281548110611a7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055505b6007805480611ac3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606008805480602002602001604051908101604052809291908181526020018280548015611c1357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611bc9575b5050505050905090565b611c25611cdd565b73ffffffffffffffffffffffffffffffffffffffff16611c43610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613940565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90613a00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90613840565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ea39190613b00565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f17906139e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f87906137e0565b60405180910390fd5b611f9b8383836125ca565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613860565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b49190613ca8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121189190613b00565b60405180910390a350505050565b600080823b905060008111915050919050565b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36612162611cdd565b85856040518463ffffffff1660e01b815260040161218293929190613693565b600060405180830381600087803b15801561219c57600080fd5b505af11580156121b0573d6000803e3d6000fd5b5050505050505050565b6000816040516020016121cd9190613652565b604051602081830303815290604052805190602001209050919050565b600080600080604185511415612217576020850151925060408501519150606085015160001a905061229d565b604085511415612261576040850151602086015193507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81169250601b8160ff1c0191505061229c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390613820565b60405180910390fd5b5b6122a9868285856125cf565b935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613aa0565b60405180910390fd5b612330600083836125ca565b80600260008282546123429190613ca8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123979190613ca8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123fc9190613b00565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90613980565b60405180910390fd5b612484826000836125ca565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190613800565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125bd9190613b00565b60405180910390a3505050565b505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262e906138a0565b60405180910390fd5b601b8460ff16148061264c5750601c8460ff16145b61268b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612682906138e0565b60405180910390fd5b6000600186868686604051600081526020016040526040516126b09493929190613759565b6020604051602081039080840390855afa1580156126d2573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906137c0565b60405180910390fd5b80915050949350505050565b600061276d61276884613b97565b613b66565b9050808382526020820190508260005b858110156127ad57813585016127938882612849565b84526020840193506020830192505060018101905061277d565b5050509392505050565b60006127ca6127c584613bc3565b613b66565b9050828152602081018484840111156127e257600080fd5b6127ed848285613d91565b509392505050565b60008135905061280481613f31565b92915050565b600082601f83011261281b57600080fd5b813561282b84826020860161275a565b91505092915050565b60008135905061284381613f48565b92915050565b600082601f83011261285a57600080fd5b813561286a8482602086016127b7565b91505092915050565b60008135905061288281613f5f565b92915050565b60006020828403121561289a57600080fd5b60006128a8848285016127f5565b91505092915050565b600080604083850312156128c457600080fd5b60006128d2858286016127f5565b92505060206128e3858286016127f5565b9150509250929050565b60008060006060848603121561290257600080fd5b6000612910868287016127f5565b9350506020612921868287016127f5565b925050604061293286828701612873565b9150509250925092565b6000806040838503121561294f57600080fd5b600061295d858286016127f5565b925050602061296e85828601612873565b9150509250929050565b60008060006060848603121561298d57600080fd5b600061299b868287016127f5565b93505060206129ac86828701612873565b925050604084013567ffffffffffffffff8111156129c957600080fd5b6129d586828701612849565b9150509250925092565b600080604083850312156129f257600080fd5b6000612a0085828601612834565b925050602083013567ffffffffffffffff811115612a1d57600080fd5b612a298582860161280a565b9150509250929050565b600060208284031215612a4557600080fd5b6000612a5384828501612873565b91505092915050565b60008060408385031215612a6f57600080fd5b6000612a7d85828601612873565b9250506020612a8e85828601612873565b9150509250929050565b60008060008060808587031215612aae57600080fd5b6000612abc87828801612873565b9450506020612acd87828801612873565b9350506040612ade87828801612873565b925050606085013567ffffffffffffffff811115612afb57600080fd5b612b078782880161280a565b91505092959194509250565b6000612b1f8383612b43565b60208301905092915050565b6000612b3783836135af565b60208301905092915050565b612b4c81613d32565b82525050565b612b5b81613d32565b82525050565b612b72612b6d82613d32565b613e4e565b82525050565b6000612b8382613c13565b612b8d8185613c59565b9350612b9883613bf3565b8060005b83811015612bc9578151612bb08882612b13565b9750612bbb83613c3f565b925050600181019050612b9c565b5085935050505092915050565b6000612be182613c1e565b612beb8185613c6a565b9350612bf683613c03565b8060005b83811015612c27578151612c0e8882612b2b565b9750612c1983613c4c565b925050600181019050612bfa565b5085935050505092915050565b612c3d81613d44565b82525050565b612c4c81613d50565b82525050565b612c63612c5e82613d50565b613e60565b82525050565b6000612c7482613c29565b612c7e8185613c7b565b9350612c8e818560208601613da0565b612c9781613f13565b840191505092915050565b6000612cad82613c34565b612cb78185613c8c565b9350612cc7818560208601613da0565b612cd081613f13565b840191505092915050565b6000612ce8601883613c8c565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b6000612d28602383613c8c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8e602283613c8c565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612df4601f83613c8c565b91507f45434453413a20696e76616c6964207369676e6174757265206c656e677468006000830152602082019050919050565b6000612e34601c83613c9d565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000612e74602283613c8c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612eda602683613c8c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f40601183613c8c565b91507f436861696e4964206e6f7420666f756e640000000000000000000000000000006000830152602082019050919050565b6000612f80602283613c8c565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fe6601483613c8c565b91507f4c6f636b20696420616c726561647920757365640000000000000000000000006000830152602082019050919050565b6000613026602283613c8c565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308c602883613c8c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130f2601683613c8c565b91507f496e636f7272656374207369676e6174757265287329000000000000000000006000830152602082019050919050565b6000613132602083613c8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613172601583613c8c565b91507f436861696e496420616c726561647920616464656400000000000000000000006000830152602082019050919050565b60006131b2602183613c8c565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613218601383613c8c565b91507f436861696e4964206e6f7420616c6c6f776564000000000000000000000000006000830152602082019050919050565b6000613258604083613c8c565b91507f546865206e756d626572206f66207369676e61747572657320646f6573206e6f60008301527f74206d6174636820746865206e756d626572206f662076616c696461746f72736020830152604082019050919050565b60006132be602583613c8c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613324602483613c8c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061338a602783613c8c565b91507f54686520616d6f756e74206f6620746865206c6f636b206d757374206e6f742060008301527f6265207a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133f0601483613c8c565b91507f56616c696461746f7273206e6f742061646465640000000000000000000000006000830152602082019050919050565b6000613430602883613c8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f74207468652070656e646960008301527f6e67206f776e65720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613496602583613c8c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134fc601f83613c8c565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b600061353c601783613c8c565b91507f56616c696461746f7220616c72656164792061646465640000000000000000006000830152602082019050919050565b600061357c601383613c8c565b91507f56616c696461746f72206e6f7420666f756e64000000000000000000000000006000830152602082019050919050565b6135b881613d7a565b82525050565b6135c781613d7a565b82525050565b6135de6135d982613d7a565b613e7c565b82525050565b6135ed81613d84565b82525050565b60006135ff8288612b61565b60148201915061360f82876135cd565b60208201915061361f82866135cd565b60208201915061362f82856135cd565b60208201915061363f82846135cd565b6020820191508190509695505050505050565b600061365d82612e27565b91506136698284612c52565b60208201915081905092915050565b600060208201905061368d6000830184612b52565b92915050565b60006060820190506136a86000830186612b52565b6136b560208301856135be565b81810360408301526136c78184612c69565b9050949350505050565b600060208201905081810360008301526136eb8184612b78565b905092915050565b6000602082019050818103600083015261370d8184612bd6565b905092915050565b600060208201905061372a6000830184612c34565b92915050565b60006040820190506137456000830185612c34565b61375260208301846135be565b9392505050565b600060808201905061376e6000830187612c43565b61377b60208301866135e4565b6137886040830185612c43565b6137956060830184612c43565b95945050505050565b600060208201905081810360008301526137b88184612ca2565b905092915050565b600060208201905081810360008301526137d981612cdb565b9050919050565b600060208201905081810360008301526137f981612d1b565b9050919050565b6000602082019050818103600083015261381981612d81565b9050919050565b6000602082019050818103600083015261383981612de7565b9050919050565b6000602082019050818103600083015261385981612e67565b9050919050565b6000602082019050818103600083015261387981612ecd565b9050919050565b6000602082019050818103600083015261389981612f33565b9050919050565b600060208201905081810360008301526138b981612f73565b9050919050565b600060208201905081810360008301526138d981612fd9565b9050919050565b600060208201905081810360008301526138f981613019565b9050919050565b600060208201905081810360008301526139198161307f565b9050919050565b60006020820190508181036000830152613939816130e5565b9050919050565b6000602082019050818103600083015261395981613125565b9050919050565b6000602082019050818103600083015261397981613165565b9050919050565b60006020820190508181036000830152613999816131a5565b9050919050565b600060208201905081810360008301526139b98161320b565b9050919050565b600060208201905081810360008301526139d98161324b565b9050919050565b600060208201905081810360008301526139f9816132b1565b9050919050565b60006020820190508181036000830152613a1981613317565b9050919050565b60006020820190508181036000830152613a398161337d565b9050919050565b60006020820190508181036000830152613a59816133e3565b9050919050565b60006020820190508181036000830152613a7981613423565b9050919050565b60006020820190508181036000830152613a9981613489565b9050919050565b60006020820190508181036000830152613ab9816134ef565b9050919050565b60006020820190508181036000830152613ad98161352f565b9050919050565b60006020820190508181036000830152613af98161356f565b9050919050565b6000602082019050613b1560008301846135be565b92915050565b6000604082019050613b3060008301856135be565b8181036020830152613b428184612c69565b90509392505050565b6000602082019050613b6060008301846135e4565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613b8d57613b8c613ee4565b5b8060405250919050565b600067ffffffffffffffff821115613bb257613bb1613ee4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bde57613bdd613ee4565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cb382613d7a565b9150613cbe83613d7a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cf357613cf2613e86565b5b828201905092915050565b6000613d0982613d7a565b9150613d1483613d7a565b925082821015613d2757613d26613e86565b5b828203905092915050565b6000613d3d82613d5a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613dbe578082015181840152602081019050613da3565b83811115613dcd576000848401525b50505050565b60006002820490506001821680613deb57607f821691505b60208210811415613dff57613dfe613eb5565b5b50919050565b6000613e1082613d7a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e4357613e42613e86565b5b600182019050919050565b6000613e5982613e6a565b9050919050565b6000819050919050565b6000613e7582613f24565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b613f3a81613d32565b8114613f4557600080fd5b50565b613f5181613d50565b8114613f5c57600080fd5b50565b613f6881613d7a565b8114613f7357600080fd5b5056fea26469706673582212206131e3b19d4a498902dff661615a127f7d41a1f991169b25e889f7aa6e71a81d64736f6c634300080000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104368726f6e6f5465636820546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454494d4500000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80638f3f5c841161010f578063ace09eab116100a2578063dd62ed3e11610071578063dd62ed3e146105e0578063e30c397814610610578063e8cf95011461062e578063f2fde38b1461064c576101e5565b8063ace09eab1461055c578063aebc314514610578578063b390c0ab146105a8578063c5eeb8af146105c4576101e5565b80639a53b070116100de5780639a53b070146104c45780639a74695d146104e0578063a457c2d7146104fc578063a9059cbb1461052c576101e5565b80638f3f5c841461043957806395d89b411461045757806396fd59e8146104755780639a4526ed14610493576101e5565b80634000aea011610187578063582f1da211610156578063582f1da21461039f5780635a0f8830146103bb57806370a08231146103eb5780638da5cb5b1461041b576101e5565b80634000aea0146103045780634ded9331146103345780634e71e0c81461036457806357e60b3e1461036e576101e5565b806321d93090116101c357806321d930901461025657806323b872dd14610286578063313ce567146102b657806339509351146102d4576101e5565b806306fdde03146101ea578063095ea7b31461020857806318160ddd14610238575b600080fd5b6101f2610668565b6040516101ff919061379e565b60405180910390f35b610222600480360381019061021d919061293c565b6106fa565b60405161022f9190613715565b60405180910390f35b610240610718565b60405161024d9190613b00565b60405180910390f35b610270600480360381019061026b9190612a33565b610722565b60405161027d9190613b00565b60405180910390f35b6102a0600480360381019061029b91906128ed565b610746565b6040516102ad9190613715565b60405180910390f35b6102be61083e565b6040516102cb9190613b4b565b60405180910390f35b6102ee60048036038101906102e9919061293c565b610847565b6040516102fb9190613715565b60405180910390f35b61031e60048036038101906103199190612978565b6108f3565b60405161032b9190613715565b60405180910390f35b61034e60048036038101906103499190612a5c565b610993565b60405161035b9190613715565b60405180910390f35b61036c6109c2565b005b61038860048036038101906103839190612888565b610b83565b604051610396929190613730565b60405180910390f35b6103b960048036038101906103b49190612a33565b610c5c565b005b6103d560048036038101906103d091906129df565b610d54565b6040516103e29190613715565b60405180910390f35b61040560048036038101906104009190612888565b610fab565b6040516104129190613b00565b60405180910390f35b610423610ff3565b6040516104309190613678565b60405180910390f35b61044161101d565b60405161044e9190613b00565b60405180910390f35b61045f611023565b60405161046c919061379e565b60405180910390f35b61047d6110b5565b60405161048a91906136f3565b60405180910390f35b6104ad60048036038101906104a89190612a33565b61110d565b6040516104bb929190613730565b60405180910390f35b6104de60048036038101906104d99190612888565b61119a565b005b6104fa60048036038101906104f59190612a98565b6113df565b005b6105166004803603810190610511919061293c565b611580565b6040516105239190613715565b60405180910390f35b6105466004803603810190610541919061293c565b61166b565b6040516105539190613715565b60405180910390f35b61057660048036038101906105719190612888565b611689565b005b610592600480360381019061058d9190612a33565b6117bb565b60405161059f9190613678565b60405180910390f35b6105c260048036038101906105bd9190612a5c565b6117fa565b005b6105de60048036038101906105d99190612a33565b611912565b005b6105fa60048036038101906105f591906128b1565b611ade565b6040516106079190613b00565b60405180910390f35b610618611b65565b6040516106259190613678565b60405180910390f35b610636611b8f565b60405161064391906136d1565b60405180910390f35b61066660048036038101906106619190612888565b611c1d565b005b60606003805461067790613dd3565b80601f01602080910402602001604051908101604052809291908181526020018280546106a390613dd3565b80156106f05780601f106106c5576101008083540402835291602001916106f0565b820191906000526020600020905b8154815290600101906020018083116106d357829003601f168201915b5050505050905090565b600061070e610707611cdd565b8484611ce5565b6001905092915050565b6000600254905090565b6007818154811061073257600080fd5b906000526020600020016000915090505481565b6000610753848484611eb0565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061079e611cdd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081590613900565b60405180910390fd5b6108328561082a611cdd565b858403611ce5565b60019150509392505050565b60006008905090565b60006108e9610854611cdd565b848460016000610862611cdd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108e49190613ca8565b611ce5565b6001905092915050565b60006108ff848461166b565b508373ffffffffffffffffffffffffffffffffffffffff1661091f611cdd565b73ffffffffffffffffffffffffffffffffffffffff167fe19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c168585604051610966929190613b1b565b60405180910390a361097784612126565b1561098857610987848484612139565b5b600190509392505050565b600a6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6109ca611cdd565b73ffffffffffffffffffffffffffffffffffffffff166109e8611b65565b73ffffffffffffffffffffffffffffffffffffffff1614610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590613a60565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3565b60008060005b600880549050811015610c4e578373ffffffffffffffffffffffffffffffffffffffff1660088281548110610be7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c3b576001819250925050610c57565b8080610c4690613e05565b915050610b89565b50600080915091505b915091565b610c64611cdd565b73ffffffffffffffffffffffffffffffffffffffff16610c82610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613940565b60405180910390fd5b6000610ce38261110d565b5090508015610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613960565b60405180910390fd5b60078290806001815401808255809150506001900390600052602060002001600090919091909150555050565b60008060088054905011610d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9490613a40565b60405180910390fd5b600880549050825114610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc906139c0565b60405180910390fd5b600060088054905067ffffffffffffffff811115610e2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610e5a5781602001602082028036833780820191505090505b50905060005b8351811015610f9e576000610ec6858381518110610ea7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610eb8886121ba565b6121ea90919063ffffffff16565b9050600080610ed483610b83565b91509150818015610f235750848181518110610f19577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151155b15610f7a576001858281518110610f63577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019015159081151581525050610f88565b600095505050505050610fa5565b5050508080610f9690613e05565b915050610e60565b5060019150505b92915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b60606004805461103290613dd3565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613dd3565b80156110ab5780601f10611080576101008083540402835291602001916110ab565b820191906000526020600020905b81548152906001019060200180831161108e57829003601f168201915b5050505050905090565b6060600780548060200260200160405190810160405280929190818152602001828054801561110357602002820191906000526020600020905b8154815260200190600101908083116110ef575b5050505050905090565b60008060005b60078054905081101561118c57836007828154811061115b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001541415611179576001819250925050611195565b808061118490613e05565b915050611113565b50600080915091505b915091565b6111a2611cdd565b73ffffffffffffffffffffffffffffffffffffffff166111c0610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90613940565b60405180910390fd5b60008061122283610b83565b9150915081611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613ae0565b60405180910390fd5b6001600880549050111561136d57600860016008805490506112889190613cfe565b815481106112bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611324577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60088054806113a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055505050565b600a6000858152602001908152602001600020600084815260200190815260200160002060009054906101000a900460ff1615611451576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611448906138c0565b60405180910390fd5b600061145b611cdd565b854686866040516020016114739594939291906135f3565b6040516020818303038152906040528051906020012090506114958183610d54565b6114d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cb90613920565b60405180910390fd5b6001600a6000878152602001908152602001600020600086815260200190815260200160002060006101000a81548160ff02191690831515021790555061152261151c611cdd565b846122b4565b838561152c611cdd565b73ffffffffffffffffffffffffffffffffffffffff167f5a3358a3d27a5373c0df2604662088d37894d56b7cfd27f315770440f4e0d919866040516115719190613b00565b60405180910390a45050505050565b6000806001600061158f611cdd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390613a80565b60405180910390fd5b611660611657611cdd565b85858403611ce5565b600191505092915050565b600061167f611678611cdd565b8484611eb0565b6001905092915050565b611691611cdd565b73ffffffffffffffffffffffffffffffffffffffff166116af610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614611705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fc90613940565b60405180910390fd5b600061171082610b83565b5090508015611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613ac0565b60405180910390fd5b6008829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600881815481106117cb57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000811161183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490613a20565b60405180910390fd5b60006118488361110d565b5090508061188b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611882906139a0565b60405180910390fd5b61189c611896611cdd565b83612408565b600960008154809291906118af90613e05565b9190505550600954836118c0611cdd565b73ffffffffffffffffffffffffffffffffffffffff167f4c60206a5c1de41f3376d1d60f0949d96cb682033c90b1c2d9d9a62d4c4120c0856040516119059190613b00565b60405180910390a4505050565b61191a611cdd565b73ffffffffffffffffffffffffffffffffffffffff16611938610ff3565b73ffffffffffffffffffffffffffffffffffffffff161461198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198590613940565b60405180910390fd5b60008061199a8361110d565b91509150816119de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d590613880565b60405180910390fd5b60016007805490501115611a8b5760076001600780549050611a009190613cfe565b81548110611a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015460078281548110611a7c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055505b6007805480611ac3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606008805480602002602001604051908101604052809291908181526020018280548015611c1357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611bc9575b5050505050905090565b611c25611cdd565b73ffffffffffffffffffffffffffffffffffffffff16611c43610ff3565b73ffffffffffffffffffffffffffffffffffffffff1614611c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9090613940565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4c90613a00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90613840565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ea39190613b00565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f17906139e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f87906137e0565b60405180910390fd5b611f9b8383836125ca565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890613860565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b49190613ca8565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121189190613b00565b60405180910390a350505050565b600080823b905060008111915050919050565b60008390508073ffffffffffffffffffffffffffffffffffffffff1663a4c0ed36612162611cdd565b85856040518463ffffffff1660e01b815260040161218293929190613693565b600060405180830381600087803b15801561219c57600080fd5b505af11580156121b0573d6000803e3d6000fd5b5050505050505050565b6000816040516020016121cd9190613652565b604051602081830303815290604052805190602001209050919050565b600080600080604185511415612217576020850151925060408501519150606085015160001a905061229d565b604085511415612261576040850151602086015193507f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81169250601b8160ff1c0191505061229c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229390613820565b60405180910390fd5b5b6122a9868285856125cf565b935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613aa0565b60405180910390fd5b612330600083836125ca565b80600260008282546123429190613ca8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123979190613ca8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123fc9190613b00565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f90613980565b60405180910390fd5b612484826000836125ca565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250190613800565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125bd9190613b00565b60405180910390a3505050565b505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115612637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262e906138a0565b60405180910390fd5b601b8460ff16148061264c5750601c8460ff16145b61268b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612682906138e0565b60405180910390fd5b6000600186868686604051600081526020016040526040516126b09493929190613759565b6020604051602081039080840390855afa1580156126d2573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561274e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612745906137c0565b60405180910390fd5b80915050949350505050565b600061276d61276884613b97565b613b66565b9050808382526020820190508260005b858110156127ad57813585016127938882612849565b84526020840193506020830192505060018101905061277d565b5050509392505050565b60006127ca6127c584613bc3565b613b66565b9050828152602081018484840111156127e257600080fd5b6127ed848285613d91565b509392505050565b60008135905061280481613f31565b92915050565b600082601f83011261281b57600080fd5b813561282b84826020860161275a565b91505092915050565b60008135905061284381613f48565b92915050565b600082601f83011261285a57600080fd5b813561286a8482602086016127b7565b91505092915050565b60008135905061288281613f5f565b92915050565b60006020828403121561289a57600080fd5b60006128a8848285016127f5565b91505092915050565b600080604083850312156128c457600080fd5b60006128d2858286016127f5565b92505060206128e3858286016127f5565b9150509250929050565b60008060006060848603121561290257600080fd5b6000612910868287016127f5565b9350506020612921868287016127f5565b925050604061293286828701612873565b9150509250925092565b6000806040838503121561294f57600080fd5b600061295d858286016127f5565b925050602061296e85828601612873565b9150509250929050565b60008060006060848603121561298d57600080fd5b600061299b868287016127f5565b93505060206129ac86828701612873565b925050604084013567ffffffffffffffff8111156129c957600080fd5b6129d586828701612849565b9150509250925092565b600080604083850312156129f257600080fd5b6000612a0085828601612834565b925050602083013567ffffffffffffffff811115612a1d57600080fd5b612a298582860161280a565b9150509250929050565b600060208284031215612a4557600080fd5b6000612a5384828501612873565b91505092915050565b60008060408385031215612a6f57600080fd5b6000612a7d85828601612873565b9250506020612a8e85828601612873565b9150509250929050565b60008060008060808587031215612aae57600080fd5b6000612abc87828801612873565b9450506020612acd87828801612873565b9350506040612ade87828801612873565b925050606085013567ffffffffffffffff811115612afb57600080fd5b612b078782880161280a565b91505092959194509250565b6000612b1f8383612b43565b60208301905092915050565b6000612b3783836135af565b60208301905092915050565b612b4c81613d32565b82525050565b612b5b81613d32565b82525050565b612b72612b6d82613d32565b613e4e565b82525050565b6000612b8382613c13565b612b8d8185613c59565b9350612b9883613bf3565b8060005b83811015612bc9578151612bb08882612b13565b9750612bbb83613c3f565b925050600181019050612b9c565b5085935050505092915050565b6000612be182613c1e565b612beb8185613c6a565b9350612bf683613c03565b8060005b83811015612c27578151612c0e8882612b2b565b9750612c1983613c4c565b925050600181019050612bfa565b5085935050505092915050565b612c3d81613d44565b82525050565b612c4c81613d50565b82525050565b612c63612c5e82613d50565b613e60565b82525050565b6000612c7482613c29565b612c7e8185613c7b565b9350612c8e818560208601613da0565b612c9781613f13565b840191505092915050565b6000612cad82613c34565b612cb78185613c8c565b9350612cc7818560208601613da0565b612cd081613f13565b840191505092915050565b6000612ce8601883613c8c565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b6000612d28602383613c8c565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8e602283613c8c565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612df4601f83613c8c565b91507f45434453413a20696e76616c6964207369676e6174757265206c656e677468006000830152602082019050919050565b6000612e34601c83613c9d565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000612e74602283613c8c565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612eda602683613c8c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f40601183613c8c565b91507f436861696e4964206e6f7420666f756e640000000000000000000000000000006000830152602082019050919050565b6000612f80602283613c8c565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612fe6601483613c8c565b91507f4c6f636b20696420616c726561647920757365640000000000000000000000006000830152602082019050919050565b6000613026602283613c8c565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308c602883613c8c565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206160008301527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020830152604082019050919050565b60006130f2601683613c8c565b91507f496e636f7272656374207369676e6174757265287329000000000000000000006000830152602082019050919050565b6000613132602083613c8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613172601583613c8c565b91507f436861696e496420616c726561647920616464656400000000000000000000006000830152602082019050919050565b60006131b2602183613c8c565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613218601383613c8c565b91507f436861696e4964206e6f7420616c6c6f776564000000000000000000000000006000830152602082019050919050565b6000613258604083613c8c565b91507f546865206e756d626572206f66207369676e61747572657320646f6573206e6f60008301527f74206d6174636820746865206e756d626572206f662076616c696461746f72736020830152604082019050919050565b60006132be602583613c8c565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613324602483613c8c565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061338a602783613c8c565b91507f54686520616d6f756e74206f6620746865206c6f636b206d757374206e6f742060008301527f6265207a65726f000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006133f0601483613c8c565b91507f56616c696461746f7273206e6f742061646465640000000000000000000000006000830152602082019050919050565b6000613430602883613c8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f74207468652070656e646960008301527f6e67206f776e65720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613496602583613c8c565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134fc601f83613c8c565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b600061353c601783613c8c565b91507f56616c696461746f7220616c72656164792061646465640000000000000000006000830152602082019050919050565b600061357c601383613c8c565b91507f56616c696461746f72206e6f7420666f756e64000000000000000000000000006000830152602082019050919050565b6135b881613d7a565b82525050565b6135c781613d7a565b82525050565b6135de6135d982613d7a565b613e7c565b82525050565b6135ed81613d84565b82525050565b60006135ff8288612b61565b60148201915061360f82876135cd565b60208201915061361f82866135cd565b60208201915061362f82856135cd565b60208201915061363f82846135cd565b6020820191508190509695505050505050565b600061365d82612e27565b91506136698284612c52565b60208201915081905092915050565b600060208201905061368d6000830184612b52565b92915050565b60006060820190506136a86000830186612b52565b6136b560208301856135be565b81810360408301526136c78184612c69565b9050949350505050565b600060208201905081810360008301526136eb8184612b78565b905092915050565b6000602082019050818103600083015261370d8184612bd6565b905092915050565b600060208201905061372a6000830184612c34565b92915050565b60006040820190506137456000830185612c34565b61375260208301846135be565b9392505050565b600060808201905061376e6000830187612c43565b61377b60208301866135e4565b6137886040830185612c43565b6137956060830184612c43565b95945050505050565b600060208201905081810360008301526137b88184612ca2565b905092915050565b600060208201905081810360008301526137d981612cdb565b9050919050565b600060208201905081810360008301526137f981612d1b565b9050919050565b6000602082019050818103600083015261381981612d81565b9050919050565b6000602082019050818103600083015261383981612de7565b9050919050565b6000602082019050818103600083015261385981612e67565b9050919050565b6000602082019050818103600083015261387981612ecd565b9050919050565b6000602082019050818103600083015261389981612f33565b9050919050565b600060208201905081810360008301526138b981612f73565b9050919050565b600060208201905081810360008301526138d981612fd9565b9050919050565b600060208201905081810360008301526138f981613019565b9050919050565b600060208201905081810360008301526139198161307f565b9050919050565b60006020820190508181036000830152613939816130e5565b9050919050565b6000602082019050818103600083015261395981613125565b9050919050565b6000602082019050818103600083015261397981613165565b9050919050565b60006020820190508181036000830152613999816131a5565b9050919050565b600060208201905081810360008301526139b98161320b565b9050919050565b600060208201905081810360008301526139d98161324b565b9050919050565b600060208201905081810360008301526139f9816132b1565b9050919050565b60006020820190508181036000830152613a1981613317565b9050919050565b60006020820190508181036000830152613a398161337d565b9050919050565b60006020820190508181036000830152613a59816133e3565b9050919050565b60006020820190508181036000830152613a7981613423565b9050919050565b60006020820190508181036000830152613a9981613489565b9050919050565b60006020820190508181036000830152613ab9816134ef565b9050919050565b60006020820190508181036000830152613ad98161352f565b9050919050565b60006020820190508181036000830152613af98161356f565b9050919050565b6000602082019050613b1560008301846135be565b92915050565b6000604082019050613b3060008301856135be565b8181036020830152613b428184612c69565b90509392505050565b6000602082019050613b6060008301846135e4565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613b8d57613b8c613ee4565b5b8060405250919050565b600067ffffffffffffffff821115613bb257613bb1613ee4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bde57613bdd613ee4565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613cb382613d7a565b9150613cbe83613d7a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613cf357613cf2613e86565b5b828201905092915050565b6000613d0982613d7a565b9150613d1483613d7a565b925082821015613d2757613d26613e86565b5b828203905092915050565b6000613d3d82613d5a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613dbe578082015181840152602081019050613da3565b83811115613dcd576000848401525b50505050565b60006002820490506001821680613deb57607f821691505b60208210811415613dff57613dfe613eb5565b5b50919050565b6000613e1082613d7a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e4357613e42613e86565b5b600182019050919050565b6000613e5982613e6a565b9050919050565b6000819050919050565b6000613e7582613f24565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b613f3a81613d32565b8114613f4557600080fd5b50565b613f5181613d50565b8114613f5c57600080fd5b50565b613f6881613d7a565b8114613f7357600080fd5b5056fea26469706673582212206131e3b19d4a498902dff661615a127f7d41a1f991169b25e889f7aa6e71a81d64736f6c63430008000033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000104368726f6e6f5465636820546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000454494d4500000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : tokenName (string): ChronoTech Token
Arg [1] : tokenSymbol (string): TIME

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [3] : 4368726f6e6f5465636820546f6b656e00000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [5] : 54494d4500000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

185:2169:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:98:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4178:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3169:106;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;196:25:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4811:427:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3019:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5581:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1627:321:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;497:64;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1900:185:5;;;:::i;:::-;;968:303:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;228:197:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1277:825:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3333:125:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1103:77:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;466:25:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:102:2;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;743:98:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;847:281;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;477:365:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;692:555:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6200:349:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3661:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;242:229:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;202:33;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1253:368:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;431:306:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3891:149:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1254:91:5;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;848:114:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1789:105:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2082:98:2;2136:13;2168:5;2161:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:98;:::o;4178:166::-;4261:4;4277:39;4286:12;:10;:12::i;:::-;4300:7;4309:6;4277:8;:39::i;:::-;4333:4;4326:11;;4178:166;;;;:::o;3169:106::-;3230:7;3256:12;;3249:19;;3169:106;:::o;196:25:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4811:427:2:-;4917:4;4933:36;4943:6;4951:9;4962:6;4933:9;:36::i;:::-;4980:24;5007:11;:19;5019:6;5007:19;;;;;;;;;;;;;;;:33;5027:12;:10;:12::i;:::-;5007:33;;;;;;;;;;;;;;;;4980:60;;5078:6;5058:16;:26;;5050:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5159:57;5168:6;5176:12;:10;:12::i;:::-;5209:6;5190:16;:25;5159:8;:57::i;:::-;5231:4;5224:11;;;4811:427;;;;;:::o;3019:90::-;3077:5;3101:1;3094:8;;3019:90;:::o;5581:192::-;5669:4;5677:80;5686:12;:10;:12::i;:::-;5700:7;5746:10;5709:11;:25;5721:12;:10;:12::i;:::-;5709:25;;;;;;;;;;;;;;;:34;5735:7;5709:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5677:8;:80::i;:::-;5766:4;5759:11;;5581:192;;;;:::o;1627:321:0:-;1723:12;1751:21;1760:3;1765:6;1751:8;:21::i;:::-;;1810:3;1787:42;;1796:12;:10;:12::i;:::-;1787:42;;;1815:6;1823:5;1787:42;;;;;;;:::i;:::-;;;;;;;;1843:15;1854:3;1843:10;:15::i;:::-;1839:82;;;1874:36;1891:3;1896:6;1904:5;1874:16;:36::i;:::-;1839:82;1937:4;1930:11;;1627:321;;;;;:::o;497:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1900:185:5:-;1708:12;:10;:12::i;:::-;1690:30;;:14;:12;:14::i;:::-;:30;;;1682:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;1971:13:::1;;;;;;;;;;;1962:6;;:22;;;;;;;;;;;;;;;;;;2018:1;1994:13;;:26;;;;;;;;;;;;;;;;;;2064:13;;;;;;;;;;;2035:43;;2056:6;;;;;;;;;;;2035:43;;;;;;;;;;;;1900:185::o:0;968:303:4:-;1041:10;1053;1080:6;1075:163;1096:16;:23;;;;1092:1;:27;1075:163;;;1167:10;1144:33;;:16;1161:1;1144:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;1140:88;;;1205:4;1211:1;1197:16;;;;;;;1140:88;1121:3;;;;;:::i;:::-;;;;1075:163;;;;1255:5;1262:1;1247:17;;;;968:303;;;;:::o;228:197:1:-;1483:12:5;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;296:10:1::1;311:24;326:8;311:14;:24::i;:::-;295:40;;;354:5;353:6;345:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;395:8;409;395:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1542:1:5;228:197:1::0;:::o;1277:825:4:-;1373:4;1423:1;1397:16;:23;;;;:27;1389:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;1489:16;:23;;;;1467:11;:18;:45;1459:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;1591:30;1635:16;:23;;;;1624:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1591:68;;1674:6;1669:406;1690:11;:18;1686:1;:22;1669:406;;;1729:24;1756:61;1802:11;1814:1;1802:14;;;;;;;;;;;;;;;;;;;;;;1756:37;:12;:35;:37::i;:::-;:45;;:61;;;;:::i;:::-;1729:88;;1832:10;1844;1858:40;1881:16;1858:22;:40::i;:::-;1831:67;;;;1916:5;:33;;;;;1926:16;1943:5;1926:23;;;;;;;;;;;;;;;;;;;;;;1925:24;1916:33;1912:153;;;1995:4;1969:16;1986:5;1969:23;;;;;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;1912:153;;;2045:5;2038:12;;;;;;;;;1912:153;1669:406;;;1710:3;;;;;:::i;:::-;;;;1669:406;;;;2091:4;2084:11;;;1277:825;;;;;:::o;3333:125:2:-;3407:7;3433:9;:18;3443:7;3433:18;;;;;;;;;;;;;;;;3426:25;;3333:125;;;:::o;1103:77:5:-;1141:7;1167:6;;;;;;;;;;;1160:13;;1103:77;:::o;466:25:0:-;;;;:::o;2293:102:2:-;2349:13;2381:7;2374:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:102;:::o;743:98:1:-;791:16;826:8;819:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;743:98;:::o;847:281::-;910:10;922:13;952:9;947:148;971:8;:15;;;;967:1;:19;947:148;;;1026:8;1011;1020:1;1011:11;;;;;;;;;;;;;;;;;;;;;;;;:23;1007:78;;;1062:4;1068:1;1054:16;;;;;;;1007:78;988:3;;;;;:::i;:::-;;;;947:148;;;;1112:5;1119:1;1104:17;;;;847:281;;;;:::o;477:365:4:-;1483:12:5;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;558:10:4::1;570::::0;584:34:::1;607:10;584:22;:34::i;:::-;557:61;;;;636:5;628:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;705:1;679:16;:23;;;;:27;675:129;;;748:16;791:1;765:16;:23;;;;:27;;;;:::i;:::-;748:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;722:16;739:5;722:23;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;675:129;813:16;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1542:1:5;;477:365:4::0;:::o;692:555:0:-;819:11;:25;831:12;819:25;;;;;;;;;;;:34;845:7;819:34;;;;;;;;;;;;;;;;;;;;;818:35;810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;888:19;937:12;:10;:12::i;:::-;951;965:13;980:7;989;920:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;910:88;;;;;;888:110;;1016:41;1032:11;1045;1016:15;:41::i;:::-;1008:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;1131:4;1094:11;:25;1106:12;1094:25;;;;;;;;;;;:34;1120:7;1094:34;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;1145:28;1151:12;:10;:12::i;:::-;1165:7;1145:5;:28::i;:::-;1223:7;1209:12;1195;:10;:12::i;:::-;1188:52;;;1232:7;1188:52;;;;;;:::i;:::-;;;;;;;;692:555;;;;;:::o;6200:349:2:-;6293:4;6301:24;6328:11;:25;6340:12;:10;:12::i;:::-;6328:25;;;;;;;;;;;;;;;:34;6354:7;6328:34;;;;;;;;;;;;;;;;6301:61;;6392:15;6372:16;:35;;6364:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6463:67;6472:12;:10;:12::i;:::-;6486:7;6514:15;6495:16;:34;6463:8;:67::i;:::-;6542:4;6535:11;;;6200:349;;;;:::o;3661:172::-;3747:4;3763:42;3773:12;:10;:12::i;:::-;3787:9;3798:6;3763:9;:42::i;:::-;3822:4;3815:11;;3661:172;;;;:::o;242:229:4:-;1483:12:5;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;320:10:4::1;335:34;358:10;335:22;:34::i;:::-;319:50;;;388:5;387:6;379:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;431:16;453:10;431:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1542:1:5;242:229:4::0;:::o;202:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1253:368:0:-;1342:1;1332:7;:11;1324:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1398:10;1413:26;1428:10;1413:14;:26::i;:::-;1397:42;;;1457:5;1449:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;1496:28;1502:12;:10;:12::i;:::-;1516:7;1496:5;:28::i;:::-;1534:10;;:12;;;;;;;;;:::i;:::-;;;;;;1594:10;;1582;1568:12;:10;:12::i;:::-;1561:53;;;1606:7;1561:53;;;;;;:::i;:::-;;;;;;;;1253:368;;;:::o;431:306:1:-;1483:12:5;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;502:10:1::1;514:13:::0;531:24:::1;546:8;531:14;:24::i;:::-;501:54;;;;573:5;565:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;632:1;614:8;:15;;;;:19;610:97;;;667:8;694:1;676:8;:15;;;;:19;;;;:::i;:::-;667:29;;;;;;;;;;;;;;;;;;;;;;;;649:8;658:5;649:15;;;;;;;;;;;;;;;;;;;;;;;:47;;;;610:97;716:8;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1542:1:5;;431:306:1::0;:::o;3891:149:2:-;3980:7;4006:11;:18;4018:5;4006:18;;;;;;;;;;;;;;;:27;4025:7;4006:27;;;;;;;;;;;;;;;;3999:34;;3891:149;;;;:::o;1254:91:5:-;1299:7;1325:13;;;;;;;;;;;1318:20;;1254:91;:::o;848:114:4:-;904:16;939;932:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;848:114;:::o;1789:105:5:-;1483:12;:10;:12::i;:::-;1472:23;;:7;:5;:7::i;:::-;:23;;;1464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1879:8:::1;1863:13;;:24;;;;;;;;;;;;;;;;;;1789:105:::0;:::o;586:96:10:-;639:7;665:10;658:17;;586:96;:::o;9099:304:2:-;9209:1;9192:19;;:5;:19;;;;9184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9281:1;9262:21;;:7;:21;;;;9254:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9355:6;9325:11;:18;9337:5;9325:18;;;;;;;;;;;;;;;:27;9344:7;9325:27;;;;;;;;;;;;;;;:36;;;;9384:7;9368:32;;9377:5;9368:32;;;9393:6;9368:32;;;;;;:::i;:::-;;;;;;;;9099:304;;;:::o;6963:538::-;7078:1;7060:20;;:6;:20;;;;7052:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7153:1;7132:23;;:9;:23;;;;7124:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7198:47;7219:6;7227:9;7238:6;7198:20;:47::i;:::-;7248:21;7272:9;:17;7282:6;7272:17;;;;;;;;;;;;;;;;7248:41;;7316:6;7299:13;:23;;7291:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7415:6;7399:13;:22;7379:9;:17;7389:6;7379:17;;;;;;;;;;;;;;;:42;;;;7449:6;7425:9;:20;7435:9;7425:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7480:9;7463:35;;7472:6;7463:35;;;7491:6;7463:35;;;;;;:::i;:::-;;;;;;;;6963:538;;;;:::o;2171:180:0:-;2228:12;2256:11;2310:5;2298:18;2288:28;;2343:1;2334:6;:10;2327:17;;;2171:180;;;:::o;1954:211::-;2048:24;2091:3;2048:47;;2105:8;:24;;;2130:12;:10;:12::i;:::-;2144:6;2152:5;2105:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1954:211;;;;:::o;4360:265:11:-;4429:7;4612:4;4559:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;4549:69;;;;;;4542:76;;4360:265;;;:::o;1064:1459::-;1142:7;1217:9;1236;1255:7;1490:2;1470:9;:16;:22;1466:1011;;;1752:4;1741:9;1737:20;1731:27;1726:32;;1801:4;1790:9;1786:20;1780:27;1775:32;;1858:4;1847:9;1843:20;1837:27;1834:1;1829:36;1824:41;;1708:171;;;1919:2;1899:9;:16;:22;1895:582;;;2186:4;2175:9;2171:20;2165:27;2235:4;2224:9;2220:20;2214:27;2209:32;;2271:66;2267:2;2263:75;2258:80;;2378:2;2373;2368:3;2364:12;2360:21;2355:26;;2137:258;;;;2425:41;;;;;;;;;;:::i;:::-;;;;;;;;1895:582;1466:1011;2494:22;2502:4;2508:1;2511;2514;2494:7;:22::i;:::-;2487:29;;;;;1064:1459;;;;:::o;7737:286:2:-;7831:1;7812:21;;:7;:21;;;;7804:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7872:49;7901:1;7905:7;7914:6;7872:20;:49::i;:::-;7940:6;7924:12;;:22;;;;;;;:::i;:::-;;;;;;;;7970:6;7948:9;:18;7958:7;7948:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;8004:7;7983:37;;8000:1;7983:37;;;8013:6;7983:37;;;;;;:::i;:::-;;;;;;;;7737:286;;:::o;8295:437::-;8389:1;8370:21;;:7;:21;;;;8362:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8432:49;8453:7;8470:1;8474:6;8432:20;:49::i;:::-;8484:22;8509:9;:18;8519:7;8509:18;;;;;;;;;;;;;;;;8484:43;;8555:6;8537:14;:24;;8529:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8652:6;8635:14;:23;8614:9;:18;8624:7;8614:18;;;;;;;;;;;;;;;:44;;;;8676:6;8660:12;;:22;;;;;;;;;;;8718:1;8692:37;;8701:7;8692:37;;;8722:6;8692:37;;;;;;:::i;:::-;;;;;;;;8295:437;;;:::o;9930:91::-;;;;:::o;2656:1414:11:-;2741:7;3656:66;3650:1;3642:10;;:80;;3634:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;3784:2;3779:1;:7;;;:18;;;;3795:2;3790:1;:7;;;3779:18;3771:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;3931:14;3948:24;3958:4;3964:1;3967;3970;3948:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3931:41;;4008:1;3990:20;;:6;:20;;;;3982:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4057:6;4050:13;;;2656:1414;;;;;;:::o;22:612:12:-;;152:89;167:73;233:6;167:73;:::i;:::-;152:89;:::i;:::-;143:98;;261:5;289:6;282:5;275:21;315:4;308:5;304:16;297:23;;340:6;371:1;356:272;381:6;378:1;375:13;356:272;;;473:3;460:17;452:6;448:30;503:46;545:3;533:10;503:46;:::i;:::-;498:3;491:59;579:4;574:3;570:14;563:21;;613:4;608:3;604:14;597:21;;416:212;403:1;400;396:9;391:14;;356:272;;;360:14;133:501;;;;;;;:::o;640:342::-;;742:64;757:48;798:6;757:48;:::i;:::-;742:64;:::i;:::-;733:73;;829:6;822:5;815:21;867:4;860:5;856:16;905:3;896:6;891:3;887:16;884:25;881:2;;;922:1;919;912:12;881:2;935:41;969:6;964:3;959;935:41;:::i;:::-;723:259;;;;;;:::o;988:139::-;;1072:6;1059:20;1050:29;;1088:33;1115:5;1088:33;:::i;:::-;1040:87;;;;:::o;1148:321::-;;1277:3;1270:4;1262:6;1258:17;1254:27;1244:2;;1295:1;1292;1285:12;1244:2;1335:6;1322:20;1360:103;1459:3;1451:6;1444:4;1436:6;1432:17;1360:103;:::i;:::-;1351:112;;1234:235;;;;;:::o;1475:139::-;;1559:6;1546:20;1537:29;;1575:33;1602:5;1575:33;:::i;:::-;1527:87;;;;:::o;1633:271::-;;1737:3;1730:4;1722:6;1718:17;1714:27;1704:2;;1755:1;1752;1745:12;1704:2;1795:6;1782:20;1820:78;1894:3;1886:6;1879:4;1871:6;1867:17;1820:78;:::i;:::-;1811:87;;1694:210;;;;;:::o;1910:139::-;;1994:6;1981:20;1972:29;;2010:33;2037:5;2010:33;:::i;:::-;1962:87;;;;:::o;2055:262::-;;2163:2;2151:9;2142:7;2138:23;2134:32;2131:2;;;2179:1;2176;2169:12;2131:2;2222:1;2247:53;2292:7;2283:6;2272:9;2268:22;2247:53;:::i;:::-;2237:63;;2193:117;2121:196;;;;:::o;2323:407::-;;;2448:2;2436:9;2427:7;2423:23;2419:32;2416:2;;;2464:1;2461;2454:12;2416:2;2507:1;2532:53;2577:7;2568:6;2557:9;2553:22;2532:53;:::i;:::-;2522:63;;2478:117;2634:2;2660:53;2705:7;2696:6;2685:9;2681:22;2660:53;:::i;:::-;2650:63;;2605:118;2406:324;;;;;:::o;2736:552::-;;;;2878:2;2866:9;2857:7;2853:23;2849:32;2846:2;;;2894:1;2891;2884:12;2846:2;2937:1;2962:53;3007:7;2998:6;2987:9;2983:22;2962:53;:::i;:::-;2952:63;;2908:117;3064:2;3090:53;3135:7;3126:6;3115:9;3111:22;3090:53;:::i;:::-;3080:63;;3035:118;3192:2;3218:53;3263:7;3254:6;3243:9;3239:22;3218:53;:::i;:::-;3208:63;;3163:118;2836:452;;;;;:::o;3294:407::-;;;3419:2;3407:9;3398:7;3394:23;3390:32;3387:2;;;3435:1;3432;3425:12;3387:2;3478:1;3503:53;3548:7;3539:6;3528:9;3524:22;3503:53;:::i;:::-;3493:63;;3449:117;3605:2;3631:53;3676:7;3667:6;3656:9;3652:22;3631:53;:::i;:::-;3621:63;;3576:118;3377:324;;;;;:::o;3707:663::-;;;;3858:2;3846:9;3837:7;3833:23;3829:32;3826:2;;;3874:1;3871;3864:12;3826:2;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4015:118;4200:2;4189:9;4185:18;4172:32;4231:18;4223:6;4220:30;4217:2;;;4263:1;4260;4253:12;4217:2;4291:62;4345:7;4336:6;4325:9;4321:22;4291:62;:::i;:::-;4281:72;;4143:220;3816:554;;;;;:::o;4376:568::-;;;4535:2;4523:9;4514:7;4510:23;4506:32;4503:2;;;4551:1;4548;4541:12;4503:2;4594:1;4619:53;4664:7;4655:6;4644:9;4640:22;4619:53;:::i;:::-;4609:63;;4565:117;4749:2;4738:9;4734:18;4721:32;4780:18;4772:6;4769:30;4766:2;;;4812:1;4809;4802:12;4766:2;4840:87;4919:7;4910:6;4899:9;4895:22;4840:87;:::i;:::-;4830:97;;4692:245;4493:451;;;;;:::o;4950:262::-;;5058:2;5046:9;5037:7;5033:23;5029:32;5026:2;;;5074:1;5071;5064:12;5026:2;5117:1;5142:53;5187:7;5178:6;5167:9;5163:22;5142:53;:::i;:::-;5132:63;;5088:117;5016:196;;;;:::o;5218:407::-;;;5343:2;5331:9;5322:7;5318:23;5314:32;5311:2;;;5359:1;5356;5349:12;5311:2;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5529:2;5555:53;5600:7;5591:6;5580:9;5576:22;5555:53;:::i;:::-;5545:63;;5500:118;5301:324;;;;;:::o;5631:859::-;;;;;5824:3;5812:9;5803:7;5799:23;5795:33;5792:2;;;5841:1;5838;5831:12;5792:2;5884:1;5909:53;5954:7;5945:6;5934:9;5930:22;5909:53;:::i;:::-;5899:63;;5855:117;6011:2;6037:53;6082:7;6073:6;6062:9;6058:22;6037:53;:::i;:::-;6027:63;;5982:118;6139:2;6165:53;6210:7;6201:6;6190:9;6186:22;6165:53;:::i;:::-;6155:63;;6110:118;6295:2;6284:9;6280:18;6267:32;6326:18;6318:6;6315:30;6312:2;;;6358:1;6355;6348:12;6312:2;6386:87;6465:7;6456:6;6445:9;6441:22;6386:87;:::i;:::-;6376:97;;6238:245;5782:708;;;;;;;:::o;6496:179::-;;6586:46;6628:3;6620:6;6586:46;:::i;:::-;6664:4;6659:3;6655:14;6641:28;;6576:99;;;;:::o;6681:179::-;;6771:46;6813:3;6805:6;6771:46;:::i;:::-;6849:4;6844:3;6840:14;6826:28;;6761:99;;;;:::o;6866:108::-;6943:24;6961:5;6943:24;:::i;:::-;6938:3;6931:37;6921:53;;:::o;6980:118::-;7067:24;7085:5;7067:24;:::i;:::-;7062:3;7055:37;7045:53;;:::o;7104:157::-;7209:45;7229:24;7247:5;7229:24;:::i;:::-;7209:45;:::i;:::-;7204:3;7197:58;7187:74;;:::o;7297:732::-;;7445:54;7493:5;7445:54;:::i;:::-;7515:86;7594:6;7589:3;7515:86;:::i;:::-;7508:93;;7625:56;7675:5;7625:56;:::i;:::-;7704:7;7735:1;7720:284;7745:6;7742:1;7739:13;7720:284;;;7821:6;7815:13;7848:63;7907:3;7892:13;7848:63;:::i;:::-;7841:70;;7934:60;7987:6;7934:60;:::i;:::-;7924:70;;7780:224;7767:1;7764;7760:9;7755:14;;7720:284;;;7724:14;8020:3;8013:10;;7421:608;;;;;;;:::o;8065:732::-;;8213:54;8261:5;8213:54;:::i;:::-;8283:86;8362:6;8357:3;8283:86;:::i;:::-;8276:93;;8393:56;8443:5;8393:56;:::i;:::-;8472:7;8503:1;8488:284;8513:6;8510:1;8507:13;8488:284;;;8589:6;8583:13;8616:63;8675:3;8660:13;8616:63;:::i;:::-;8609:70;;8702:60;8755:6;8702:60;:::i;:::-;8692:70;;8548:224;8535:1;8532;8528:9;8523:14;;8488:284;;;8492:14;8788:3;8781:10;;8189:608;;;;;;;:::o;8803:109::-;8884:21;8899:5;8884:21;:::i;:::-;8879:3;8872:34;8862:50;;:::o;8918:118::-;9005:24;9023:5;9005:24;:::i;:::-;9000:3;8993:37;8983:53;;:::o;9042:157::-;9147:45;9167:24;9185:5;9167:24;:::i;:::-;9147:45;:::i;:::-;9142:3;9135:58;9125:74;;:::o;9205:360::-;;9319:38;9351:5;9319:38;:::i;:::-;9373:70;9436:6;9431:3;9373:70;:::i;:::-;9366:77;;9452:52;9497:6;9492:3;9485:4;9478:5;9474:16;9452:52;:::i;:::-;9529:29;9551:6;9529:29;:::i;:::-;9524:3;9520:39;9513:46;;9295:270;;;;;:::o;9571:364::-;;9687:39;9720:5;9687:39;:::i;:::-;9742:71;9806:6;9801:3;9742:71;:::i;:::-;9735:78;;9822:52;9867:6;9862:3;9855:4;9848:5;9844:16;9822:52;:::i;:::-;9899:29;9921:6;9899:29;:::i;:::-;9894:3;9890:39;9883:46;;9663:272;;;;;:::o;9941:322::-;;10104:67;10168:2;10163:3;10104:67;:::i;:::-;10097:74;;10201:26;10197:1;10192:3;10188:11;10181:47;10254:2;10249:3;10245:12;10238:19;;10087:176;;;:::o;10269:367::-;;10432:67;10496:2;10491:3;10432:67;:::i;:::-;10425:74;;10529:34;10525:1;10520:3;10516:11;10509:55;10595:5;10590:2;10585:3;10581:12;10574:27;10627:2;10622:3;10618:12;10611:19;;10415:221;;;:::o;10642:366::-;;10805:67;10869:2;10864:3;10805:67;:::i;:::-;10798:74;;10902:34;10898:1;10893:3;10889:11;10882:55;10968:4;10963:2;10958:3;10954:12;10947:26;10999:2;10994:3;10990:12;10983:19;;10788:220;;;:::o;11014:329::-;;11177:67;11241:2;11236:3;11177:67;:::i;:::-;11170:74;;11274:33;11270:1;11265:3;11261:11;11254:54;11334:2;11329:3;11325:12;11318:19;;11160:183;;;:::o;11349:398::-;;11530:85;11612:2;11607:3;11530:85;:::i;:::-;11523:92;;11645:66;11641:1;11636:3;11632:11;11625:87;11738:2;11733:3;11729:12;11722:19;;11513:234;;;:::o;11753:366::-;;11916:67;11980:2;11975:3;11916:67;:::i;:::-;11909:74;;12013:34;12009:1;12004:3;12000:11;11993:55;12079:4;12074:2;12069:3;12065:12;12058:26;12110:2;12105:3;12101:12;12094:19;;11899:220;;;:::o;12125:370::-;;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12385:34;12381:1;12376:3;12372:11;12365:55;12451:8;12446:2;12441:3;12437:12;12430:30;12486:2;12481:3;12477:12;12470:19;;12271:224;;;:::o;12501:315::-;;12664:67;12728:2;12723:3;12664:67;:::i;:::-;12657:74;;12761:19;12757:1;12752:3;12748:11;12741:40;12807:2;12802:3;12798:12;12791:19;;12647:169;;;:::o;12822:366::-;;12985:67;13049:2;13044:3;12985:67;:::i;:::-;12978:74;;13082:34;13078:1;13073:3;13069:11;13062:55;13148:4;13143:2;13138:3;13134:12;13127:26;13179:2;13174:3;13170:12;13163:19;;12968:220;;;:::o;13194:318::-;;13357:67;13421:2;13416:3;13357:67;:::i;:::-;13350:74;;13454:22;13450:1;13445:3;13441:11;13434:43;13503:2;13498:3;13494:12;13487:19;;13340:172;;;:::o;13518:366::-;;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13778:34;13774:1;13769:3;13765:11;13758:55;13844:4;13839:2;13834:3;13830:12;13823:26;13875:2;13870:3;13866:12;13859:19;;13664:220;;;:::o;13890:372::-;;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14150:34;14146:1;14141:3;14137:11;14130:55;14216:10;14211:2;14206:3;14202:12;14195:32;14253:2;14248:3;14244:12;14237:19;;14036:226;;;:::o;14268:320::-;;14431:67;14495:2;14490:3;14431:67;:::i;:::-;14424:74;;14528:24;14524:1;14519:3;14515:11;14508:45;14579:2;14574:3;14570:12;14563:19;;14414:174;;;:::o;14594:330::-;;14757:67;14821:2;14816:3;14757:67;:::i;:::-;14750:74;;14854:34;14850:1;14845:3;14841:11;14834:55;14915:2;14910:3;14906:12;14899:19;;14740:184;;;:::o;14930:319::-;;15093:67;15157:2;15152:3;15093:67;:::i;:::-;15086:74;;15190:23;15186:1;15181:3;15177:11;15170:44;15240:2;15235:3;15231:12;15224:19;;15076:173;;;:::o;15255:365::-;;15418:67;15482:2;15477:3;15418:67;:::i;:::-;15411:74;;15515:34;15511:1;15506:3;15502:11;15495:55;15581:3;15576:2;15571:3;15567:12;15560:25;15611:2;15606:3;15602:12;15595:19;;15401:219;;;:::o;15626:317::-;;15789:67;15853:2;15848:3;15789:67;:::i;:::-;15782:74;;15886:21;15882:1;15877:3;15873:11;15866:42;15934:2;15929:3;15925:12;15918:19;;15772:171;;;:::o;15949:396::-;;16112:67;16176:2;16171:3;16112:67;:::i;:::-;16105:74;;16209:34;16205:1;16200:3;16196:11;16189:55;16275:34;16270:2;16265:3;16261:12;16254:56;16336:2;16331:3;16327:12;16320:19;;16095:250;;;:::o;16351:369::-;;16514:67;16578:2;16573:3;16514:67;:::i;:::-;16507:74;;16611:34;16607:1;16602:3;16598:11;16591:55;16677:7;16672:2;16667:3;16663:12;16656:29;16711:2;16706:3;16702:12;16695:19;;16497:223;;;:::o;16726:368::-;;16889:67;16953:2;16948:3;16889:67;:::i;:::-;16882:74;;16986:34;16982:1;16977:3;16973:11;16966:55;17052:6;17047:2;17042:3;17038:12;17031:28;17085:2;17080:3;17076:12;17069:19;;16872:222;;;:::o;17100:371::-;;17263:67;17327:2;17322:3;17263:67;:::i;:::-;17256:74;;17360:34;17356:1;17351:3;17347:11;17340:55;17426:9;17421:2;17416:3;17412:12;17405:31;17462:2;17457:3;17453:12;17446:19;;17246:225;;;:::o;17477:318::-;;17640:67;17704:2;17699:3;17640:67;:::i;:::-;17633:74;;17737:22;17733:1;17728:3;17724:11;17717:43;17786:2;17781:3;17777:12;17770:19;;17623:172;;;:::o;17801:372::-;;17964:67;18028:2;18023:3;17964:67;:::i;:::-;17957:74;;18061:34;18057:1;18052:3;18048:11;18041:55;18127:10;18122:2;18117:3;18113:12;18106:32;18164:2;18159:3;18155:12;18148:19;;17947:226;;;:::o;18179:369::-;;18342:67;18406:2;18401:3;18342:67;:::i;:::-;18335:74;;18439:34;18435:1;18430:3;18426:11;18419:55;18505:7;18500:2;18495:3;18491:12;18484:29;18539:2;18534:3;18530:12;18523:19;;18325:223;;;:::o;18554:329::-;;18717:67;18781:2;18776:3;18717:67;:::i;:::-;18710:74;;18814:33;18810:1;18805:3;18801:11;18794:54;18874:2;18869:3;18865:12;18858:19;;18700:183;;;:::o;18889:321::-;;19052:67;19116:2;19111:3;19052:67;:::i;:::-;19045:74;;19149:25;19145:1;19140:3;19136:11;19129:46;19201:2;19196:3;19192:12;19185:19;;19035:175;;;:::o;19216:317::-;;19379:67;19443:2;19438:3;19379:67;:::i;:::-;19372:74;;19476:21;19472:1;19467:3;19463:11;19456:42;19524:2;19519:3;19515:12;19508:19;;19362:171;;;:::o;19539:108::-;19616:24;19634:5;19616:24;:::i;:::-;19611:3;19604:37;19594:53;;:::o;19653:118::-;19740:24;19758:5;19740:24;:::i;:::-;19735:3;19728:37;19718:53;;:::o;19777:157::-;19882:45;19902:24;19920:5;19902:24;:::i;:::-;19882:45;:::i;:::-;19877:3;19870:58;19860:74;;:::o;19940:112::-;20023:22;20039:5;20023:22;:::i;:::-;20018:3;20011:35;20001:51;;:::o;20058:820::-;;20297:75;20368:3;20359:6;20297:75;:::i;:::-;20397:2;20392:3;20388:12;20381:19;;20410:75;20481:3;20472:6;20410:75;:::i;:::-;20510:2;20505:3;20501:12;20494:19;;20523:75;20594:3;20585:6;20523:75;:::i;:::-;20623:2;20618:3;20614:12;20607:19;;20636:75;20707:3;20698:6;20636:75;:::i;:::-;20736:2;20731:3;20727:12;20720:19;;20749:75;20820:3;20811:6;20749:75;:::i;:::-;20849:2;20844:3;20840:12;20833:19;;20869:3;20862:10;;20286:592;;;;;;;;:::o;20884:522::-;;21119:148;21263:3;21119:148;:::i;:::-;21112:155;;21277:75;21348:3;21339:6;21277:75;:::i;:::-;21377:2;21372:3;21368:12;21361:19;;21397:3;21390:10;;21101:305;;;;:::o;21412:222::-;;21543:2;21532:9;21528:18;21520:26;;21556:71;21624:1;21613:9;21609:17;21600:6;21556:71;:::i;:::-;21510:124;;;;:::o;21640:529::-;;21845:2;21834:9;21830:18;21822:26;;21858:71;21926:1;21915:9;21911:17;21902:6;21858:71;:::i;:::-;21939:72;22007:2;21996:9;21992:18;21983:6;21939:72;:::i;:::-;22058:9;22052:4;22048:20;22043:2;22032:9;22028:18;22021:48;22086:76;22157:4;22148:6;22086:76;:::i;:::-;22078:84;;21812:357;;;;;;:::o;22175:373::-;;22356:2;22345:9;22341:18;22333:26;;22405:9;22399:4;22395:20;22391:1;22380:9;22376:17;22369:47;22433:108;22536:4;22527:6;22433:108;:::i;:::-;22425:116;;22323:225;;;;:::o;22554:373::-;;22735:2;22724:9;22720:18;22712:26;;22784:9;22778:4;22774:20;22770:1;22759:9;22755:17;22748:47;22812:108;22915:4;22906:6;22812:108;:::i;:::-;22804:116;;22702:225;;;;:::o;22933:210::-;;23058:2;23047:9;23043:18;23035:26;;23071:65;23133:1;23122:9;23118:17;23109:6;23071:65;:::i;:::-;23025:118;;;;:::o;23149:320::-;;23302:2;23291:9;23287:18;23279:26;;23315:65;23377:1;23366:9;23362:17;23353:6;23315:65;:::i;:::-;23390:72;23458:2;23447:9;23443:18;23434:6;23390:72;:::i;:::-;23269:200;;;;;:::o;23475:545::-;;23686:3;23675:9;23671:19;23663:27;;23700:71;23768:1;23757:9;23753:17;23744:6;23700:71;:::i;:::-;23781:68;23845:2;23834:9;23830:18;23821:6;23781:68;:::i;:::-;23859:72;23927:2;23916:9;23912:18;23903:6;23859:72;:::i;:::-;23941;24009:2;23998:9;23994:18;23985:6;23941:72;:::i;:::-;23653:367;;;;;;;:::o;24026:313::-;;24177:2;24166:9;24162:18;24154:26;;24226:9;24220:4;24216:20;24212:1;24201:9;24197:17;24190:47;24254:78;24327:4;24318:6;24254:78;:::i;:::-;24246:86;;24144:195;;;;:::o;24345:419::-;;24549:2;24538:9;24534:18;24526:26;;24598:9;24592:4;24588:20;24584:1;24573:9;24569:17;24562:47;24626:131;24752:4;24626:131;:::i;:::-;24618:139;;24516:248;;;:::o;24770:419::-;;24974:2;24963:9;24959:18;24951:26;;25023:9;25017:4;25013:20;25009:1;24998:9;24994:17;24987:47;25051:131;25177:4;25051:131;:::i;:::-;25043:139;;24941:248;;;:::o;25195:419::-;;25399:2;25388:9;25384:18;25376:26;;25448:9;25442:4;25438:20;25434:1;25423:9;25419:17;25412:47;25476:131;25602:4;25476:131;:::i;:::-;25468:139;;25366:248;;;:::o;25620:419::-;;25824:2;25813:9;25809:18;25801:26;;25873:9;25867:4;25863:20;25859:1;25848:9;25844:17;25837:47;25901:131;26027:4;25901:131;:::i;:::-;25893:139;;25791:248;;;:::o;26045:419::-;;26249:2;26238:9;26234:18;26226:26;;26298:9;26292:4;26288:20;26284:1;26273:9;26269:17;26262:47;26326:131;26452:4;26326:131;:::i;:::-;26318:139;;26216:248;;;:::o;26470:419::-;;26674:2;26663:9;26659:18;26651:26;;26723:9;26717:4;26713:20;26709:1;26698:9;26694:17;26687:47;26751:131;26877:4;26751:131;:::i;:::-;26743:139;;26641:248;;;:::o;26895:419::-;;27099:2;27088:9;27084:18;27076:26;;27148:9;27142:4;27138:20;27134:1;27123:9;27119:17;27112:47;27176:131;27302:4;27176:131;:::i;:::-;27168:139;;27066:248;;;:::o;27320:419::-;;27524:2;27513:9;27509:18;27501:26;;27573:9;27567:4;27563:20;27559:1;27548:9;27544:17;27537:47;27601:131;27727:4;27601:131;:::i;:::-;27593:139;;27491:248;;;:::o;27745:419::-;;27949:2;27938:9;27934:18;27926:26;;27998:9;27992:4;27988:20;27984:1;27973:9;27969:17;27962:47;28026:131;28152:4;28026:131;:::i;:::-;28018:139;;27916:248;;;:::o;28170:419::-;;28374:2;28363:9;28359:18;28351:26;;28423:9;28417:4;28413:20;28409:1;28398:9;28394:17;28387:47;28451:131;28577:4;28451:131;:::i;:::-;28443:139;;28341:248;;;:::o;28595:419::-;;28799:2;28788:9;28784:18;28776:26;;28848:9;28842:4;28838:20;28834:1;28823:9;28819:17;28812:47;28876:131;29002:4;28876:131;:::i;:::-;28868:139;;28766:248;;;:::o;29020:419::-;;29224:2;29213:9;29209:18;29201:26;;29273:9;29267:4;29263:20;29259:1;29248:9;29244:17;29237:47;29301:131;29427:4;29301:131;:::i;:::-;29293:139;;29191:248;;;:::o;29445:419::-;;29649:2;29638:9;29634:18;29626:26;;29698:9;29692:4;29688:20;29684:1;29673:9;29669:17;29662:47;29726:131;29852:4;29726:131;:::i;:::-;29718:139;;29616:248;;;:::o;29870:419::-;;30074:2;30063:9;30059:18;30051:26;;30123:9;30117:4;30113:20;30109:1;30098:9;30094:17;30087:47;30151:131;30277:4;30151:131;:::i;:::-;30143:139;;30041:248;;;:::o;30295:419::-;;30499:2;30488:9;30484:18;30476:26;;30548:9;30542:4;30538:20;30534:1;30523:9;30519:17;30512:47;30576:131;30702:4;30576:131;:::i;:::-;30568:139;;30466:248;;;:::o;30720:419::-;;30924:2;30913:9;30909:18;30901:26;;30973:9;30967:4;30963:20;30959:1;30948:9;30944:17;30937:47;31001:131;31127:4;31001:131;:::i;:::-;30993:139;;30891:248;;;:::o;31145:419::-;;31349:2;31338:9;31334:18;31326:26;;31398:9;31392:4;31388:20;31384:1;31373:9;31369:17;31362:47;31426:131;31552:4;31426:131;:::i;:::-;31418:139;;31316:248;;;:::o;31570:419::-;;31774:2;31763:9;31759:18;31751:26;;31823:9;31817:4;31813:20;31809:1;31798:9;31794:17;31787:47;31851:131;31977:4;31851:131;:::i;:::-;31843:139;;31741:248;;;:::o;31995:419::-;;32199:2;32188:9;32184:18;32176:26;;32248:9;32242:4;32238:20;32234:1;32223:9;32219:17;32212:47;32276:131;32402:4;32276:131;:::i;:::-;32268:139;;32166:248;;;:::o;32420:419::-;;32624:2;32613:9;32609:18;32601:26;;32673:9;32667:4;32663:20;32659:1;32648:9;32644:17;32637:47;32701:131;32827:4;32701:131;:::i;:::-;32693:139;;32591:248;;;:::o;32845:419::-;;33049:2;33038:9;33034:18;33026:26;;33098:9;33092:4;33088:20;33084:1;33073:9;33069:17;33062:47;33126:131;33252:4;33126:131;:::i;:::-;33118:139;;33016:248;;;:::o;33270:419::-;;33474:2;33463:9;33459:18;33451:26;;33523:9;33517:4;33513:20;33509:1;33498:9;33494:17;33487:47;33551:131;33677:4;33551:131;:::i;:::-;33543:139;;33441:248;;;:::o;33695:419::-;;33899:2;33888:9;33884:18;33876:26;;33948:9;33942:4;33938:20;33934:1;33923:9;33919:17;33912:47;33976:131;34102:4;33976:131;:::i;:::-;33968:139;;33866:248;;;:::o;34120:419::-;;34324:2;34313:9;34309:18;34301:26;;34373:9;34367:4;34363:20;34359:1;34348:9;34344:17;34337:47;34401:131;34527:4;34401:131;:::i;:::-;34393:139;;34291:248;;;:::o;34545:419::-;;34749:2;34738:9;34734:18;34726:26;;34798:9;34792:4;34788:20;34784:1;34773:9;34769:17;34762:47;34826:131;34952:4;34826:131;:::i;:::-;34818:139;;34716:248;;;:::o;34970:419::-;;35174:2;35163:9;35159:18;35151:26;;35223:9;35217:4;35213:20;35209:1;35198:9;35194:17;35187:47;35251:131;35377:4;35251:131;:::i;:::-;35243:139;;35141:248;;;:::o;35395:222::-;;35526:2;35515:9;35511:18;35503:26;;35539:71;35607:1;35596:9;35592:17;35583:6;35539:71;:::i;:::-;35493:124;;;;:::o;35623:419::-;;35800:2;35789:9;35785:18;35777:26;;35813:71;35881:1;35870:9;35866:17;35857:6;35813:71;:::i;:::-;35931:9;35925:4;35921:20;35916:2;35905:9;35901:18;35894:48;35959:76;36030:4;36021:6;35959:76;:::i;:::-;35951:84;;35767:275;;;;;:::o;36048:214::-;;36175:2;36164:9;36160:18;36152:26;;36188:67;36252:1;36241:9;36237:17;36228:6;36188:67;:::i;:::-;36142:120;;;;:::o;36268:283::-;;36334:2;36328:9;36318:19;;36376:4;36368:6;36364:17;36483:6;36471:10;36468:22;36447:18;36435:10;36432:34;36429:62;36426:2;;;36494:18;;:::i;:::-;36426:2;36534:10;36530:2;36523:22;36308:243;;;;:::o;36557:320::-;;36733:18;36725:6;36722:30;36719:2;;;36755:18;;:::i;:::-;36719:2;36805:4;36797:6;36793:17;36785:25;;36865:4;36859;36855:15;36847:23;;36648:229;;;:::o;36883:331::-;;37034:18;37026:6;37023:30;37020:2;;;37056:18;;:::i;:::-;37020:2;37141:4;37137:9;37130:4;37122:6;37118:17;37114:33;37106:41;;37202:4;37196;37192:15;37184:23;;36949:265;;;:::o;37220:132::-;;37310:3;37302:11;;37340:4;37335:3;37331:14;37323:22;;37292:60;;;:::o;37358:132::-;;37448:3;37440:11;;37478:4;37473:3;37469:14;37461:22;;37430:60;;;:::o;37496:114::-;;37597:5;37591:12;37581:22;;37570:40;;;:::o;37616:114::-;;37717:5;37711:12;37701:22;;37690:40;;;:::o;37736:98::-;;37821:5;37815:12;37805:22;;37794:40;;;:::o;37840:99::-;;37926:5;37920:12;37910:22;;37899:40;;;:::o;37945:113::-;;38047:4;38042:3;38038:14;38030:22;;38020:38;;;:::o;38064:113::-;;38166:4;38161:3;38157:14;38149:22;;38139:38;;;:::o;38183:184::-;;38316:6;38311:3;38304:19;38356:4;38351:3;38347:14;38332:29;;38294:73;;;;:::o;38373:184::-;;38506:6;38501:3;38494:19;38546:4;38541:3;38537:14;38522:29;;38484:73;;;;:::o;38563:168::-;;38680:6;38675:3;38668:19;38720:4;38715:3;38711:14;38696:29;;38658:73;;;;:::o;38737:169::-;;38855:6;38850:3;38843:19;38895:4;38890:3;38886:14;38871:29;;38833:73;;;;:::o;38912:148::-;;39051:3;39036:18;;39026:34;;;;:::o;39066:305::-;;39125:20;39143:1;39125:20;:::i;:::-;39120:25;;39159:20;39177:1;39159:20;:::i;:::-;39154:25;;39313:1;39245:66;39241:74;39238:1;39235:81;39232:2;;;39319:18;;:::i;:::-;39232:2;39363:1;39360;39356:9;39349:16;;39110:261;;;;:::o;39377:191::-;;39437:20;39455:1;39437:20;:::i;:::-;39432:25;;39471:20;39489:1;39471:20;:::i;:::-;39466:25;;39510:1;39507;39504:8;39501:2;;;39515:18;;:::i;:::-;39501:2;39560:1;39557;39553:9;39545:17;;39422:146;;;;:::o;39574:96::-;;39640:24;39658:5;39640:24;:::i;:::-;39629:35;;39619:51;;;:::o;39676:90::-;;39753:5;39746:13;39739:21;39728:32;;39718:48;;;:::o;39772:77::-;;39838:5;39827:16;;39817:32;;;:::o;39855:126::-;;39932:42;39925:5;39921:54;39910:65;;39900:81;;;:::o;39987:77::-;;40053:5;40042:16;;40032:32;;;:::o;40070:86::-;;40145:4;40138:5;40134:16;40123:27;;40113:43;;;:::o;40162:154::-;40246:6;40241:3;40236;40223:30;40308:1;40299:6;40294:3;40290:16;40283:27;40213:103;;;:::o;40322:307::-;40390:1;40400:113;40414:6;40411:1;40408:13;40400:113;;;40499:1;40494:3;40490:11;40484:18;40480:1;40475:3;40471:11;40464:39;40436:2;40433:1;40429:10;40424:15;;40400:113;;;40531:6;40528:1;40525:13;40522:2;;;40611:1;40602:6;40597:3;40593:16;40586:27;40522:2;40371:258;;;;:::o;40635:320::-;;40716:1;40710:4;40706:12;40696:22;;40763:1;40757:4;40753:12;40784:18;40774:2;;40840:4;40832:6;40828:17;40818:27;;40774:2;40902;40894:6;40891:14;40871:18;40868:38;40865:2;;;40921:18;;:::i;:::-;40865:2;40686:269;;;;:::o;40961:233::-;;41023:24;41041:5;41023:24;:::i;:::-;41014:33;;41069:66;41062:5;41059:77;41056:2;;;41139:18;;:::i;:::-;41056:2;41186:1;41179:5;41175:13;41168:20;;41004:190;;;:::o;41200:100::-;;41268:26;41288:5;41268:26;:::i;:::-;41257:37;;41247:53;;;:::o;41306:79::-;;41374:5;41363:16;;41353:32;;;:::o;41391:94::-;;41459:20;41473:5;41459:20;:::i;:::-;41448:31;;41438:47;;;:::o;41491:79::-;;41559:5;41548:16;;41538:32;;;:::o;41576:180::-;41624:77;41621:1;41614:88;41721:4;41718:1;41711:15;41745:4;41742:1;41735:15;41762:180;41810:77;41807:1;41800:88;41907:4;41904:1;41897:15;41931:4;41928:1;41921:15;41948:180;41996:77;41993:1;41986:88;42093:4;42090:1;42083:15;42117:4;42114:1;42107:15;42134:102;;42226:2;42222:7;42217:2;42210:5;42206:14;42202:28;42192:38;;42182:54;;;:::o;42242:94::-;;42323:5;42319:2;42315:14;42294:35;;42284:52;;;:::o;42342:122::-;42415:24;42433:5;42415:24;:::i;:::-;42408:5;42405:35;42395:2;;42454:1;42451;42444:12;42395:2;42385:79;:::o;42470:122::-;42543:24;42561:5;42543:24;:::i;:::-;42536:5;42533:35;42523:2;;42582:1;42579;42572:12;42523:2;42513:79;:::o;42598:122::-;42671:24;42689:5;42671:24;:::i;:::-;42664:5;42661:35;42651:2;;42710:1;42707;42700:12;42651:2;42641:79;:::o

Swarm Source

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