Overview
Max Total Supply
920,000,000 STYLE
Holders
632 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH (-3.28%)
Onchain Market Cap
$1,442,152.17
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000506172839506 STYLEValue
$0.00 ( ~0 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
styleToken
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-04-25 */ // SPDX-License-Identifier: MIT // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/IERC1820Registry.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/introspection/IERC1820Registry.sol) pragma solidity ^0.8.0; /** * @dev Interface of the global ERC1820 Registry, as defined in the * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register * implementers for interfaces in this registry, as well as query support. * * Implementers may be shared by multiple accounts, and can also implement more * than a single interface for each account. Contracts can implement interfaces * for themselves, but externally-owned accounts (EOA) must delegate this to a * contract. * * {IERC165} interfaces can also be queried via the registry. * * For an in-depth explanation and source code analysis, see the EIP text. */ interface IERC1820Registry { event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer); event ManagerChanged(address indexed account, address indexed newManager); /** * @dev Sets `newManager` as the manager for `account`. A manager of an * account is able to set interface implementers for it. * * By default, each account is its own manager. Passing a value of `0x0` in * `newManager` will reset the manager to this initial state. * * Emits a {ManagerChanged} event. * * Requirements: * * - the caller must be the current manager for `account`. */ function setManager(address account, address newManager) external; /** * @dev Returns the manager for `account`. * * See {setManager}. */ function getManager(address account) external view returns (address); /** * @dev Sets the `implementer` contract as ``account``'s implementer for * `interfaceHash`. * * `account` being the zero address is an alias for the caller's address. * The zero address can also be used in `implementer` to remove an old one. * * See {interfaceHash} to learn how these are created. * * Emits an {InterfaceImplementerSet} event. * * Requirements: * * - the caller must be the current manager for `account`. * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not * end in 28 zeroes). * - `implementer` must implement {IERC1820Implementer} and return true when * queried for support, unless `implementer` is the caller. See * {IERC1820Implementer-canImplementInterfaceForAddress}. */ function setInterfaceImplementer( address account, bytes32 _interfaceHash, address implementer ) external; /** * @dev Returns the implementer of `interfaceHash` for `account`. If no such * implementer is registered, returns the zero address. * * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28 * zeroes), `account` will be queried for support of it. * * `account` being the zero address is an alias for the caller's address. */ function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address); /** * @dev Returns the interface hash for an `interfaceName`, as defined in the * corresponding * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]. */ function interfaceHash(string calldata interfaceName) external pure returns (bytes32); /** * @notice Updates the cache with whether the contract implements an ERC165 interface or not. * @param account Address of the contract for which to update the cache. * @param interfaceId ERC165 interface for which to update the cache. */ function updateERC165Cache(address account, bytes4 interfaceId) external; /** * @notice Checks whether a contract implements an ERC165 interface or not. * If the result is not cached a direct lookup on the contract address is performed. * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling * {updateERC165Cache} with the contract address. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool); /** * @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool); } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/IERC777Sender.sol // OpenZeppelin Contracts v4.4.1 (token/ERC777/IERC777Sender.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC777TokensSender standard as defined in the EIP. * * {IERC777} Token holders can be notified of operations performed on their * tokens by having a contract implement this interface (contract holders can be * their own implementer) and registering it on the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. * * See {IERC1820Registry} and {ERC1820Implementer}. */ interface IERC777Sender { /** * @dev Called by an {IERC777} token contract whenever a registered holder's * (`from`) tokens are about to be moved or destroyed. The type of operation * is conveyed by `to` being the zero address or not. * * This call occurs _before_ the token contract's state is updated, so * {IERC777-balanceOf}, etc., can be used to query the pre-operation state. * * This function may revert to prevent the operation from being executed. */ function tokensToSend( address operator, address from, address to, uint256 amount, bytes calldata userData, bytes calldata operatorData ) external; } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/IERC777Recipient.sol // OpenZeppelin Contracts v4.4.1 (token/ERC777/IERC777Recipient.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP. * * Accounts can be notified of {IERC777} tokens being sent to them by having a * contract implement this interface (contract holders can be their own * implementer) and registering it on the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. * * See {IERC1820Registry} and {ERC1820Implementer}. */ interface IERC777Recipient { /** * @dev Called by an {IERC777} token contract whenever tokens are being * moved or created into a registered account (`to`). The type of operation * is conveyed by `from` being the zero address or not. * * This call occurs _after_ the token contract's state is updated, so * {IERC777-balanceOf}, etc., can be used to query the post-operation state. * * This function may revert to prevent the operation from being executed. */ function tokensReceived( address operator, address from, address to, uint256 amount, bytes calldata userData, bytes calldata operatorData ) external; } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/IERC777.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC777/IERC777.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC777Token standard as defined in the EIP. * * This contract uses the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let * token holders and recipients react to token movements by using setting implementers * for the associated interfaces in said registry. See {IERC1820Registry} and * {ERC1820Implementer}. */ interface IERC777 { /** * @dev Emitted when `amount` tokens are created by `operator` and assigned to `to`. * * Note that some additional user `data` and `operatorData` can be logged in the event. */ event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData); /** * @dev Emitted when `operator` destroys `amount` tokens from `account`. * * Note that some additional user `data` and `operatorData` can be logged in the event. */ event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData); /** * @dev Emitted when `operator` is made operator for `tokenHolder` */ event AuthorizedOperator(address indexed operator, address indexed tokenHolder); /** * @dev Emitted when `operator` is revoked its operator status for `tokenHolder` */ event RevokedOperator(address indexed operator, address indexed tokenHolder); /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view returns (string memory); /** * @dev Returns the smallest part of the token that is not divisible. This * means all token operations (creation, movement and destruction) must have * amounts that are a multiple of this number. * * For most token contracts, this value will equal 1. */ function granularity() external view returns (uint256); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by an account (`owner`). */ function balanceOf(address owner) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * If send or receive hooks are registered for the caller and `recipient`, * the corresponding functions will be called with `data` and empty * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - the caller must have at least `amount` tokens. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function send( address recipient, uint256 amount, bytes calldata data ) external; /** * @dev Destroys `amount` tokens from the caller's account, reducing the * total supply. * * If a send hook is registered for the caller, the corresponding function * will be called with `data` and empty `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - the caller must have at least `amount` tokens. */ function burn(uint256 amount, bytes calldata data) external; /** * @dev Returns true if an account is an operator of `tokenHolder`. * Operators can send and burn tokens on behalf of their owners. All * accounts are their own operator. * * See {operatorSend} and {operatorBurn}. */ function isOperatorFor(address operator, address tokenHolder) external view returns (bool); /** * @dev Make an account an operator of the caller. * * See {isOperatorFor}. * * Emits an {AuthorizedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function authorizeOperator(address operator) external; /** * @dev Revoke an account's operator status for the caller. * * See {isOperatorFor} and {defaultOperators}. * * Emits a {RevokedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function revokeOperator(address operator) external; /** * @dev Returns the list of default operators. These accounts are operators * for all token holders, even if {authorizeOperator} was never called on * them. * * This list is immutable, but individual holders may revoke these via * {revokeOperator}, in which case {isOperatorFor} will return false. */ function defaultOperators() external view returns (address[] memory); /** * @dev Moves `amount` tokens from `sender` to `recipient`. The caller must * be an operator of `sender`. * * If send or receive hooks are registered for `sender` and `recipient`, * the corresponding functions will be called with `data` and * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - `sender` cannot be the zero address. * - `sender` must have at least `amount` tokens. * - the caller must be an operator for `sender`. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function operatorSend( address sender, address recipient, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; /** * @dev Destroys `amount` tokens from `account`, reducing the total supply. * The caller must be an operator of `account`. * * If a send hook is registered for `account`, the corresponding function * will be called with `data` and `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. * - the caller must be an operator for `account`. */ function operatorBurn( address account, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; event Sent( address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData ); } // File: https://github.com/STYLE-Protocol/STYLE-Token-Smart-Contract/blob/main/ERC777.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC777/ERC777.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC777} 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}. * * Support for ERC20 is included in this contract, as specified by the EIP: both * the ERC777 and ERC20 interfaces can be safely used when interacting with it. * Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token * movements. * * Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there * are no special restrictions in the amount of tokens that created, moved, or * destroyed. This makes integration with ERC20 applications seamless. */ contract ERC777 is Context, IERC777, IERC20 { using Address for address; IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); mapping(address => uint256) private _balances; uint256 private _totalSupply; string private _name; string private _symbol; bytes32 private constant _TOKENS_SENDER_INTERFACE_HASH = keccak256("ERC777TokensSender"); bytes32 private constant _TOKENS_RECIPIENT_INTERFACE_HASH = keccak256("ERC777TokensRecipient"); // This isn't ever read from - it's only used to respond to the defaultOperators query. address[] private _defaultOperatorsArray; // Immutable, but accounts may revoke them (tracked in __revokedDefaultOperators). mapping(address => bool) private _defaultOperators; // For each account, a mapping of its operators and revoked default operators. mapping(address => mapping(address => bool)) private _operators; mapping(address => mapping(address => bool)) private _revokedDefaultOperators; // ERC20-allowances mapping(address => mapping(address => uint256)) private _allowances; /** * @dev `defaultOperators` may be an empty array. */ constructor( string memory name_, string memory symbol_, address[] memory defaultOperators_ ) { _name = name_; _symbol = symbol_; _defaultOperatorsArray = defaultOperators_; for (uint256 i = 0; i < defaultOperators_.length; i++) { _defaultOperators[defaultOperators_[i]] = true; } // register interfaces _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this)); _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this)); } /** * @dev See {IERC777-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC777-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {ERC20-decimals}. * * Always returns 18, as per the * [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility). */ function decimals() public pure virtual returns (uint8) { return 18; } /** * @dev See {IERC777-granularity}. * * This implementation always returns `1`. */ function granularity() public view virtual override returns (uint256) { return 1; } /** * @dev See {IERC777-totalSupply}. */ function totalSupply() public view virtual override(IERC20, IERC777) returns (uint256) { return _totalSupply; } /** * @dev Returns the amount of tokens owned by an account (`tokenHolder`). */ function balanceOf(address tokenHolder) public view virtual override(IERC20, IERC777) returns (uint256) { return _balances[tokenHolder]; } /** * @dev See {IERC777-send}. * * Also emits a {IERC20-Transfer} event for ERC20 compatibility. */ function send( address recipient, uint256 amount, bytes memory data ) public virtual override { _send(_msgSender(), recipient, amount, data, "", true); } /** * @dev See {IERC20-transfer}. * * Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient} * interface if it is a contract. * * Also emits a {Sent} event. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _send(_msgSender(), recipient, amount, "", "", false); return true; } /** * @dev See {IERC777-burn}. * * Also emits a {IERC20-Transfer} event for ERC20 compatibility. */ function burn(uint256 amount, bytes memory data) public virtual override { _burn(_msgSender(), amount, data, ""); } /** * @dev See {IERC777-isOperatorFor}. */ function isOperatorFor(address operator, address tokenHolder) public view virtual override returns (bool) { return operator == tokenHolder || (_defaultOperators[operator] && !_revokedDefaultOperators[tokenHolder][operator]) || _operators[tokenHolder][operator]; } /** * @dev See {IERC777-authorizeOperator}. */ function authorizeOperator(address operator) public virtual override { require(_msgSender() != operator, "ERC777: authorizing self as operator"); if (_defaultOperators[operator]) { delete _revokedDefaultOperators[_msgSender()][operator]; } else { _operators[_msgSender()][operator] = true; } emit AuthorizedOperator(operator, _msgSender()); } /** * @dev See {IERC777-revokeOperator}. */ function revokeOperator(address operator) public virtual override { require(operator != _msgSender(), "ERC777: revoking self as operator"); if (_defaultOperators[operator]) { _revokedDefaultOperators[_msgSender()][operator] = true; } else { delete _operators[_msgSender()][operator]; } emit RevokedOperator(operator, _msgSender()); } /** * @dev See {IERC777-defaultOperators}. */ function defaultOperators() public view virtual override returns (address[] memory) { return _defaultOperatorsArray; } /** * @dev See {IERC777-operatorSend}. * * Emits {Sent} and {IERC20-Transfer} events. */ function operatorSend( address sender, address recipient, uint256 amount, bytes memory data, bytes memory operatorData ) public virtual override { require(isOperatorFor(_msgSender(), sender), "ERC777: caller is not an operator for holder"); _send(sender, recipient, amount, data, operatorData, true); } /** * @dev See {IERC777-operatorBurn}. * * Emits {Burned} and {IERC20-Transfer} events. */ function operatorBurn( address account, uint256 amount, bytes memory data, bytes memory operatorData ) public virtual override { require(isOperatorFor(_msgSender(), account), "ERC777: caller is not an operator for holder"); _burn(account, amount, data, operatorData); } /** * @dev See {IERC20-allowance}. * * Note that operator and allowance concepts are orthogonal: operators may * not have allowance, and accounts with allowance may not be operators * themselves. */ function allowance(address holder, address spender) public view virtual override returns (uint256) { return _allowances[holder][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Note that accounts cannot have allowance issued by their operators. */ function approve(address spender, uint256 value) public virtual override returns (bool) { address holder = _msgSender(); _approve(holder, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Note that operator and allowance concepts are orthogonal: operators cannot * call `transferFrom` (unless they have allowance), and accounts with * allowance cannot call `operatorSend` (unless they are operators). * * Emits {Sent}, {IERC20-Transfer} and {IERC20-Approval} events. */ function transferFrom( address holder, address recipient, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(holder, spender, amount); _send(holder, recipient, amount, "", "", false); return true; } /** * @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * If a send hook is registered for `account`, the corresponding function * will be called with the caller address as the `operator` and with * `userData` and `operatorData`. * * See {IERC777Sender} and {IERC777Recipient}. * * Emits {Minted} and {IERC20-Transfer} events. * * Requirements * * - `account` cannot be the zero address. * - if `account` is a contract, it must implement the {IERC777Recipient} * interface. */ function _mint( address account, uint256 amount, bytes memory userData, bytes memory operatorData ) internal virtual { _mint(account, amount, userData, operatorData, true); } /** * @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * If `requireReceptionAck` is set to true, and if a send hook is * registered for `account`, the corresponding function will be called with * `operator`, `data` and `operatorData`. * * See {IERC777Sender} and {IERC777Recipient}. * * Emits {Minted} and {IERC20-Transfer} events. * * Requirements * * - `account` cannot be the zero address. * - if `account` is a contract, it must implement the {IERC777Recipient} * interface. */ function _mint( address account, uint256 amount, bytes memory userData, bytes memory operatorData, bool requireReceptionAck ) internal virtual { require(account != address(0), "ERC777: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, amount); // Update state variables _totalSupply += amount; _balances[account] += amount; _callTokensReceived(operator, address(0), account, amount, userData, operatorData, requireReceptionAck); emit Minted(operator, account, amount, userData, operatorData); emit Transfer(address(0), account, amount); } /** * @dev Send tokens * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient */ function _send( address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData, bool requireReceptionAck ) internal virtual { require(from != address(0), "ERC777: transfer from the zero address"); require(to != address(0), "ERC777: transfer to the zero address"); address operator = _msgSender(); _callTokensToSend(operator, from, to, amount, userData, operatorData); _move(operator, from, to, amount, userData, operatorData); _callTokensReceived(operator, from, to, amount, userData, operatorData, requireReceptionAck); } /** * @dev Burn tokens * @param from address token holder address * @param amount uint256 amount of tokens to burn * @param data bytes extra information provided by the token holder * @param operatorData bytes extra information provided by the operator (if any) */ function _burn( address from, uint256 amount, bytes memory data, bytes memory operatorData ) internal virtual { require(from != address(0), "ERC777: burn from the zero address"); address operator = _msgSender(); _callTokensToSend(operator, from, address(0), amount, data, operatorData); _beforeTokenTransfer(operator, from, address(0), amount); // Update state variables uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC777: burn amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _totalSupply -= amount; emit Burned(operator, from, amount, data, operatorData); emit Transfer(from, address(0), amount); } function _move( address operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData ) private { _beforeTokenTransfer(operator, from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC777: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Sent(operator, from, to, amount, userData, operatorData); emit Transfer(from, to, amount); } /** * @dev See {ERC20-_approve}. * * Note that accounts cannot have allowance issued by their operators. */ function _approve( address holder, address spender, uint256 value ) internal virtual { require(holder != address(0), "ERC777: approve from the zero address"); require(spender != address(0), "ERC777: approve to the zero address"); _allowances[holder][spender] = value; emit Approval(holder, spender, value); } /** * @dev Call from.tokensToSend() if the interface is registered * @param operator address operator requesting the transfer * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) */ function _callTokensToSend( address operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData ) private { address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(from, _TOKENS_SENDER_INTERFACE_HASH); if (implementer != address(0)) { IERC777Sender(implementer).tokensToSend(operator, from, to, amount, userData, operatorData); } } /** * @dev Call to.tokensReceived() if the interface is registered. Reverts if the recipient is a contract but * tokensReceived() was not registered for the recipient * @param operator address operator requesting the transfer * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient */ function _callTokensReceived( address operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData, bool requireReceptionAck ) private { address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(to, _TOKENS_RECIPIENT_INTERFACE_HASH); if (implementer != address(0)) { IERC777Recipient(implementer).tokensReceived(operator, from, to, amount, userData, operatorData); } else if (requireReceptionAck) { require(!to.isContract(), "ERC777: token recipient contract has no implementer for ERC777TokensRecipient"); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC777: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any token transfer. This includes * calls to {send}, {transfer}, {operatorSend}, 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 operator, address from, address to, uint256 amount ) internal virtual {} } // File: contracts/Style.sol pragma solidity ^0.8.7; // openzeppelin ERC777 Token contract styleToken is ERC777 { constructor( uint256 initialSupply, address[] memory defaultOperators ) ERC777("STYLE Token", "STYLE", defaultOperators) { _mint(msg.sender, initialSupply, "", ""); //Sending as per Token Allocation //Entry 1 // Seed Round transfer( 0xdc5554F864905bdbD183Fb8324dDD1Ed72E8685E, 92000000000000000000000000 ); // Entry 2 // Private Round transfer( 0x779bAaFd5afB91Edcdf64146E57df001dE8EF7Ae, 59800000000000000000000000 ); // Entry 3 // Public Round transfer( 0x44EC9A93759a283a9019406eA219636225c63F7c, 80040000000000000000000000 ); // Entry 4 // KOL Round transfer( 0xBA5505Df24055879d9b31d3C82dDCaC18b84242f, 26680000000000000000000000 ); // Entry 5 // Team and Advisors transfer( 0x82f73083dd932c207549d18cb439D70870B0CB6d, 110400000000000000000000000 ); // Entry 6 // Treasury transfer( 0x1638C018FBc136de0265927DeA1c76802f8454b4, 128800000000000000000000000 ); // Entry 7 // Ecosystem transfer( 0x36b758a181640C8caCc8039CAa58f464EF302b16, 92000000000000000000000000 ); // Entry 8 // Alpha Claim transfer( 0x396F6a18c98BFf86D3850F646F5794F5a18B9b26, 92000000000000000000000000 ); // Entry 9 // Strategic Claim transfer( 0x3FB950AD30CA169B498AF20BBDEc29cE16aFD387, 92000000000000000000000000 ); // Entry 10 // Marketing transfer( 0xa234a5B2458E5C24C30D401a4a36Df516B68CeB5, 66240000000000000000000000 ); // Entry 11 // Liquidity transfer( 0x90f782bDEF80eF43Ce8dDCe6a583838426231882, 80040000000000000000000000 ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address[]","name":"defaultOperators","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"AuthorizedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"RevokedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Sent","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":"holder","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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"defaultOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"granularity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"isOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"operatorBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"operatorSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"send","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":"holder","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"}]
Contract Creation Code
608060405234801561000f575f80fd5b5060405161424938038061424983398181016040528101906100319190611060565b6040518060400160405280600b81526020017f5354594c4520546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5354594c450000000000000000000000000000000000000000000000000000008152508282600290816100ad91906112be565b5081600390816100bd91906112be565b5080600490805190602001906100d4929190610dd0565b505f5b815181101561015c57600160055f8484815181106100f8576100f761138d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506100d7565b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054306040518463ffffffff1660e01b81526004016101ce939291906113e1565b5f604051808303815f87803b1580156101e5575f80fd5b505af11580156101f7573d5f803e3d5ffd5b50505050731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a306040518463ffffffff1660e01b815260040161026c939291906113e1565b5f604051808303815f87803b158015610283575f80fd5b505af1158015610295573d5f803e3d5ffd5b505050505050506102ca338360405180602001604052805f81525060405180602001604052805f8152506104e160201b60201c565b6102f973dc5554f864905bdbd183fb8324ddd1ed72e8685e6a4c19c1fe51a565dc0000006104fb60201b60201c565b5061032973779baafd5afb91edcdf64146e57df001de8ef7ae6a3177247ee8451bcf0000006104fb60201b60201c565b506103597344ec9a93759a283a9019406ea219636225c63f7c6a4235211823312d190000006104fb60201b60201c565b5061038973ba5505df24055879d9b31d3c82ddcac18b84242f6a1611b5b2b665b9b30000006104fb60201b60201c565b506103b97382f73083dd932c207549d18cb439d70870b0cb6d6a5b521bfdfb9347080000006104fb60201b60201c565b506103e9731638c018fbc136de0265927dea1c76802f8454b46a6a8a75fda58128340000006104fb60201b60201c565b506104197336b758a181640c8cacc8039caa58f464ef302b166a4c19c1fe51a565dc0000006104fb60201b60201c565b5061044973396f6a18c98bff86d3850f646f5794f5a18b9b266a4c19c1fe51a565dc0000006104fb60201b60201c565b50610479733fb950ad30ca169b498af20bbdec29ce16afd3876a4c19c1fe51a565dc0000006104fb60201b60201c565b506104a973a234a5b2458e5c24c30d401a4a36df516b68ceb56a36cadd9863bec4380000006104fb60201b60201c565b506104d97390f782bdef80ef43ce8ddce6a5838384262318826a4235211823312d190000006104fb60201b60201c565b5050506118d6565b6104f584848484600161054360201b60201c565b50505050565b5f61053961050d61072960201b60201c565b848460405180602001604052805f81525060405180602001604052805f8152505f61073060201b60201c565b6001905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036105b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a890611470565b60405180910390fd5b5f6105c061072960201b60201c565b90506105d4815f888861086360201b60201c565b8460015f8282546105e591906114bb565b92505081905550845f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461063791906114bb565b92505081905550610653815f888888888861086960201b60201c565b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d8787876040516106b49392919061155d565b60405180910390a38573ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161071991906115a0565b60405180910390a3505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361079e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079590611629565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361080c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610803906116b7565b60405180910390fd5b5f61081b61072960201b60201c565b9050610831818888888888610a3860201b60201c565b610845818888888888610b9660201b60201c565b61085a8188888888888861086960201b60201c565b50505050505050565b50505050565b5f731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b81526004016108d99291906116d5565b602060405180830381865afa1580156108f4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091891906116fc565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109c1578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b815260040161098f96959493929190611727565b5f604051808303815f87803b1580156109a6575f80fd5b505af11580156109b8573d5f803e3d5ffd5b50505050610a2e565b8115610a2d576109ec8673ffffffffffffffffffffffffffffffffffffffff16610dae60201b60201c565b15610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a239061182a565b60405180910390fd5b5b5b5050505050505050565b5f731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b8152600401610aa89291906116d5565b602060405180830381865afa158015610ac3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae791906116fc565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b8d578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b8152600401610b5f96959493929190611727565b5f604051808303815f87803b158015610b76575f80fd5b505af1158015610b88573d5f803e3d5ffd5b505050505b50505050505050565b610ba88686868661086360201b60201c565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c22906118b8565b60405180910390fd5b8381035f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550835f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610cb991906114bb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d389392919061155d565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d9d91906115a0565b60405180910390a350505050505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054828255905f5260205f20908101928215610e46579160200282015b82811115610e45578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190610dee565b5b509050610e539190610e57565b5090565b5b80821115610e6e575f815f905550600101610e58565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e9581610e83565b8114610e9f575f80fd5b50565b5f81519050610eb081610e8c565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f0082610eba565b810181811067ffffffffffffffff82111715610f1f57610f1e610eca565b5b80604052505050565b5f610f31610e72565b9050610f3d8282610ef7565b919050565b5f67ffffffffffffffff821115610f5c57610f5b610eca565b5b602082029050602081019050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f9a82610f71565b9050919050565b610faa81610f90565b8114610fb4575f80fd5b50565b5f81519050610fc581610fa1565b92915050565b5f610fdd610fd884610f42565b610f28565b9050808382526020820190506020840283018581111561100057610fff610f6d565b5b835b8181101561102957806110158882610fb7565b845260208401935050602081019050611002565b5050509392505050565b5f82601f83011261104757611046610eb6565b5b8151611057848260208601610fcb565b91505092915050565b5f806040838503121561107657611075610e7b565b5b5f61108385828601610ea2565b925050602083015167ffffffffffffffff8111156110a4576110a3610e7f565b5b6110b085828601611033565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061110857607f821691505b60208210810361111b5761111a6110c4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261117d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611142565b6111878683611142565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6111c26111bd6111b884610e83565b61119f565b610e83565b9050919050565b5f819050919050565b6111db836111a8565b6111ef6111e7826111c9565b84845461114e565b825550505050565b5f90565b6112036111f7565b61120e8184846111d2565b505050565b5b81811015611231576112265f826111fb565b600181019050611214565b5050565b601f8211156112765761124781611121565b61125084611133565b8101602085101561125f578190505b61127361126b85611133565b830182611213565b50505b505050565b5f82821c905092915050565b5f6112965f198460080261127b565b1980831691505092915050565b5f6112ae8383611287565b9150826002028217905092915050565b6112c7826110ba565b67ffffffffffffffff8111156112e0576112df610eca565b5b6112ea82546110f1565b6112f5828285611235565b5f60209050601f831160018114611326575f8415611314578287015190505b61131e85826112a3565b865550611385565b601f19841661133486611121565b5f5b8281101561135b57848901518255600182019150602085019450602081019050611336565b868310156113785784890151611374601f891682611287565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6113c381610f90565b82525050565b5f819050919050565b6113db816113c9565b82525050565b5f6060820190506113f45f8301866113ba565b61140160208301856113d2565b61140e60408301846113ba565b949350505050565b5f82825260208201905092915050565b7f4552433737373a206d696e7420746f20746865207a65726f20616464726573735f82015250565b5f61145a602083611416565b915061146582611426565b602082019050919050565b5f6020820190508181035f8301526114878161144e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114c582610e83565b91506114d083610e83565b92508282019050808211156114e8576114e761148e565b5b92915050565b6114f781610e83565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61152f826114fd565b6115398185611507565b9350611549818560208601611517565b61155281610eba565b840191505092915050565b5f6060820190506115705f8301866114ee565b81810360208301526115828185611525565b905081810360408301526115968184611525565b9050949350505050565b5f6020820190506115b35f8301846114ee565b92915050565b7f4552433737373a207472616e736665722066726f6d20746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611613602683611416565b915061161e826115b9565b604082019050919050565b5f6020820190508181035f83015261164081611607565b9050919050565b7f4552433737373a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6116a1602483611416565b91506116ac82611647565b604082019050919050565b5f6020820190508181035f8301526116ce81611695565b9050919050565b5f6040820190506116e85f8301856113ba565b6116f560208301846113d2565b9392505050565b5f6020828403121561171157611710610e7b565b5b5f61171e84828501610fb7565b91505092915050565b5f60c08201905061173a5f8301896113ba565b61174760208301886113ba565b61175460408301876113ba565b61176160608301866114ee565b81810360808301526117738185611525565b905081810360a08301526117878184611525565b9050979650505050505050565b7f4552433737373a20746f6b656e20726563697069656e7420636f6e74726163745f8201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208201527f6b656e73526563697069656e7400000000000000000000000000000000000000604082015250565b5f611814604d83611416565b915061181f82611794565b606082019050919050565b5f6020820190508181035f83015261184181611808565b9050919050565b7f4552433737373a207472616e7366657220616d6f756e742065786365656473205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f6118a2602783611416565b91506118ad82611848565b604082019050919050565b5f6020820190508181035f8301526118cf81611896565b9050919050565b612966806118e35f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c8063959b8c3f116100a0578063d95b63711161006f578063d95b6371146102e0578063dd62ed3e14610310578063fad8b32a14610340578063fc673c4f1461035c578063fe9d93031461037857610114565b8063959b8c3f1461025a57806395d89b41146102765780639bd9bbc614610294578063a9059cbb146102b057610114565b806323b872dd116100e757806323b872dd146101a2578063313ce567146101d2578063556f0dc7146101f057806362ad1b831461020e57806370a082311461022a57610114565b806306e485381461011857806306fdde0314610136578063095ea7b31461015457806318160ddd14610184575b5f80fd5b610120610394565b60405161012d9190611a28565b60405180910390f35b61013e61041f565b60405161014b9190611ab8565b60405180910390f35b61016e60048036038101906101699190611b46565b6104af565b60405161017b9190611b9e565b60405180910390f35b61018c6104d1565b6040516101999190611bc6565b60405180910390f35b6101bc60048036038101906101b79190611bdf565b6104da565b6040516101c99190611b9e565b60405180910390f35b6101da610527565b6040516101e79190611c4a565b60405180910390f35b6101f861052f565b6040516102059190611bc6565b60405180910390f35b61022860048036038101906102239190611d8f565b610537565b005b610244600480360381019061023f9190611e3e565b61059d565b6040516102519190611bc6565b60405180910390f35b610274600480360381019061026f9190611e3e565b6105e2565b005b61027e610835565b60405161028b9190611ab8565b60405180910390f35b6102ae60048036038101906102a99190611e69565b6108c5565b005b6102ca60048036038101906102c59190611b46565b6108ee565b6040516102d79190611b9e565b60405180910390f35b6102fa60048036038101906102f59190611ed5565b61092a565b6040516103079190611b9e565b60405180910390f35b61032a60048036038101906103259190611ed5565b610acd565b6040516103379190611bc6565b60405180910390f35b61035a60048036038101906103559190611e3e565b610b4f565b005b61037660048036038101906103719190611f13565b610da2565b005b610392600480360381019061038d9190611faf565b610e04565b005b6060600480548060200260200160405190810160405280929190818152602001828054801561041557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103cc575b5050505050905090565b60606002805461042e90612036565b80601f016020809104026020016040519081016040528092919081815260200182805461045a90612036565b80156104a55780601f1061047c576101008083540402835291602001916104a5565b820191905f5260205f20905b81548152906001019060200180831161048857829003601f168201915b5050505050905090565b5f806104b9610e29565b90506104c6818585610e30565b600191505092915050565b5f600154905090565b5f806104e4610e29565b90506104f1858285610ff3565b61051b85858560405180602001604052805f81525060405180602001604052805f8152505f61107e565b60019150509392505050565b5f6012905090565b5f6001905090565b610548610542610e29565b8661092a565b610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e906120d6565b60405180910390fd5b6105968585858585600161107e565b5050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b8073ffffffffffffffffffffffffffffffffffffffff16610601610e29565b73ffffffffffffffffffffffffffffffffffffffff1603610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90612164565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156107395760075f6106b1610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690556107d1565b600160065f610746610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b6107d9610e29565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60606003805461084490612036565b80601f016020809104026020016040519081016040528092919081815260200182805461087090612036565b80156108bb5780601f10610892576101008083540402835291602001916108bb565b820191905f5260205f20905b81548152906001019060200180831161089e57829003601f168201915b5050505050905090565b6108e96108d0610e29565b84848460405180602001604052805f815250600161107e565b505050565b5f6109206108fa610e29565b848460405180602001604052805f81525060405180602001604052805f8152505f61107e565b6001905092915050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a39575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610a38575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b5b80610ac5575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b905092915050565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b57610e29565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb906121f2565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610caf57600160075f610c20610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610d3e565b60065f610cba610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555b610d46610e29565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610db3610dad610e29565b8561092a565b610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906120d6565b60405180910390fd5b610dfe84848484611199565b50505050565b610e25610e0f610e29565b838360405180602001604052805f815250611199565b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590612280565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061230e565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fe69190611bc6565b60405180910390a3505050565b5f610ffe8484610acd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611078578181101561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190612376565b60405180910390fd5b6110778484848403610e30565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390612404565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190612492565b60405180910390fd5b5f611163610e29565b90506111738188888888886113e0565b61118181888888888861153e565b61119081888888888888611750565b50505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612520565b60405180910390fd5b5f611210610e29565b905061122081865f8787876113e0565b61122c81865f87611919565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050848110156112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a6906125ae565b60405180910390fd5b8481035f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508460015f82825461130391906125f9565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a409887878760405161136b9392919061267e565b60405180910390a35f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516113d09190611bc6565b60405180910390a3505050505050565b5f731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b81526004016114509291906126e8565b602060405180830381865afa15801561146b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612723565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611535578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b81526004016115079695949392919061274e565b5f604051808303815f87803b15801561151e575f80fd5b505af1158015611530573d5f803e3d5ffd5b505050505b50505050505050565b61154a86868686611919565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050838110156115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c49061282b565b60405180910390fd5b8381035f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550835f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461165b9190612849565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878787876040516116da9392919061267e565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161173f9190611bc6565b60405180910390a350505050505050565b5f731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b81526004016117c09291906126e8565b602060405180830381865afa1580156117db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ff9190612723565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118a8578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b81526004016118769695949392919061274e565b5f604051808303815f87803b15801561188d575f80fd5b505af115801561189f573d5f803e3d5ffd5b5050505061190f565b811561190e576118cd8673ffffffffffffffffffffffffffffffffffffffff1661191f565b1561190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490612912565b60405180910390fd5b5b5b5050505050505050565b50505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119938261196a565b9050919050565b6119a381611989565b82525050565b5f6119b4838361199a565b60208301905092915050565b5f602082019050919050565b5f6119d682611941565b6119e0818561194b565b93506119eb8361195b565b805f5b83811015611a1b578151611a0288826119a9565b9750611a0d836119c0565b9250506001810190506119ee565b5085935050505092915050565b5f6020820190508181035f830152611a4081846119cc565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611a8a82611a48565b611a948185611a52565b9350611aa4818560208601611a62565b611aad81611a70565b840191505092915050565b5f6020820190508181035f830152611ad08184611a80565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b611af281611989565b8114611afc575f80fd5b50565b5f81359050611b0d81611ae9565b92915050565b5f819050919050565b611b2581611b13565b8114611b2f575f80fd5b50565b5f81359050611b4081611b1c565b92915050565b5f8060408385031215611b5c57611b5b611ae1565b5b5f611b6985828601611aff565b9250506020611b7a85828601611b32565b9150509250929050565b5f8115159050919050565b611b9881611b84565b82525050565b5f602082019050611bb15f830184611b8f565b92915050565b611bc081611b13565b82525050565b5f602082019050611bd95f830184611bb7565b92915050565b5f805f60608486031215611bf657611bf5611ae1565b5b5f611c0386828701611aff565b9350506020611c1486828701611aff565b9250506040611c2586828701611b32565b9150509250925092565b5f60ff82169050919050565b611c4481611c2f565b82525050565b5f602082019050611c5d5f830184611c3b565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611ca182611a70565b810181811067ffffffffffffffff82111715611cc057611cbf611c6b565b5b80604052505050565b5f611cd2611ad8565b9050611cde8282611c98565b919050565b5f67ffffffffffffffff821115611cfd57611cfc611c6b565b5b611d0682611a70565b9050602081019050919050565b828183375f83830152505050565b5f611d33611d2e84611ce3565b611cc9565b905082815260208101848484011115611d4f57611d4e611c67565b5b611d5a848285611d13565b509392505050565b5f82601f830112611d7657611d75611c63565b5b8135611d86848260208601611d21565b91505092915050565b5f805f805f60a08688031215611da857611da7611ae1565b5b5f611db588828901611aff565b9550506020611dc688828901611aff565b9450506040611dd788828901611b32565b935050606086013567ffffffffffffffff811115611df857611df7611ae5565b5b611e0488828901611d62565b925050608086013567ffffffffffffffff811115611e2557611e24611ae5565b5b611e3188828901611d62565b9150509295509295909350565b5f60208284031215611e5357611e52611ae1565b5b5f611e6084828501611aff565b91505092915050565b5f805f60608486031215611e8057611e7f611ae1565b5b5f611e8d86828701611aff565b9350506020611e9e86828701611b32565b925050604084013567ffffffffffffffff811115611ebf57611ebe611ae5565b5b611ecb86828701611d62565b9150509250925092565b5f8060408385031215611eeb57611eea611ae1565b5b5f611ef885828601611aff565b9250506020611f0985828601611aff565b9150509250929050565b5f805f8060808587031215611f2b57611f2a611ae1565b5b5f611f3887828801611aff565b9450506020611f4987828801611b32565b935050604085013567ffffffffffffffff811115611f6a57611f69611ae5565b5b611f7687828801611d62565b925050606085013567ffffffffffffffff811115611f9757611f96611ae5565b5b611fa387828801611d62565b91505092959194509250565b5f8060408385031215611fc557611fc4611ae1565b5b5f611fd285828601611b32565b925050602083013567ffffffffffffffff811115611ff357611ff2611ae5565b5b611fff85828601611d62565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061204d57607f821691505b6020821081036120605761205f612009565b5b50919050565b7f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f5f8201527f7220666f7220686f6c6465720000000000000000000000000000000000000000602082015250565b5f6120c0602c83611a52565b91506120cb82612066565b604082019050919050565b5f6020820190508181035f8301526120ed816120b4565b9050919050565b7f4552433737373a20617574686f72697a696e672073656c66206173206f7065725f8201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b5f61214e602483611a52565b9150612159826120f4565b604082019050919050565b5f6020820190508181035f83015261217b81612142565b9050919050565b7f4552433737373a207265766f6b696e672073656c66206173206f70657261746f5f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6121dc602183611a52565b91506121e782612182565b604082019050919050565b5f6020820190508181035f830152612209816121d0565b9050919050565b7f4552433737373a20617070726f76652066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61226a602583611a52565b915061227582612210565b604082019050919050565b5f6020820190508181035f8301526122978161225e565b9050919050565b7f4552433737373a20617070726f766520746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6122f8602383611a52565b91506123038261229e565b604082019050919050565b5f6020820190508181035f830152612325816122ec565b9050919050565b7f4552433737373a20696e73756666696369656e7420616c6c6f77616e636500005f82015250565b5f612360601e83611a52565b915061236b8261232c565b602082019050919050565b5f6020820190508181035f83015261238d81612354565b9050919050565b7f4552433737373a207472616e736665722066726f6d20746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6123ee602683611a52565b91506123f982612394565b604082019050919050565b5f6020820190508181035f83015261241b816123e2565b9050919050565b7f4552433737373a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61247c602483611a52565b915061248782612422565b604082019050919050565b5f6020820190508181035f8301526124a981612470565b9050919050565b7f4552433737373a206275726e2066726f6d20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61250a602283611a52565b9150612515826124b0565b604082019050919050565b5f6020820190508181035f830152612537816124fe565b9050919050565b7f4552433737373a206275726e20616d6f756e7420657863656564732062616c615f8201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b5f612598602383611a52565b91506125a38261253e565b604082019050919050565b5f6020820190508181035f8301526125c58161258c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61260382611b13565b915061260e83611b13565b9250828203905081811115612626576126256125cc565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f6126508261262c565b61265a8185612636565b935061266a818560208601611a62565b61267381611a70565b840191505092915050565b5f6060820190506126915f830186611bb7565b81810360208301526126a38185612646565b905081810360408301526126b78184612646565b9050949350505050565b6126ca81611989565b82525050565b5f819050919050565b6126e2816126d0565b82525050565b5f6040820190506126fb5f8301856126c1565b61270860208301846126d9565b9392505050565b5f8151905061271d81611ae9565b92915050565b5f6020828403121561273857612737611ae1565b5b5f6127458482850161270f565b91505092915050565b5f60c0820190506127615f8301896126c1565b61276e60208301886126c1565b61277b60408301876126c1565b6127886060830186611bb7565b818103608083015261279a8185612646565b905081810360a08301526127ae8184612646565b9050979650505050505050565b7f4552433737373a207472616e7366657220616d6f756e742065786365656473205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f612815602783611a52565b9150612820826127bb565b604082019050919050565b5f6020820190508181035f83015261284281612809565b9050919050565b5f61285382611b13565b915061285e83611b13565b9250828201905080821115612876576128756125cc565b5b92915050565b7f4552433737373a20746f6b656e20726563697069656e7420636f6e74726163745f8201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208201527f6b656e73526563697069656e7400000000000000000000000000000000000000604082015250565b5f6128fc604d83611a52565b91506129078261287c565b606082019050919050565b5f6020820190508181035f830152612929816128f0565b905091905056fea26469706673582212206467823260d0af856139d5a8eb1212ee13416e7c9fad23a984d7336ebaa462b764736f6c63430008190033000000000000000000000000000000000000000002f90193ef3075fa9800000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610114575f3560e01c8063959b8c3f116100a0578063d95b63711161006f578063d95b6371146102e0578063dd62ed3e14610310578063fad8b32a14610340578063fc673c4f1461035c578063fe9d93031461037857610114565b8063959b8c3f1461025a57806395d89b41146102765780639bd9bbc614610294578063a9059cbb146102b057610114565b806323b872dd116100e757806323b872dd146101a2578063313ce567146101d2578063556f0dc7146101f057806362ad1b831461020e57806370a082311461022a57610114565b806306e485381461011857806306fdde0314610136578063095ea7b31461015457806318160ddd14610184575b5f80fd5b610120610394565b60405161012d9190611a28565b60405180910390f35b61013e61041f565b60405161014b9190611ab8565b60405180910390f35b61016e60048036038101906101699190611b46565b6104af565b60405161017b9190611b9e565b60405180910390f35b61018c6104d1565b6040516101999190611bc6565b60405180910390f35b6101bc60048036038101906101b79190611bdf565b6104da565b6040516101c99190611b9e565b60405180910390f35b6101da610527565b6040516101e79190611c4a565b60405180910390f35b6101f861052f565b6040516102059190611bc6565b60405180910390f35b61022860048036038101906102239190611d8f565b610537565b005b610244600480360381019061023f9190611e3e565b61059d565b6040516102519190611bc6565b60405180910390f35b610274600480360381019061026f9190611e3e565b6105e2565b005b61027e610835565b60405161028b9190611ab8565b60405180910390f35b6102ae60048036038101906102a99190611e69565b6108c5565b005b6102ca60048036038101906102c59190611b46565b6108ee565b6040516102d79190611b9e565b60405180910390f35b6102fa60048036038101906102f59190611ed5565b61092a565b6040516103079190611b9e565b60405180910390f35b61032a60048036038101906103259190611ed5565b610acd565b6040516103379190611bc6565b60405180910390f35b61035a60048036038101906103559190611e3e565b610b4f565b005b61037660048036038101906103719190611f13565b610da2565b005b610392600480360381019061038d9190611faf565b610e04565b005b6060600480548060200260200160405190810160405280929190818152602001828054801561041557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116103cc575b5050505050905090565b60606002805461042e90612036565b80601f016020809104026020016040519081016040528092919081815260200182805461045a90612036565b80156104a55780601f1061047c576101008083540402835291602001916104a5565b820191905f5260205f20905b81548152906001019060200180831161048857829003601f168201915b5050505050905090565b5f806104b9610e29565b90506104c6818585610e30565b600191505092915050565b5f600154905090565b5f806104e4610e29565b90506104f1858285610ff3565b61051b85858560405180602001604052805f81525060405180602001604052805f8152505f61107e565b60019150509392505050565b5f6012905090565b5f6001905090565b610548610542610e29565b8661092a565b610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e906120d6565b60405180910390fd5b6105968585858585600161107e565b5050505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b8073ffffffffffffffffffffffffffffffffffffffff16610601610e29565b73ffffffffffffffffffffffffffffffffffffffff1603610657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e90612164565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156107395760075f6106b1610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690556107d1565b600160065f610746610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505b6107d9610e29565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60606003805461084490612036565b80601f016020809104026020016040519081016040528092919081815260200182805461087090612036565b80156108bb5780601f10610892576101008083540402835291602001916108bb565b820191905f5260205f20905b81548152906001019060200180831161089e57829003601f168201915b5050505050905090565b6108e96108d0610e29565b84848460405180602001604052805f815250600161107e565b505050565b5f6109206108fa610e29565b848460405180602001604052805f81525060405180602001604052805f8152505f61107e565b6001905092915050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a39575060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015610a38575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b5b80610ac5575060065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b905092915050565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b57610e29565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb906121f2565b60405180910390fd5b60055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610caf57600160075f610c20610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610d3e565b60065f610cba610e29565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549060ff02191690555b610d46610e29565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b610db3610dad610e29565b8561092a565b610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de9906120d6565b60405180910390fd5b610dfe84848484611199565b50505050565b610e25610e0f610e29565b838360405180602001604052805f815250611199565b5050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590612280565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061230e565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fe69190611bc6565b60405180910390a3505050565b5f610ffe8484610acd565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611078578181101561106a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106190612376565b60405180910390fd5b6110778484848403610e30565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390612404565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190612492565b60405180910390fd5b5f611163610e29565b90506111738188888888886113e0565b61118181888888888861153e565b61119081888888888888611750565b50505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90612520565b60405180910390fd5b5f611210610e29565b905061122081865f8787876113e0565b61122c81865f87611919565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050848110156112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a6906125ae565b60405180910390fd5b8481035f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508460015f82825461130391906125f9565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a409887878760405161136b9392919061267e565b60405180910390a35f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040516113d09190611bc6565b60405180910390a3505050505050565b5f731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956040518363ffffffff1660e01b81526004016114509291906126e8565b602060405180830381865afa15801561146b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612723565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611535578073ffffffffffffffffffffffffffffffffffffffff166375ab97828888888888886040518763ffffffff1660e01b81526004016115079695949392919061274e565b5f604051808303815f87803b15801561151e575f80fd5b505af1158015611530573d5f803e3d5ffd5b505050505b50505050505050565b61154a86868686611919565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050838110156115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c49061282b565b60405180910390fd5b8381035f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550835f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461165b9190612849565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc826146779878787876040516116da9392919061267e565b60405180910390a48473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405161173f9190611bc6565b60405180910390a350505050505050565b5f731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff1663aabbb8ca877fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6040518363ffffffff1660e01b81526004016117c09291906126e8565b602060405180830381865afa1580156117db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ff9190612723565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118a8578073ffffffffffffffffffffffffffffffffffffffff166223de298989898989896040518763ffffffff1660e01b81526004016118769695949392919061274e565b5f604051808303815f87803b15801561188d575f80fd5b505af115801561189f573d5f803e3d5ffd5b5050505061190f565b811561190e576118cd8673ffffffffffffffffffffffffffffffffffffffff1661191f565b1561190d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190490612912565b60405180910390fd5b5b5b5050505050505050565b50505050565b5f808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119938261196a565b9050919050565b6119a381611989565b82525050565b5f6119b4838361199a565b60208301905092915050565b5f602082019050919050565b5f6119d682611941565b6119e0818561194b565b93506119eb8361195b565b805f5b83811015611a1b578151611a0288826119a9565b9750611a0d836119c0565b9250506001810190506119ee565b5085935050505092915050565b5f6020820190508181035f830152611a4081846119cc565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611a8a82611a48565b611a948185611a52565b9350611aa4818560208601611a62565b611aad81611a70565b840191505092915050565b5f6020820190508181035f830152611ad08184611a80565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b611af281611989565b8114611afc575f80fd5b50565b5f81359050611b0d81611ae9565b92915050565b5f819050919050565b611b2581611b13565b8114611b2f575f80fd5b50565b5f81359050611b4081611b1c565b92915050565b5f8060408385031215611b5c57611b5b611ae1565b5b5f611b6985828601611aff565b9250506020611b7a85828601611b32565b9150509250929050565b5f8115159050919050565b611b9881611b84565b82525050565b5f602082019050611bb15f830184611b8f565b92915050565b611bc081611b13565b82525050565b5f602082019050611bd95f830184611bb7565b92915050565b5f805f60608486031215611bf657611bf5611ae1565b5b5f611c0386828701611aff565b9350506020611c1486828701611aff565b9250506040611c2586828701611b32565b9150509250925092565b5f60ff82169050919050565b611c4481611c2f565b82525050565b5f602082019050611c5d5f830184611c3b565b92915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611ca182611a70565b810181811067ffffffffffffffff82111715611cc057611cbf611c6b565b5b80604052505050565b5f611cd2611ad8565b9050611cde8282611c98565b919050565b5f67ffffffffffffffff821115611cfd57611cfc611c6b565b5b611d0682611a70565b9050602081019050919050565b828183375f83830152505050565b5f611d33611d2e84611ce3565b611cc9565b905082815260208101848484011115611d4f57611d4e611c67565b5b611d5a848285611d13565b509392505050565b5f82601f830112611d7657611d75611c63565b5b8135611d86848260208601611d21565b91505092915050565b5f805f805f60a08688031215611da857611da7611ae1565b5b5f611db588828901611aff565b9550506020611dc688828901611aff565b9450506040611dd788828901611b32565b935050606086013567ffffffffffffffff811115611df857611df7611ae5565b5b611e0488828901611d62565b925050608086013567ffffffffffffffff811115611e2557611e24611ae5565b5b611e3188828901611d62565b9150509295509295909350565b5f60208284031215611e5357611e52611ae1565b5b5f611e6084828501611aff565b91505092915050565b5f805f60608486031215611e8057611e7f611ae1565b5b5f611e8d86828701611aff565b9350506020611e9e86828701611b32565b925050604084013567ffffffffffffffff811115611ebf57611ebe611ae5565b5b611ecb86828701611d62565b9150509250925092565b5f8060408385031215611eeb57611eea611ae1565b5b5f611ef885828601611aff565b9250506020611f0985828601611aff565b9150509250929050565b5f805f8060808587031215611f2b57611f2a611ae1565b5b5f611f3887828801611aff565b9450506020611f4987828801611b32565b935050604085013567ffffffffffffffff811115611f6a57611f69611ae5565b5b611f7687828801611d62565b925050606085013567ffffffffffffffff811115611f9757611f96611ae5565b5b611fa387828801611d62565b91505092959194509250565b5f8060408385031215611fc557611fc4611ae1565b5b5f611fd285828601611b32565b925050602083013567ffffffffffffffff811115611ff357611ff2611ae5565b5b611fff85828601611d62565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061204d57607f821691505b6020821081036120605761205f612009565b5b50919050565b7f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f5f8201527f7220666f7220686f6c6465720000000000000000000000000000000000000000602082015250565b5f6120c0602c83611a52565b91506120cb82612066565b604082019050919050565b5f6020820190508181035f8301526120ed816120b4565b9050919050565b7f4552433737373a20617574686f72697a696e672073656c66206173206f7065725f8201527f61746f7200000000000000000000000000000000000000000000000000000000602082015250565b5f61214e602483611a52565b9150612159826120f4565b604082019050919050565b5f6020820190508181035f83015261217b81612142565b9050919050565b7f4552433737373a207265766f6b696e672073656c66206173206f70657261746f5f8201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b5f6121dc602183611a52565b91506121e782612182565b604082019050919050565b5f6020820190508181035f830152612209816121d0565b9050919050565b7f4552433737373a20617070726f76652066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61226a602583611a52565b915061227582612210565b604082019050919050565b5f6020820190508181035f8301526122978161225e565b9050919050565b7f4552433737373a20617070726f766520746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6122f8602383611a52565b91506123038261229e565b604082019050919050565b5f6020820190508181035f830152612325816122ec565b9050919050565b7f4552433737373a20696e73756666696369656e7420616c6c6f77616e636500005f82015250565b5f612360601e83611a52565b915061236b8261232c565b602082019050919050565b5f6020820190508181035f83015261238d81612354565b9050919050565b7f4552433737373a207472616e736665722066726f6d20746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6123ee602683611a52565b91506123f982612394565b604082019050919050565b5f6020820190508181035f83015261241b816123e2565b9050919050565b7f4552433737373a207472616e7366657220746f20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61247c602483611a52565b915061248782612422565b604082019050919050565b5f6020820190508181035f8301526124a981612470565b9050919050565b7f4552433737373a206275726e2066726f6d20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61250a602283611a52565b9150612515826124b0565b604082019050919050565b5f6020820190508181035f830152612537816124fe565b9050919050565b7f4552433737373a206275726e20616d6f756e7420657863656564732062616c615f8201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b5f612598602383611a52565b91506125a38261253e565b604082019050919050565b5f6020820190508181035f8301526125c58161258c565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61260382611b13565b915061260e83611b13565b9250828203905081811115612626576126256125cc565b5b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f6126508261262c565b61265a8185612636565b935061266a818560208601611a62565b61267381611a70565b840191505092915050565b5f6060820190506126915f830186611bb7565b81810360208301526126a38185612646565b905081810360408301526126b78184612646565b9050949350505050565b6126ca81611989565b82525050565b5f819050919050565b6126e2816126d0565b82525050565b5f6040820190506126fb5f8301856126c1565b61270860208301846126d9565b9392505050565b5f8151905061271d81611ae9565b92915050565b5f6020828403121561273857612737611ae1565b5b5f6127458482850161270f565b91505092915050565b5f60c0820190506127615f8301896126c1565b61276e60208301886126c1565b61277b60408301876126c1565b6127886060830186611bb7565b818103608083015261279a8185612646565b905081810360a08301526127ae8184612646565b9050979650505050505050565b7f4552433737373a207472616e7366657220616d6f756e742065786365656473205f8201527f62616c616e636500000000000000000000000000000000000000000000000000602082015250565b5f612815602783611a52565b9150612820826127bb565b604082019050919050565b5f6020820190508181035f83015261284281612809565b9050919050565b5f61285382611b13565b915061285e83611b13565b9250828201905080821115612876576128756125cc565b5b92915050565b7f4552433737373a20746f6b656e20726563697069656e7420636f6e74726163745f8201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60208201527f6b656e73526563697069656e7400000000000000000000000000000000000000604082015250565b5f6128fc604d83611a52565b91506129078261287c565b606082019050919050565b5f6020820190508181035f830152612929816128f0565b905091905056fea26469706673582212206467823260d0af856139d5a8eb1212ee13416e7c9fad23a984d7336ebaa462b764736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000002f90193ef3075fa9800000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : initialSupply (uint256): 920000000000000000000000000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000002f90193ef3075fa98000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42382:2107:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31436:122;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28276:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33018:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28986:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33641:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28673:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28847:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31662:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29192:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30609:362;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28413:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29449:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29821:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30278:273;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32592:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31026:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32089:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30105:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31436:122;31502:16;31531:22;31524:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31436:122;:::o;28276:90::-;28330:13;28356:5;28349:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28276:90;:::o;33018:177::-;33100:4;33110:14;33127:12;:10;:12::i;:::-;33110:29;;33143:32;33152:6;33160:7;33169:5;33143:8;:32::i;:::-;33186:4;33179:11;;;33018:177;;;;:::o;28986:115::-;29064:7;29084:12;;29077:19;;28986:115;:::o;33641:271::-;33757:4;33767:15;33785:12;:10;:12::i;:::-;33767:30;;33801:40;33817:6;33825:7;33834:6;33801:15;:40::i;:::-;33845:47;33851:6;33859:9;33870:6;33845:47;;;;;;;;;;;;;;;;;;;;;;;;33886:5;33845;:47::i;:::-;33903:4;33896:11;;;33641:271;;;;;:::o;28673:74::-;28722:5;28740:2;28733:9;;28673:74;:::o;28847:87::-;28908:7;28928:1;28921:8;;28847:87;:::o;31662:321::-;31831:35;31845:12;:10;:12::i;:::-;31859:6;31831:13;:35::i;:::-;31823:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;31920:58;31926:6;31934:9;31945:6;31953:4;31959:12;31973:4;31920:5;:58::i;:::-;31662:321;;;;;:::o;29192:142::-;29287:7;29307:9;:22;29317:11;29307:22;;;;;;;;;;;;;;;;29300:29;;29192:142;;;:::o;30609:362::-;30706:8;30690:24;;:12;:10;:12::i;:::-;:24;;;30682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30765:17;:27;30783:8;30765:27;;;;;;;;;;;;;;;;;;;;;;;;;30761:153;;;30805:24;:38;30830:12;:10;:12::i;:::-;30805:38;;;;;;;;;;;;;;;:48;30844:8;30805:48;;;;;;;;;;;;;;;;30798:55;;;;;;;;;;;30761:153;;;30905:4;30868:10;:24;30879:12;:10;:12::i;:::-;30868:24;;;;;;;;;;;;;;;:34;30893:8;30868:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;30761:153;30953:12;:10;:12::i;:::-;30924:42;;30943:8;30924:42;;;;;;;;;;;;30609:362;:::o;28413:94::-;28469:13;28495:7;28488:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28413:94;:::o;29449:165::-;29555:54;29561:12;:10;:12::i;:::-;29575:9;29586:6;29594:4;29555:54;;;;;;;;;;;;29604:4;29555:5;:54::i;:::-;29449:165;;;:::o;29821:169::-;29907:4;29917:53;29923:12;:10;:12::i;:::-;29937:9;29948:6;29917:53;;;;;;;;;;;;;;;;;;;;;;;;29964:5;29917;:53::i;:::-;29981:4;29974:11;;29821:169;;;;:::o;30278:273::-;30378:4;30409:11;30397:23;;:8;:23;;;:110;;;;30427:17;:27;30445:8;30427:27;;;;;;;;;;;;;;;;;;;;;;;;;:79;;;;;30459:24;:37;30484:11;30459:37;;;;;;;;;;;;;;;:47;30497:8;30459:47;;;;;;;;;;;;;;;;;;;;;;;;;30458:48;30427:79;30397:110;:149;;;;30513:10;:23;30524:11;30513:23;;;;;;;;;;;;;;;:33;30537:8;30513:33;;;;;;;;;;;;;;;;;;;;;;;;;30397:149;30388:158;;30278:273;;;;:::o;32592:143::-;32682:7;32702:11;:19;32714:6;32702:19;;;;;;;;;;;;;;;:28;32722:7;32702:28;;;;;;;;;;;;;;;;32695:35;;32592:143;;;;:::o;31026:353::-;31116:12;:10;:12::i;:::-;31104:24;;:8;:24;;;31096:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31176:17;:27;31194:8;31176:27;;;;;;;;;;;;;;;;;;;;;;;;;31172:153;;;31260:4;31209:24;:38;31234:12;:10;:12::i;:::-;31209:38;;;;;;;;;;;;;;;:48;31248:8;31209:48;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;31172:153;;;31286:10;:24;31297:12;:10;:12::i;:::-;31286:24;;;;;;;;;;;;;;;:34;31311:8;31286:34;;;;;;;;;;;;;;;;31279:41;;;;;;;;;;;31172:153;31361:12;:10;:12::i;:::-;31335:39;;31351:8;31335:39;;;;;;;;;;;;31026:353;:::o;32089:285::-;32238:36;32252:12;:10;:12::i;:::-;32266:7;32238:13;:36::i;:::-;32230:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;32327:42;32333:7;32342:6;32350:4;32356:12;32327:5;:42::i;:::-;32089:285;;;;:::o;30105:119::-;30182:37;30188:12;:10;:12::i;:::-;30202:6;30210:4;30182:37;;;;;;;;;;;;:5;:37::i;:::-;30105:119;;:::o;5473:88::-;5526:7;5546:10;5539:17;;5473:88;:::o;38540:328::-;38663:1;38645:20;;:6;:20;;;38637:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38738:1;38719:21;;:7;:21;;;38711:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38817:5;38786:11;:19;38798:6;38786:19;;;;;;;;;;;;;;;:28;38806:7;38786:28;;;;;;;;;;;;;;;:36;;;;38848:7;38831:32;;38840:6;38831:32;;;38857:5;38831:32;;;;;;:::i;:::-;;;;;;;;38540:328;;;:::o;41217:358::-;41321:24;41348:25;41358:5;41365:7;41348:9;:25::i;:::-;41321:52;;41401:17;41381:16;:37;41377:194;;41452:6;41432:16;:26;;41424:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:51;41520:5;41527:7;41555:6;41536:16;:25;41511:8;:51::i;:::-;41377:194;41317:258;41217:358;;;:::o;36321:586::-;36515:1;36499:18;;:4;:18;;;36491:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36586:1;36572:16;;:2;:16;;;36564:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36635:16;36654:12;:10;:12::i;:::-;36635:31;;36672:69;36690:8;36700:4;36706:2;36710:6;36718:8;36728:12;36672:17;:69::i;:::-;36747:57;36753:8;36763:4;36769:2;36773:6;36781:8;36791:12;36747:5;:57::i;:::-;36810:92;36830:8;36840:4;36846:2;36850:6;36858:8;36868:12;36882:19;36810;:92::i;:::-;36487:420;36321:586;;;;;;:::o;37191:706::-;37339:1;37323:18;;:4;:18;;;37315:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37386:16;37405:12;:10;:12::i;:::-;37386:31;;37423:73;37441:8;37451:4;37465:1;37469:6;37477:4;37483:12;37423:17;:73::i;:::-;37502:56;37523:8;37533:4;37547:1;37551:6;37502:20;:56::i;:::-;37592:19;37614:9;:15;37624:4;37614:15;;;;;;;;;;;;;;;;37592:37;;37656:6;37641:11;:21;;37633:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37752:6;37738:11;:20;37720:9;:15;37730:4;37720:15;;;;;;;;;;;;;;;:38;;;;37782:6;37766:12;;:22;;;;;;;:::i;:::-;;;;;;;;37816:4;37799:50;;37806:8;37799:50;;;37822:6;37830:4;37836:12;37799:50;;;;;;;;:::i;:::-;;;;;;;;37881:1;37858:34;;37867:4;37858:34;;;37885:6;37858:34;;;;;;:::i;:::-;;;;;;;;37311:586;;37191:706;;;;:::o;39314:404::-;39479:19;26654:42;39501:41;;;39543:4;26897:31;39501:78;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39479:100;;39610:1;39587:25;;:11;:25;;;39583:131;;39632:11;39618:39;;;39658:8;39668:4;39674:2;39678:6;39686:8;39696:12;39618:91;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39583:131;39475:243;39314:404;;;;;;:::o;37902:515::-;38055:48;38076:8;38086:4;38092:2;38096:6;38055:20;:48::i;:::-;38109:19;38131:9;:15;38141:4;38131:15;;;;;;;;;;;;;;;;38109:37;;38173:6;38158:11;:21;;38150:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38273:6;38259:11;:20;38241:9;:15;38251:4;38241:15;;;;;;;;;;;;;;;:38;;;;38304:6;38287:9;:13;38297:2;38287:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;38342:2;38321:56;;38336:4;38321:56;;38326:8;38321:56;;;38346:6;38354:8;38364:12;38321:56;;;;;;;;:::i;:::-;;;;;;;;38401:2;38386:26;;38395:4;38386:26;;;38405:6;38386:26;;;;;;:::i;:::-;;;;;;;;38051:366;37902:515;;;;;;:::o;40374:586::-;40569:19;26654:42;40591:41;;;40633:2;26992:34;40591:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40569:101;;40701:1;40678:25;;:11;:25;;;40674:282;;40726:11;40709:44;;;40754:8;40764:4;40770:2;40774:6;40782:8;40792:12;40709:96;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40674:282;;;40820:19;40816:140;;;40854:15;:2;:13;;;:15::i;:::-;40853:16;40845:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;40816:140;40674:282;40565:395;40374:586;;;;;;;:::o;42161:121::-;;;;;:::o;6826:295::-;6886:4;7115:1;7093:7;:19;;;:23;7086:30;;6826:295;;;:::o;7:114:1:-;74:6;108:5;102:12;92:22;;7:114;;;:::o;127:184::-;226:11;260:6;255:3;248:19;300:4;295:3;291:14;276:29;;127:184;;;;:::o;317:132::-;384:4;407:3;399:11;;437:4;432:3;428:14;420:22;;317:132;;;:::o;455:126::-;492:7;532:42;525:5;521:54;510:65;;455:126;;;:::o;587:96::-;624:7;653:24;671:5;653:24;:::i;:::-;642:35;;587:96;;;:::o;689:108::-;766:24;784:5;766:24;:::i;:::-;761:3;754:37;689:108;;:::o;803:179::-;872:10;893:46;935:3;927:6;893:46;:::i;:::-;971:4;966:3;962:14;948:28;;803:179;;;;:::o;988:113::-;1058:4;1090;1085:3;1081:14;1073:22;;988:113;;;:::o;1137:732::-;1256:3;1285:54;1333:5;1285:54;:::i;:::-;1355:86;1434:6;1429:3;1355:86;:::i;:::-;1348:93;;1465:56;1515:5;1465:56;:::i;:::-;1544:7;1575:1;1560:284;1585:6;1582:1;1579:13;1560:284;;;1661:6;1655:13;1688:63;1747:3;1732:13;1688:63;:::i;:::-;1681:70;;1774:60;1827:6;1774:60;:::i;:::-;1764:70;;1620:224;1607:1;1604;1600:9;1595:14;;1560:284;;;1564:14;1860:3;1853:10;;1261:608;;;1137:732;;;;:::o;1875:373::-;2018:4;2056:2;2045:9;2041:18;2033:26;;2105:9;2099:4;2095:20;2091:1;2080:9;2076:17;2069:47;2133:108;2236:4;2227:6;2133:108;:::i;:::-;2125:116;;1875:373;;;;:::o;2254:99::-;2306:6;2340:5;2334:12;2324:22;;2254:99;;;:::o;2359:169::-;2443:11;2477:6;2472:3;2465:19;2517:4;2512:3;2508:14;2493:29;;2359:169;;;;:::o;2534:139::-;2623:6;2618:3;2613;2607:23;2664:1;2655:6;2650:3;2646:16;2639:27;2534:139;;;:::o;2679:102::-;2720:6;2771:2;2767:7;2762:2;2755:5;2751:14;2747:28;2737:38;;2679:102;;;:::o;2787:377::-;2875:3;2903:39;2936:5;2903:39;:::i;:::-;2958:71;3022:6;3017:3;2958:71;:::i;:::-;2951:78;;3038:65;3096:6;3091:3;3084:4;3077:5;3073:16;3038:65;:::i;:::-;3128:29;3150:6;3128:29;:::i;:::-;3123:3;3119:39;3112:46;;2879:285;2787:377;;;;:::o;3170:313::-;3283:4;3321:2;3310:9;3306:18;3298:26;;3370:9;3364:4;3360:20;3356:1;3345:9;3341:17;3334:47;3398:78;3471:4;3462:6;3398:78;:::i;:::-;3390:86;;3170:313;;;;:::o;3489:75::-;3522:6;3555:2;3549:9;3539:19;;3489:75;:::o;3570:117::-;3679:1;3676;3669:12;3693:117;3802:1;3799;3792:12;3816:122;3889:24;3907:5;3889:24;:::i;:::-;3882:5;3879:35;3869:63;;3928:1;3925;3918:12;3869:63;3816:122;:::o;3944:139::-;3990:5;4028:6;4015:20;4006:29;;4044:33;4071:5;4044:33;:::i;:::-;3944:139;;;;:::o;4089:77::-;4126:7;4155:5;4144:16;;4089:77;;;:::o;4172:122::-;4245:24;4263:5;4245:24;:::i;:::-;4238:5;4235:35;4225:63;;4284:1;4281;4274:12;4225:63;4172:122;:::o;4300:139::-;4346:5;4384:6;4371:20;4362:29;;4400:33;4427:5;4400:33;:::i;:::-;4300:139;;;;:::o;4445:474::-;4513:6;4521;4570:2;4558:9;4549:7;4545:23;4541:32;4538:119;;;4576:79;;:::i;:::-;4538:119;4696:1;4721:53;4766:7;4757:6;4746:9;4742:22;4721:53;:::i;:::-;4711:63;;4667:117;4823:2;4849:53;4894:7;4885:6;4874:9;4870:22;4849:53;:::i;:::-;4839:63;;4794:118;4445:474;;;;;:::o;4925:90::-;4959:7;5002:5;4995:13;4988:21;4977:32;;4925:90;;;:::o;5021:109::-;5102:21;5117:5;5102:21;:::i;:::-;5097:3;5090:34;5021:109;;:::o;5136:210::-;5223:4;5261:2;5250:9;5246:18;5238:26;;5274:65;5336:1;5325:9;5321:17;5312:6;5274:65;:::i;:::-;5136:210;;;;:::o;5352:118::-;5439:24;5457:5;5439:24;:::i;:::-;5434:3;5427:37;5352:118;;:::o;5476:222::-;5569:4;5607:2;5596:9;5592:18;5584:26;;5620:71;5688:1;5677:9;5673:17;5664:6;5620:71;:::i;:::-;5476:222;;;;:::o;5704:619::-;5781:6;5789;5797;5846:2;5834:9;5825:7;5821:23;5817:32;5814:119;;;5852:79;;:::i;:::-;5814:119;5972:1;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5943:117;6099:2;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6070:118;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;5704:619;;;;;:::o;6329:86::-;6364:7;6404:4;6397:5;6393:16;6382:27;;6329:86;;;:::o;6421:112::-;6504:22;6520:5;6504:22;:::i;:::-;6499:3;6492:35;6421:112;;:::o;6539:214::-;6628:4;6666:2;6655:9;6651:18;6643:26;;6679:67;6743:1;6732:9;6728:17;6719:6;6679:67;:::i;:::-;6539:214;;;;:::o;6759:117::-;6868:1;6865;6858:12;6882:117;6991:1;6988;6981:12;7005:180;7053:77;7050:1;7043:88;7150:4;7147:1;7140:15;7174:4;7171:1;7164:15;7191:281;7274:27;7296:4;7274:27;:::i;:::-;7266:6;7262:40;7404:6;7392:10;7389:22;7368:18;7356:10;7353:34;7350:62;7347:88;;;7415:18;;:::i;:::-;7347:88;7455:10;7451:2;7444:22;7234:238;7191:281;;:::o;7478:129::-;7512:6;7539:20;;:::i;:::-;7529:30;;7568:33;7596:4;7588:6;7568:33;:::i;:::-;7478:129;;;:::o;7613:307::-;7674:4;7764:18;7756:6;7753:30;7750:56;;;7786:18;;:::i;:::-;7750:56;7824:29;7846:6;7824:29;:::i;:::-;7816:37;;7908:4;7902;7898:15;7890:23;;7613:307;;;:::o;7926:148::-;8024:6;8019:3;8014;8001:30;8065:1;8056:6;8051:3;8047:16;8040:27;7926:148;;;:::o;8080:423::-;8157:5;8182:65;8198:48;8239:6;8198:48;:::i;:::-;8182:65;:::i;:::-;8173:74;;8270:6;8263:5;8256:21;8308:4;8301:5;8297:16;8346:3;8337:6;8332:3;8328:16;8325:25;8322:112;;;8353:79;;:::i;:::-;8322:112;8443:54;8490:6;8485:3;8480;8443:54;:::i;:::-;8163:340;8080:423;;;;;:::o;8522:338::-;8577:5;8626:3;8619:4;8611:6;8607:17;8603:27;8593:122;;8634:79;;:::i;:::-;8593:122;8751:6;8738:20;8776:78;8850:3;8842:6;8835:4;8827:6;8823:17;8776:78;:::i;:::-;8767:87;;8583:277;8522:338;;;;:::o;8866:1267::-;8979:6;8987;8995;9003;9011;9060:3;9048:9;9039:7;9035:23;9031:33;9028:120;;;9067:79;;:::i;:::-;9028:120;9187:1;9212:53;9257:7;9248:6;9237:9;9233:22;9212:53;:::i;:::-;9202:63;;9158:117;9314:2;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9285:118;9442:2;9468:53;9513:7;9504:6;9493:9;9489:22;9468:53;:::i;:::-;9458:63;;9413:118;9598:2;9587:9;9583:18;9570:32;9629:18;9621:6;9618:30;9615:117;;;9651:79;;:::i;:::-;9615:117;9756:62;9810:7;9801:6;9790:9;9786:22;9756:62;:::i;:::-;9746:72;;9541:287;9895:3;9884:9;9880:19;9867:33;9927:18;9919:6;9916:30;9913:117;;;9949:79;;:::i;:::-;9913:117;10054:62;10108:7;10099:6;10088:9;10084:22;10054:62;:::i;:::-;10044:72;;9838:288;8866:1267;;;;;;;;:::o;10139:329::-;10198:6;10247:2;10235:9;10226:7;10222:23;10218:32;10215:119;;;10253:79;;:::i;:::-;10215:119;10373:1;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10344:117;10139:329;;;;:::o;10474:797::-;10560:6;10568;10576;10625:2;10613:9;10604:7;10600:23;10596:32;10593:119;;;10631:79;;:::i;:::-;10593:119;10751:1;10776:53;10821:7;10812:6;10801:9;10797:22;10776:53;:::i;:::-;10766:63;;10722:117;10878:2;10904:53;10949:7;10940:6;10929:9;10925:22;10904:53;:::i;:::-;10894:63;;10849:118;11034:2;11023:9;11019:18;11006:32;11065:18;11057:6;11054:30;11051:117;;;11087:79;;:::i;:::-;11051:117;11192:62;11246:7;11237:6;11226:9;11222:22;11192:62;:::i;:::-;11182:72;;10977:287;10474:797;;;;;:::o;11277:474::-;11345:6;11353;11402:2;11390:9;11381:7;11377:23;11373:32;11370:119;;;11408:79;;:::i;:::-;11370:119;11528:1;11553:53;11598:7;11589:6;11578:9;11574:22;11553:53;:::i;:::-;11543:63;;11499:117;11655:2;11681:53;11726:7;11717:6;11706:9;11702:22;11681:53;:::i;:::-;11671:63;;11626:118;11277:474;;;;;:::o;11757:1121::-;11861:6;11869;11877;11885;11934:3;11922:9;11913:7;11909:23;11905:33;11902:120;;;11941:79;;:::i;:::-;11902:120;12061:1;12086:53;12131:7;12122:6;12111:9;12107:22;12086:53;:::i;:::-;12076:63;;12032:117;12188:2;12214:53;12259:7;12250:6;12239:9;12235:22;12214:53;:::i;:::-;12204:63;;12159:118;12344:2;12333:9;12329:18;12316:32;12375:18;12367:6;12364:30;12361:117;;;12397:79;;:::i;:::-;12361:117;12502:62;12556:7;12547:6;12536:9;12532:22;12502:62;:::i;:::-;12492:72;;12287:287;12641:2;12630:9;12626:18;12613:32;12672:18;12664:6;12661:30;12658:117;;;12694:79;;:::i;:::-;12658:117;12799:62;12853:7;12844:6;12833:9;12829:22;12799:62;:::i;:::-;12789:72;;12584:287;11757:1121;;;;;;;:::o;12884:652::-;12961:6;12969;13018:2;13006:9;12997:7;12993:23;12989:32;12986:119;;;13024:79;;:::i;:::-;12986:119;13144:1;13169:53;13214:7;13205:6;13194:9;13190:22;13169:53;:::i;:::-;13159:63;;13115:117;13299:2;13288:9;13284:18;13271:32;13330:18;13322:6;13319:30;13316:117;;;13352:79;;:::i;:::-;13316:117;13457:62;13511:7;13502:6;13491:9;13487:22;13457:62;:::i;:::-;13447:72;;13242:287;12884:652;;;;;:::o;13542:180::-;13590:77;13587:1;13580:88;13687:4;13684:1;13677:15;13711:4;13708:1;13701:15;13728:320;13772:6;13809:1;13803:4;13799:12;13789:22;;13856:1;13850:4;13846:12;13877:18;13867:81;;13933:4;13925:6;13921:17;13911:27;;13867:81;13995:2;13987:6;13984:14;13964:18;13961:38;13958:84;;14014:18;;:::i;:::-;13958:84;13779:269;13728:320;;;:::o;14054:231::-;14194:34;14190:1;14182:6;14178:14;14171:58;14263:14;14258:2;14250:6;14246:15;14239:39;14054:231;:::o;14291:366::-;14433:3;14454:67;14518:2;14513:3;14454:67;:::i;:::-;14447:74;;14530:93;14619:3;14530:93;:::i;:::-;14648:2;14643:3;14639:12;14632:19;;14291:366;;;:::o;14663:419::-;14829:4;14867:2;14856:9;14852:18;14844:26;;14916:9;14910:4;14906:20;14902:1;14891:9;14887:17;14880:47;14944:131;15070:4;14944:131;:::i;:::-;14936:139;;14663:419;;;:::o;15088:223::-;15228:34;15224:1;15216:6;15212:14;15205:58;15297:6;15292:2;15284:6;15280:15;15273:31;15088:223;:::o;15317:366::-;15459:3;15480:67;15544:2;15539:3;15480:67;:::i;:::-;15473:74;;15556:93;15645:3;15556:93;:::i;:::-;15674:2;15669:3;15665:12;15658:19;;15317:366;;;:::o;15689:419::-;15855:4;15893:2;15882:9;15878:18;15870:26;;15942:9;15936:4;15932:20;15928:1;15917:9;15913:17;15906:47;15970:131;16096:4;15970:131;:::i;:::-;15962:139;;15689:419;;;:::o;16114:220::-;16254:34;16250:1;16242:6;16238:14;16231:58;16323:3;16318:2;16310:6;16306:15;16299:28;16114:220;:::o;16340:366::-;16482:3;16503:67;16567:2;16562:3;16503:67;:::i;:::-;16496:74;;16579:93;16668:3;16579:93;:::i;:::-;16697:2;16692:3;16688:12;16681:19;;16340:366;;;:::o;16712:419::-;16878:4;16916:2;16905:9;16901:18;16893:26;;16965:9;16959:4;16955:20;16951:1;16940:9;16936:17;16929:47;16993:131;17119:4;16993:131;:::i;:::-;16985:139;;16712:419;;;:::o;17137:224::-;17277:34;17273:1;17265:6;17261:14;17254:58;17346:7;17341:2;17333:6;17329:15;17322:32;17137:224;:::o;17367:366::-;17509:3;17530:67;17594:2;17589:3;17530:67;:::i;:::-;17523:74;;17606:93;17695:3;17606:93;:::i;:::-;17724:2;17719:3;17715:12;17708:19;;17367:366;;;:::o;17739:419::-;17905:4;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17739:419;;;:::o;18164:222::-;18304:34;18300:1;18292:6;18288:14;18281:58;18373:5;18368:2;18360:6;18356:15;18349:30;18164:222;:::o;18392:366::-;18534:3;18555:67;18619:2;18614:3;18555:67;:::i;:::-;18548:74;;18631:93;18720:3;18631:93;:::i;:::-;18749:2;18744:3;18740:12;18733:19;;18392:366;;;:::o;18764:419::-;18930:4;18968:2;18957:9;18953:18;18945:26;;19017:9;19011:4;19007:20;19003:1;18992:9;18988:17;18981:47;19045:131;19171:4;19045:131;:::i;:::-;19037:139;;18764:419;;;:::o;19189:180::-;19329:32;19325:1;19317:6;19313:14;19306:56;19189:180;:::o;19375:366::-;19517:3;19538:67;19602:2;19597:3;19538:67;:::i;:::-;19531:74;;19614:93;19703:3;19614:93;:::i;:::-;19732:2;19727:3;19723:12;19716:19;;19375:366;;;:::o;19747:419::-;19913:4;19951:2;19940:9;19936:18;19928:26;;20000:9;19994:4;19990:20;19986:1;19975:9;19971:17;19964:47;20028:131;20154:4;20028:131;:::i;:::-;20020:139;;19747:419;;;:::o;20172:225::-;20312:34;20308:1;20300:6;20296:14;20289:58;20381:8;20376:2;20368:6;20364:15;20357:33;20172:225;:::o;20403:366::-;20545:3;20566:67;20630:2;20625:3;20566:67;:::i;:::-;20559:74;;20642:93;20731:3;20642:93;:::i;:::-;20760:2;20755:3;20751:12;20744:19;;20403:366;;;:::o;20775:419::-;20941:4;20979:2;20968:9;20964:18;20956:26;;21028:9;21022:4;21018:20;21014:1;21003:9;20999:17;20992:47;21056:131;21182:4;21056:131;:::i;:::-;21048:139;;20775:419;;;:::o;21200:223::-;21340:34;21336:1;21328:6;21324:14;21317:58;21409:6;21404:2;21396:6;21392:15;21385:31;21200:223;:::o;21429:366::-;21571:3;21592:67;21656:2;21651:3;21592:67;:::i;:::-;21585:74;;21668:93;21757:3;21668:93;:::i;:::-;21786:2;21781:3;21777:12;21770:19;;21429:366;;;:::o;21801:419::-;21967:4;22005:2;21994:9;21990:18;21982:26;;22054:9;22048:4;22044:20;22040:1;22029:9;22025:17;22018:47;22082:131;22208:4;22082:131;:::i;:::-;22074:139;;21801:419;;;:::o;22226:221::-;22366:34;22362:1;22354:6;22350:14;22343:58;22435:4;22430:2;22422:6;22418:15;22411:29;22226:221;:::o;22453:366::-;22595:3;22616:67;22680:2;22675:3;22616:67;:::i;:::-;22609:74;;22692:93;22781:3;22692:93;:::i;:::-;22810:2;22805:3;22801:12;22794:19;;22453:366;;;:::o;22825:419::-;22991:4;23029:2;23018:9;23014:18;23006:26;;23078:9;23072:4;23068:20;23064:1;23053:9;23049:17;23042:47;23106:131;23232:4;23106:131;:::i;:::-;23098:139;;22825:419;;;:::o;23250:222::-;23390:34;23386:1;23378:6;23374:14;23367:58;23459:5;23454:2;23446:6;23442:15;23435:30;23250:222;:::o;23478:366::-;23620:3;23641:67;23705:2;23700:3;23641:67;:::i;:::-;23634:74;;23717:93;23806:3;23717:93;:::i;:::-;23835:2;23830:3;23826:12;23819:19;;23478:366;;;:::o;23850:419::-;24016:4;24054:2;24043:9;24039:18;24031:26;;24103:9;24097:4;24093:20;24089:1;24078:9;24074:17;24067:47;24131:131;24257:4;24131:131;:::i;:::-;24123:139;;23850:419;;;:::o;24275:180::-;24323:77;24320:1;24313:88;24420:4;24417:1;24410:15;24444:4;24441:1;24434:15;24461:194;24501:4;24521:20;24539:1;24521:20;:::i;:::-;24516:25;;24555:20;24573:1;24555:20;:::i;:::-;24550:25;;24599:1;24596;24592:9;24584:17;;24623:1;24617:4;24614:11;24611:37;;;24628:18;;:::i;:::-;24611:37;24461:194;;;;:::o;24661:98::-;24712:6;24746:5;24740:12;24730:22;;24661:98;;;:::o;24765:168::-;24848:11;24882:6;24877:3;24870:19;24922:4;24917:3;24913:14;24898:29;;24765:168;;;;:::o;24939:373::-;25025:3;25053:38;25085:5;25053:38;:::i;:::-;25107:70;25170:6;25165:3;25107:70;:::i;:::-;25100:77;;25186:65;25244:6;25239:3;25232:4;25225:5;25221:16;25186:65;:::i;:::-;25276:29;25298:6;25276:29;:::i;:::-;25271:3;25267:39;25260:46;;25029:283;24939:373;;;;:::o;25318:616::-;25503:4;25541:2;25530:9;25526:18;25518:26;;25554:71;25622:1;25611:9;25607:17;25598:6;25554:71;:::i;:::-;25672:9;25666:4;25662:20;25657:2;25646:9;25642:18;25635:48;25700:76;25771:4;25762:6;25700:76;:::i;:::-;25692:84;;25823:9;25817:4;25813:20;25808:2;25797:9;25793:18;25786:48;25851:76;25922:4;25913:6;25851:76;:::i;:::-;25843:84;;25318:616;;;;;;:::o;25940:118::-;26027:24;26045:5;26027:24;:::i;:::-;26022:3;26015:37;25940:118;;:::o;26064:77::-;26101:7;26130:5;26119:16;;26064:77;;;:::o;26147:118::-;26234:24;26252:5;26234:24;:::i;:::-;26229:3;26222:37;26147:118;;:::o;26271:332::-;26392:4;26430:2;26419:9;26415:18;26407:26;;26443:71;26511:1;26500:9;26496:17;26487:6;26443:71;:::i;:::-;26524:72;26592:2;26581:9;26577:18;26568:6;26524:72;:::i;:::-;26271:332;;;;;:::o;26609:143::-;26666:5;26697:6;26691:13;26682:22;;26713:33;26740:5;26713:33;:::i;:::-;26609:143;;;;:::o;26758:351::-;26828:6;26877:2;26865:9;26856:7;26852:23;26848:32;26845:119;;;26883:79;;:::i;:::-;26845:119;27003:1;27028:64;27084:7;27075:6;27064:9;27060:22;27028:64;:::i;:::-;27018:74;;26974:128;26758:351;;;;:::o;27115:949::-;27384:4;27422:3;27411:9;27407:19;27399:27;;27436:71;27504:1;27493:9;27489:17;27480:6;27436:71;:::i;:::-;27517:72;27585:2;27574:9;27570:18;27561:6;27517:72;:::i;:::-;27599;27667:2;27656:9;27652:18;27643:6;27599:72;:::i;:::-;27681;27749:2;27738:9;27734:18;27725:6;27681:72;:::i;:::-;27801:9;27795:4;27791:20;27785:3;27774:9;27770:19;27763:49;27829:76;27900:4;27891:6;27829:76;:::i;:::-;27821:84;;27953:9;27947:4;27943:20;27937:3;27926:9;27922:19;27915:49;27981:76;28052:4;28043:6;27981:76;:::i;:::-;27973:84;;27115:949;;;;;;;;;:::o;28070:226::-;28210:34;28206:1;28198:6;28194:14;28187:58;28279:9;28274:2;28266:6;28262:15;28255:34;28070:226;:::o;28302:366::-;28444:3;28465:67;28529:2;28524:3;28465:67;:::i;:::-;28458:74;;28541:93;28630:3;28541:93;:::i;:::-;28659:2;28654:3;28650:12;28643:19;;28302:366;;;:::o;28674:419::-;28840:4;28878:2;28867:9;28863:18;28855:26;;28927:9;28921:4;28917:20;28913:1;28902:9;28898:17;28891:47;28955:131;29081:4;28955:131;:::i;:::-;28947:139;;28674:419;;;:::o;29099:191::-;29139:3;29158:20;29176:1;29158:20;:::i;:::-;29153:25;;29192:20;29210:1;29192:20;:::i;:::-;29187:25;;29235:1;29232;29228:9;29221:16;;29256:3;29253:1;29250:10;29247:36;;;29263:18;;:::i;:::-;29247:36;29099:191;;;;:::o;29296:301::-;29436:34;29432:1;29424:6;29420:14;29413:58;29505:34;29500:2;29492:6;29488:15;29481:59;29574:15;29569:2;29561:6;29557:15;29550:40;29296:301;:::o;29603:366::-;29745:3;29766:67;29830:2;29825:3;29766:67;:::i;:::-;29759:74;;29842:93;29931:3;29842:93;:::i;:::-;29960:2;29955:3;29951:12;29944:19;;29603:366;;;:::o;29975:419::-;30141:4;30179:2;30168:9;30164:18;30156:26;;30228:9;30222:4;30218:20;30214:1;30203:9;30199:17;30192:47;30256:131;30382:4;30256:131;:::i;:::-;30248:139;;29975:419;;;:::o
Swarm Source
ipfs://6467823260d0af856139d5a8eb1212ee13416e7c9fad23a984d7336ebaa462b7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.