Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Marketplace
Overview
Max Total Supply
1,000,000,000 QUIDD
Holders
2,052 (0.00%)
Market
Price
$0.01 @ 0.000002 ETH (+5.41%)
Onchain Market Cap
$8,024,060.00
Circulating Supply Market Cap
$2,213,741.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
6.191554369 QUIDDValue
$0.05 ( ~1.48240940099761E-05 Eth) [0.0000%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|---|---|---|---|---|
1 | PancakeSwap (v2) | 0XED8C8AA8299C10F067496BB66F8CC7FB338A3405-0X7961ADE0A767C0E5B67DD1A1F78BA44F727642ED | $0.008 0.0000026 Eth | $83.02 109.896 0XED8C8AA8299C10F067496BB66F8CC7FB338A3405 | 1.2935% |
2 | PancakeSwap (v2) | 0X7961ADE0A767C0E5B67DD1A1F78BA44F727642ED-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $0.008 0.0000024 Eth | $47.81 5,952.530 0X7961ADE0A767C0E5B67DD1A1F78BA44F727642ED | 70.0608% |
3 | ApeSwap | 0X7961ADE0A767C0E5B67DD1A1F78BA44F727642ED-0XBB4CDB9CBD36B01BD1CBAEBF2DE08D9173BC095C | $0.008 0.0000024 Eth | $20.53 2,543.707 0X7961ADE0A767C0E5B67DD1A1F78BA44F727642ED | 29.9392% |
Contract Name:
QUIDD
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-29 */ // Sources flattened with hardhat v2.6.4 https://hardhat.org // File @animoca/ethereum-contracts-core-1.1.2/contracts/metatx/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.7.6 <0.8.0; /* * 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. */ abstract contract ManagedIdentity { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { return msg.data; } } // File @animoca/ethereum-contracts-core-1.1.2/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC-173 Contract Ownership Standard * Note: the ERC-165 identifier for this interface is 0x7f5828d0 */ interface IERC173 { /** * Event emited when ownership of a contract changes. * @param previousOwner the previous owner. * @param newOwner the new owner. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * Get the address of the owner * @return The address of the owner. */ function owner() external view returns (address); /** * Set the address of the new owner of the contract * Set newOwner to address(0) to renounce any ownership. * @dev Emits an {OwnershipTransferred} event. * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership. */ function transferOwnership(address newOwner) external; } // File @animoca/ethereum-contracts-core-1.1.2/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is ManagedIdentity, IERC173 { address internal _owner; /** * Initializes the contract, setting the deployer as the initial owner. * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event. */ constructor(address owner_) { _owner = owner_; emit OwnershipTransferred(address(0), owner_); } /** * Gets the address of the current contract owner. */ function owner() public view virtual override returns (address) { return _owner; } /** * See {IERC173-transferOwnership(address)} * @dev Reverts if the sender is not the current contract owner. * @param newOwner the address of the new owner. Use the zero address to renounce the ownership. */ function transferOwnership(address newOwner) public virtual override { _requireOwnership(_msgSender()); _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } /** * @dev Reverts if `account` is not the contract owner. * @param account the account to test. */ function _requireOwnership(address account) internal virtual { require(account == this.owner(), "Ownable: not the owner"); } } // File @animoca/ethereum-contracts-core-1.1.2/contracts/utils/types/[email protected] // Partially derived from OpenZeppelin: // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol pragma solidity >=0.7.6 <0.8.0; /** * @dev Upgrades the address type to check if it is a contract. */ library AddressIsContract { /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } } // File @animoca/ethereum-contracts-core-1.1.2/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20Wrapper * Wraps ERC20 functions to support non-standard implementations which do not return a bool value. * Calls to the wrapped functions revert only if they throw or if they return false. */ library ERC20Wrapper { using AddressIsContract for address; function wrappedTransfer( IWrappedERC20 token, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function wrappedTransferFrom( IWrappedERC20 token, address from, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function wrappedApprove( IWrappedERC20 token, address spender, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function _callWithOptionalReturnData(IWrappedERC20 token, bytes memory callData) internal { address target = address(token); require(target.isContract(), "ERC20Wrapper: non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = target.call(callData); if (success) { if (data.length != 0) { require(abi.decode(data, (bool)), "ERC20Wrapper: operation failed"); } } else { // revert using a standard revert message if (data.length == 0) { revert("ERC20Wrapper: operation failed"); } // revert using the revert message coming from the call assembly { let size := mload(data) revert(add(32, data), size) } } } } interface IWrappedERC20 { function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function approve(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-core-1.1.2/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract Recoverable is ManagedIdentity, Ownable { using ERC20Wrapper for IWrappedERC20; /** * Extract ERC20 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC20 tokens * so that the extraction is limited to only amounts sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `tokens` and `amounts` do not have the same length. * @dev Reverts if one of `tokens` is does not implement the ERC20 transfer function. * @dev Reverts if one of the ERC20 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param tokens the list of ERC20 token addresses. * @param amounts the list of token amounts to transfer. */ function recoverERC20s( address[] calldata accounts, address[] calldata tokens, uint256[] calldata amounts ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IWrappedERC20(tokens[i]).wrappedTransfer(accounts[i], amounts[i]); } } /** * Extract ERC721 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC721 tokens * so that the extraction is limited to only tokens sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `contracts` and `amounts` do not have the same length. * @dev Reverts if one of `contracts` is does not implement the ERC721 transferFrom function. * @dev Reverts if one of the ERC721 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param contracts the list of ERC721 contract addresses. * @param tokenIds the list of token ids to transfer. */ function recoverERC721s( address[] calldata accounts, address[] calldata contracts, uint256[] calldata tokenIds ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == contracts.length && length == tokenIds.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IRecoverableERC721(contracts[i]).transferFrom(address(this), accounts[i], tokenIds[i]); } } } interface IRecoverableERC721 { /// See {IERC721-transferFrom(address,address,uint256)} function transferFrom( address from, address to, uint256 tokenId ) external; } // File @animoca/ethereum-contracts-core-1.1.2/contracts/introspection/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, basic interface * @dev See https://eips.ethereum.org/EIPS/eip-20 * Note: The ERC-165 identifier for this interface is 0x36372b07. */ interface IERC20 { /** * @dev Emitted when tokens are transferred, including zero value transfers. * @param _from The account where the transferred tokens are withdrawn from. * @param _to The account where the transferred tokens are deposited to. * @param _value The amount of tokens being transferred. */ event Transfer(address indexed _from, address indexed _to, uint256 _value); /** * @dev Emitted when a successful call to {IERC20-approve(address,uint256)} is made. * @param _owner The account granting an allowance to `_spender`. * @param _spender The account being granted an allowance from `_owner`. * @param _value The allowance amount being granted. */ event Approval(address indexed _owner, address indexed _spender, uint256 _value); /** * @notice Returns the total token supply. * @return The total token supply. */ function totalSupply() external view returns (uint256); /** * @notice Returns the account balance of another account with address `owner`. * @param owner The account whose balance will be returned. * @return The account balance of another account with address `owner`. */ function balanceOf(address owner) external view returns (uint256); /** * Transfers `value` amount of tokens to address `to`. * @dev Reverts if `to` is the zero address. * @dev Reverts if the sender does not have enough balance. * @dev Emits an {IERC20-Transfer} event. * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event. * @param to The receiver account. * @param value The amount of tokens to transfer. * @return True if the transfer succeeds, false otherwise. */ function transfer(address to, uint256 value) external returns (bool); /** * @notice Transfers `value` amount of tokens from address `from` to address `to` via the approval mechanism. * @dev Reverts if `to` is the zero address. * @dev Reverts if the sender is not `from` and has not been approved by `from` for at least `value`. * @dev Reverts if `from` does not have at least `value` of balance. * @dev Emits an {IERC20-Transfer} event. * @dev Transfers of 0 values are treated as normal transfers and fire the {IERC20-Transfer} event. * @param from The emitter account. * @param to The receiver account. * @param value The amount of tokens to transfer. * @return True if the transfer succeeds, false otherwise. */ function transferFrom( address from, address to, uint256 value ) external returns (bool); /** * Sets `value` as the allowance from the caller to `spender`. * 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 * @dev Reverts if `spender` is the zero address. * @dev Emits the {IERC20-Approval} event. * @param spender The account being granted the allowance by the message caller. * @param value The allowance amount to grant. * @return True if the approval succeeds, false otherwise. */ function approve(address spender, uint256 value) external returns (bool); /** * Returns the amount which `spender` is allowed to spend on behalf of `owner`. * @param owner The account that has granted an allowance to `spender`. * @param spender The account that was granted an allowance by `owner`. * @return The amount which `spender` is allowed to spend on behalf of `owner`. */ function allowance(address owner, address spender) external view returns (uint256); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Detailed * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0xa219a025. */ interface IERC20Detailed { /** * Returns the name of the token. E.g. "My Token". * @return The name of the token. */ function name() external view returns (string memory); /** * Returns the symbol of the token. E.g. "HIX". * @return The symbol of the token. */ function symbol() external view returns (string memory); /** * Returns the number of decimals used to display the balances. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it does not impact the arithmetic of the contract. * @return The number of decimals used to display the balances. */ function decimals() external view returns (uint8); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Allowance * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0xd5b86388. */ interface IERC20Allowance { /** * Increases the allowance granted by the sender to `spender` by `value`. * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * @dev Reverts if `spender` is the zero address. * @dev Reverts if `spender`'s allowance overflows. * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`. * @param spender The account whose allowance is being increased by the message caller. * @param value The allowance amount increase. * @return True if the allowance increase succeeds, false otherwise. */ function increaseAllowance(address spender, uint256 value) external returns (bool); /** * Decreases the allowance granted by the sender to `spender` by `value`. * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * @dev Reverts if `spender` is the zero address. * @dev Reverts if `spender` has an allowance with the message caller for less than `value`. * @dev Emits an {IERC20-Approval} event with an updated allowance for `spender`. * @param spender The account whose allowance is being decreased by the message caller. * @param value The allowance amount decrease. * @return True if the allowance decrease succeeds, false otherwise. */ function decreaseAllowance(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Safe Transfers * Note: the ERC-165 identifier for this interface is 0x53f41a97. */ interface IERC20SafeTransfers { /** * Transfers tokens from the caller to `to`. If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it. * @dev Reverts if `to` is the zero address. * @dev Reverts if `value` is greater than the sender's balance. * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`. * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value. * @dev Emits an {IERC20-Transfer} event. * @param to The address for the tokens to be transferred to. * @param amount The amount of tokens to be transferred. * @param data Optional additional data with no specified format, to be passed to the receiver contract. * @return true. */ function safeTransfer( address to, uint256 amount, bytes calldata data ) external returns (bool); /** * Transfers tokens from `from` to another address, using the allowance mechanism. * If this address is a contract, then calls `onERC20Received(address,address,uint256,bytes)` on it. * @dev Reverts if `to` is the zero address. * @dev Reverts if `value` is greater than `from`'s balance. * @dev Reverts if the sender does not have at least `value` allowance by `from`. * @dev Reverts if `to` is a contract which does not implement `onERC20Received(address,address,uint256,bytes)`. * @dev Reverts if `to` is a contract and the call to `onERC20Received(address,address,uint256,bytes)` returns a wrong value. * @dev Emits an {IERC20-Transfer} event. * @param from The address which owns the tokens to be transferred. * @param to The address for the tokens to be transferred to. * @param amount The amount of tokens to be transferred. * @param data Optional additional data with no specified format, to be passed to the receiver contract. * @return true. */ function safeTransferFrom( address from, address to, uint256 amount, bytes calldata data ) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, optional extension: Multi Transfers * Note: the ERC-165 identifier for this interface is 0xd5b86388. */ interface IERC20BatchTransfers { /** * Moves multiple `amounts` tokens from the caller's account to each of `recipients`. * @dev Reverts if `recipients` and `amounts` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Reverts if the caller has an insufficient balance. * @dev Emits an {IERC20-Transfer} event for each individual transfer. * @param recipients the list of recipients to transfer the tokens to. * @param amounts the amounts of tokens to transfer to each of `recipients`. * @return a boolean value indicating whether the operation succeeded. */ function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external returns (bool); /** * Moves multiple `amounts` tokens from an account to each of `recipients`, using the approval mechanism. * @dev Reverts if `recipients` and `amounts` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Reverts if `from` has an insufficient balance. * @dev Reverts if the sender does not have at least the sum of all `amounts` as allowance by `from`. * @dev Emits an {IERC20-Transfer} event for each individual transfer. * @dev Emits an {IERC20-Approval} event. * @param from The address which owns the tokens to be transferred. * @param recipients the list of recipients to transfer the tokens to. * @param amounts the amounts of tokens to transfer to each of `recipients`. * @return a boolean value indicating whether the operation succeeded. */ function batchTransferFrom( address from, address[] calldata recipients, uint256[] calldata amounts ) external returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, ERC1046 optional extension: Metadata * See https://eips.ethereum.org/EIPS/eip-1046 * Note: the ERC-165 identifier for this interface is 0x3c130d90. */ interface IERC20Metadata { /** * Returns a distinct Uniform Resource Identifier (URI) for the token metadata. * @return a distinct Uniform Resource Identifier (URI) for the token metadata. */ function tokenURI() external view returns (string memory); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, ERC2612 optional extension: permit – 712-signed approvals * @dev Interface for allowing ERC20 approvals to be made via ECDSA `secp256k1` signatures. * See https://eips.ethereum.org/EIPS/eip-2612 * Note: the ERC-165 identifier for this interface is 0x9d8ff7da. */ interface IERC20Permit { /** * Sets `value` as the allowance of `spender` over the tokens of `owner`, given `owner` account's signed permit. * @dev WARNING: The standard ERC-20 race condition for approvals applies to `permit()` as well: https://swcregistry.io/docs/SWC-114 * @dev Reverts if `owner` is the zero address. * @dev Reverts if the current blocktime is > `deadline`. * @dev Reverts if `r`, `s`, and `v` is not a valid `secp256k1` signature from `owner`. * @dev Emits an {IERC20-Approval} event. * @param owner The token owner granting the allowance to `spender`. * @param spender The token spender being granted the allowance by `owner`. * @param value The token amount of the allowance. * @param deadline The deadline from which the permit signature is no longer valid. * @param v Permit signature v parameter * @param r Permit signature r parameter. * @param s Permis signature s parameter. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * Returns the current permit nonce of `owner`. * @param owner the address to check the nonce of. * @return the current permit nonce of `owner`. */ function nonces(address owner) external view returns (uint256); /** * Returns the EIP-712 encoded hash struct of the domain-specific information for permits. * * @dev A common ERC-20 permit implementation choice for the `DOMAIN_SEPARATOR` is: * * keccak256( * abi.encode( * keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), * keccak256(bytes(name)), * keccak256(bytes(version)), * chainId, * address(this))) * * where * - `name` (string) is the ERC-20 token name. * - `version` (string) refers to the ERC-20 token contract version. * - `chainId` (uint256) is the chain ID to which the ERC-20 token contract is deployed to. * - `verifyingContract` (address) is the ERC-20 token contract address. * * @return the EIP-712 encoded hash struct of the domain-specific information for permits. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, Receiver * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0x4fc35859. */ interface IERC20Receiver { /** * Handles the receipt of ERC20 tokens. * @param sender The initiator of the transfer. * @param from The address which transferred the tokens. * @param value The amount of tokens transferred. * @param data Optional additional data with no specified format. * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` */ function onERC20Received( address sender, address from, uint256 value, bytes calldata data ) external returns (bytes4); } // File @animoca/ethereum-contracts-assets-1.1.5/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Fungible Token Contract. */ abstract contract ERC20 is ManagedIdentity, IERC165, IERC20, IERC20Detailed, IERC20Metadata, IERC20Allowance, IERC20BatchTransfers, IERC20SafeTransfers, IERC20Permit { using AddressIsContract for address; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)") bytes32 internal constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; uint256 public immutable deploymentChainId; // solhint-disable-next-line var-name-mixedcase bytes32 internal immutable _DOMAIN_SEPARATOR; mapping(address => uint256) public override nonces; string internal _name; string internal _symbol; uint8 internal immutable _decimals; string internal _tokenURI; mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 internal _totalSupply; constructor( string memory name_, string memory symbol_, uint8 decimals_, string memory tokenURI_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; _tokenURI = tokenURI_; uint256 chainId; assembly { chainId := chainid() } deploymentChainId = chainId; _DOMAIN_SEPARATOR = _calculateDomainSeparator(chainId, bytes(name_)); } // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() public view override returns (bytes32) { uint256 chainId; assembly { chainId := chainid() } // recompute the domain separator in case of fork and chainid update return chainId == deploymentChainId ? _DOMAIN_SEPARATOR : _calculateDomainSeparator(chainId, bytes(_name)); } function _calculateDomainSeparator(uint256 chainId, bytes memory name_) private view returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(name_), keccak256("1"), chainId, address(this) ) ); } /////////////////////////////////////////// ERC165 /////////////////////////////////////// /// @dev See {IERC165-supportsInterface}. function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC20).interfaceId || interfaceId == type(IERC20Detailed).interfaceId || interfaceId == type(IERC20Metadata).interfaceId || interfaceId == type(IERC20Allowance).interfaceId || interfaceId == type(IERC20BatchTransfers).interfaceId || interfaceId == type(IERC20SafeTransfers).interfaceId || interfaceId == type(IERC20Permit).interfaceId; } /////////////////////////////////////////// ERC20Detailed /////////////////////////////////////// /// @dev See {IERC20Detailed-name}. function name() external view override returns (string memory) { return _name; } /// @dev See {IERC20Detailed-symbol}. function symbol() external view override returns (string memory) { return _symbol; } /// @dev See {IERC20Detailed-decimals}. function decimals() external view override returns (uint8) { return _decimals; } /////////////////////////////////////////// ERC20Metadata /////////////////////////////////////// /// @dev See {IERC20Metadata-tokenURI}. function tokenURI() external view override returns (string memory) { return _tokenURI; } /////////////////////////////////////////// ERC20 /////////////////////////////////////// /// @dev See {IERC20-totalSupply}. function totalSupply() external view override returns (uint256) { return _totalSupply; } /// @dev See {IERC20-balanceOf}. function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } /// @dev See {IERC20-allowance}. function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /// @dev See {IERC20-approve}. function approve(address spender, uint256 value) external virtual override returns (bool) { _approve(_msgSender(), spender, value); return true; } /////////////////////////////////////////// ERC20 Allowance /////////////////////////////////////// /// @dev See {IERC20Allowance-increaseAllowance}. function increaseAllowance(address spender, uint256 addedValue) external virtual override returns (bool) { require(spender != address(0), "ERC20: zero address spender"); address owner = _msgSender(); uint256 allowance_ = _allowances[owner][spender]; if (addedValue != 0) { uint256 newAllowance = allowance_ + addedValue; require(newAllowance > allowance_, "ERC20: allowance overflow"); _allowances[owner][spender] = newAllowance; allowance_ = newAllowance; } emit Approval(owner, spender, allowance_); return true; } /// @dev See {IERC20Allowance-decreaseAllowance}. function decreaseAllowance(address spender, uint256 subtractedValue) external virtual override returns (bool) { require(spender != address(0), "ERC20: zero address spender"); _decreaseAllowance(_msgSender(), spender, subtractedValue); return true; } /// @dev See {IERC20-transfer}. function transfer(address to, uint256 value) external virtual override returns (bool) { _transfer(_msgSender(), to, value); return true; } /// @dev See {IERC20-transferFrom}. function transferFrom( address from, address to, uint256 value ) external virtual override returns (bool) { _transferFrom(_msgSender(), from, to, value); return true; } /////////////////////////////////////////// ERC20MultiTransfer /////////////////////////////////////// /// @dev See {IERC20MultiTransfer-multiTransfer(address[],uint256[])}. function batchTransfer(address[] calldata recipients, uint256[] calldata values) external virtual override returns (bool) { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); address sender = _msgSender(); uint256 balance = _balances[sender]; uint256 totalValue; uint256 selfTransferTotalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: to zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; if (sender != to) { _balances[to] += value; } else { require(value <= balance, "ERC20: insufficient balance"); selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true } } emit Transfer(sender, to, value); } if (totalValue != 0 && totalValue != selfTransferTotalValue) { uint256 newBalance = balance - totalValue; require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers _balances[sender] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance } return true; } /// @dev See {IERC20MultiTransfer-multiTransferFrom(address,address[],uint256[])}. function batchTransferFrom( address from, address[] calldata recipients, uint256[] calldata values ) external virtual override returns (bool) { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); uint256 balance = _balances[from]; uint256 totalValue; uint256 selfTransferTotalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: to zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; if (from != to) { _balances[to] += value; } else { require(value <= balance, "ERC20: insufficient balance"); selfTransferTotalValue += value; // cannot overflow as 'selfTransferTotalValue <= totalValue' is always true } } emit Transfer(from, to, value); } if (totalValue != 0 && totalValue != selfTransferTotalValue) { uint256 newBalance = balance - totalValue; require(newBalance < balance, "ERC20: insufficient balance"); // balance must be sufficient, including self-transfers _balances[from] = newBalance + selfTransferTotalValue; // do not deduct self-transfers from the sender balance } address sender = _msgSender(); if (from != sender) { _decreaseAllowance(from, sender, totalValue); } return true; } /////////////////////////////////////////// ERC20SafeTransfers /////////////////////////////////////// /// @dev See {IERC20Safe-safeTransfer(address,uint256,bytes)}. function safeTransfer( address to, uint256 amount, bytes calldata data ) external virtual override returns (bool) { address sender = _msgSender(); _transfer(sender, to, amount); if (to.isContract()) { require(IERC20Receiver(to).onERC20Received(sender, sender, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused"); } return true; } /// @dev See {IERC20Safe-safeTransferFrom(address,address,uint256,bytes)}. function safeTransferFrom( address from, address to, uint256 amount, bytes calldata data ) external virtual override returns (bool) { address sender = _msgSender(); _transferFrom(sender, from, to, amount); if (to.isContract()) { require(IERC20Receiver(to).onERC20Received(sender, from, amount, data) == type(IERC20Receiver).interfaceId, "ERC20: transfer refused"); } return true; } /////////////////////////////////////////// ERC20Permit /////////////////////////////////////// /// @dev See {IERC2612-permit(address,address,uint256,uint256,uint8,bytes32,bytes32)}. function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external virtual override { require(owner != address(0), "ERC20: zero address owner"); require(block.timestamp <= deadline, "ERC20: expired permit"); bytes32 hashStruct = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline)); bytes32 hash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR(), hashStruct)); address signer = ecrecover(hash, v, r, s); require(signer == owner, "ERC20: invalid permit"); _approve(owner, spender, value); } /////////////////////////////////////////// Internal Functions /////////////////////////////////////// function _approve( address owner, address spender, uint256 value ) internal { require(spender != address(0), "ERC20: zero address spender"); _allowances[owner][spender] = value; emit Approval(owner, spender, value); } function _decreaseAllowance( address owner, address spender, uint256 subtractedValue ) internal { uint256 allowance_ = _allowances[owner][spender]; if (allowance_ != type(uint256).max && subtractedValue != 0) { // save gas when allowance is maximal by not reducing it (see https://github.com/ethereum/EIPs/issues/717) uint256 newAllowance = allowance_ - subtractedValue; require(newAllowance < allowance_, "ERC20: insufficient allowance"); _allowances[owner][spender] = newAllowance; allowance_ = newAllowance; } emit Approval(owner, spender, allowance_); } function _transfer( address from, address to, uint256 value ) internal virtual { require(to != address(0), "ERC20: to zero address"); if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); if (from != to) { _balances[from] = newBalance; _balances[to] += value; } } emit Transfer(from, to, value); } function _transferFrom( address sender, address from, address to, uint256 value ) internal { _transfer(from, to, value); if (from != sender) { _decreaseAllowance(from, sender, value); } } function _mint(address to, uint256 value) internal virtual { require(to != address(0), "ERC20: zero address"); uint256 supply = _totalSupply; if (value != 0) { uint256 newSupply = supply + value; require(newSupply > supply, "ERC20: supply overflow"); _totalSupply = newSupply; _balances[to] += value; // balance cannot overflow if supply does not } emit Transfer(address(0), to, value); } function _batchMint(address[] memory recipients, uint256[] memory values) internal virtual { uint256 length = recipients.length; require(length == values.length, "ERC20: inconsistent arrays"); uint256 totalValue; for (uint256 i; i != length; ++i) { address to = recipients[i]; require(to != address(0), "ERC20: zero address"); uint256 value = values[i]; if (value != 0) { uint256 newTotalValue = totalValue + value; require(newTotalValue > totalValue, "ERC20: values overflow"); totalValue = newTotalValue; _balances[to] += value; // balance cannot overflow if supply does not } emit Transfer(address(0), to, value); } if (totalValue != 0) { uint256 supply = _totalSupply; uint256 newSupply = supply + totalValue; require(newSupply > supply, "ERC20: supply overflow"); _totalSupply = newSupply; } } function _burn(address from, uint256 value) internal virtual { if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); _balances[from] = newBalance; _totalSupply -= value; // will not underflow if balance does not } emit Transfer(from, address(0), value); } function _burnFrom(address from, uint256 value) internal virtual { _burn(from, value); address sender = _msgSender(); if (from != sender) { _decreaseAllowance(from, sender, value); } } function _batchBurnFrom(address[] memory owners, uint256[] memory values) internal virtual { uint256 length = owners.length; require(length == values.length, "ERC20: inconsistent arrays"); address sender = _msgSender(); uint256 totalValue; for (uint256 i; i != length; ++i) { address from = owners[i]; uint256 value = values[i]; if (value != 0) { uint256 balance = _balances[from]; uint256 newBalance = balance - value; require(newBalance < balance, "ERC20: insufficient balance"); _balances[from] = newBalance; totalValue += value; // totalValue cannot overflow if the individual balances do not underflow } emit Transfer(from, address(0), value); if (from != sender) { _decreaseAllowance(from, sender, value); } } if (totalValue != 0) { _totalSupply -= totalValue; // _totalSupply cannot underfow as balances do not underflow } } } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; abstract contract UsingAppendedCallData { function _lastAppendedDataAsSender() internal pure virtual returns (address payable sender) { // Copied from openzeppelin : https://github.com/OpenZeppelin/openzeppelin-contracts/blob/9d5f77db9da0604ce0b25148898a94ae2c20d70f/contracts/metatx/ERC2771Context.sol1 // The assembly code is more direct than the Solidity version using `abi.decode`. // solhint-disable-next-line no-inline-assembly assembly { sender := shr(96, calldataload(sub(calldatasize(), 20))) } } function _msgDataAssuming20BytesAppendedData() internal pure virtual returns (bytes calldata) { return msg.data[:msg.data.length - 20]; } } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; interface IERC2771 { function isTrustedForwarder(address forwarder) external view returns (bool); } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; interface IForwarderRegistry { function isForwarderFor(address, address) external view returns (bool); } // File ethereum-universal-forwarder/src/solc_0.7/ERC2771/[email protected] pragma solidity ^0.7.0; abstract contract UsingUniversalForwarding is UsingAppendedCallData, IERC2771 { IForwarderRegistry internal immutable _forwarderRegistry; address internal immutable _universalForwarder; constructor(IForwarderRegistry forwarderRegistry, address universalForwarder) { _universalForwarder = universalForwarder; _forwarderRegistry = forwarderRegistry; } function isTrustedForwarder(address forwarder) external view virtual override returns (bool) { return forwarder == _universalForwarder || forwarder == address(_forwarderRegistry); } function _msgSender() internal view virtual returns (address payable) { address payable msgSender = msg.sender; address payable sender = _lastAppendedDataAsSender(); if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) { // if forwarder use appended data return sender; } // if msg.sender is neither the registry nor the universal forwarder, // we have to check the last 20bytes of the call data intepreted as an address // and check if the msg.sender was registered as forewarder for that address // we check tx.origin to save gas in case where msg.sender == tx.origin // solhint-disable-next-line avoid-tx-origin if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(sender, msgSender)) { return sender; } return msgSender; } function _msgData() internal view virtual returns (bytes calldata) { address payable msgSender = msg.sender; if (msgSender == address(_forwarderRegistry) || msgSender == _universalForwarder) { // if forwarder use appended data return _msgDataAssuming20BytesAppendedData(); } // we check tx.origin to save gas in case where msg.sender == tx.origin // solhint-disable-next-line avoid-tx-origin if (msgSender != tx.origin && _forwarderRegistry.isForwarderFor(_lastAppendedDataAsSender(), msgSender)) { return _msgDataAssuming20BytesAppendedData(); } return msg.data; } } // File contracts/token/ERC20/QUIDD.sol pragma solidity >=0.7.6 <0.8.0; /** * @title QUIDD. * QUIDD is an ERC20 token with a constant pre-minted supply. */ contract QUIDD is ERC20, UsingUniversalForwarding, Recoverable { /** * Constructor. * @dev Reverts if `values` and `recipients` have different lengths. * @dev Reverts if one of `recipients` is the zero address. * @dev Emits an {IERC20-Transfer} event for each transfer with `from` set to the zero address. * @param recipients the accounts to deliver the tokens to. * @param values the amounts of tokens to mint to each of `recipients`. * @param forwarderRegistry Registry of approved meta-transaction forwarders. * @param universalForwarder Universal meta-transaction forwarder. */ constructor( address[] memory recipients, uint256[] memory values, IForwarderRegistry forwarderRegistry, address universalForwarder ) ERC20("QUIDD", "QUIDD", 18, "") UsingUniversalForwarding(forwarderRegistry, universalForwarder) Ownable(msg.sender) { _batchMint(recipients, values); } /** * Updates the URI of the token. * @dev Reverts if the sender is not the contract owner. * @param tokenURI_ the updated URI. */ function setTokenURI(string calldata tokenURI_) external { _requireOwnership(_msgSender()); _tokenURI = tokenURI_; } function _msgSender() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (address payable) { return UsingUniversalForwarding._msgSender(); } function _msgData() internal view virtual override(ManagedIdentity, UsingUniversalForwarding) returns (bytes memory ret) { return UsingUniversalForwarding._msgData(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"contract IForwarderRegistry","name":"forwarderRegistry","type":"address"},{"internalType":"address","name":"universalForwarder","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deploymentChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","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":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"recoverERC20s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"recoverERC721s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenURI_","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101206040523480156200001257600080fd5b506040516200308738038062003087833981810160405260808110156200003857600080fd5b81019080805160405193929190846401000000008211156200005957600080fd5b9083019060208201858111156200006f57600080fd5b82518660208202830111640100000000821117156200008d57600080fd5b82525081516020918201928201910280838360005b83811015620000bc578181015183820152602001620000a2565b5050505090500160405260200180516040519392919084640100000000821115620000e657600080fd5b908301906020820185811115620000fc57600080fd5b82518660208202830111640100000000821117156200011a57600080fd5b82525081516020918201928201910280838360005b83811015620001495781810151838201526020016200012f565b50505050919091016040818152602084810151948201518284018352600580855264145552511160da1b83860181815285518087018752928352828501919091528451938401909452600083528451969850909650339588955087949391926012929091620001bb916001916200056d565b508251620001d19060029060208601906200056d565b507fff0000000000000000000000000000000000000000000000000000000000000060f883901b1660c0528051620002119060039060208401906200056d565b50466080819052620002248186620002a8565b60a0525050505050606090811b6001600160601b03199081166101005291901b1660e052600780546001600160a01b0319166001600160a01b0383169081179091556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200029e848462000332565b5050505062000619565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b8151815181146200038a576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6000805b828114620004ff576000858281518110620003a557fe5b6020026020010151905060006001600160a01b0316816001600160a01b0316141562000418576040805162461bcd60e51b815260206004820152601360248201527f45524332303a207a65726f206164647265737300000000000000000000000000604482015290519081900360640190fd5b60008583815181106200042757fe5b6020026020010151905080600014620004b35783810184811162000492576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260046020526040902080548301905593505b6040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a350506001016200038e565b508015620005675760065481810181811162000562576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20737570706c79206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b600655505b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620005a55760008555620005f0565b82601f10620005c057805160ff1916838001178555620005f0565b82800160010185558215620005f0579182015b82811115620005f0578251825591602001919060010190620005d3565b50620005fe92915062000602565b5090565b5b80821115620005fe576000815560010162000603565b60805160a05160c05160f81c60e05160601c6101005160601c612a1162000676600039806112c452806125d55250806112ff528061259a528061262d525080610cad525080610d97525080610cd45280611b425250612a116000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80637ecebe00116100f9578063c3666c3611610097578063dd62ed3e11610071578063dd62ed3e146108e9578063e0df5b6f14610917578063eb79554914610987578063f2fde38b14610a0c576101b9565b8063c3666c361461077c578063cd0d009614610890578063d505accf14610898576101b9565b806395d89b41116100d357806395d89b411461068c578063a457c2d714610694578063a9059cbb146106c0578063b88d4fde146106ec576101b9565b80637ecebe001461058057806388d695b2146105a65780638da5cb5b14610668576101b9565b80633644e515116101665780634885b254116101405780634885b2541461034c578063572b6c051461041e57806370a082311461044457806373c8a9581461046a576101b9565b80633644e5151461031057806339509351146103185780633c130d9014610344576101b9565b806318160ddd1161019757806318160ddd146102a257806323b872dd146102bc578063313ce567146102f2576101b9565b806301ffc9a7146101be57806306fdde03146101f9578063095ea7b314610276575b600080fd5b6101e5600480360360208110156101d457600080fd5b50356001600160e01b031916610a32565b604080519115158252519081900360200190f35b610201610bd3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e56004803603604081101561028c57600080fd5b506001600160a01b038135169060200135610c69565b6102aa610c86565b60408051918252519081900360200190f35b6101e5600480360360608110156102d257600080fd5b506001600160a01b03813581169160208101359091169060400135610c8c565b6102fa610cab565b6040805160ff9092168252519081900360200190f35b6102aa610ccf565b6101e56004803603604081101561032e57600080fd5b506001600160a01b038135169060200135610dbd565b610201610f2b565b6101e56004803603606081101561036257600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038d57600080fd5b82018360208201111561039f57600080fd5b803590602001918460208302840111640100000000831117156103c157600080fd5b9193909290916020810190356401000000008111156103df57600080fd5b8201836020820111156103f157600080fd5b8035906020019184602083028401116401000000008311171561041357600080fd5b509092509050610f8c565b6101e56004803603602081101561043457600080fd5b50356001600160a01b03166112c0565b6102aa6004803603602081101561045a57600080fd5b50356001600160a01b0316611339565b61057e6004803603606081101561048057600080fd5b81019060208101813564010000000081111561049b57600080fd5b8201836020820111156104ad57600080fd5b803590602001918460208302840111640100000000831117156104cf57600080fd5b9193909290916020810190356401000000008111156104ed57600080fd5b8201836020820111156104ff57600080fd5b8035906020019184602083028401116401000000008311171561052157600080fd5b91939092909160208101903564010000000081111561053f57600080fd5b82018360208201111561055157600080fd5b8035906020019184602083028401116401000000008311171561057357600080fd5b509092509050611354565b005b6102aa6004803603602081101561059657600080fd5b50356001600160a01b0316611446565b6101e5600480360360408110156105bc57600080fd5b8101906020810181356401000000008111156105d757600080fd5b8201836020820111156105e957600080fd5b8035906020019184602083028401116401000000008311171561060b57600080fd5b91939092909160208101903564010000000081111561062957600080fd5b82018360208201111561063b57600080fd5b8035906020019184602083028401116401000000008311171561065d57600080fd5b509092509050611458565b610670611767565b604080516001600160a01b039092168252519081900360200190f35b610201611776565b6101e5600480360360408110156106aa57600080fd5b506001600160a01b0381351690602001356117d4565b6101e5600480360360408110156106d657600080fd5b506001600160a01b038135169060200135611843565b6101e56004803603608081101561070257600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073d57600080fd5b82018360208201111561074f57600080fd5b8035906020019184600183028401116401000000008311171561077157600080fd5b509092509050611857565b61057e6004803603606081101561079257600080fd5b8101906020810181356401000000008111156107ad57600080fd5b8201836020820111156107bf57600080fd5b803590602001918460208302840111640100000000831117156107e157600080fd5b9193909290916020810190356401000000008111156107ff57600080fd5b82018360208201111561081157600080fd5b8035906020019184602083028401116401000000008311171561083357600080fd5b91939092909160208101903564010000000081111561085157600080fd5b82018360208201111561086357600080fd5b8035906020019184602083028401116401000000008311171561088557600080fd5b5090925090506119f8565b6102aa611b40565b61057e600480360360e08110156108ae57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b64565b6102aa600480360360408110156108ff57600080fd5b506001600160a01b0381358116916020013516611de3565b61057e6004803603602081101561092d57600080fd5b81019060208101813564010000000081111561094857600080fd5b82018360208201111561095a57600080fd5b8035906020019184600183028401116401000000008311171561097c57600080fd5b509092509050611e0e565b6101e56004803603606081101561099d57600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b509092509050611e2a565b61057e60048036036020811015610a2257600080fd5b50356001600160a01b0316611fc9565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610a9557506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b80610ac957506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b80610afd57506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b80610b3157506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b80610b6557506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b80610b9957506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610bcd57506001600160e01b031982167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b92915050565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505090505b90565b6000610c7d610c7661203c565b848461204b565b50600192915050565b60065490565b6000610ca1610c9961203c565b858585612108565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000467f00000000000000000000000000000000000000000000000000000000000000008114610d955760018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152610d9093859391929091830182828015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b505050505061213d565b610db7565b7f00000000000000000000000000000000000000000000000000000000000000005b91505090565b60006001600160a01b038316610e1a576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e2461203c565b6001600160a01b038082166000908152600560209081526040808320938916835292905220549091508315610ed557808401818111610eaa576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600560209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b600083828114610fe3576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600460205260408120549080805b8481146111f55760008a8a8381811061101557fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b0316141561108f576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600089898481811061109d57fe5b905060200201359050806000146111a057848101858111611105576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b031614611144576001600160a01b038316600090815260046020526040902080548301905561119e565b86821115611199576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101611000565b5081158015906112055750808214155b1561127f57818303838110611261576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260046020526040902090820190555b600061128961203c565b9050806001600160a01b03168b6001600160a01b0316146112af576112af8b82856121c7565b5060019a9950505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610bcd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526004602052604090205490565b61136461135f61203c565b6122d6565b84838114801561137357508082145b6113c4576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c576114348888838181106113dd57fe5b905060200201356001600160a01b03168585848181106113f957fe5b9050602002013588888581811061140c57fe5b905060200201356001600160a01b03166001600160a01b031661239d9092919063ffffffff16565b6001016113c7565b5050505050505050565b60006020819052908152604090205481565b6000838281146114af576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006114b961203c565b6001600160a01b03811660009081526004602052604081205491925080805b8581146116cd5760008b8b838181106114ed57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611567576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061157557fe5b90506020020135905080600014611678578481018581116115dd576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461161c576001600160a01b0383166000908152600460205260409020805483019055611676565b86821115611671576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016114d8565b5081158015906116dd5750808214155b1561175757818303838110611739576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260046020526040902090820190555b5060019998505050505050505050565b6007546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b60006001600160a01b038316611831576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610c7d61183c61203c565b84846121c7565b6000610c7d61185061203c565b848461241d565b60008061186261203c565b905061187081888888612108565b611882866001600160a01b0316612584565b156119eb577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d602081101561198d57600080fd5b50516001600160e01b031916146119eb576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611a0361135f61203c565b848381148015611a1257508082145b611a63576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c57858582818110611a7957fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611aa457fe5b905060200201356001600160a01b0316878786818110611ac057fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050806001019050611a66565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b038716611bbf576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611c14576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526020818152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611ca6610ccf565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d5a573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611dcc576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611dd78a8a8a61204b565b50505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611e1961135f61203c565b611e256003838361291c565b505050565b600080611e3561203c565b9050611e4281878761241d565b611e54866001600160a01b0316612584565b15611fbd577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b505050506040513d6020811015611f5f57600080fd5b50516001600160e01b03191614611fbd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b611fd461135f61203c565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821792839055604051919216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600061204661258a565b905090565b6001600160a01b0382166120a6576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61211383838361241d565b836001600160a01b0316836001600160a01b031614612137576121378385836121c7565b50505050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b0380841660009081526005602090815260408083209386168352929052205460001981148015906121fe57508115155b156122855781810381811061225a576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b50516001600160a01b0382811691161461239a576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611e259084906126ea565b6001600160a01b038216612478576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612534576001600160a01b0383166000908152600460205260409020548181038181106124ee576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612531576001600160a01b038086166000908152600460205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b600033816125966128f2565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061260957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612617579150610c669050565b6001600160a01b03821632148015906126d657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156126a957600080fd5b505afa1580156126bd573d6000803e3d6000fd5b505050506040513d60208110156126d357600080fd5b50515b156126e4579150610c669050565b50905090565b816126fd6001600160a01b038216612584565b61274e576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106127a957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161276c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461280b576040519150601f19603f3d011682016040523d82523d6000602084013e612810565b606091505b5091509150811561288f5780511561288a5780806020019051602081101561283757600080fd5b505161288a576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b6128eb565b80516128e2576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261295257600085556129b6565b82601f10612989578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556129b6565b828001600101855582156129b6579182015b828111156129b657823582559160200191906001019061299b565b506129c29291506129c6565b5090565b5b808211156129c257600081556001016129c756fea264697066735822122071616ec3d73a3ccbc6f4a7a4376ded718b8e5c015ddc491dfc1942a01f8f1e4b64736f6c63430007060033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000d731ce8d55b2440e307a978caf32e1201f5761a000000000000000000000000043113cb02641b607acde6a55e760eb4fe58bde0d000000000000000000000000be0293faa9bee3f833b135f92a25aaad527cc09900000000000000000000000072571d815dd31fbde52be0b9d7ffc8344aede616000000000000000000000000bc4145e3156bdfe2aecdb2628ed1464092808c03000000000000000000000000c816fd366f5a4ba2f44c89e6b7ef277f1589a4bd0000000000000000000000000c9a0e58e78c3b56753026e3d655ab5cdbc2da4e0000000000000000000000000aec6b4e902e49255d1dbd9e34c057c052b992e200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000295be96e640669720000000000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000007c13bc4b2c133c560000000000000000000000000000000000000000000000007c13bc4b2c133c56000000000000000000000000000000000000000000000000cecb8f27f4200f3a00000000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000000000000000000000295be96e64066972000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101b95760003560e01c80637ecebe00116100f9578063c3666c3611610097578063dd62ed3e11610071578063dd62ed3e146108e9578063e0df5b6f14610917578063eb79554914610987578063f2fde38b14610a0c576101b9565b8063c3666c361461077c578063cd0d009614610890578063d505accf14610898576101b9565b806395d89b41116100d357806395d89b411461068c578063a457c2d714610694578063a9059cbb146106c0578063b88d4fde146106ec576101b9565b80637ecebe001461058057806388d695b2146105a65780638da5cb5b14610668576101b9565b80633644e515116101665780634885b254116101405780634885b2541461034c578063572b6c051461041e57806370a082311461044457806373c8a9581461046a576101b9565b80633644e5151461031057806339509351146103185780633c130d9014610344576101b9565b806318160ddd1161019757806318160ddd146102a257806323b872dd146102bc578063313ce567146102f2576101b9565b806301ffc9a7146101be57806306fdde03146101f9578063095ea7b314610276575b600080fd5b6101e5600480360360208110156101d457600080fd5b50356001600160e01b031916610a32565b604080519115158252519081900360200190f35b610201610bd3565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101e56004803603604081101561028c57600080fd5b506001600160a01b038135169060200135610c69565b6102aa610c86565b60408051918252519081900360200190f35b6101e5600480360360608110156102d257600080fd5b506001600160a01b03813581169160208101359091169060400135610c8c565b6102fa610cab565b6040805160ff9092168252519081900360200190f35b6102aa610ccf565b6101e56004803603604081101561032e57600080fd5b506001600160a01b038135169060200135610dbd565b610201610f2b565b6101e56004803603606081101561036257600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561038d57600080fd5b82018360208201111561039f57600080fd5b803590602001918460208302840111640100000000831117156103c157600080fd5b9193909290916020810190356401000000008111156103df57600080fd5b8201836020820111156103f157600080fd5b8035906020019184602083028401116401000000008311171561041357600080fd5b509092509050610f8c565b6101e56004803603602081101561043457600080fd5b50356001600160a01b03166112c0565b6102aa6004803603602081101561045a57600080fd5b50356001600160a01b0316611339565b61057e6004803603606081101561048057600080fd5b81019060208101813564010000000081111561049b57600080fd5b8201836020820111156104ad57600080fd5b803590602001918460208302840111640100000000831117156104cf57600080fd5b9193909290916020810190356401000000008111156104ed57600080fd5b8201836020820111156104ff57600080fd5b8035906020019184602083028401116401000000008311171561052157600080fd5b91939092909160208101903564010000000081111561053f57600080fd5b82018360208201111561055157600080fd5b8035906020019184602083028401116401000000008311171561057357600080fd5b509092509050611354565b005b6102aa6004803603602081101561059657600080fd5b50356001600160a01b0316611446565b6101e5600480360360408110156105bc57600080fd5b8101906020810181356401000000008111156105d757600080fd5b8201836020820111156105e957600080fd5b8035906020019184602083028401116401000000008311171561060b57600080fd5b91939092909160208101903564010000000081111561062957600080fd5b82018360208201111561063b57600080fd5b8035906020019184602083028401116401000000008311171561065d57600080fd5b509092509050611458565b610670611767565b604080516001600160a01b039092168252519081900360200190f35b610201611776565b6101e5600480360360408110156106aa57600080fd5b506001600160a01b0381351690602001356117d4565b6101e5600480360360408110156106d657600080fd5b506001600160a01b038135169060200135611843565b6101e56004803603608081101561070257600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561073d57600080fd5b82018360208201111561074f57600080fd5b8035906020019184600183028401116401000000008311171561077157600080fd5b509092509050611857565b61057e6004803603606081101561079257600080fd5b8101906020810181356401000000008111156107ad57600080fd5b8201836020820111156107bf57600080fd5b803590602001918460208302840111640100000000831117156107e157600080fd5b9193909290916020810190356401000000008111156107ff57600080fd5b82018360208201111561081157600080fd5b8035906020019184602083028401116401000000008311171561083357600080fd5b91939092909160208101903564010000000081111561085157600080fd5b82018360208201111561086357600080fd5b8035906020019184602083028401116401000000008311171561088557600080fd5b5090925090506119f8565b6102aa611b40565b61057e600480360360e08110156108ae57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611b64565b6102aa600480360360408110156108ff57600080fd5b506001600160a01b0381358116916020013516611de3565b61057e6004803603602081101561092d57600080fd5b81019060208101813564010000000081111561094857600080fd5b82018360208201111561095a57600080fd5b8035906020019184600183028401116401000000008311171561097c57600080fd5b509092509050611e0e565b6101e56004803603606081101561099d57600080fd5b6001600160a01b03823516916020810135918101906060810160408201356401000000008111156109cd57600080fd5b8201836020820111156109df57600080fd5b80359060200191846001830284011164010000000083111715610a0157600080fd5b509092509050611e2a565b61057e60048036036020811015610a2257600080fd5b50356001600160a01b0316611fc9565b60006001600160e01b031982167f01ffc9a7000000000000000000000000000000000000000000000000000000001480610a9557506001600160e01b031982167f36372b0700000000000000000000000000000000000000000000000000000000145b80610ac957506001600160e01b031982167fa219a02500000000000000000000000000000000000000000000000000000000145b80610afd57506001600160e01b031982167f3c130d9000000000000000000000000000000000000000000000000000000000145b80610b3157506001600160e01b031982167f9d07518600000000000000000000000000000000000000000000000000000000145b80610b6557506001600160e01b031982167fc05327e600000000000000000000000000000000000000000000000000000000145b80610b9957506001600160e01b031982167f53f41a9700000000000000000000000000000000000000000000000000000000145b80610bcd57506001600160e01b031982167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b92915050565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b820191906000526020600020905b815481529060010190602001808311610c4157829003601f168201915b505050505090505b90565b6000610c7d610c7661203c565b848461204b565b50600192915050565b60065490565b6000610ca1610c9961203c565b858585612108565b5060019392505050565b7f000000000000000000000000000000000000000000000000000000000000001290565b6000467f00000000000000000000000000000000000000000000000000000000000000018114610d955760018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152610d9093859391929091830182828015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b505050505061213d565b610db7565b7f196327f7579b20f8a605cf45d11eab30adcefdd8db343c2bbf2ee10581b123c15b91505090565b60006001600160a01b038316610e1a576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6000610e2461203c565b6001600160a01b038082166000908152600560209081526040808320938916835292905220549091508315610ed557808401818111610eaa576040805162461bcd60e51b815260206004820152601960248201527f45524332303a20616c6c6f77616e6365206f766572666c6f7700000000000000604482015290519081900360640190fd5b6001600160a01b038084166000908152600560209081526040808320938a1683529290522081905590505b846001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3506001949350505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b600083828114610fe3576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b6001600160a01b0387166000908152600460205260408120549080805b8481146111f55760008a8a8381811061101557fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b0316141561108f576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b600089898481811061109d57fe5b905060200201359050806000146111a057848101858111611105576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b03168e6001600160a01b031614611144576001600160a01b038316600090815260046020526040902080548301905561119e565b86821115611199576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b03168d6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050600101611000565b5081158015906112055750808214155b1561127f57818303838110611261576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038b16600090815260046020526040902090820190555b600061128961203c565b9050806001600160a01b03168b6001600160a01b0316146112af576112af8b82856121c7565b5060019a9950505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480610bcd57507f000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f6001600160a01b0316826001600160a01b0316149050919050565b6001600160a01b031660009081526004602052604090205490565b61136461135f61203c565b6122d6565b84838114801561137357508082145b6113c4576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c576114348888838181106113dd57fe5b905060200201356001600160a01b03168585848181106113f957fe5b9050602002013588888581811061140c57fe5b905060200201356001600160a01b03166001600160a01b031661239d9092919063ffffffff16565b6001016113c7565b5050505050505050565b60006020819052908152604090205481565b6000838281146114af576040805162461bcd60e51b815260206004820152601a60248201527f45524332303a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60006114b961203c565b6001600160a01b03811660009081526004602052604081205491925080805b8581146116cd5760008b8b838181106114ed57fe5b905060200201356001600160a01b0316905060006001600160a01b0316816001600160a01b03161415611567576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b60008a8a8481811061157557fe5b90506020020135905080600014611678578481018581116115dd576040805162461bcd60e51b815260206004820152601660248201527f45524332303a2076616c756573206f766572666c6f7700000000000000000000604482015290519081900360640190fd5b809550826001600160a01b0316886001600160a01b03161461161c576001600160a01b0383166000908152600460205260409020805483019055611676565b86821115611671576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b938101935b505b816001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350506001016114d8565b5081158015906116dd5750808214155b1561175757818303838110611739576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b6001600160a01b038516600090815260046020526040902090820190555b5060019998505050505050505050565b6007546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610c5e5780601f10610c3357610100808354040283529160200191610c5e565b60006001600160a01b038316611831576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b610c7d61183c61203c565b84846121c7565b6000610c7d61185061203c565b848461241d565b60008061186261203c565b905061187081888888612108565b611882866001600160a01b0316612584565b156119eb577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc35859838a8989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d602081101561198d57600080fd5b50516001600160e01b031916146119eb576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b5060019695505050505050565b611a0361135f61203c565b848381148015611a1257508082145b611a63576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b81811461143c57858582818110611a7957fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110611aa457fe5b905060200201356001600160a01b0316878786818110611ac057fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050806001019050611a66565b7f000000000000000000000000000000000000000000000000000000000000000181565b6001600160a01b038716611bbf576040805162461bcd60e51b815260206004820152601960248201527f45524332303a207a65726f2061646472657373206f776e657200000000000000604482015290519081900360640190fd5b83421115611c14576040805162461bcd60e51b815260206004820152601560248201527f45524332303a2065787069726564207065726d69740000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526020818152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611ca6610ccf565b8260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611d5a573d6000803e3d6000fd5b505050602060405103519050896001600160a01b0316816001600160a01b031614611dcc576040805162461bcd60e51b815260206004820152601560248201527f45524332303a20696e76616c6964207065726d69740000000000000000000000604482015290519081900360640190fd5b611dd78a8a8a61204b565b50505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611e1961135f61203c565b611e256003838361291c565b505050565b600080611e3561203c565b9050611e4281878761241d565b611e54866001600160a01b0316612584565b15611fbd577f4fc35859000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b0316634fc3585983848989896040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b158015611f3557600080fd5b505af1158015611f49573d6000803e3d6000fd5b505050506040513d6020811015611f5f57600080fd5b50516001600160e01b03191614611fbd576040805162461bcd60e51b815260206004820152601760248201527f45524332303a207472616e736665722072656675736564000000000000000000604482015290519081900360640190fd5b50600195945050505050565b611fd461135f61203c565b600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821792839055604051919216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b600061204661258a565b905090565b6001600160a01b0382166120a6576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a207a65726f2061646472657373207370656e6465720000000000604482015290519081900360640190fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b61211383838361241d565b836001600160a01b0316836001600160a01b031614612137576121378385836121c7565b50505050565b8051602091820120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81850152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606083015260808201939093523060a0808301919091528351808303909101815260c0909101909252815191012090565b6001600160a01b0380841660009081526005602090815260408083209386168352929052205460001981148015906121fe57508115155b156122855781810381811061225a576040805162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522081905590505b826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a350505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561230f57600080fd5b505afa158015612323573d6000803e3d6000fd5b505050506040513d602081101561233957600080fd5b50516001600160a01b0382811691161461239a576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611e259084906126ea565b6001600160a01b038216612478576040805162461bcd60e51b815260206004820152601660248201527f45524332303a20746f207a65726f206164647265737300000000000000000000604482015290519081900360640190fd5b8015612534576001600160a01b0383166000908152600460205260409020548181038181106124ee576040805162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e63650000000000604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614612531576001600160a01b038086166000908152600460205260408082208490559186168152208054840190555b50505b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b3b151590565b600033816125966128f2565b90507f000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f6001600160a01b0316826001600160a01b0316148061260957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b15612617579150610c669050565b6001600160a01b03821632148015906126d657507f000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f6001600160a01b031663e60125d682846040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b1580156126a957600080fd5b505afa1580156126bd573d6000803e3d6000fd5b505050506040513d60208110156126d357600080fd5b50515b156126e4579150610c669050565b50905090565b816126fd6001600160a01b038216612584565b61274e576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b602083106127a957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161276c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461280b576040519150601f19603f3d011682016040523d82523d6000602084013e612810565b606091505b5091509150811561288f5780511561288a5780806020019051602081101561283757600080fd5b505161288a576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b6128eb565b80516128e2576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261295257600085556129b6565b82601f10612989578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008235161785556129b6565b828001600101855582156129b6579182015b828111156129b657823582559160200191906001019061299b565b506129c29291506129c6565b5090565b5b808211156129c257600081556001016129c756fea264697066735822122071616ec3d73a3ccbc6f4a7a4376ded718b8e5c015ddc491dfc1942a01f8f1e4b64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000d731ce8d55b2440e307a978caf32e1201f5761a000000000000000000000000043113cb02641b607acde6a55e760eb4fe58bde0d000000000000000000000000be0293faa9bee3f833b135f92a25aaad527cc09900000000000000000000000072571d815dd31fbde52be0b9d7ffc8344aede616000000000000000000000000bc4145e3156bdfe2aecdb2628ed1464092808c03000000000000000000000000c816fd366f5a4ba2f44c89e6b7ef277f1589a4bd0000000000000000000000000c9a0e58e78c3b56753026e3d655ab5cdbc2da4e0000000000000000000000000aec6b4e902e49255d1dbd9e34c057c052b992e200000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000295be96e640669720000000000000000000000000000000000000000000000006765c793fa10079d0000000000000000000000000000000000000000000000007c13bc4b2c133c560000000000000000000000000000000000000000000000007c13bc4b2c133c56000000000000000000000000000000000000000000000000cecb8f27f4200f3a00000000000000000000000000000000000000000000000052b7d2dcc80cd2e4000000000000000000000000000000000000000000000000295be96e64066972000000
-----Decoded View---------------
Arg [0] : recipients (address[]): 0xd731ce8D55b2440E307a978caF32E1201f5761A0,0x43113cb02641B607AcDE6a55e760Eb4fE58BDe0d,0xbE0293FaA9bEE3f833b135f92A25aAaD527cc099,0x72571d815dd31FBDE52BE0B9D7ffc8344AeDe616,0xbc4145e3156BDFe2aECdB2628eD1464092808c03,0xc816fD366F5A4ba2F44c89E6b7ef277f1589a4Bd,0x0C9A0E58E78c3B56753026E3d655aB5CdBC2Da4E,0x0aec6B4E902e49255D1DbD9e34c057c052b992E2
Arg [1] : values (uint256[]): 125000000000000000000000000,50000000000000000000000000,125000000000000000000000000,150000000000000000000000000,150000000000000000000000000,250000000000000000000000000,100000000000000000000000000,50000000000000000000000000
Arg [2] : forwarderRegistry (address): 0xB87EbEB1f4aA317bd3eEc04704D3fFD6e3BC4b8f
Arg [3] : universalForwarder (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
22 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 000000000000000000000000b87ebeb1f4aa317bd3eec04704d3ffd6e3bc4b8f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [5] : 000000000000000000000000d731ce8d55b2440e307a978caf32e1201f5761a0
Arg [6] : 00000000000000000000000043113cb02641b607acde6a55e760eb4fe58bde0d
Arg [7] : 000000000000000000000000be0293faa9bee3f833b135f92a25aaad527cc099
Arg [8] : 00000000000000000000000072571d815dd31fbde52be0b9d7ffc8344aede616
Arg [9] : 000000000000000000000000bc4145e3156bdfe2aecdb2628ed1464092808c03
Arg [10] : 000000000000000000000000c816fd366f5a4ba2f44c89e6b7ef277f1589a4bd
Arg [11] : 0000000000000000000000000c9a0e58e78c3b56753026e3d655ab5cdbc2da4e
Arg [12] : 0000000000000000000000000aec6b4e902e49255d1dbd9e34c057c052b992e2
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [14] : 0000000000000000000000000000000000000000006765c793fa10079d000000
Arg [15] : 000000000000000000000000000000000000000000295be96e64066972000000
Arg [16] : 0000000000000000000000000000000000000000006765c793fa10079d000000
Arg [17] : 0000000000000000000000000000000000000000007c13bc4b2c133c56000000
Arg [18] : 0000000000000000000000000000000000000000007c13bc4b2c133c56000000
Arg [19] : 000000000000000000000000000000000000000000cecb8f27f4200f3a000000
Arg [20] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [21] : 000000000000000000000000000000000000000000295be96e64066972000000
Deployed Bytecode Sourcemap
49655:1679:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30686:620;;;;;;;;;;;;;;;;-1:-1:-1;30686:620:0;-1:-1:-1;;;;;;30686:620:0;;:::i;:::-;;;;;;;;;;;;;;;;;;31460:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32765:169;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32765:169:0;;;;;;;;:::i;32255:102::-;;;:::i;:::-;;;;;;;;;;;;;;;;34341:223;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34341:223:0;;;;;;;;;;;;;;;;;:::i;31756:94::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29690:361;;;:::i;33104:638::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33104:638:0;;;;;;;;:::i;32008:102::-;;;:::i;36500:1801::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36500:1801:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36500:1801:0;;-1:-1:-1;36500:1801:0;-1:-1:-1;36500:1801:0;:::i;47657:195::-;;;;;;;;;;;;;;;;-1:-1:-1;47657:195:0;-1:-1:-1;;;;;47657:195:0;;:::i;32403:121::-;;;;;;;;;;;;;;;;-1:-1:-1;32403:121:0;-1:-1:-1;;;;;32403:121:0;;:::i;8549:492::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8549:492:0;;-1:-1:-1;8549:492:0;-1:-1:-1;8549:492:0;:::i;:::-;;28795:50;;;;;;;;;;;;;;;;-1:-1:-1;28795:50:0;-1:-1:-1;;;;;28795:50:0;;:::i;34758:1646::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34758:1646:0;;-1:-1:-1;34758:1646:0;-1:-1:-1;34758:1646:0;:::i;2894:96::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2894:96:0;;;;;;;;;;;;;;31605:98;;;:::i;33805:281::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33805:281:0;;;;;;;;:::i;34131:161::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34131:161:0;;;;;;;;:::i;39025:485::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39025:485:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39025:485:0;;-1:-1:-1;39025:485:0;-1:-1:-1;39025:485:0;:::i;9867:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9867:522:0;;-1:-1:-1;9867:522:0;-1:-1:-1;9867:522:0;:::i;28638:42::-;;;:::i;39713:727::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39713:727:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32570:151::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32570:151:0;;;;;;;;;;:::i;50809:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50809:139:0;;-1:-1:-1;50809:139:0;-1:-1:-1;50809:139:0;:::i;38487:450::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38487:450:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38487:450:0;;-1:-1:-1;38487:450:0;-1:-1:-1;38487:450:0;:::i;3237:201::-;;;;;;;;;;;;;;;;-1:-1:-1;3237:201:0;-1:-1:-1;;;;;3237:201:0;;:::i;30686:620::-;30771:4;-1:-1:-1;;;;;;30808:40:0;;30823:25;30808:40;;:96;;-1:-1:-1;;;;;;;30865:39:0;;30880:24;30865:39;30808:96;:160;;;-1:-1:-1;;;;;;;30921:47:0;;30936:32;30921:47;30808:160;:224;;;-1:-1:-1;;;;;;;30985:47:0;;31000:32;30985:47;30808:224;:289;;;-1:-1:-1;;;;;;;31049:48:0;;31064:33;31049:48;30808:289;:359;;;-1:-1:-1;;;;;;;31114:53:0;;31129:38;31114:53;30808:359;:428;;;-1:-1:-1;;;;;;;31184:52:0;;31199:37;31184:52;30808:428;:490;;;-1:-1:-1;;;;;;;31253:45:0;;31268:30;31253:45;30808:490;30788:510;30686:620;-1:-1:-1;;30686:620:0:o;31460:94::-;31541:5;31534:12;;;;;;;;-1:-1:-1;;31534:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31508:13;;31534:12;;31541:5;;31534:12;;31541:5;31534:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:94;;:::o;32765:169::-;32849:4;32866:38;32875:12;:10;:12::i;:::-;32889:7;32898:5;32866:8;:38::i;:::-;-1:-1:-1;32922:4:0;32765:169;;;;:::o;32255:102::-;32337:12;;32255:102;:::o;34341:223::-;34473:4;34490:44;34504:12;:10;:12::i;:::-;34518:4;34524:2;34528:5;34490:13;:44::i;:::-;-1:-1:-1;34552:4:0;34341:223;;;;;:::o;31756:94::-;31833:9;31756:94;:::o;29690:361::-;29748:7;29829:9;29955:17;29944:28;;:99;;30036:5;29995:48;;;;;;;;;;;;;-1:-1:-1;;29995:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30021:7;;29995:48;;30036:5;;29995:48;;30036:5;29995:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:25;:48::i;:::-;29944:99;;;29975:17;29944:99;29937:106;;;29690:361;:::o;33104:638::-;33203:4;-1:-1:-1;;;;;33228:21:0;;33220:61;;;;;-1:-1:-1;;;33220:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33292:13;33308:12;:10;:12::i;:::-;-1:-1:-1;;;;;33352:18:0;;;33331;33352;;;:11;:18;;;;;;;;:27;;;;;;;;;;33292:28;;-1:-1:-1;33394:15:0;;33390:269;;33449:23;;;33495:25;;;33487:63;;;;;-1:-1:-1;;;33487:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33565:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;33595:12;-1:-1:-1;33390:269:0;33690:7;-1:-1:-1;;;;;33674:36:0;33683:5;-1:-1:-1;;;;;33674:36:0;;33699:10;33674:36;;;;;;;;;;;;;;;;;;-1:-1:-1;33730:4:0;;33104:638;-1:-1:-1;;;;33104:638:0:o;32008:102::-;32093:9;32086:16;;;;;;;;-1:-1:-1;;32086:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32060:13;;32086:16;;32093:9;;32086:16;;32093:9;32086:16;;;;;;;;;;;;;;;;;;;;;;;;36500:1801;36668:4;36702:10;36738:23;;;36730:62;;;;;-1:-1:-1;;;36730:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36823:15:0;;36805;36823;;;:9;:15;;;;;;;36805;;36921:810;36942:6;36937:1;:11;36921:810;;36970:10;36983;;36994:1;36983:13;;;;;;;;;;;;;-1:-1:-1;;;;;36983:13:0;36970:26;;37033:1;-1:-1:-1;;;;;37019:16:0;:2;-1:-1:-1;;;;;37019:16:0;;;37011:51;;;;;-1:-1:-1;;;37011:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37079:13;37095:6;;37102:1;37095:9;;;;;;;;;;;;;37079:25;;37125:5;37134:1;37125:10;37121:552;;37180:18;;;37225:26;;;37217:61;;;;;-1:-1:-1;;;37217:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37310:13;37297:26;;37354:2;-1:-1:-1;;;;;37346:10:0;:4;-1:-1:-1;;;;;37346:10:0;;37342:316;;-1:-1:-1;;;;;37381:13:0;;;;;;:9;:13;;;;;:22;;;;;;37342:316;;;37469:7;37460:5;:16;;37452:56;;;;;-1:-1:-1;;;37452:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37531:31;;;;37342:316;37121:552;;37709:2;-1:-1:-1;;;;;37694:25:0;37703:4;-1:-1:-1;;;;;37694:25:0;;37713:5;37694:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;36950:3:0;;36921:810;;;-1:-1:-1;37747:15:0;;;;;:55;;;37780:22;37766:10;:36;;37747:55;37743:384;;;37840:20;;;37883;;;37875:60;;;;;-1:-1:-1;;;37875:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38006:15:0;;;;;;:9;:15;;;;;38024:35;;;38006:53;;37743:384;38139:14;38156:12;:10;:12::i;:::-;38139:29;;38191:6;-1:-1:-1;;;;;38183:14:0;:4;-1:-1:-1;;;;;38183:14:0;;38179:91;;38214:44;38233:4;38239:6;38247:10;38214:18;:44::i;:::-;-1:-1:-1;38289:4:0;;36500:1801;-1:-1:-1;;;;;;;;;;36500:1801:0:o;47657:195::-;47744:4;47781:19;-1:-1:-1;;;;;47768:32:0;:9;-1:-1:-1;;;;;47768:32:0;;:76;;;;47825:18;-1:-1:-1;;;;;47804:40:0;:9;-1:-1:-1;;;;;47804:40:0;;47761:83;;47657:195;;;:::o;32403:121::-;-1:-1:-1;;;;;32498:18:0;32471:7;32498:18;;;:9;:18;;;;;;;32403:121::o;8549:492::-;8718:31;8736:12;:10;:12::i;:::-;8718:17;:31::i;:::-;8777:8;8811:23;;;:51;;;;-1:-1:-1;8838:24:0;;;8811:51;8803:90;;;;;-1:-1:-1;;;8803:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8909:9;8904:130;8929:6;8924:1;:11;8904:130;;8957:65;8998:8;;9007:1;8998:11;;;;;;;;;;;;;-1:-1:-1;;;;;8998:11:0;9011:7;;9019:1;9011:10;;;;;;;;;;;;;8971:6;;8978:1;8971:9;;;;;;;;;;;;;-1:-1:-1;;;;;8971:9:0;-1:-1:-1;;;;;8957:40:0;;;:65;;;;;:::i;:::-;8937:3;;8904:130;;;;8549:492;;;;;;;:::o;28795:50::-;;;;;;;;;;;;;;:::o;34758:1646::-;34874:4;34908:10;34944:23;;;34936:62;;;;;-1:-1:-1;;;34936:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35009:14;35026:12;:10;:12::i;:::-;-1:-1:-1;;;;;35067:17:0;;35049:15;35067:17;;;:9;:17;;;;;;35009:29;;-1:-1:-1;35049:15:0;;35167:810;35188:6;35183:1;:11;35167:810;;35216:10;35229;;35240:1;35229:13;;;;;;;;;;;;;-1:-1:-1;;;;;35229:13:0;35216:26;;35279:1;-1:-1:-1;;;;;35265:16:0;:2;-1:-1:-1;;;;;35265:16:0;;;35257:51;;;;;-1:-1:-1;;;35257:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35325:13;35341:6;;35348:1;35341:9;;;;;;;;;;;;;35325:25;;35369:5;35378:1;35369:10;35365:554;;35424:18;;;35469:26;;;35461:61;;;;;-1:-1:-1;;;35461:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35554:13;35541:26;;35600:2;-1:-1:-1;;;;;35590:12:0;:6;-1:-1:-1;;;;;35590:12:0;;35586:318;;-1:-1:-1;;;;;35627:13:0;;;;;;:9;:13;;;;;:22;;;;;;35586:318;;;35715:7;35706:5;:16;;35698:56;;;;;-1:-1:-1;;;35698:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35777:31;;;;35586:318;35365:554;;35955:2;-1:-1:-1;;;;;35938:27:0;35947:6;-1:-1:-1;;;;;35938:27:0;;35959:5;35938:27;;;;;;;;;;;;;;;;;;-1:-1:-1;;35196:3:0;;35167:810;;;-1:-1:-1;35993:15:0;;;;;:55;;;36026:22;36012:10;:36;;35993:55;35989:386;;;36086:20;;;36129;;;36121:60;;;;;-1:-1:-1;;;36121:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36252:17:0;;;;;;:9;:17;;;;;36272:35;;;36252:55;;35989:386;-1:-1:-1;36392:4:0;;34758:1646;-1:-1:-1;;;;;;;;;34758:1646:0:o;2894:96::-;2976:6;;-1:-1:-1;;;;;2976:6:0;2894:96;:::o;31605:98::-;31688:7;31681:14;;;;;;;-1:-1:-1;;31681:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31655:13;;31681:14;;31688:7;;31681:14;;31688:7;31681:14;;;;;;;;;;;;;;;;;;;;;;;;33805:281;33909:4;-1:-1:-1;;;;;33934:21:0;;33926:61;;;;;-1:-1:-1;;;33926:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33998:58;34017:12;:10;:12::i;:::-;34031:7;34040:15;33998:18;:58::i;34131:161::-;34211:4;34228:34;34238:12;:10;:12::i;:::-;34252:2;34256:5;34228:9;:34::i;39025:485::-;39192:4;39209:14;39226:12;:10;:12::i;:::-;39209:29;;39249:39;39263:6;39271:4;39277:2;39281:6;39249:13;:39::i;:::-;39303:15;:2;-1:-1:-1;;;;;39303:13:0;;:15::i;:::-;39299:182;;;39409:32;39343:98;;;39358:2;-1:-1:-1;;;;;39343:34:0;;39378:6;39386:4;39392:6;39400:4;;39343:62;;;;;;;;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;-1:-1:-1;;;;;39343:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39343:62:0;-1:-1:-1;;;;;;39343:98:0;;39335:134;;;;;-1:-1:-1;;;39335:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39498:4:0;;39025:485;-1:-1:-1;;;;;;39025:485:0:o;9867:522::-;10041:31;10059:12;:10;:12::i;10041:31::-;10100:8;10134:26;;;:55;;;;-1:-1:-1;10164:25:0;;;10134:55;10126:94;;;;;-1:-1:-1;;;10126:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10236:9;10231:151;10256:6;10251:1;:11;10231:151;;10303:9;;10313:1;10303:12;;;;;;;;;;;;;-1:-1:-1;;;;;10303:12:0;-1:-1:-1;;;;;10284:45:0;;10338:4;10345:8;;10354:1;10345:11;;;;;;;;;;;;;-1:-1:-1;;;;;10345:11:0;10358:8;;10367:1;10358:11;;;;;;;;;;;;;10284:86;;;;;;;;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;-1:-1:-1;;;;;10284:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10264:3;;;;;10231:151;;28638:42;;;:::o;39713:727::-;-1:-1:-1;;;;;39940:19:0;;39932:57;;;;;-1:-1:-1;;;39932:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40027:8;40008:15;:27;;40000:61;;;;;-1:-1:-1;;;40000:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40154:13:0;;;40072:18;40154:13;;;;;;;;;;;:15;;;;;;;;40103:77;;28563:66;40103:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40093:88;;;;;;;;40246:18;:16;:18::i;:::-;40266:10;40217:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40207:71;;;;;;40192:86;;40289:14;40306:24;40316:4;40322:1;40325;40328;40306:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40289:41;;40359:5;-1:-1:-1;;;;;40349:15:0;:6;-1:-1:-1;;;;;40349:15:0;;40341:49;;;;;-1:-1:-1;;;40341:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40401:31;40410:5;40417:7;40426:5;40401:8;:31::i;:::-;39713:727;;;;;;;;;;:::o;32570:151::-;-1:-1:-1;;;;;32686:18:0;;;32659:7;32686:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32570:151::o;50809:139::-;50877:31;50895:12;:10;:12::i;50877:31::-;50919:21;:9;50931;;50919:21;:::i;:::-;;50809:139;;:::o;38487:450::-;38627:4;38644:14;38661:12;:10;:12::i;:::-;38644:29;;38684;38694:6;38702:2;38706:6;38684:9;:29::i;:::-;38728:15;:2;-1:-1:-1;;;;;38728:13:0;;:15::i;:::-;38724:184;;;38836:32;38768:100;;;38783:2;-1:-1:-1;;;;;38768:34:0;;38803:6;38811;38819;38827:4;;38768:64;;;;;;;;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;-1:-1:-1;;;;;38768:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38768:64:0;-1:-1:-1;;;;;;38768:100:0;;38760:136;;;;;-1:-1:-1;;;38760:136:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38925:4:0;;38487:450;-1:-1:-1;;;;;38487:450:0:o;3237:201::-;3317:31;3335:12;:10;:12::i;3317:31::-;3359:6;:17;;;;-1:-1:-1;;;;;3359:17:0;;;;;;;;;;3392:38;;3359:17;;3413:6;;3392:38;;-1:-1:-1;;3392:38:0;3237:201;:::o;50956:185::-;51061:15;51096:37;:35;:37::i;:::-;51089:44;;50956:185;:::o;40558:281::-;-1:-1:-1;;;;;40685:21:0;;40677:61;;;;;-1:-1:-1;;;40677:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40749:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;40800:31;;;;;;;;;;;;;;;;;40558:281;;;:::o;42132:273::-;42275:26;42285:4;42291:2;42295:5;42275:9;:26::i;:::-;42324:6;-1:-1:-1;;;;;42316:14:0;:4;-1:-1:-1;;;;;42316:14:0;;42312:86;;42347:39;42366:4;42372:6;42380:5;42347:18;:39::i;:::-;42132:273;;;;:::o;30059:474::-;30372:16;;;;;;;30221:289;;;30254:95;30221:289;;;;;;;;;;;30411:14;30221:289;;;;;;;;;;;30486:4;30221:289;;;;;;;;;;;;;;;;;;;;;;;;;30193:332;;;;;;30059:474::o;40847:697::-;-1:-1:-1;;;;;41007:18:0;;;40986;41007;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;41051:31:0;;;;;:55;;-1:-1:-1;41086:20:0;;;41051:55;41047:438;;;41266:28;;;41317:25;;;41309:67;;;;;-1:-1:-1;;;41309:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41391:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:42;;;41421:12;-1:-1:-1;41047:438:0;41516:7;-1:-1:-1;;;;;41500:36:0;41509:5;-1:-1:-1;;;;;41500:36:0;;41525:10;41500:36;;;;;;;;;;;;;;;;;;40847:697;;;;:::o;3569:138::-;3660:4;-1:-1:-1;;;;;3660:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3660:12:0;-1:-1:-1;;;;;3649:23:0;;;;;;3641:58;;;;;-1:-1:-1;;;3641:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3569:138;:::o;5536:229::-;5698:58;;;-1:-1:-1;;;;;5698:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5721:23;5698:58;;;5663:94;;5691:5;;5663:27;:94::i;41552:572::-;-1:-1:-1;;;;;41682:16:0;;41674:51;;;;;-1:-1:-1;;;41674:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41742:10;;41738:336;;-1:-1:-1;;;;;41787:15:0;;41769;41787;;;:9;:15;;;;;;41838;;;41876:20;;;41868:60;;;;;-1:-1:-1;;;41868:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41955:2;-1:-1:-1;;;;;41947:10:0;:4;-1:-1:-1;;;;;41947:10:0;;41943:120;;-1:-1:-1;;;;;41978:15:0;;;;;;;:9;:15;;;;;;:28;;;42025:13;;;;;;:22;;;;;;41943:120;41738:336;;;42106:2;-1:-1:-1;;;;;42091:25:0;42100:4;-1:-1:-1;;;;;42091:25:0;;42110:5;42091:25;;;;;;;;;;;;;;;;;;41552:572;;;:::o;4723:387::-;5046:20;5094:8;;;4723:387::o;47860:922::-;47913:15;47969:10;47913:15;48015:27;:25;:27::i;:::-;47990:52;;48078:18;-1:-1:-1;;;;;48057:40:0;:9;-1:-1:-1;;;;;48057:40:0;;:76;;;;48114:19;-1:-1:-1;;;;;48101:32:0;:9;-1:-1:-1;;;;;48101:32:0;;48057:76;48053:169;;;48204:6;-1:-1:-1;48197:13:0;;-1:-1:-1;48197:13:0;48053:169;-1:-1:-1;;;;;48626:22:0;;48639:9;48626:22;;;;:78;;;48652:18;-1:-1:-1;;;;;48652:33:0;;48686:6;48694:9;48652:52;;;;;;;;;;;;;-1:-1:-1;;;;;48652:52:0;;;;;;-1:-1:-1;;;;;48652:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48652:52:0;48626:78;48622:124;;;48728:6;-1:-1:-1;48721:13:0;;-1:-1:-1;48721:13:0;48622:124;-1:-1:-1;48765:9:0;-1:-1:-1;47860:922:0;:::o;6292:892::-;6418:5;6443:19;-1:-1:-1;;;;;6443:17:0;;;:19::i;:::-;6435:58;;;;;-1:-1:-1;;;6435:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6567:12;6581:17;6602:6;-1:-1:-1;;;;;6602:11:0;6614:8;6602:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6566:57;;;;6638:7;6634:543;;;6666:11;;:16;6662:124;;6722:4;6711:24;;;;;;;;;;;;;;;-1:-1:-1;6711:24:0;6703:67;;;;;-1:-1:-1;;;6703:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6634:543;;;6877:11;;6873:97;;6914:40;;;-1:-1:-1;;;6914:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6873:97;7101:4;7095:11;7146:4;7139;7135:2;7131:13;7124:27;7064:102;6292:892;;;;;:::o;45991:526::-;46474:23;46478:14;46474:23;46461:37;46457:2;46453:46;;46428:82::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://71616ec3d73a3ccbc6f4a7a4376ded718b8e5c015ddc491dfc1942a01f8f1e4b
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.