Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 298 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 23009288 | 194 days ago | IN | 0 ETH | 0.00005384 | ||||
| Set Approval For... | 23008414 | 194 days ago | IN | 0 ETH | 0.0000532 | ||||
| Set Approval For... | 17023274 | 1032 days ago | IN | 0 ETH | 0.00099809 | ||||
| Set Approval For... | 16550334 | 1098 days ago | IN | 0 ETH | 0.00158192 | ||||
| Set Approval For... | 16544524 | 1099 days ago | IN | 0 ETH | 0.00113329 | ||||
| Set Approval For... | 15606797 | 1230 days ago | IN | 0 ETH | 0.00023486 | ||||
| Set Approval For... | 15592415 | 1232 days ago | IN | 0 ETH | 0.0003321 | ||||
| Set Approval For... | 15496729 | 1247 days ago | IN | 0 ETH | 0.00075053 | ||||
| Safe Transfer Fr... | 15157406 | 1300 days ago | IN | 0 ETH | 0.00073946 | ||||
| Set Approval For... | 15131402 | 1304 days ago | IN | 0 ETH | 0.00095503 | ||||
| Safe Transfer Fr... | 15113009 | 1307 days ago | IN | 0 ETH | 0.00040891 | ||||
| Set Approval For... | 15071913 | 1313 days ago | IN | 0 ETH | 0.00261401 | ||||
| Safe Transfer Fr... | 14989330 | 1328 days ago | IN | 0 ETH | 0.00103577 | ||||
| Set Approval For... | 14928598 | 1338 days ago | IN | 0 ETH | 0.00218504 | ||||
| Set Approval For... | 14711159 | 1374 days ago | IN | 0 ETH | 0.00153782 | ||||
| Set Approval For... | 14375530 | 1426 days ago | IN | 0 ETH | 0.00144232 | ||||
| Set Approval For... | 14239909 | 1447 days ago | IN | 0 ETH | 0.0039413 | ||||
| Safe Transfer Fr... | 14211822 | 1452 days ago | IN | 0 ETH | 0.00187568 | ||||
| Safe Transfer Fr... | 14211736 | 1452 days ago | IN | 0 ETH | 0.00351995 | ||||
| Set Approval For... | 13982065 | 1487 days ago | IN | 0 ETH | 0.00738123 | ||||
| Set Approval For... | 13883133 | 1502 days ago | IN | 0 ETH | 0.00224031 | ||||
| Set Approval For... | 13681362 | 1534 days ago | IN | 0 ETH | 0.00550988 | ||||
| Set Approval For... | 13579747 | 1550 days ago | IN | 0 ETH | 0.00702022 | ||||
| Set Approval For... | 13561563 | 1553 days ago | IN | 0 ETH | 0.00348978 | ||||
| Set Approval For... | 13441837 | 1572 days ago | IN | 0 ETH | 0.00376648 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EthMenExclusive
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-02-14
*/
/**
*Submitted for verification at Etherscan.io on 2020-12-01
*/
// File: @openzeppelin/contracts/introspection/IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
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: @openzeppelin/contracts/token/ERC1155/IERC1155.sol
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Required interface of an ERC1155 compliant contract, as defined in the
* https://eips.ethereum.org/EIPS/eip-1155[EIP].
*
* _Available since v3.1._
*/
interface IERC1155 is IERC165 {
/**
* @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
*/
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
/**
* @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
* transfers.
*/
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
/**
* @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
* `approved`.
*/
event ApprovalForAll(address indexed account, address indexed operator, bool approved);
/**
* @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
*
* If an {URI} event was emitted for `id`, the standard
* https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
* returned by {IERC1155MetadataURI-uri}.
*/
event URI(string value, uint256 indexed id);
/**
* @dev Returns the amount of tokens of token type `id` owned by `account`.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) external view returns (uint256);
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
/**
* @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
*
* Emits an {ApprovalForAll} event.
*
* Requirements:
*
* - `operator` cannot be the caller.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
*
* See {setApprovalForAll}.
*/
function isApprovedForAll(address account, address operator) external view returns (bool);
/**
* @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
* - `from` must have a balance of tokens of type `id` of at least `amount`.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
*
* Emits a {TransferBatch} event.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Interface of the optional ERC1155MetadataExtension interface, as defined
* in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
*
* _Available since v3.1._
*/
interface IERC1155MetadataURI is IERC1155 {
/**
* @dev Returns the URI for token type `id`.
*
* If the `\{id\}` substring is present in the URI, it must be replaced by
* clients with the actual token type ID.
*/
function uri(uint256 id) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* _Available since v3.1._
*/
interface IERC1155Receiver is IERC165 {
/**
@dev Handles the receipt of a single ERC1155 token type. This function is
called at the end of a `safeTransferFrom` after the balance has been updated.
To accept the transfer, this must return
`bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
(i.e. 0xf23a6e61, or its own function selector).
@param operator The address which initiated the transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param id The ID of the token being transferred
@param value The amount of tokens being transferred
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
)
external
returns(bytes4);
/**
@dev Handles the receipt of a multiple ERC1155 token types. This function
is called at the end of a `safeBatchTransferFrom` after the balances have
been updated. To accept the transfer(s), this must return
`bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
(i.e. 0xbc197c81, or its own function selector).
@param operator The address which initiated the batch transfer (i.e. msg.sender)
@param from The address which previously owned the token
@param ids An array containing ids of each token being transferred (order and length must match values array)
@param values An array containing amounts of each token being transferred (order and length must match ids array)
@param data Additional data with no specified format
@return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
)
external
returns(bytes4);
}
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity >=0.6.0 <0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with GSN meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/introspection/ERC165.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts may inherit from this and call {_registerInterface} to declare
* their support of an interface.
*/
abstract contract ERC165 is IERC165 {
/*
* bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
*/
bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
/**
* @dev Mapping of interface ids to whether or not it's supported.
*/
mapping(bytes4 => bool) private _supportedInterfaces;
constructor () internal {
// Derived contracts need only register support for their own interfaces,
// we register support for ERC165 itself here
_registerInterface(_INTERFACE_ID_ERC165);
}
/**
* @dev See {IERC165-supportsInterface}.
*
* Time complexity O(1), guaranteed to always use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
return _supportedInterfaces[interfaceId];
}
/**
* @dev Registers the contract as an implementer of the interface defined by
* `interfaceId`. Support of the actual ERC165 interface is automatic and
* registering its interface id is not required.
*
* See {IERC165-supportsInterface}.
*
* Requirements:
*
* - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
*/
function _registerInterface(bytes4 interfaceId) internal virtual {
require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
_supportedInterfaces[interfaceId] = true;
}
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity >=0.6.2 <0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
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;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: value }(data);
return _verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol
pragma solidity >=0.6.0 <0.8.0;
/**
*
* @dev Implementation of the basic standard multi-token.
* See https://eips.ethereum.org/EIPS/eip-1155
* Originally based on code by Enjin: https://github.com/enjin/erc-1155
*
* _Available since v3.1._
*/
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
using SafeMath for uint256;
using Address for address;
// Mapping from token ID to account balances
mapping (uint256 => mapping(address => uint256)) private _balances;
// Mapping from account to operator approvals
mapping (address => mapping(address => bool)) private _operatorApprovals;
// Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
string private _uri;
/*
* bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e
* bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4
* bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
* bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
* bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a
* bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6
*
* => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^
* 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26
*/
bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;
/*
* bytes4(keccak256('uri(uint256)')) == 0x0e89341c
*/
bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;
/**
* @dev See {_setURI}.
*/
constructor (string memory uri_) public {
_setURI(uri_);
// register the supported interfaces to conform to ERC1155 via ERC165
_registerInterface(_INTERFACE_ID_ERC1155);
// register the supported interfaces to conform to ERC1155MetadataURI via ERC165
_registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
}
/**
* @dev See {IERC1155MetadataURI-uri}.
*
* This implementation returns the same URI for *all* token types. It relies
* on the token type ID substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* Clients calling this function must replace the `\{id\}` substring with the
* actual token type ID.
*/
function uri(uint256) external view virtual override returns (string memory) {
return _uri;
}
/**
* @dev See {IERC1155-balanceOf}.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function balanceOf(address account, uint256 id) public view override returns (uint256) {
require(account != address(0), "ERC1155: balance query for the zero address");
return _balances[id][account];
}
/**
* @dev See {IERC1155-balanceOfBatch}.
*
* Requirements:
*
* - `accounts` and `ids` must have the same length.
*/
function balanceOfBatch(
address[] memory accounts,
uint256[] memory ids
)
public
view
override
returns (uint256[] memory)
{
require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");
uint256[] memory batchBalances = new uint256[](accounts.length);
for (uint256 i = 0; i < accounts.length; ++i) {
require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
batchBalances[i] = _balances[ids[i]][accounts[i]];
}
return batchBalances;
}
/**
* @dev See {IERC1155-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(_msgSender() != operator, "ERC1155: setting approval status for self");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC1155-isApprovedForAll}.
*/
function isApprovedForAll(address account, address operator) public view override returns (bool) {
return _operatorApprovals[account][operator];
}
/**
* @dev See {IERC1155-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
)
public
virtual
override
{
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);
_balances[id][from] = _balances[id][from].sub(amount, "ERC1155: insufficient balance for transfer");
_balances[id][to] = _balances[id][to].add(amount);
emit TransferSingle(operator, from, to, id, amount);
_doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
}
/**
* @dev See {IERC1155-safeBatchTransferFrom}.
*/
function safeBatchTransferFrom(
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
)
public
virtual
override
{
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
require(to != address(0), "ERC1155: transfer to the zero address");
require(
from == _msgSender() || isApprovedForAll(from, _msgSender()),
"ERC1155: transfer caller is not owner nor approved"
);
address operator = _msgSender();
_beforeTokenTransfer(operator, from, to, ids, amounts, data);
for (uint256 i = 0; i < ids.length; ++i) {
uint256 id = ids[i];
uint256 amount = amounts[i];
_balances[id][from] = _balances[id][from].sub(
amount,
"ERC1155: insufficient balance for transfer"
);
_balances[id][to] = _balances[id][to].add(amount);
}
emit TransferBatch(operator, from, to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
}
/**
* @dev Sets a new URI for all token types, by relying on the token type ID
* substitution mechanism
* https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
*
* By this mechanism, any occurrence of the `\{id\}` substring in either the
* URI or any of the amounts in the JSON file at said URI will be replaced by
* clients with the token type ID.
*
* For example, the `https://token-cdn-domain/\{id\}.json` URI would be
* interpreted by clients as
* `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
* for token type ID 0x4cce0.
*
* See {uri}.
*
* Because these URIs cannot be meaningfully represented by the {URI} event,
* this function emits no events.
*/
function _setURI(string memory newuri) internal virtual {
_uri = newuri;
}
/**
* @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
*
* Emits a {TransferSingle} event.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
* acceptance magic value.
*/
function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {
require(account != address(0), "ERC1155: mint to the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);
_balances[id][account] = _balances[id][account].add(amount);
emit TransferSingle(operator, address(0), account, id, amount);
_doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
* - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
* acceptance magic value.
*/
function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {
require(to != address(0), "ERC1155: mint to the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), to, ids, amounts, data);
for (uint i = 0; i < ids.length; i++) {
_balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);
}
emit TransferBatch(operator, address(0), to, ids, amounts);
_doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
}
/**
* @dev Destroys `amount` tokens of token type `id` from `account`
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens of token type `id`.
*/
function _burn(address account, uint256 id, uint256 amount) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");
_balances[id][account] = _balances[id][account].sub(
amount,
"ERC1155: burn amount exceeds balance"
);
emit TransferSingle(operator, account, address(0), id, amount);
}
/**
* @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
*
* Requirements:
*
* - `ids` and `amounts` must have the same length.
*/
function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
require(account != address(0), "ERC1155: burn from the zero address");
require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
address operator = _msgSender();
_beforeTokenTransfer(operator, account, address(0), ids, amounts, "");
for (uint i = 0; i < ids.length; i++) {
_balances[ids[i]][account] = _balances[ids[i]][account].sub(
amounts[i],
"ERC1155: burn amount exceeds balance"
);
}
emit TransferBatch(operator, account, address(0), ids, amounts);
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning, as well as batched variants.
*
* The same hook is called on both single and batched variants. For single
* transfers, the length of the `id` and `amount` arrays will be 1.
*
* Calling conditions (for each `id` and `amount` pair):
*
* - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* of token type `id` will be transferred to `to`.
* - When `from` is zero, `amount` tokens of token type `id` will be minted
* for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
* will be burned.
* - `from` and `to` are never both zero.
* - `ids` and `amounts` have the same, non-zero length.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
)
internal virtual
{ }
function _doSafeTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
)
private
{
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
if (response != IERC1155Receiver(to).onERC1155Received.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _doSafeBatchTransferAcceptanceCheck(
address operator,
address from,
address to,
uint256[] memory ids,
uint256[] memory amounts,
bytes memory data
)
private
{
if (to.isContract()) {
try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {
if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
revert("ERC1155: ERC1155Receiver rejected tokens");
}
} catch Error(string memory reason) {
revert(reason);
} catch {
revert("ERC1155: transfer to non ERC1155Receiver implementer");
}
}
}
function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
uint256[] memory array = new uint256[](1);
array[0] = element;
return array;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: contracts/contract.sol
pragma solidity ^0.6.0;
contract EthMenExclusive is ERC1155, Ownable {
string public name;
string public symbol;
uint256 private highestId;
//mappings
mapping(uint256 => string) private metadata;
mapping(uint256 => uint256) private idSupply;
constructor() public ERC1155("") {
name = "ETH-MEN Exclusive";
symbol = "EME";
highestId = 0;
transferOwnership(0x968f7FB671F8737738c356060cAAdb1714E0BfCF);
}
function mint(address account, uint256 id, uint256 amount, string memory _metadata) public onlyOwner {
_customMint(account, id, amount);
bytes memory bytesData = bytes(_metadata);
if (bytesData.length != 0) metadata[id] = _metadata;
}
function _customMint(address account, uint256 id, uint256 amount) private {
require(account == _msgSender() || isApprovedForAll(account, _msgSender()), "Need operator approval for 3rd party burns.");
_mint(account, id, amount, "");
if (id > highestId) { highestId = id;}
idSupply[id]+=amount;
}
function burn(address account, uint256 id, uint256 amount) public {
require(account == _msgSender() || isApprovedForAll(account, _msgSender()), "Need operator approval for 3rd party burns.");
_burn(account, id, amount);
idSupply[id]-=amount;
}
function setTokenUri(uint256 id, string memory _metadata) public onlyOwner {
require(id >= 0, "Id needs be 0 or greater");
metadata[id] = _metadata;
}
function totalSupply(uint256 id) public view returns(uint256 total_supply) {
return idSupply[id];
}
function totalBalance(address _owner) public view returns(uint256) {
uint256 count = 0;
for (uint256 id = 0; id <= highestId; id++) {
if (balanceOf(_owner, id) > 0) count++;
}
return count;
}
function tokenTypesOf(address _owner) public view returns(uint256[] memory ids) {
uint256[] memory result = new uint256[](totalBalance(_owner));
uint256 c = 0;
for (uint256 id = 0; id <= highestId; id++) {
if (balanceOf(_owner, id) > 0) {result[c] = id;c++;}
}
return result;
}
function totalTokenTypes() public view returns(uint256) {
uint256 count = 0;
for (uint256 id = 0; id <= highestId; id++) {
if (totalSupply(id) > 0) count++;
}
return count;
}
function uri(uint256 id) public view override returns(string memory) {
return metadata[id];
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"_metadata","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"_metadata","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokenTypesOf","outputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"total_supply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenTypes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b50604051806020016040528060008152506200003a6301ffc9a760e01b620001fc60201b60201c565b6200004b816200030560201b60201c565b6200006363d9b67a2660e01b620001fc60201b60201c565b6200007b630e89341c60e01b620001fc60201b60201c565b5060006200008e6200032160201b60201c565b905080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280601181526020017f4554482d4d454e204578636c7573697665000000000000000000000000000000815250600590805190602001906200017a92919062000544565b506040518060400160405280600381526020017f454d45000000000000000000000000000000000000000000000000000000000081525060069080519060200190620001c892919062000544565b506000600781905550620001f673968f7fb671f8737738c356060caadb1714e0bfcf6200032960201b60201c565b620005ea565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b80600390805190602001906200031d92919062000544565b5050565b600033905090565b620003396200032160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620003fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018062003ca16026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200058757805160ff1916838001178555620005b8565b82800160010185558215620005b8579182015b82811115620005b75782518255916020019190600101906200059a565b5b509050620005c79190620005cb565b5090565b5b80821115620005e6576000816000905550600101620005cc565b5090565b6136a780620005fa6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80638da5cb5b116100ad578063bd85b03911610071578063bd85b03914610ab7578063e985e9c514610af9578063f242432a14610b73578063f2fde38b14610c82578063f5298aca14610cc65761012b565b80638da5cb5b146108a35780638dfde339146108d757806395d89b41146108f5578063a22cb46514610978578063bb7fde71146109c85761012b565b80634e1273f4116100f45780634e1273f41461054257806357f7789e146106e35780636a05025f146107a85780636eacd39814610841578063715018a6146108995761012b565b8062fdd58e1461013057806301ffc9a71461019257806306fdde03146101f55780630e89341c146102785780632eb2c2d61461031f575b600080fd5b61017c6004803603604081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1e565b6040518082815260200191505060405180910390f35b6101dd600480360360208110156101a857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610dfe565b60405180821515815260200191505060405180910390f35b6101fd610e65565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a46004803603602081101561028e57600080fd5b8101908080359060200190929190505050610f03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e45780820151818401526020810190506102c9565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610540600480360360a081101561033557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460208302840111640100000000831117156103c657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561042657600080fd5b82018360208201111561043857600080fd5b8035906020019184602083028401116401000000008311171561045a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104ba57600080fd5b8201836020820111156104cc57600080fd5b803590602001918460018302840111640100000000831117156104ee57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610fb8565b005b61068c6004803603604081101561055857600080fd5b810190808035906020019064010000000081111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111640100000000831117156105a957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060957600080fd5b82018360208201111561061b57600080fd5b8035906020019184602083028401116401000000008311171561063d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611443565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106cf5780820151818401526020810190506106b4565b505050509050019250505060405180910390f35b6107a6600480360360408110156106f957600080fd5b81019080803590602001909291908035906020019064010000000081111561072057600080fd5b82018360208201111561073257600080fd5b8035906020019184600183028401116401000000008311171561075457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611635565b005b6107ea600480360360208110156107be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117a2565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561082d578082015181840152602081019050610812565b505050509050019250505060405180910390f35b6108836004803603602081101561085757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184f565b6040518082815260200191505060405180910390f35b6108a1611894565b005b6108ab611a1f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108df611a49565b6040518082815260200191505060405180910390f35b6108fd611a8b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561093d578082015181840152602081019050610922565b50505050905090810190601f16801561096a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109c66004803603604081101561098e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b29565b005b610ab5600480360360808110156109de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610a2f57600080fd5b820183602082011115610a4157600080fd5b80359060200191846001830284011164010000000083111715610a6357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cc2565b005b610ae360048036036020811015610acd57600080fd5b8101908080359060200190929190505050611dd5565b6040518082815260200191505060405180910390f35b610b5b60048036036040811015610b0f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df2565b60405180821515815260200191505060405180910390f35b610c80600480360360a0811015610b8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bfa57600080fd5b820183602082011115610c0c57600080fd5b80359060200191846001830284011164010000000083111715610c2e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e86565b005b610cc460048036036020811015610c9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121fb565b005b610d1c60048036036060811015610cdc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061240b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613439602b913960400191505060405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610efb5780601f10610ed057610100808354040283529160200191610efb565b820191906000526020600020905b815481529060010190602001808311610ede57829003601f168201915b505050505081565b6060600860008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fac5780601f10610f8157610100808354040283529160200191610fac565b820191906000526020600020905b815481529060010190602001808311610f8f57829003601f168201915b50505050509050919050565b8151835114611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806136296028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611098576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135086025913960400191505060405180910390fd5b6110a06124df565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110e657506110e5856110e06124df565b611df2565b5b61113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061352d6032913960400191505060405180910390fd5b60006111456124df565b90506111558187878787876124e7565b60005b845181101561132657600085828151811061116f57fe5b60200260200101519050600085838151811061118757fe5b6020026020010151905061120e816040518060600160405280602a81526020016135ad602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ef9092919063ffffffff16565b6001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112c5816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125af90919063ffffffff16565b6001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050806001019050611158565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156113d65780820151818401526020810190506113bb565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156114185780820151818401526020810190506113fd565b5050505090500194505050505060405180910390a461143b818787878787612637565b505050505050565b6060815183511461149f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136006029913960400191505060405180910390fd5b6060835167ffffffffffffffff811180156114b957600080fd5b506040519080825280602002602001820160405280156114e85781602001602082028036833780820191505090505b50905060005b845181101561162a57600073ffffffffffffffffffffffffffffffffffffffff1685828151811061151b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806134646031913960400191505060405180910390fd5b600160008583815181106115a057fe5b6020026020010151815260200190815260200160002060008683815181106115c457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061161357fe5b6020026020010181815250508060010190506114ee565b508091505092915050565b61163d6124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000821015611776576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4964206e656564732062652030206f722067726561746572000000000000000081525060200191505060405180910390fd5b8060086000848152602001908152602001600020908051906020019061179d92919061326b565b505050565b6060806117ae8361184f565b67ffffffffffffffff811180156117c457600080fd5b506040519080825280602002602001820160405280156117f35781602001602082028036833780820191505090505b5090506000805b600754811161184457600061180f8683610d1e565b1115611837578083838151811061182257fe5b60200260200101818152505081806001019250505b80806001019150506117fa565b508192505050919050565b6000806000905060005b600754811161188a57600061186e8583610d1e565b111561187d5781806001019250505b8080600101915050611859565b5080915050919050565b61189c6124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000905060005b6007548111611a83576000611a6782611dd5565b1115611a765781806001019250505b8080600101915050611a53565b508091505090565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b215780601f10611af657610100808354040283529160200191611b21565b820191906000526020600020905b815481529060010190602001808311611b0457829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16611b486124df565b73ffffffffffffffffffffffffffffffffffffffff161415611bb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135d76029913960400191505060405180910390fd5b8060026000611bc26124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c6f6124df565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b611cca6124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611d978484846129c6565b60608190506000815114611dce5781600860008681526020019081526020016000209080519060200190611dcc92919061326b565b505b5050505050565b600060096000838152602001908152602001600020549050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135086025913960400191505060405180910390fd5b611f146124df565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611f5a5750611f5985611f546124df565b611df2565b5b611faf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806134df6029913960400191505060405180910390fd5b6000611fb96124df565b9050611fd9818787611fca88612abc565b611fd388612abc565b876124e7565b612056836040518060600160405280602a81526020016135ad602a91396001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ef9092919063ffffffff16565b6001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061210d836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125af90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a46121f3818787878787612b2c565b505050505050565b6122036124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134956026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124136124df565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806124595750612458836124536124df565b611df2565b5b6124ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061355f602b913960400191505060405180910390fd5b6124b9838383612e39565b806009600084815260200190815260200160002060008282540392505081905550505050565b600033905090565b505050505050565b600083831115829061259c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612561578082015181840152602081019050612546565b50505050905090810190601f16801561258e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101561262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6126568473ffffffffffffffffffffffffffffffffffffffff16613055565b156129be578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561270e5780820151818401526020810190506126f3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612750578082015181840152602081019050612735565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561278f578082015181840152602081019050612774565b50505050905090810190601f1680156127bc5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156127e157600080fd5b505af192505050801561281557506040513d602081101561280157600080fd5b810190808051906020019092919050505060015b61291f57612821613326565b8061282c57506128ce565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612893578082015181840152602081019050612878565b50505050905090810190601f1680156128c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806133dd6034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806134116028913960400191505060405180910390fd5b505b505050505050565b6129ce6124df565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612a145750612a1383612a0e6124df565b611df2565b5b612a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061355f602b913960400191505060405180910390fd5b612a8483838360405180602001604052806000815250613068565b600754821115612a9657816007819055505b806009600084815260200190815260200160002060008282540192505081905550505050565b606080600167ffffffffffffffff81118015612ad757600080fd5b50604051908082528060200260200182016040528015612b065781602001602082028036833780820191505090505b5090508281600081518110612b1757fe5b60200260200101818152505080915050919050565b612b4b8473ffffffffffffffffffffffffffffffffffffffff16613055565b15612e31578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c04578082015181840152602081019050612be9565b50505050905090810190601f168015612c315780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612c5457600080fd5b505af1925050508015612c8857506040513d6020811015612c7457600080fd5b810190808051906020019092919050505060015b612d9257612c94613326565b80612c9f5750612d41565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d06578082015181840152602081019050612ceb565b50505050905090810190601f168015612d335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806133dd6034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806134116028913960400191505060405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061358a6023913960400191505060405180910390fd5b6000612ec96124df565b9050612ef981856000612edb87612abc565b612ee487612abc565b604051806020016040528060008152506124e7565b612f76826040518060600160405280602481526020016134bb602491396001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ef9092919063ffffffff16565b6001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a450505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136516021913960400191505060405180910390fd5b60006130f86124df565b90506131198160008761310a88612abc565b61311388612abc565b876124e7565b61317c836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125af90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a461326481600087878787612b2c565b5050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106132ac57805160ff19168380011785556132da565b828001600101855582156132da579182015b828111156132d95782518255916020019190600101906132be565b5b5090506132e791906132eb565b5090565b5b808211156133045760008160009055506001016132ec565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613336576133d9565b60046000803e613347600051613319565b6308c379a0811461335857506133d9565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613384575050506133d9565b808201805167ffffffffffffffff8111156133a35750505050506133d9565b8060208301013d85018111156133be575050505050506133d9565b6133c782613308565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479206275726e732e455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a2646970667358221220d4365ac48617857d04e3faa9f8de57ddadd605cdb398d452a7a31b3dc08f851d64736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061012b5760003560e01c80638da5cb5b116100ad578063bd85b03911610071578063bd85b03914610ab7578063e985e9c514610af9578063f242432a14610b73578063f2fde38b14610c82578063f5298aca14610cc65761012b565b80638da5cb5b146108a35780638dfde339146108d757806395d89b41146108f5578063a22cb46514610978578063bb7fde71146109c85761012b565b80634e1273f4116100f45780634e1273f41461054257806357f7789e146106e35780636a05025f146107a85780636eacd39814610841578063715018a6146108995761012b565b8062fdd58e1461013057806301ffc9a71461019257806306fdde03146101f55780630e89341c146102785780632eb2c2d61461031f575b600080fd5b61017c6004803603604081101561014657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d1e565b6040518082815260200191505060405180910390f35b6101dd600480360360208110156101a857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610dfe565b60405180821515815260200191505060405180910390f35b6101fd610e65565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023d578082015181840152602081019050610222565b50505050905090810190601f16801561026a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102a46004803603602081101561028e57600080fd5b8101908080359060200190929190505050610f03565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102e45780820151818401526020810190506102c9565b50505050905090810190601f1680156103115780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610540600480360360a081101561033557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561039257600080fd5b8201836020820111156103a457600080fd5b803590602001918460208302840111640100000000831117156103c657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561042657600080fd5b82018360208201111561043857600080fd5b8035906020019184602083028401116401000000008311171561045a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156104ba57600080fd5b8201836020820111156104cc57600080fd5b803590602001918460018302840111640100000000831117156104ee57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610fb8565b005b61068c6004803603604081101561055857600080fd5b810190808035906020019064010000000081111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111640100000000831117156105a957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060957600080fd5b82018360208201111561061b57600080fd5b8035906020019184602083028401116401000000008311171561063d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611443565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106cf5780820151818401526020810190506106b4565b505050509050019250505060405180910390f35b6107a6600480360360408110156106f957600080fd5b81019080803590602001909291908035906020019064010000000081111561072057600080fd5b82018360208201111561073257600080fd5b8035906020019184600183028401116401000000008311171561075457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611635565b005b6107ea600480360360208110156107be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117a2565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561082d578082015181840152602081019050610812565b505050509050019250505060405180910390f35b6108836004803603602081101561085757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061184f565b6040518082815260200191505060405180910390f35b6108a1611894565b005b6108ab611a1f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108df611a49565b6040518082815260200191505060405180910390f35b6108fd611a8b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561093d578082015181840152602081019050610922565b50505050905090810190601f16801561096a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109c66004803603604081101561098e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611b29565b005b610ab5600480360360808110156109de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610a2f57600080fd5b820183602082011115610a4157600080fd5b80359060200191846001830284011164010000000083111715610a6357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611cc2565b005b610ae360048036036020811015610acd57600080fd5b8101908080359060200190929190505050611dd5565b6040518082815260200191505060405180910390f35b610b5b60048036036040811015610b0f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611df2565b60405180821515815260200191505060405180910390f35b610c80600480360360a0811015610b8957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610bfa57600080fd5b820183602082011115610c0c57600080fd5b80359060200191846001830284011164010000000083111715610c2e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e86565b005b610cc460048036036020811015610c9857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121fb565b005b610d1c60048036036060811015610cdc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061240b565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610da5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613439602b913960400191505060405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610efb5780601f10610ed057610100808354040283529160200191610efb565b820191906000526020600020905b815481529060010190602001808311610ede57829003601f168201915b505050505081565b6060600860008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fac5780601f10610f8157610100808354040283529160200191610fac565b820191906000526020600020905b815481529060010190602001808311610f8f57829003601f168201915b50505050509050919050565b8151835114611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806136296028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611098576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135086025913960400191505060405180910390fd5b6110a06124df565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806110e657506110e5856110e06124df565b611df2565b5b61113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061352d6032913960400191505060405180910390fd5b60006111456124df565b90506111558187878787876124e7565b60005b845181101561132657600085828151811061116f57fe5b60200260200101519050600085838151811061118757fe5b6020026020010151905061120e816040518060600160405280602a81526020016135ad602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ef9092919063ffffffff16565b6001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506112c5816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125af90919063ffffffff16565b6001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050806001019050611158565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156113d65780820151818401526020810190506113bb565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156114185780820151818401526020810190506113fd565b5050505090500194505050505060405180910390a461143b818787878787612637565b505050505050565b6060815183511461149f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136006029913960400191505060405180910390fd5b6060835167ffffffffffffffff811180156114b957600080fd5b506040519080825280602002602001820160405280156114e85781602001602082028036833780820191505090505b50905060005b845181101561162a57600073ffffffffffffffffffffffffffffffffffffffff1685828151811061151b57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806134646031913960400191505060405180910390fd5b600160008583815181106115a057fe5b6020026020010151815260200190815260200160002060008683815181106115c457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061161357fe5b6020026020010181815250508060010190506114ee565b508091505092915050565b61163d6124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000821015611776576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4964206e656564732062652030206f722067726561746572000000000000000081525060200191505060405180910390fd5b8060086000848152602001908152602001600020908051906020019061179d92919061326b565b505050565b6060806117ae8361184f565b67ffffffffffffffff811180156117c457600080fd5b506040519080825280602002602001820160405280156117f35781602001602082028036833780820191505090505b5090506000805b600754811161184457600061180f8683610d1e565b1115611837578083838151811061182257fe5b60200260200101818152505081806001019250505b80806001019150506117fa565b508192505050919050565b6000806000905060005b600754811161188a57600061186e8583610d1e565b111561187d5781806001019250505b8080600101915050611859565b5080915050919050565b61189c6124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000905060005b6007548111611a83576000611a6782611dd5565b1115611a765781806001019250505b8080600101915050611a53565b508091505090565b60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b215780601f10611af657610100808354040283529160200191611b21565b820191906000526020600020905b815481529060010190602001808311611b0457829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16611b486124df565b73ffffffffffffffffffffffffffffffffffffffff161415611bb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806135d76029913960400191505060405180910390fd5b8060026000611bc26124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c6f6124df565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b611cca6124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611d978484846129c6565b60608190506000815114611dce5781600860008681526020019081526020016000209080519060200190611dcc92919061326b565b505b5050505050565b600060096000838152602001908152602001600020549050919050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806135086025913960400191505060405180910390fd5b611f146124df565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611f5a5750611f5985611f546124df565b611df2565b5b611faf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806134df6029913960400191505060405180910390fd5b6000611fb96124df565b9050611fd9818787611fca88612abc565b611fd388612abc565b876124e7565b612056836040518060600160405280602a81526020016135ad602a91396001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ef9092919063ffffffff16565b6001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061210d836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125af90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a46121f3818787878787612b2c565b505050505050565b6122036124df565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561234b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806134956026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124136124df565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806124595750612458836124536124df565b611df2565b5b6124ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061355f602b913960400191505060405180910390fd5b6124b9838383612e39565b806009600084815260200190815260200160002060008282540392505081905550505050565b600033905090565b505050505050565b600083831115829061259c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612561578082015181840152602081019050612546565b50505050905090810190601f16801561258e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008082840190508381101561262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6126568473ffffffffffffffffffffffffffffffffffffffff16613055565b156129be578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561270e5780820151818401526020810190506126f3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015612750578082015181840152602081019050612735565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561278f578082015181840152602081019050612774565b50505050905090810190601f1680156127bc5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156127e157600080fd5b505af192505050801561281557506040513d602081101561280157600080fd5b810190808051906020019092919050505060015b61291f57612821613326565b8061282c57506128ce565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612893578082015181840152602081019050612878565b50505050905090810190601f1680156128c05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806133dd6034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806134116028913960400191505060405180910390fd5b505b505050505050565b6129ce6124df565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612a145750612a1383612a0e6124df565b611df2565b5b612a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061355f602b913960400191505060405180910390fd5b612a8483838360405180602001604052806000815250613068565b600754821115612a9657816007819055505b806009600084815260200190815260200160002060008282540192505081905550505050565b606080600167ffffffffffffffff81118015612ad757600080fd5b50604051908082528060200260200182016040528015612b065781602001602082028036833780820191505090505b5090508281600081518110612b1757fe5b60200260200101818152505080915050919050565b612b4b8473ffffffffffffffffffffffffffffffffffffffff16613055565b15612e31578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612c04578082015181840152602081019050612be9565b50505050905090810190601f168015612c315780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612c5457600080fd5b505af1925050508015612c8857506040513d6020811015612c7457600080fd5b810190808051906020019092919050505060015b612d9257612c94613326565b80612c9f5750612d41565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d06578082015181840152602081019050612ceb565b50505050905090810190601f168015612d335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806133dd6034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806134116028913960400191505060405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061358a6023913960400191505060405180910390fd5b6000612ec96124df565b9050612ef981856000612edb87612abc565b612ee487612abc565b604051806020016040528060008152506124e7565b612f76826040518060600160405280602481526020016134bb602491396001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124ef9092919063ffffffff16565b6001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a450505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136516021913960400191505060405180910390fd5b60006130f86124df565b90506131198160008761310a88612abc565b61311388612abc565b876124e7565b61317c836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125af90919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a461326481600087878787612b2c565b5050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106132ac57805160ff19168380011785556132da565b828001600101855582156132da579182015b828111156132d95782518255916020019190600101906132be565b5b5090506132e791906132eb565b5090565b5b808211156133045760008160009055506001016132ec565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015613336576133d9565b60046000803e613347600051613319565b6308c379a0811461335857506133d9565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715613384575050506133d9565b808201805167ffffffffffffffff8111156133a35750505050506133d9565b8060208301013d85018111156133be575050505050506133d9565b6133c782613308565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479206275726e732e455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a2646970667358221220d4365ac48617857d04e3faa9f8de57ddadd605cdb398d452a7a31b3dc08f851d64736f6c634300060c0033
Deployed Bytecode Sourcemap
40015:2699:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26014:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9981:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;40073:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42594:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28726:1220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26403:634;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41427:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42001:340;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41743:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39395:148;;;:::i;:::-;;38753:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;42353:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40098:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27110:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40503:266;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41612:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27493:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27725:924;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39698:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41134:275;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26014:223;26092:7;26139:1;26120:21;;:7;:21;;;;26112:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26207:9;:13;26217:2;26207:13;;;;;;;;;;;:22;26221:7;26207:22;;;;;;;;;;;;;;;;26200:29;;26014:223;;;;:::o;9981:142::-;10058:4;10082:20;:33;10103:11;10082:33;;;;;;;;;;;;;;;;;;;;;;;;;;;10075:40;;9981:142;;;:::o;40073:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42594:109::-;42648:13;42681:8;:12;42690:2;42681:12;;;;;;;;;;;42674:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42594:109;;;:::o;28726:1220::-;28991:7;:14;28977:3;:10;:28;28969:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29083:1;29069:16;;:2;:16;;;;29061:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29168:12;:10;:12::i;:::-;29160:20;;:4;:20;;;:60;;;;29184:36;29201:4;29207:12;:10;:12::i;:::-;29184:16;:36::i;:::-;29160:60;29138:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29311:16;29330:12;:10;:12::i;:::-;29311:31;;29355:60;29376:8;29386:4;29392:2;29396:3;29401:7;29410:4;29355:20;:60::i;:::-;29433:9;29428:358;29452:3;:10;29448:1;:14;29428:358;;;29484:10;29497:3;29501:1;29497:6;;;;;;;;;;;;;;29484:19;;29518:14;29535:7;29543:1;29535:10;;;;;;;;;;;;;;29518:27;;29584:126;29626:6;29584:126;;;;;;;;;;;;;;;;;:9;:13;29594:2;29584:13;;;;;;;;;;;:19;29598:4;29584:19;;;;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;29562:9;:13;29572:2;29562:13;;;;;;;;;;;:19;29576:4;29562:19;;;;;;;;;;;;;;;:148;;;;29745:29;29767:6;29745:9;:13;29755:2;29745:13;;;;;;;;;;;:17;29759:2;29745:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;29725:9;:13;29735:2;29725:13;;;;;;;;;;;:17;29739:2;29725:17;;;;;;;;;;;;;;;:49;;;;29428:358;;29464:3;;;;;29428:358;;;;29833:2;29803:47;;29827:4;29803:47;;29817:8;29803:47;;;29837:3;29842:7;29803:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29863:75;29899:8;29909:4;29915:2;29919:3;29924:7;29933:4;29863:35;:75::i;:::-;28726:1220;;;;;;:::o;26403:634::-;26567:16;26628:3;:10;26609:8;:15;:29;26601:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26697:30;26744:8;:15;26730:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26697:63;;26778:9;26773:224;26797:8;:15;26793:1;:19;26773:224;;;26865:1;26842:25;;:8;26851:1;26842:11;;;;;;;;;;;;;;:25;;;;26834:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26955:9;:17;26965:3;26969:1;26965:6;;;;;;;;;;;;;;26955:17;;;;;;;;;;;:30;26973:8;26982:1;26973:11;;;;;;;;;;;;;;26955:30;;;;;;;;;;;;;;;;26936:13;26950:1;26936:16;;;;;;;;;;;;;:49;;;;;26814:3;;;;;26773:224;;;;27016:13;27009:20;;;26403:634;;;;:::o;41427:173::-;38975:12;:10;:12::i;:::-;38965:22;;:6;;;;;;;;;;;:22;;;38957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41527:1:::1;41521:2;:7;;41513:44;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41583:9;41568:8;:12;41577:2;41568:12;;;;;;;;;;;:24;;;;;;;;;;;;:::i;:::-;;41427:173:::0;;:::o;42001:340::-;42059:20;42092:23;42132:20;42145:6;42132:12;:20::i;:::-;42118:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42092:61;;42164:9;42193:10;42188:122;42215:9;;42209:2;:15;42188:122;;42275:1;42251:21;42261:6;42269:2;42251:9;:21::i;:::-;:25;42247:52;;;42291:2;42279:6;42286:1;42279:9;;;;;;;;;;;;;:14;;;;;42294:3;;;;;;;42247:52;42226:4;;;;;;;42188:122;;;;42327:6;42320:13;;;;42001:340;;;:::o;41743:246::-;41801:7;41821:13;41837:1;41821:17;;41854:10;41849:109;41876:9;;41870:2;:15;41849:109;;41936:1;41912:21;41922:6;41930:2;41912:9;:21::i;:::-;:25;41908:38;;;41939:7;;;;;;;41908:38;41887:4;;;;;;;41849:109;;;;41975:5;41968:12;;;41743:246;;;:::o;39395:148::-;38975:12;:10;:12::i;:::-;38965:22;;:6;;;;;;;;;;;:22;;;38957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39502:1:::1;39465:40;;39486:6;;;;;;;;;;;39465:40;;;;;;;;;;;;39533:1;39516:6;;:19;;;;;;;;;;;;;;;;;;39395:148::o:0;38753:79::-;38791:7;38818:6;;;;;;;;;;;38811:13;;38753:79;:::o;42353:229::-;42400:7;42420:13;42436:1;42420:17;;42453:10;42448:103;42475:9;;42469:2;:15;42448:103;;42529:1;42511:15;42523:2;42511:11;:15::i;:::-;:19;42507:32;;;42532:7;;;;;;;42507:32;42486:4;;;;;;;42448:103;;;;42568:5;42561:12;;;42353:229;:::o;40098:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27110:311::-;27229:8;27213:24;;:12;:10;:12::i;:::-;:24;;;;27205:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27341:8;27296:18;:32;27315:12;:10;:12::i;:::-;27296:32;;;;;;;;;;;;;;;:42;27329:8;27296:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27394:8;27365:48;;27380:12;:10;:12::i;:::-;27365:48;;;27404:8;27365:48;;;;;;;;;;;;;;;;;;;;27110:311;;:::o;40503:266::-;38975:12;:10;:12::i;:::-;38965:22;;:6;;;;;;;;;;;:22;;;38957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40615:32:::1;40627:7;40636:2;40640:6;40615:11;:32::i;:::-;40658:22;40689:9;40658:41;;40734:1;40714:9;:16;:21;40710:51;;40752:9;40737:8;:12;40746:2;40737:12;;;;;;;;;;;:24;;;;;;;;;;;;:::i;:::-;;40710:51;39035:1;40503:266:::0;;;;:::o;41612:113::-;41665:20;41705:8;:12;41714:2;41705:12;;;;;;;;;;;;41698:19;;41612:113;;;:::o;27493:160::-;27584:4;27608:18;:27;27627:7;27608:27;;;;;;;;;;;;;;;:37;27636:8;27608:37;;;;;;;;;;;;;;;;;;;;;;;;;27601:44;;27493:160;;;;:::o;27725:924::-;27965:1;27951:16;;:2;:16;;;;27943:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28050:12;:10;:12::i;:::-;28042:20;;:4;:20;;;:60;;;;28066:36;28083:4;28089:12;:10;:12::i;:::-;28066:16;:36::i;:::-;28042:60;28020:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28184:16;28203:12;:10;:12::i;:::-;28184:31;;28228:96;28249:8;28259:4;28265:2;28269:21;28287:2;28269:17;:21::i;:::-;28292:25;28310:6;28292:17;:25::i;:::-;28319:4;28228:20;:96::i;:::-;28359:77;28383:6;28359:77;;;;;;;;;;;;;;;;;:9;:13;28369:2;28359:13;;;;;;;;;;;:19;28373:4;28359:19;;;;;;;;;;;;;;;;:23;;:77;;;;;:::i;:::-;28337:9;:13;28347:2;28337:13;;;;;;;;;;;:19;28351:4;28337:19;;;;;;;;;;;;;;;:99;;;;28467:29;28489:6;28467:9;:13;28477:2;28467:13;;;;;;;;;;;:17;28481:2;28467:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;28447:9;:13;28457:2;28447:13;;;;;;;;;;;:17;28461:2;28447:17;;;;;;;;;;;;;;;:49;;;;28545:2;28514:46;;28539:4;28514:46;;28529:8;28514:46;;;28549:2;28553:6;28514:46;;;;;;;;;;;;;;;;;;;;;;;;28573:68;28604:8;28614:4;28620:2;28624;28628:6;28636:4;28573:30;:68::i;:::-;27725:924;;;;;;:::o;39698:244::-;38975:12;:10;:12::i;:::-;38965:22;;:6;;;;;;;;;;;:22;;;38957:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39807:1:::1;39787:22;;:8;:22;;;;39779:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39897:8;39868:38;;39889:6;;;;;;;;;;;39868:38;;;;;;;;;;;;39926:8;39917:6;;:17;;;;;;;;;;;;;;;;;;39698:244:::0;:::o;41134:275::-;41230:12;:10;:12::i;:::-;41219:23;;:7;:23;;;:66;;;;41246:39;41263:7;41272:12;:10;:12::i;:::-;41246:16;:39::i;:::-;41219:66;41211:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41344:26;41350:7;41359:2;41363:6;41344:5;:26::i;:::-;41395:6;41381:8;:12;41390:2;41381:12;;;;;;;;;;;;:20;;;;;;;;;;;41134:275;;;:::o;8625:106::-;8678:15;8713:10;8706:17;;8625:106;:::o;35618:236::-;;;;;;;:::o;12572:192::-;12658:7;12691:1;12686;:6;;12694:12;12678:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12718:9;12734:1;12730;:5;12718:17;;12755:1;12748:8;;;12572:192;;;;;:::o;11669:181::-;11727:7;11747:9;11763:1;11759;:5;11747:17;;11788:1;11783;:6;;11775:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11841:1;11834:8;;;11669:181;;;;:::o;36632:799::-;36886:15;:2;:13;;;:15::i;:::-;36882:542;;;36939:2;36922:43;;;36966:8;36976:4;36982:3;36987:7;36996:4;36922:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36918:495;;;;:::i;:::-;;;;;;;;37286:6;37279:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36918:495;37335:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36918:495;37063:52;;;37051:64;;;:8;:64;;;;37047:163;;37140:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37047:163;37002:223;36882:542;36632:799;;;;;;:::o;40787:335::-;40891:12;:10;:12::i;:::-;40880:23;;:7;:23;;;:66;;;;40907:39;40924:7;40933:12;:10;:12::i;:::-;40907:16;:39::i;:::-;40880:66;40872:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41005:30;41011:7;41020:2;41024:6;41005:30;;;;;;;;;;;;:5;:30::i;:::-;41055:9;;41050:2;:14;41046:38;;;41080:2;41068:9;:14;;;;41046:38;41108:6;41094:8;:12;41103:2;41094:12;;;;;;;;;;;;:20;;;;;;;;;;;40787:335;;;:::o;37439:198::-;37505:16;37534:22;37573:1;37559:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37534:41;;37597:7;37586:5;37592:1;37586:8;;;;;;;;;;;;;:18;;;;;37624:5;37617:12;;;37439:198;;;:::o;35862:762::-;36091:15;:2;:13;;;:15::i;:::-;36087:530;;;36144:2;36127:38;;;36166:8;36176:4;36182:2;36186:6;36194:4;36127:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36123:483;;;;:::i;:::-;;;;;;;;36479:6;36472:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36123:483;36528:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36123:483;36261:47;;;36249:59;;;:8;:59;;;;36245:158;;36333:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36245:158;36200:218;36087:530;35862:762;;;;;;:::o;33187:551::-;33302:1;33283:21;;:7;:21;;;;33275:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33357:16;33376:12;:10;:12::i;:::-;33357:31;;33401:105;33422:8;33432:7;33449:1;33453:21;33471:2;33453:17;:21::i;:::-;33476:25;33494:6;33476:17;:25::i;:::-;33401:105;;;;;;;;;;;;:20;:105::i;:::-;33544:111;33585:6;33544:111;;;;;;;;;;;;;;;;;:9;:13;33554:2;33544:13;;;;;;;;;;;:22;33558:7;33544:22;;;;;;;;;;;;;;;;:26;;:111;;;;;:::i;:::-;33519:9;:13;33529:2;33519:13;;;;;;;;;;;:22;33533:7;33519:22;;;;;;;;;;;;;;;:136;;;;33715:1;33673:57;;33698:7;33673:57;;33688:8;33673:57;;;33719:2;33723:6;33673:57;;;;;;;;;;;;;;;;;;;;;;;;33187:551;;;;:::o;16901:422::-;16961:4;17169:12;17280:7;17268:20;17260:28;;17314:1;17307:4;:8;17300:15;;;16901:422;;;:::o;31274:583::-;31408:1;31389:21;;:7;:21;;;;31381:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31461:16;31480:12;:10;:12::i;:::-;31461:31;;31505:107;31526:8;31544:1;31548:7;31557:21;31575:2;31557:17;:21::i;:::-;31580:25;31598:6;31580:17;:25::i;:::-;31607:4;31505:20;:107::i;:::-;31650:34;31677:6;31650:9;:13;31660:2;31650:13;;;;;;;;;;;:22;31664:7;31650:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;31625:9;:13;31635:2;31625:13;;;;;;;;;;;:22;31639:7;31625:22;;;;;;;;;;;;;;;:59;;;;31737:7;31700:57;;31733:1;31700:57;;31715:8;31700:57;;;31746:2;31750:6;31700:57;;;;;;;;;;;;;;;;;;;;;;;;31770:79;31801:8;31819:1;31823:7;31832:2;31836:6;31844:4;31770:30;:79::i;:::-;31274:583;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;5:97::-;;93:2;89:7;84:2;77:5;73:14;69:28;59:38;;53:49;;;:::o;110:106::-;;200:5;195:3;191:15;169:37;;163:53;;;:::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;336;333;318:23;357:34;388:1;382:8;357:34;:::i;:::-;414:10;409:3;406:19;396:2;;429:5;;;396:2;460;454:9;514:1;496:16;492:24;489:1;483:4;468:49;543:4;537:11;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;553:2;693:6;687:4;683:17;725:3;719:10;748:18;740:6;737:30;734:2;;;770:5;;;;;;;734:2;814:6;807:4;802:3;798:14;794:27;847:16;841:4;837:27;832:3;829:36;826:2;;;868:5;;;;;;;;826:2;912:29;934:6;912:29;:::i;:::-;905:4;900:3;896:14;892:50;888:2;881:62;955:3;948:10;;267:696;;;;;;;;:::o
Swarm Source
ipfs://d4365ac48617857d04e3faa9f8de57ddadd605cdb398d452a7a31b3dc08f851d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.