Feature Tip: Add private address tag to any address under My Name Tag !
This is one of Rarible's ERC-721 tokens.
ERC-721
Rarible
Overview
Max Total Supply
154,423 RARI
Holders
85,612
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RARILoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MintableToken
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-05-27 */ pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; /* * @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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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. * * 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. */ 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(isOwner(), "Ownable: caller is not the owner"); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return _msgSender() == _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 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } /** * @dev Required interface of an ERC721 compliant contract. */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either {approve} or {setApprovalForAll}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either {approve} or {setApprovalForAll}. */ function transferFrom(address from, address to, uint256 tokenId) public; function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a {IERC721-safeTransferFrom}. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } /** * @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. * * _Available since v2.4.0._ */ 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. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 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. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @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]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath} * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { // The {SafeMath} overflow check can be skipped here, see the comment at the top counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ 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) external view 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 { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is Context, ERC165, IERC721 { using SafeMath for uint256; using Address for address; using Counters for Counters.Counter; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => Counters.Counter) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /* * bytes4(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5 * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address. * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _ownedTokensCount[owner].current(); } /** * @dev Gets the owner of the specified token ID. * @param tokenId uint256 ID of the token to query the owner of * @return address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf. * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][to] = approved; emit ApprovalForAll(_msgSender(), to, approved); } /** * @dev Tells whether an operator is approved by a given owner. * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address. * Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * Requires the msg.sender to be the owner, approved, or operator. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement {IERC721Receiver-onERC721Received}, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the _msgSender() to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransferFrom(from, to, tokenId, _data); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function _safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) internal { _transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether the specified token exists. * @param tokenId uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID. * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _safeMint(address to, uint256 tokenId) internal { _safeMint(to, tokenId, ""); } /** * @dev Internal function to safely mint a new token. * Reverts if the given token ID already exists. * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted * @param _data bytes data to send along with a safe transfer check */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Internal function to mint a new token. * Reverts if the given token ID already exists. * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _tokenOwner[tokenId] = to; _ownedTokensCount[to].increment(); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own"); _clearApproval(tokenId); _ownedTokensCount[owner].decrement(); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _clearApproval(tokenId); _ownedTokensCount[from].decrement(); _ownedTokensCount[to].increment(); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * This is an internal detail of the `ERC721` contract and its use is deprecated. * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) { if (!to.isContract()) { return true; } // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = to.call(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, _msgSender(), from, tokenId, _data )); if (!success) { if (returndata.length > 0) { // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert("ERC721: transfer to non ERC721Receiver implementer"); } } else { bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } } /** * @dev Private function to clear current approval of a given token ID. * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ contract ERC721Burnable is Context, ERC721 { /** * @dev Burns a specific ERC721 token. * @param tokenId uint256 id of the ERC721 token to be burned. */ function burn(uint256 tokenId) public { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Enumerable is IERC721 { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); } /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Enumerable is Context, ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /* * bytes4(keccak256('totalSupply()')) == 0x18160ddd * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59 * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7 * * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63 */ bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /** * @dev Constructor function. */ constructor () public { // register the supported interface to conform to ERC721Enumerable via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner. * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract. * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return _allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens. * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token. * Reverts if the given token ID already exists. * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use {ERC721-_burn} instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Gets the list of token IDs of the requested owner. * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by // lastTokenId, or just over the end of the array if the token was the last one). } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length.sub(1); uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array _allTokens.length--; _allTokensIndex[tokenId] = 0; } } library UintLibrary { function toString(uint256 _i) internal pure returns (string memory) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } } library StringLibrary { using UintLibrary for uint256; function append(string memory _a, string memory _b) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory bab = new bytes(_ba.length + _bb.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) bab[k++] = _bb[i]; return string(bab); } function append(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory bbb = new bytes(_ba.length + _bb.length + _bc.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) bbb[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) bbb[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) bbb[k++] = _bc[i]; return string(bbb); } function recover(string memory message, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { bytes memory msgBytes = bytes(message); bytes memory fullMessage = concat( bytes("\x19Ethereum Signed Message:\n"), bytes(msgBytes.length.toString()), msgBytes, new bytes(0), new bytes(0), new bytes(0), new bytes(0) ); return ecrecover(keccak256(fullMessage), v, r, s); } function concat(bytes memory _ba, bytes memory _bb, bytes memory _bc, bytes memory _bd, bytes memory _be, bytes memory _bf, bytes memory _bg) internal pure returns (bytes memory) { bytes memory resultBytes = new bytes(_ba.length + _bb.length + _bc.length + _bd.length + _be.length + _bf.length + _bg.length); uint k = 0; for (uint i = 0; i < _ba.length; i++) resultBytes[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) resultBytes[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) resultBytes[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) resultBytes[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) resultBytes[k++] = _be[i]; for (uint i = 0; i < _bf.length; i++) resultBytes[k++] = _bf[i]; for (uint i = 0; i < _bg.length; i++) resultBytes[k++] = _bg[i]; return resultBytes; } } contract HasContractURI is ERC165 { string public contractURI; /* * bytes4(keccak256('contractURI()')) == 0xe8a3d485 */ bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485; constructor(string memory _contractURI) public { contractURI = _contractURI; _registerInterface(_INTERFACE_ID_CONTRACT_URI); } /** * @dev Internal function to set the contract URI * @param _contractURI string URI prefix to assign */ function _setContractURI(string memory _contractURI) internal { contractURI = _contractURI; } } contract HasTokenURI { using StringLibrary for string; //Token URI prefix string public tokenURIPrefix; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; constructor(string memory _tokenURIPrefix) public { tokenURIPrefix = _tokenURIPrefix; } /** * @dev Returns an URI for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function _tokenURI(uint256 tokenId) internal view returns (string memory) { return tokenURIPrefix.append(_tokenURIs[tokenId]); } /** * @dev Internal function to set the token URI for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { _tokenURIs[tokenId] = uri; } /** * @dev Internal function to set the token URI prefix. * @param _tokenURIPrefix string URI prefix to assign */ function _setTokenURIPrefix(string memory _tokenURIPrefix) internal { tokenURIPrefix = _tokenURIPrefix; } function _clearTokenURI(uint256 tokenId) internal { if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } contract HasSecondarySaleFees is ERC165 { event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps); /* * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb * * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584 */ bytes4 private constant _INTERFACE_ID_FEES = 0xb7799584; constructor() public { _registerInterface(_INTERFACE_ID_FEES); } function getFeeRecipients(uint256 id) public view returns (address payable[] memory); function getFeeBps(uint256 id) public view returns (uint[] memory); } /** * @title Full ERC721 Token with support for tokenURIPrefix * This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Base is HasSecondarySaleFees, ERC721, HasContractURI, HasTokenURI, ERC721Enumerable { // Token name string public name; // Token symbol string public symbol; struct Fee { address payable recipient; uint256 value; } // id => fees mapping (uint256 => Fee[]) public fees; /* * bytes4(keccak256('name()')) == 0x06fdde03 * bytes4(keccak256('symbol()')) == 0x95d89b41 * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd * * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f */ bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /** * @dev Constructor function */ constructor (string memory _name, string memory _symbol, string memory contractURI, string memory _tokenURIPrefix) HasContractURI(contractURI) HasTokenURI(_tokenURIPrefix) public { name = _name; symbol = _symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } function getFeeRecipients(uint256 id) public view returns (address payable[] memory) { Fee[] memory _fees = fees[id]; address payable[] memory result = new address payable[](_fees.length); for (uint i = 0; i < _fees.length; i++) { result[i] = _fees[i].recipient; } return result; } function getFeeBps(uint256 id) public view returns (uint[] memory) { Fee[] memory _fees = fees[id]; uint[] memory result = new uint[](_fees.length); for (uint i = 0; i < _fees.length; i++) { result[i] = _fees[i].value; } return result; } function _mint(address to, uint256 tokenId, Fee[] memory _fees) internal { _mint(to, tokenId); address[] memory recipients = new address[](_fees.length); uint[] memory bps = new uint[](_fees.length); for (uint i = 0; i < _fees.length; i++) { require(_fees[i].recipient != address(0x0), "Recipient should be present"); require(_fees[i].value != 0, "Fee value should be positive"); fees[tokenId].push(_fees[i]); recipients[i] = _fees[i].recipient; bps[i] = _fees[i].value; } if (_fees.length > 0) { emit SecondarySaleFees(tokenId, recipients, bps); } } /** * @dev Returns an URI for a given token ID. * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenURI(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return super._tokenURI(tokenId); } /** * @dev Internal function to set the token URI for a given token. * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token"); super._setTokenURI(tokenId, uri); } /** * @dev Internal function to burn a specific token. * Reverts if the token does not exist. * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _clearTokenURI(tokenId); } } /** * @title MintableToken * @dev anyone can mint token. */ contract MintableToken is Ownable, IERC721, IERC721Metadata, ERC721Burnable, ERC721Base { constructor (string memory name, string memory symbol, address newOwner, string memory contractURI, string memory tokenURIPrefix) public ERC721Base(name, symbol, contractURI, tokenURIPrefix) { _registerInterface(bytes4(keccak256('MINT_WITH_ADDRESS'))); transferOwnership(newOwner); } function mint(uint256 tokenId, uint8 v, bytes32 r, bytes32 s, Fee[] memory _fees, string memory tokenURI) public { require(owner() == ecrecover(keccak256(abi.encodePacked(this, tokenId)), v, r, s), "owner should sign tokenId"); _mint(msg.sender, tokenId, _fees); _setTokenURI(tokenId, tokenURI); } function setTokenURIPrefix(string memory tokenURIPrefix) public onlyOwner { _setTokenURIPrefix(tokenURIPrefix); } function setContractURI(string memory contractURI) public onlyOwner { _setContractURI(contractURI); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"string","name":"contractURI","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"recipients","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"bps","type":"uint256[]"}],"name":"SecondarySaleFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"fees","outputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getFeeBps","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getFeeRecipients","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"components":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct ERC721Base.Fee[]","name":"_fees","type":"tuple[]"},{"internalType":"string","name":"tokenURI","type":"string"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"contractURI","type":"string"}],"name":"setContractURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200355f3803806200355f833981016040819052620000349162000431565b84848383808260006200004f6001600160e01b03620001d216565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350916000805160206200353f833981519152908290a350620000a36301ffc9a760e01b6001600160e01b03620001d716565b620000be632dde656160e21b6001600160e01b03620001d716565b620000d96380ac58cd60e01b6001600160e01b03620001d716565b8051620000ee90600690602084019062000320565b506200010a63e8a3d48560e01b6001600160e01b03620001d716565b5080516200012090600790602084019062000320565b506200013e905063780e9d6360e01b6001600160e01b03620001d716565b83516200015390600d90602087019062000320565b5082516200016990600e90602086019062000320565b5062000185635b5e139f60e01b6001600160e01b03620001d716565b50505050620001b36040516200019b90620005ff565b6040519081900390206001600160e01b03620001d716565b620001c7836001600160e01b036200023516565b5050505050620006fb565b335b90565b6001600160e01b031980821614156200020d5760405162461bcd60e51b815260040162000204906200061e565b60405180910390fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b620002486001600160e01b036200027e16565b620002675760405162461bcd60e51b8152600401620002049062000630565b6200027b816001600160e01b03620002ad16565b50565b600080546001600160a01b03166200029e6001600160e01b03620001d216565b6001600160a01b031614905090565b6001600160a01b038116620002d65760405162461bcd60e51b815260040162000204906200060c565b600080546040516001600160a01b03808516939216916000805160206200353f83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200036357805160ff191683800117855562000393565b8280016001018555821562000393579182015b828111156200039357825182559160200191906001019062000376565b50620003a1929150620003a5565b5090565b620001d491905b80821115620003a15760008155600101620003ac565b8051620003cf81620006e4565b92915050565b600082601f830112620003e757600080fd5b8151620003fe620003f88262000669565b62000642565b915080825260208301602083018583830111156200041b57600080fd5b62000428838284620006b1565b50505092915050565b600080600080600060a086880312156200044a57600080fd5b85516001600160401b038111156200046157600080fd5b6200046f88828901620003d5565b95505060208601516001600160401b038111156200048c57600080fd5b6200049a88828901620003d5565b9450506040620004ad88828901620003c2565b93505060608601516001600160401b03811115620004ca57600080fd5b620004d888828901620003d5565b92505060808601516001600160401b03811115620004f557600080fd5b6200050388828901620003d5565b9150509295509295909350565b60006200051f60268362000691565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600062000569601c8362000691565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000815260200192915050565b6000620005a460208362000691565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000620005df6011836200069a565b704d494e545f574954485f4144445245535360781b815260110192915050565b6000620003cf82620005d0565b60208082528101620003cf8162000510565b60208082528101620003cf816200055a565b60208082528101620003cf8162000595565b6040518181016001600160401b03811182821017156200066157600080fd5b604052919050565b60006001600160401b038211156200068057600080fd5b506020601f91909101601f19160190565b90815260200190565b919050565b60006001600160a01b038216620003cf565b60005b83811015620006ce578181015183820152602001620006b4565b83811115620006de576000848401525b50505050565b620006ef816200069f565b81146200027b57600080fd5b612e34806200070b6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd146103c9578063e8a3d485146103dc578063e985e9c5146103e4578063f2fde38b146103f7576101cf565b8063a22cb4651461037b578063b88d4fde1461038e578063b9c4d9fb146103a1578063c0ac9983146103c1576101cf565b80638f32d59b116100de5780638f32d59b14610345578063938e3d7b1461034d57806395d89b411461036057806399e0dd7c14610368576101cf565b806370a0823114610322578063715018a6146103355780638da5cb5b1461033d576101cf565b80632f745c59116101715780634f6ccce71161014b5780634f6ccce7146102c85780636308f1cd146102db5780636352211e146102fc578063672a94001461030f576101cf565b80632f745c591461028f57806342842e0e146102a257806342966c68146102b5576101cf565b8063095ea7b3116101ad578063095ea7b3146102325780630ebd4c7f1461024757806318160ddd1461026757806323b872dd1461027c576101cf565b806301ffc9a7146101d457806306fdde03146101fd578063081812fc14610212575b600080fd5b6101e76101e2366004611fda565b61040a565b6040516101f49190612a7f565b60405180910390f35b610205610429565b6040516101f49190612acb565b61022561022036600461204b565b6104b7565b6040516101f491906129f0565b610245610240366004611faa565b610503565b005b61025a61025536600461204b565b6105e8565b6040516101f49190612a6e565b61026f6106db565b6040516101f49190612c5c565b61024561028a366004611eb4565b6106e2565b61026f61029d366004611faa565b61071f565b6102456102b0366004611eb4565b610780565b6102456102c336600461204b565b61079b565b61026f6102d636600461204b565b6107ce565b6102ee6102e9366004612069565b610815565b6040516101f4929190612a42565b61022561030a36600461204b565b610858565b61024561031d366004612088565b61088d565b61026f610330366004611e5c565b610958565b6102456109a1565b610225610a0f565b6101e7610a1e565b61024561035b366004612016565b610a42565b610205610a6f565b610245610376366004612016565b610aca565b610245610389366004611f7a565b610af7565b61024561039c366004611f01565b610bc5565b6103b46103af36600461204b565b610c04565b6040516101f49190612a5d565b610205610cfc565b6102056103d736600461204b565b610d57565b610205610d87565b6101e76103f2366004611e7a565b610de2565b610245610405366004611e5c565b610e10565b6001600160e01b03191660009081526001602052604090205460ff1690565b600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b820191906000526020600020905b81548152906001019060200180831161049257829003601f168201915b505050505081565b60006104c282610e3d565b6104e75760405162461bcd60e51b81526004016104de90612bac565b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061050e82610858565b9050806001600160a01b0316836001600160a01b031614156105425760405162461bcd60e51b81526004016104de90612bfc565b806001600160a01b0316610554610e5a565b6001600160a01b031614806105705750610570816103f2610e5a565b61058c5760405162461bcd60e51b81526004016104de90612b6c565b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600f602090815260408083208054825181850281018501909352808352606094859484015b8282101561065a576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610612565b5050505090506060815160405190808252806020026020018201604052801561068d578160200160208202803883390190505b50905060005b82518110156106d3578281815181106106a857fe5b6020026020010151602001518282815181106106c057fe5b6020908102919091010152600101610693565b509392505050565b600b545b90565b6106f36106ed610e5a565b82610e5e565b61070f5760405162461bcd60e51b81526004016104de90612c0c565b61071a838383610ee3565b505050565b600061072a83610958565b82106107485760405162461bcd60e51b81526004016104de90612aec565b6001600160a01b038316600090815260096020526040902080548390811061076c57fe5b906000526020600020015490505b92915050565b61071a83838360405180602001604052806000815250610bc5565b6107a66106ed610e5a565b6107c25760405162461bcd60e51b81526004016104de90612c4c565b6107cb81610f02565b50565b60006107d86106db565b82106107f65760405162461bcd60e51b81526004016104de90612c1c565b600b828154811061080357fe5b90600052602060002001549050919050565b600f602052816000526040600020818154811061082e57fe5b6000918252602090912060029091020180546001909101546001600160a01b039091169250905082565b6000818152600260205260408120546001600160a01b03168061077a5760405162461bcd60e51b81526004016104de90612b8c565b600130876040516020016108a29291906129ca565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516108d89493929190612a8d565b6020604051602081039080840390855afa1580156108fa573d6000803e3d6000fd5b505050602060405103516001600160a01b0316610915610a0f565b6001600160a01b03161461093b5760405162461bcd60e51b81526004016104de90612b5c565b610946338784610f14565b6109508682611139565b505050505050565b60006001600160a01b0382166109805760405162461bcd60e51b81526004016104de90612b7c565b6001600160a01b038216600090815260046020526040902061077a9061116c565b6109a9610a1e565b6109c55760405162461bcd60e51b81526004016104de90612bcc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b0316610a33610e5a565b6001600160a01b031614905090565b610a4a610a1e565b610a665760405162461bcd60e51b81526004016104de90612bcc565b6107cb81611170565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b610ad2610a1e565b610aee5760405162461bcd60e51b81526004016104de90612bcc565b6107cb81611183565b610aff610e5a565b6001600160a01b0316826001600160a01b03161415610b305760405162461bcd60e51b81526004016104de90612b3c565b8060056000610b3d610e5a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610b81610e5a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610bb99190612a7f565b60405180910390a35050565b610bd6610bd0610e5a565b83610e5e565b610bf25760405162461bcd60e51b81526004016104de90612c0c565b610bfe84848484611196565b50505050565b6000818152600f602090815260408083208054825181850281018501909352808352606094859484015b82821015610c76576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610c2e565b50505050905060608151604051908082528060200260200182016040528015610ca9578160200160208202803883390190505b50905060005b82518110156106d357828181518110610cc457fe5b602002602001015160000151828281518110610cdc57fe5b6001600160a01b0390921660209283029190910190910152600101610caf565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b6060610d6282610e3d565b610d7e5760405162461bcd60e51b81526004016104de90612bec565b61077a826111c9565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610e18610a1e565b610e345760405162461bcd60e51b81526004016104de90612bcc565b6107cb81611304565b6000908152600260205260409020546001600160a01b0316151590565b3390565b6000610e6982610e3d565b610e855760405162461bcd60e51b81526004016104de90612b4c565b6000610e9083610858565b9050806001600160a01b0316846001600160a01b03161480610ecb5750836001600160a01b0316610ec0846104b7565b6001600160a01b0316145b80610edb5750610edb8185610de2565b949350505050565b610eee838383611385565b610ef8838261148b565b61071a8282611579565b6107cb610f0e82610858565b826115b7565b610f1e83836115ca565b60608151604051908082528060200260200182016040528015610f4b578160200160208202803883390190505b50905060608251604051908082528060200260200182016040528015610f7b578160200160208202803883390190505b50905060005b83518110156110ee5760006001600160a01b0316848281518110610fa157fe5b6020026020010151600001516001600160a01b03161415610fd45760405162461bcd60e51b81526004016104de90612c3c565b838181518110610fe057fe5b6020026020010151602001516000141561100c5760405162461bcd60e51b81526004016104de90612adc565b6000858152600f60205260409020845185908390811061102857fe5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b03909216919091178155910151910155835184908290811061107f57fe5b60200260200101516000015183828151811061109757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106110c357fe5b6020026020010151602001518282815181106110db57fe5b6020908102919091010152600101610f81565b50825115611132577f99aba1d63749cfd5ad1afda7c4663840924d54eb5f005bbbeadedc6ec13674b284838360405161112993929190612c6a565b60405180910390a15b5050505050565b61114282610e3d565b61115e5760405162461bcd60e51b81526004016104de90612bbc565b61116882826115e7565b5050565b5490565b8051611168906006906020840190611c07565b8051611168906007906020840190611c07565b6111a1848484610ee3565b6111ad84848484611606565b610bfe5760405162461bcd60e51b81526004016104de90612afc565b6000818152600860209081526040918290208054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815260609361077a939192918301828280156112635780601f1061123857610100808354040283529160200191611263565b820191906000526020600020905b81548152906001019060200180831161124657829003601f168201915b505060078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152955091935091508301828280156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505061174090919063ffffffff16565b6001600160a01b03811661132a5760405162461bcd60e51b81526004016104de90612b0c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b826001600160a01b031661139882610858565b6001600160a01b0316146113be5760405162461bcd60e51b81526004016104de90612bdc565b6001600160a01b0382166113e45760405162461bcd60e51b81526004016104de90612b2c565b6113ed81611835565b6001600160a01b038316600090815260046020526040902061140e90611870565b6001600160a01b038216600090815260046020526040902061142f90611887565b60008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166000908152600960205260408120546114b590600163ffffffff61189016565b6000838152600a6020526040902054909150808214611550576001600160a01b03841660009081526009602052604081208054849081106114f257fe5b906000526020600020015490508060096000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061153057fe5b6000918252602080832090910192909255918252600a9052604090208190555b6001600160a01b0384166000908152600960205260409020805490611132906000198301611c85565b6001600160a01b0390911660009081526009602081815260408084208054868652600a84529185208290559282526001810183559183529091200155565b6115c182826118d9565b61116881611905565b6115d48282611943565b6115de8282611579565b61116881611a0a565b6000828152600860209081526040909120825161071a92840190611c07565b600061161a846001600160a01b0316611a4e565b61162657506001610edb565b600060606001600160a01b038616630a85bd0160e11b611644610e5a565b89888860405160240161165a94939291906129fe565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161169891906129be565b6000604051808303816000865af19150503d80600081146116d5576040519150601f19603f3d011682016040523d82523d6000602084013e6116da565b606091505b50915091508161170c578051156116f45780518082602001fd5b60405162461bcd60e51b81526004016104de90612afc565b6000818060200190516117229190810190611ff8565b6001600160e01b031916630a85bd0160e11b149350610edb92505050565b6060808390506060839050606081518351016040519080825280601f01601f19166020018201604052801561177c576020820181803883390190505b5090506000805b84518110156117d45784818151811061179857fe5b602001015160f81c60f81b8383806001019450815181106117b557fe5b60200101906001600160f81b031916908160001a905350600101611783565b5060005b8351811015611829578381815181106117ed57fe5b602001015160f81c60f81b83838060010194508151811061180a57fe5b60200101906001600160f81b031916908160001a9053506001016117d8565b50909695505050505050565b6000818152600360205260409020546001600160a01b0316156107cb57600090815260036020526040902080546001600160a01b0319169055565b805461188390600163ffffffff61189016565b9055565b80546001019055565b60006118d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b9392505050565b6118e38282611ab3565b6118ed828261148b565b6000818152600a602052604081205561116881611b6b565b60008181526008602052604090205460026000196101006001841615020190911604156107cb5760008181526008602052604081206107cb91611ca9565b6001600160a01b0382166119695760405162461bcd60e51b81526004016104de90612b9c565b61197281610e3d565b1561198f5760405162461bcd60e51b81526004016104de90612b1c565b600081815260026020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600490915290206119ce90611887565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610edb575050151592915050565b60008184841115611aab5760405162461bcd60e51b81526004016104de9190612acb565b505050900390565b816001600160a01b0316611ac682610858565b6001600160a01b031614611aec5760405162461bcd60e51b81526004016104de90612c2c565b611af581611835565b6001600160a01b0382166000908152600460205260409020611b1690611870565b60008181526002602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600b54600090611b8290600163ffffffff61189016565b6000838152600c6020526040812054600b8054939450909284908110611ba457fe5b9060005260206000200154905080600b8381548110611bbf57fe5b6000918252602080832090910192909255828152600c90915260409020829055600b805490611bf2906000198301611c85565b505050600091825250600c6020526040812055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c4857805160ff1916838001178555611c75565b82800160010185558215611c75579182015b82811115611c75578251825591602001919060010190611c5a565b50611c81929150611ce9565b5090565b81548183558181111561071a5760008381526020902061071a918101908301611ce9565b50805460018160011615610100020316600290046000825580601f10611ccf57506107cb565b601f0160209004906000526020600020908101906107cb91905b6106df91905b80821115611c815760008155600101611cef565b803561077a81612db9565b600082601f830112611d1f57600080fd5b8135611d32611d2d82612cc5565b612c9e565b91508181835260208401935060208101905083856040840282011115611d5757600080fd5b60005b83811015611d855781611d6d8882611e0a565b84525060209092019160409190910190600101611d5a565b5050505092915050565b803561077a81612dcd565b803561077a81612dd6565b803561077a81612ddf565b805161077a81612ddf565b600082601f830112611dcc57600080fd5b8135611dda611d2d82612ce6565b91508082526020830160208301858383011115611df657600080fd5b611e01838284612d60565b50505092915050565b600060408284031215611e1c57600080fd5b611e266040612c9e565b90506000611e348484611d03565b8252506020611e4584848301611d9a565b60208301525092915050565b803561077a81612de8565b600060208284031215611e6e57600080fd5b6000610edb8484611d03565b60008060408385031215611e8d57600080fd5b6000611e998585611d03565b9250506020611eaa85828601611d03565b9150509250929050565b600080600060608486031215611ec957600080fd5b6000611ed58686611d03565b9350506020611ee686828701611d03565b9250506040611ef786828701611d9a565b9150509250925092565b60008060008060808587031215611f1757600080fd5b6000611f238787611d03565b9450506020611f3487828801611d03565b9350506040611f4587828801611d9a565b925050606085013567ffffffffffffffff811115611f6257600080fd5b611f6e87828801611dbb565b91505092959194509250565b60008060408385031215611f8d57600080fd5b6000611f998585611d03565b9250506020611eaa85828601611d8f565b60008060408385031215611fbd57600080fd5b6000611fc98585611d03565b9250506020611eaa85828601611d9a565b600060208284031215611fec57600080fd5b6000610edb8484611da5565b60006020828403121561200a57600080fd5b6000610edb8484611db0565b60006020828403121561202857600080fd5b813567ffffffffffffffff81111561203f57600080fd5b610edb84828501611dbb565b60006020828403121561205d57600080fd5b6000610edb8484611d9a565b6000806040838503121561207c57600080fd5b6000611fc98585611d9a565b60008060008060008060c087890312156120a157600080fd5b60006120ad8989611d9a565b96505060206120be89828a01611e51565b95505060406120cf89828a01611d9a565b94505060606120e089828a01611d9a565b935050608087013567ffffffffffffffff8111156120fd57600080fd5b61210989828a01611d0e565b92505060a087013567ffffffffffffffff81111561212657600080fd5b61213289828a01611dbb565b9150509295509295509295565b600061214b838361215f565b505060200190565b600061214b838361226c565b61216881612d26565b82525050565b600061217982612d14565b6121838185612d18565b935061218e83612d0e565b8060005b838110156121bc5781516121a6888261213f565b97506121b183612d0e565b925050600101612192565b509495945050505050565b60006121d282612d14565b6121dc8185612d18565b93506121e783612d0e565b8060005b838110156121bc5781516121ff888261213f565b975061220a83612d0e565b9250506001016121eb565b600061222082612d14565b61222a8185612d18565b935061223583612d0e565b8060005b838110156121bc57815161224d8882612153565b975061225883612d0e565b925050600101612239565b61216881612d31565b612168816106df565b600061228082612d14565b61228a8185612d18565b935061229a818560208601612d6c565b6122a381612da9565b9093019392505050565b60006122b882612d14565b6122c28185612d21565b93506122d2818560208601612d6c565b9290920192915050565b6121686122e882612d55565b612d98565b60006122fa601c83612d18565b7f4665652076616c75652073686f756c6420626520706f73697469766500000000815260200192915050565b6000612333602b83612d18565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7581526a74206f6620626f756e647360a81b602082015260400192915050565b6000612380603283612d18565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581527131b2b4bb32b91034b6b83632b6b2b73a32b960711b602082015260400192915050565b60006123d4602683612d18565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061241c601c83612d18565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000815260200192915050565b6000612455602483612d18565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164648152637265737360e01b602082015260400192915050565b600061249b601983612d18565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000815260200192915050565b60006124d4602c83612d18565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657881526b34b9ba32b73a103a37b5b2b760a11b602082015260400192915050565b6000612522601983612d18565b7f6f776e65722073686f756c64207369676e20746f6b656e496400000000000000815260200192915050565b600061255b603883612d18565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7781527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015260400192915050565b60006125ba602a83612d18565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a65815269726f206164647265737360b01b602082015260400192915050565b6000612606602983612d18565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737481526832b73a103a37b5b2b760b91b602082015260400192915050565b6000612651602083612d18565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373815260200192915050565b600061268a602c83612d18565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657881526b34b9ba32b73a103a37b5b2b760a11b602082015260400192915050565b60006126d8602c83612d18565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657881526b34b9ba32b73a103a37b5b2b760a11b602082015260400192915050565b6000612726602083612d18565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061275f602983612d18565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206981526839903737ba1037bbb760b91b602082015260400192915050565b60006127aa602f83612d18565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f81526e3732bc34b9ba32b73a103a37b5b2b760891b602082015260400192915050565b60006127fb602183612d18565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e658152603960f91b602082015260400192915050565b600061283e603183612d18565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f8152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b602082015260400192915050565b6000612891602c83612d18565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f81526b7574206f6620626f756e647360a01b602082015260400192915050565b60006128df602583612d18565b7f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f8152643a1037bbb760d91b602082015260400192915050565b6000612926601b83612d18565b7f526563697069656e742073686f756c642062652070726573656e740000000000815260200192915050565b600061295f603083612d18565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7781526f1b995c881b9bdc88185c1c1c9bdd995960821b602082015260400192915050565b6121686129b0826106df565b6106df565b61216881612d4f565b60006118d282846122ad565b60006129d682856122dc565b6014820191506129e682846129a4565b5060200192915050565b6020810161077a828461215f565b60808101612a0c828761215f565b612a19602083018661215f565b612a26604083018561226c565b8181036060830152612a388184612275565b9695505050505050565b60408101612a50828561215f565b6118d2602083018461226c565b602080825281016118d281846121c7565b602080825281016118d28184612215565b6020810161077a8284612263565b60808101612a9b828761226c565b612aa860208301866129b5565b612ab5604083018561226c565b612ac2606083018461226c565b95945050505050565b602080825281016118d28184612275565b6020808252810161077a816122ed565b6020808252810161077a81612326565b6020808252810161077a81612373565b6020808252810161077a816123c7565b6020808252810161077a8161240f565b6020808252810161077a81612448565b6020808252810161077a8161248e565b6020808252810161077a816124c7565b6020808252810161077a81612515565b6020808252810161077a8161254e565b6020808252810161077a816125ad565b6020808252810161077a816125f9565b6020808252810161077a81612644565b6020808252810161077a8161267d565b6020808252810161077a816126cb565b6020808252810161077a81612719565b6020808252810161077a81612752565b6020808252810161077a8161279d565b6020808252810161077a816127ee565b6020808252810161077a81612831565b6020808252810161077a81612884565b6020808252810161077a816128d2565b6020808252810161077a81612919565b6020808252810161077a81612952565b6020810161077a828461226c565b60608101612c78828661226c565b8181036020830152612c8a818561216e565b90508181036040830152612ac28184612215565b60405181810167ffffffffffffffff81118282101715612cbd57600080fd5b604052919050565b600067ffffffffffffffff821115612cdc57600080fd5b5060209081020190565b600067ffffffffffffffff821115612cfd57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b600061077a82612d43565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b600061077a82612d26565b82818337506000910152565b60005b83811015612d87578181015183820152602001612d6f565b83811115610bfe5750506000910152565b600061077a82600061077a82612db3565b601f01601f191690565b60601b90565b612dc281612d26565b81146107cb57600080fd5b612dc281612d31565b612dc2816106df565b612dc281612d36565b612dc281612d4f56fea365627a7a72315820201c77075700435b8055570069128b2f78068fa97620d263c3a15d9d6a5370796c6578706572696d656e74616cf564736f6c634300051100408be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f03ba06dd459ae597357b491219fcb573f5fe68300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a68747470733a2f2f6170692d6d61696e6e65742e72617269626c652e636f6d2f636f6e74726163744d657461646174612f7b616464726573737d000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f697066732e64616f6e6f6d69632e636f6d00000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806370a0823111610104578063a22cb465116100a2578063c87b56dd11610071578063c87b56dd146103c9578063e8a3d485146103dc578063e985e9c5146103e4578063f2fde38b146103f7576101cf565b8063a22cb4651461037b578063b88d4fde1461038e578063b9c4d9fb146103a1578063c0ac9983146103c1576101cf565b80638f32d59b116100de5780638f32d59b14610345578063938e3d7b1461034d57806395d89b411461036057806399e0dd7c14610368576101cf565b806370a0823114610322578063715018a6146103355780638da5cb5b1461033d576101cf565b80632f745c59116101715780634f6ccce71161014b5780634f6ccce7146102c85780636308f1cd146102db5780636352211e146102fc578063672a94001461030f576101cf565b80632f745c591461028f57806342842e0e146102a257806342966c68146102b5576101cf565b8063095ea7b3116101ad578063095ea7b3146102325780630ebd4c7f1461024757806318160ddd1461026757806323b872dd1461027c576101cf565b806301ffc9a7146101d457806306fdde03146101fd578063081812fc14610212575b600080fd5b6101e76101e2366004611fda565b61040a565b6040516101f49190612a7f565b60405180910390f35b610205610429565b6040516101f49190612acb565b61022561022036600461204b565b6104b7565b6040516101f491906129f0565b610245610240366004611faa565b610503565b005b61025a61025536600461204b565b6105e8565b6040516101f49190612a6e565b61026f6106db565b6040516101f49190612c5c565b61024561028a366004611eb4565b6106e2565b61026f61029d366004611faa565b61071f565b6102456102b0366004611eb4565b610780565b6102456102c336600461204b565b61079b565b61026f6102d636600461204b565b6107ce565b6102ee6102e9366004612069565b610815565b6040516101f4929190612a42565b61022561030a36600461204b565b610858565b61024561031d366004612088565b61088d565b61026f610330366004611e5c565b610958565b6102456109a1565b610225610a0f565b6101e7610a1e565b61024561035b366004612016565b610a42565b610205610a6f565b610245610376366004612016565b610aca565b610245610389366004611f7a565b610af7565b61024561039c366004611f01565b610bc5565b6103b46103af36600461204b565b610c04565b6040516101f49190612a5d565b610205610cfc565b6102056103d736600461204b565b610d57565b610205610d87565b6101e76103f2366004611e7a565b610de2565b610245610405366004611e5c565b610e10565b6001600160e01b03191660009081526001602052604090205460ff1690565b600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b820191906000526020600020905b81548152906001019060200180831161049257829003601f168201915b505050505081565b60006104c282610e3d565b6104e75760405162461bcd60e51b81526004016104de90612bac565b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b600061050e82610858565b9050806001600160a01b0316836001600160a01b031614156105425760405162461bcd60e51b81526004016104de90612bfc565b806001600160a01b0316610554610e5a565b6001600160a01b031614806105705750610570816103f2610e5a565b61058c5760405162461bcd60e51b81526004016104de90612b6c565b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600f602090815260408083208054825181850281018501909352808352606094859484015b8282101561065a576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610612565b5050505090506060815160405190808252806020026020018201604052801561068d578160200160208202803883390190505b50905060005b82518110156106d3578281815181106106a857fe5b6020026020010151602001518282815181106106c057fe5b6020908102919091010152600101610693565b509392505050565b600b545b90565b6106f36106ed610e5a565b82610e5e565b61070f5760405162461bcd60e51b81526004016104de90612c0c565b61071a838383610ee3565b505050565b600061072a83610958565b82106107485760405162461bcd60e51b81526004016104de90612aec565b6001600160a01b038316600090815260096020526040902080548390811061076c57fe5b906000526020600020015490505b92915050565b61071a83838360405180602001604052806000815250610bc5565b6107a66106ed610e5a565b6107c25760405162461bcd60e51b81526004016104de90612c4c565b6107cb81610f02565b50565b60006107d86106db565b82106107f65760405162461bcd60e51b81526004016104de90612c1c565b600b828154811061080357fe5b90600052602060002001549050919050565b600f602052816000526040600020818154811061082e57fe5b6000918252602090912060029091020180546001909101546001600160a01b039091169250905082565b6000818152600260205260408120546001600160a01b03168061077a5760405162461bcd60e51b81526004016104de90612b8c565b600130876040516020016108a29291906129ca565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516108d89493929190612a8d565b6020604051602081039080840390855afa1580156108fa573d6000803e3d6000fd5b505050602060405103516001600160a01b0316610915610a0f565b6001600160a01b03161461093b5760405162461bcd60e51b81526004016104de90612b5c565b610946338784610f14565b6109508682611139565b505050505050565b60006001600160a01b0382166109805760405162461bcd60e51b81526004016104de90612b7c565b6001600160a01b038216600090815260046020526040902061077a9061116c565b6109a9610a1e565b6109c55760405162461bcd60e51b81526004016104de90612bcc565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b0316610a33610e5a565b6001600160a01b031614905090565b610a4a610a1e565b610a665760405162461bcd60e51b81526004016104de90612bcc565b6107cb81611170565b600e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b610ad2610a1e565b610aee5760405162461bcd60e51b81526004016104de90612bcc565b6107cb81611183565b610aff610e5a565b6001600160a01b0316826001600160a01b03161415610b305760405162461bcd60e51b81526004016104de90612b3c565b8060056000610b3d610e5a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610b81610e5a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610bb99190612a7f565b60405180910390a35050565b610bd6610bd0610e5a565b83610e5e565b610bf25760405162461bcd60e51b81526004016104de90612c0c565b610bfe84848484611196565b50505050565b6000818152600f602090815260408083208054825181850281018501909352808352606094859484015b82821015610c76576000848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610c2e565b50505050905060608151604051908082528060200260200182016040528015610ca9578160200160208202803883390190505b50905060005b82518110156106d357828181518110610cc457fe5b602002602001015160000151828281518110610cdc57fe5b6001600160a01b0390921660209283029190910190910152600101610caf565b6007805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b6060610d6282610e3d565b610d7e5760405162461bcd60e51b81526004016104de90612bec565b61077a826111c9565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104af5780601f10610484576101008083540402835291602001916104af565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610e18610a1e565b610e345760405162461bcd60e51b81526004016104de90612bcc565b6107cb81611304565b6000908152600260205260409020546001600160a01b0316151590565b3390565b6000610e6982610e3d565b610e855760405162461bcd60e51b81526004016104de90612b4c565b6000610e9083610858565b9050806001600160a01b0316846001600160a01b03161480610ecb5750836001600160a01b0316610ec0846104b7565b6001600160a01b0316145b80610edb5750610edb8185610de2565b949350505050565b610eee838383611385565b610ef8838261148b565b61071a8282611579565b6107cb610f0e82610858565b826115b7565b610f1e83836115ca565b60608151604051908082528060200260200182016040528015610f4b578160200160208202803883390190505b50905060608251604051908082528060200260200182016040528015610f7b578160200160208202803883390190505b50905060005b83518110156110ee5760006001600160a01b0316848281518110610fa157fe5b6020026020010151600001516001600160a01b03161415610fd45760405162461bcd60e51b81526004016104de90612c3c565b838181518110610fe057fe5b6020026020010151602001516000141561100c5760405162461bcd60e51b81526004016104de90612adc565b6000858152600f60205260409020845185908390811061102857fe5b602090810291909101810151825460018082018555600094855293839020825160029092020180546001600160a01b0319166001600160a01b03909216919091178155910151910155835184908290811061107f57fe5b60200260200101516000015183828151811061109757fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106110c357fe5b6020026020010151602001518282815181106110db57fe5b6020908102919091010152600101610f81565b50825115611132577f99aba1d63749cfd5ad1afda7c4663840924d54eb5f005bbbeadedc6ec13674b284838360405161112993929190612c6a565b60405180910390a15b5050505050565b61114282610e3d565b61115e5760405162461bcd60e51b81526004016104de90612bbc565b61116882826115e7565b5050565b5490565b8051611168906006906020840190611c07565b8051611168906007906020840190611c07565b6111a1848484610ee3565b6111ad84848484611606565b610bfe5760405162461bcd60e51b81526004016104de90612afc565b6000818152600860209081526040918290208054835160026001831615610100026000190190921691909104601f810184900484028201840190945283815260609361077a939192918301828280156112635780601f1061123857610100808354040283529160200191611263565b820191906000526020600020905b81548152906001019060200180831161124657829003601f168201915b505060078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152955091935091508301828280156112f15780601f106112c6576101008083540402835291602001916112f1565b820191906000526020600020905b8154815290600101906020018083116112d457829003601f168201915b505050505061174090919063ffffffff16565b6001600160a01b03811661132a5760405162461bcd60e51b81526004016104de90612b0c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b826001600160a01b031661139882610858565b6001600160a01b0316146113be5760405162461bcd60e51b81526004016104de90612bdc565b6001600160a01b0382166113e45760405162461bcd60e51b81526004016104de90612b2c565b6113ed81611835565b6001600160a01b038316600090815260046020526040902061140e90611870565b6001600160a01b038216600090815260046020526040902061142f90611887565b60008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166000908152600960205260408120546114b590600163ffffffff61189016565b6000838152600a6020526040902054909150808214611550576001600160a01b03841660009081526009602052604081208054849081106114f257fe5b906000526020600020015490508060096000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061153057fe5b6000918252602080832090910192909255918252600a9052604090208190555b6001600160a01b0384166000908152600960205260409020805490611132906000198301611c85565b6001600160a01b0390911660009081526009602081815260408084208054868652600a84529185208290559282526001810183559183529091200155565b6115c182826118d9565b61116881611905565b6115d48282611943565b6115de8282611579565b61116881611a0a565b6000828152600860209081526040909120825161071a92840190611c07565b600061161a846001600160a01b0316611a4e565b61162657506001610edb565b600060606001600160a01b038616630a85bd0160e11b611644610e5a565b89888860405160240161165a94939291906129fe565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161169891906129be565b6000604051808303816000865af19150503d80600081146116d5576040519150601f19603f3d011682016040523d82523d6000602084013e6116da565b606091505b50915091508161170c578051156116f45780518082602001fd5b60405162461bcd60e51b81526004016104de90612afc565b6000818060200190516117229190810190611ff8565b6001600160e01b031916630a85bd0160e11b149350610edb92505050565b6060808390506060839050606081518351016040519080825280601f01601f19166020018201604052801561177c576020820181803883390190505b5090506000805b84518110156117d45784818151811061179857fe5b602001015160f81c60f81b8383806001019450815181106117b557fe5b60200101906001600160f81b031916908160001a905350600101611783565b5060005b8351811015611829578381815181106117ed57fe5b602001015160f81c60f81b83838060010194508151811061180a57fe5b60200101906001600160f81b031916908160001a9053506001016117d8565b50909695505050505050565b6000818152600360205260409020546001600160a01b0316156107cb57600090815260036020526040902080546001600160a01b0319169055565b805461188390600163ffffffff61189016565b9055565b80546001019055565b60006118d283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a87565b9392505050565b6118e38282611ab3565b6118ed828261148b565b6000818152600a602052604081205561116881611b6b565b60008181526008602052604090205460026000196101006001841615020190911604156107cb5760008181526008602052604081206107cb91611ca9565b6001600160a01b0382166119695760405162461bcd60e51b81526004016104de90612b9c565b61197281610e3d565b1561198f5760405162461bcd60e51b81526004016104de90612b1c565b600081815260026020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600490915290206119ce90611887565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600b80546000838152600c60205260408120829055600182018355919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610edb575050151592915050565b60008184841115611aab5760405162461bcd60e51b81526004016104de9190612acb565b505050900390565b816001600160a01b0316611ac682610858565b6001600160a01b031614611aec5760405162461bcd60e51b81526004016104de90612c2c565b611af581611835565b6001600160a01b0382166000908152600460205260409020611b1690611870565b60008181526002602052604080822080546001600160a01b0319169055518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600b54600090611b8290600163ffffffff61189016565b6000838152600c6020526040812054600b8054939450909284908110611ba457fe5b9060005260206000200154905080600b8381548110611bbf57fe5b6000918252602080832090910192909255828152600c90915260409020829055600b805490611bf2906000198301611c85565b505050600091825250600c6020526040812055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c4857805160ff1916838001178555611c75565b82800160010185558215611c75579182015b82811115611c75578251825591602001919060010190611c5a565b50611c81929150611ce9565b5090565b81548183558181111561071a5760008381526020902061071a918101908301611ce9565b50805460018160011615610100020316600290046000825580601f10611ccf57506107cb565b601f0160209004906000526020600020908101906107cb91905b6106df91905b80821115611c815760008155600101611cef565b803561077a81612db9565b600082601f830112611d1f57600080fd5b8135611d32611d2d82612cc5565b612c9e565b91508181835260208401935060208101905083856040840282011115611d5757600080fd5b60005b83811015611d855781611d6d8882611e0a565b84525060209092019160409190910190600101611d5a565b5050505092915050565b803561077a81612dcd565b803561077a81612dd6565b803561077a81612ddf565b805161077a81612ddf565b600082601f830112611dcc57600080fd5b8135611dda611d2d82612ce6565b91508082526020830160208301858383011115611df657600080fd5b611e01838284612d60565b50505092915050565b600060408284031215611e1c57600080fd5b611e266040612c9e565b90506000611e348484611d03565b8252506020611e4584848301611d9a565b60208301525092915050565b803561077a81612de8565b600060208284031215611e6e57600080fd5b6000610edb8484611d03565b60008060408385031215611e8d57600080fd5b6000611e998585611d03565b9250506020611eaa85828601611d03565b9150509250929050565b600080600060608486031215611ec957600080fd5b6000611ed58686611d03565b9350506020611ee686828701611d03565b9250506040611ef786828701611d9a565b9150509250925092565b60008060008060808587031215611f1757600080fd5b6000611f238787611d03565b9450506020611f3487828801611d03565b9350506040611f4587828801611d9a565b925050606085013567ffffffffffffffff811115611f6257600080fd5b611f6e87828801611dbb565b91505092959194509250565b60008060408385031215611f8d57600080fd5b6000611f998585611d03565b9250506020611eaa85828601611d8f565b60008060408385031215611fbd57600080fd5b6000611fc98585611d03565b9250506020611eaa85828601611d9a565b600060208284031215611fec57600080fd5b6000610edb8484611da5565b60006020828403121561200a57600080fd5b6000610edb8484611db0565b60006020828403121561202857600080fd5b813567ffffffffffffffff81111561203f57600080fd5b610edb84828501611dbb565b60006020828403121561205d57600080fd5b6000610edb8484611d9a565b6000806040838503121561207c57600080fd5b6000611fc98585611d9a565b60008060008060008060c087890312156120a157600080fd5b60006120ad8989611d9a565b96505060206120be89828a01611e51565b95505060406120cf89828a01611d9a565b94505060606120e089828a01611d9a565b935050608087013567ffffffffffffffff8111156120fd57600080fd5b61210989828a01611d0e565b92505060a087013567ffffffffffffffff81111561212657600080fd5b61213289828a01611dbb565b9150509295509295509295565b600061214b838361215f565b505060200190565b600061214b838361226c565b61216881612d26565b82525050565b600061217982612d14565b6121838185612d18565b935061218e83612d0e565b8060005b838110156121bc5781516121a6888261213f565b97506121b183612d0e565b925050600101612192565b509495945050505050565b60006121d282612d14565b6121dc8185612d18565b93506121e783612d0e565b8060005b838110156121bc5781516121ff888261213f565b975061220a83612d0e565b9250506001016121eb565b600061222082612d14565b61222a8185612d18565b935061223583612d0e565b8060005b838110156121bc57815161224d8882612153565b975061225883612d0e565b925050600101612239565b61216881612d31565b612168816106df565b600061228082612d14565b61228a8185612d18565b935061229a818560208601612d6c565b6122a381612da9565b9093019392505050565b60006122b882612d14565b6122c28185612d21565b93506122d2818560208601612d6c565b9290920192915050565b6121686122e882612d55565b612d98565b60006122fa601c83612d18565b7f4665652076616c75652073686f756c6420626520706f73697469766500000000815260200192915050565b6000612333602b83612d18565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7581526a74206f6620626f756e647360a81b602082015260400192915050565b6000612380603283612d18565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581527131b2b4bb32b91034b6b83632b6b2b73a32b960711b602082015260400192915050565b60006123d4602683612d18565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b600061241c601c83612d18565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000815260200192915050565b6000612455602483612d18565b7f4552433732313a207472616e7366657220746f20746865207a65726f206164648152637265737360e01b602082015260400192915050565b600061249b601983612d18565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000815260200192915050565b60006124d4602c83612d18565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657881526b34b9ba32b73a103a37b5b2b760a11b602082015260400192915050565b6000612522601983612d18565b7f6f776e65722073686f756c64207369676e20746f6b656e496400000000000000815260200192915050565b600061255b603883612d18565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7781527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015260400192915050565b60006125ba602a83612d18565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a65815269726f206164647265737360b01b602082015260400192915050565b6000612606602983612d18565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737481526832b73a103a37b5b2b760b91b602082015260400192915050565b6000612651602083612d18565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373815260200192915050565b600061268a602c83612d18565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657881526b34b9ba32b73a103a37b5b2b760a11b602082015260400192915050565b60006126d8602c83612d18565b7f4552433732314d657461646174613a2055524920736574206f66206e6f6e657881526b34b9ba32b73a103a37b5b2b760a11b602082015260400192915050565b6000612726602083612d18565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b600061275f602983612d18565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206981526839903737ba1037bbb760b91b602082015260400192915050565b60006127aa602f83612d18565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f81526e3732bc34b9ba32b73a103a37b5b2b760891b602082015260400192915050565b60006127fb602183612d18565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e658152603960f91b602082015260400192915050565b600061283e603183612d18565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f8152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b602082015260400192915050565b6000612891602c83612d18565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f81526b7574206f6620626f756e647360a01b602082015260400192915050565b60006128df602583612d18565b7f4552433732313a206275726e206f6620746f6b656e2074686174206973206e6f8152643a1037bbb760d91b602082015260400192915050565b6000612926601b83612d18565b7f526563697069656e742073686f756c642062652070726573656e740000000000815260200192915050565b600061295f603083612d18565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7781526f1b995c881b9bdc88185c1c1c9bdd995960821b602082015260400192915050565b6121686129b0826106df565b6106df565b61216881612d4f565b60006118d282846122ad565b60006129d682856122dc565b6014820191506129e682846129a4565b5060200192915050565b6020810161077a828461215f565b60808101612a0c828761215f565b612a19602083018661215f565b612a26604083018561226c565b8181036060830152612a388184612275565b9695505050505050565b60408101612a50828561215f565b6118d2602083018461226c565b602080825281016118d281846121c7565b602080825281016118d28184612215565b6020810161077a8284612263565b60808101612a9b828761226c565b612aa860208301866129b5565b612ab5604083018561226c565b612ac2606083018461226c565b95945050505050565b602080825281016118d28184612275565b6020808252810161077a816122ed565b6020808252810161077a81612326565b6020808252810161077a81612373565b6020808252810161077a816123c7565b6020808252810161077a8161240f565b6020808252810161077a81612448565b6020808252810161077a8161248e565b6020808252810161077a816124c7565b6020808252810161077a81612515565b6020808252810161077a8161254e565b6020808252810161077a816125ad565b6020808252810161077a816125f9565b6020808252810161077a81612644565b6020808252810161077a8161267d565b6020808252810161077a816126cb565b6020808252810161077a81612719565b6020808252810161077a81612752565b6020808252810161077a8161279d565b6020808252810161077a816127ee565b6020808252810161077a81612831565b6020808252810161077a81612884565b6020808252810161077a816128d2565b6020808252810161077a81612919565b6020808252810161077a81612952565b6020810161077a828461226c565b60608101612c78828661226c565b8181036020830152612c8a818561216e565b90508181036040830152612ac28184612215565b60405181810167ffffffffffffffff81118282101715612cbd57600080fd5b604052919050565b600067ffffffffffffffff821115612cdc57600080fd5b5060209081020190565b600067ffffffffffffffff821115612cfd57600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b919050565b600061077a82612d43565b151590565b6001600160e01b03191690565b6001600160a01b031690565b60ff1690565b600061077a82612d26565b82818337506000910152565b60005b83811015612d87578181015183820152602001612d6f565b83811115610bfe5750506000910152565b600061077a82600061077a82612db3565b601f01601f191690565b60601b90565b612dc281612d26565b81146107cb57600080fd5b612dc281612d31565b612dc2816106df565b612dc281612d36565b612dc281612d4f56fea365627a7a72315820201c77075700435b8055570069128b2f78068fa97620d263c3a15d9d6a5370796c6578706572696d656e74616cf564736f6c63430005110040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f03ba06dd459ae597357b491219fcb573f5fe68300000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a68747470733a2f2f6170692d6d61696e6e65742e72617269626c652e636f6d2f636f6e74726163744d657461646174612f7b616464726573737d000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f697066732e64616f6e6f6d69632e636f6d00000000000000
-----Decoded View---------------
Arg [0] : name (string): Rarible
Arg [1] : symbol (string): RARI
Arg [2] : newOwner (address): 0xf03Ba06Dd459AE597357b491219fCb573f5fe683
Arg [3] : contractURI (string): https://api-mainnet.rarible.com/contractMetadata/{address}
Arg [4] : tokenURIPrefix (string): https://ipfs.daonomic.com
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 000000000000000000000000f03ba06dd459ae597357b491219fcb573f5fe683
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [6] : 52617269626c6500000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 5241524900000000000000000000000000000000000000000000000000000000
Arg [9] : 000000000000000000000000000000000000000000000000000000000000003a
Arg [10] : 68747470733a2f2f6170692d6d61696e6e65742e72617269626c652e636f6d2f
Arg [11] : 636f6e74726163744d657461646174612f7b616464726573737d000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [13] : 68747470733a2f2f697066732e64616f6e6f6d69632e636f6d00000000000000
Deployed Bytecode Sourcemap
54908:1001:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;54908:1001:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18670:135;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;51154:18;;;:::i;:::-;;;;;;;;23531:204;;;;;;;;;:::i;:::-;;;;;;;;22813:425;;;;;;;;;:::i;:::-;;52514:300;;;;;;;;;:::i;:::-;;;;;;;;38287:96;;;:::i;:::-;;;;;;;;25214:292;;;;;;;;;:::i;37896:232::-;;;;;;;;;:::i;26168:134::-;;;;;;;;;:::i;35555:237::-;;;;;;;;;:::i;38729:199::-;;;;;;;;;:::i;51337:38::-;;;;;;;;;:::i;:::-;;;;;;;;;22154:228;;;;;;;;;:::i;55319:329::-;;;;;;;;;:::i;21717:211::-;;;;;;;;;:::i;2861:140::-;;;:::i;2050:79::-;;;:::i;2416:94::-;;;:::i;55791:115::-;;;;;;;;;:::i;51202:20::-;;;:::i;55656:127::-;;;;;;;;;:::i;24036:254::-;;;;;;;;;:::i;27039:272::-;;;;;;;;;:::i;52162:344::-;;;;;;;;;:::i;:::-;;;;;;;;48687:28;;;:::i;53725:210::-;;;;;;;;;:::i;48016:25::-;;;:::i;24620:147::-;;;;;;;;;:::i;3156:109::-;;;;;;;;;:::i;18670:135::-;-1:-1:-1;;;;;;18764:33:0;18740:4;18764:33;;;:20;:33;;;;;;;;;18670:135::o;51154:18::-;;;;;;;;;;;;;;;-1:-1:-1;;51154:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23531:204::-;23590:7;23618:16;23626:7;23618;:16::i;:::-;23610:73;;;;-1:-1:-1;;;23610:73:0;;;;;;;;;;;;;;;;;-1:-1:-1;23703:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23703:24:0;;23531:204::o;22813:425::-;22877:13;22893:16;22901:7;22893;:16::i;:::-;22877:32;;22934:5;-1:-1:-1;;;;;22928:11:0;:2;-1:-1:-1;;;;;22928:11:0;;;22920:57;;;;-1:-1:-1;;;22920:57:0;;;;;;;;;23014:5;-1:-1:-1;;;;;22998:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;22998:21:0;;:62;;;;23023:37;23040:5;23047:12;:10;:12::i;23023:37::-;22990:154;;;;-1:-1:-1;;;22990:154:0;;;;;;;;;23157:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;23157:29:0;-1:-1:-1;;;;;23157:29:0;;;;;;;;;23202:28;;23157:24;;23202:28;;;;;;;22813:425;;;:::o;52514:300::-;52613:8;;;;:4;:8;;;;;;;;52592:29;;;;;;;;;;;;;;;;;52566:13;;;;52592:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52592:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52632:20;52666:5;:12;52655:24;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;52655:24:0;-1:-1:-1;52632:47:0;-1:-1:-1;52695:6:0;52690:93;52711:5;:12;52707:1;:16;52690:93;;;52757:5;52763:1;52757:8;;;;;;;;;;;;;;:14;;;52745:6;52752:1;52745:9;;;;;;;;;;;;;;;;;:26;52725:3;;52690:93;;;-1:-1:-1;52800:6:0;52514:300;-1:-1:-1;;;52514:300:0:o;38287:96::-;38358:10;:17;38287:96;;:::o;25214:292::-;25358:41;25377:12;:10;:12::i;:::-;25391:7;25358:18;:41::i;:::-;25350:103;;;;-1:-1:-1;;;25350:103:0;;;;;;;;;25466:32;25480:4;25486:2;25490:7;25466:13;:32::i;:::-;25214:292;;;:::o;37896:232::-;37976:7;38012:16;38022:5;38012:9;:16::i;:::-;38004:5;:24;37996:80;;;;-1:-1:-1;;;37996:80:0;;;;;;;;;-1:-1:-1;;;;;38094:19:0;;;;;;:12;:19;;;;;:26;;38114:5;;38094:26;;;;;;;;;;;;;;38087:33;;37896:232;;;;;:::o;26168:134::-;26255:39;26272:4;26278:2;26282:7;26255:39;;;;;;;;;;;;:16;:39::i;35555:237::-;35665:41;35684:12;:10;:12::i;35665:41::-;35657:102;;;;-1:-1:-1;;;35657:102:0;;;;;;;;;35770:14;35776:7;35770:5;:14::i;:::-;35555:237;:::o;38729:199::-;38787:7;38823:13;:11;:13::i;:::-;38815:5;:21;38807:78;;;;-1:-1:-1;;;38807:78:0;;;;;;;;;38903:10;38914:5;38903:17;;;;;;;;;;;;;;;;38896:24;;38729:199;;;:::o;51337:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;51337:38:0;;;;-1:-1:-1;51337:38:0;-1:-1:-1;51337:38:0;:::o;22154:228::-;22209:7;22245:20;;;:11;:20;;;;;;-1:-1:-1;;;;;22245:20:0;22284:19;22276:73;;;;-1:-1:-1;;;22276:73:0;;;;;;;;55319:329;55462:62;55499:4;55505:7;55482:31;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;55482:31:0;;;55472:42;;;;;;55516:1;55519;55522;55462:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55462:62:0;;;;;;;;-1:-1:-1;;;;;55451:73:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;55451:73:0;;55443:111;;;;-1:-1:-1;;;55443:111:0;;;;;;;;;55565:33;55571:10;55583:7;55592:5;55565;:33::i;:::-;55609:31;55622:7;55631:8;55609:12;:31::i;:::-;55319:329;;;;;;:::o;21717:211::-;21772:7;-1:-1:-1;;;;;21800:19:0;;21792:74;;;;-1:-1:-1;;;21792:74:0;;;;;;;;;-1:-1:-1;;;;;21886:24:0;;;;;;:17;:24;;;;;:34;;:32;:34::i;2861:140::-;2262:9;:7;:9::i;:::-;2254:54;;;;-1:-1:-1;;;2254:54:0;;;;;;;;;2960:1;2944:6;;2923:40;;-1:-1:-1;;;;;2944:6:0;;;;2923:40;;2960:1;;2923:40;2991:1;2974:19;;-1:-1:-1;;;;;;2974:19:0;;;2861:140::o;2050:79::-;2088:7;2115:6;-1:-1:-1;;;;;2115:6:0;2050:79;:::o;2416:94::-;2456:4;2496:6;;-1:-1:-1;;;;;2496:6:0;2480:12;:10;:12::i;:::-;-1:-1:-1;;;;;2480:22:0;;2473:29;;2416:94;:::o;55791:115::-;2262:9;:7;:9::i;:::-;2254:54;;;;-1:-1:-1;;;2254:54:0;;;;;;;;;55870:28;55886:11;55870:15;:28::i;51202:20::-;;;;;;;;;;;;;;;-1:-1:-1;;51202:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55656:127;2262:9;:7;:9::i;:::-;2254:54;;;;-1:-1:-1;;;2254:54:0;;;;;;;;;55741:34;55760:14;55741:18;:34::i;24036:254::-;24122:12;:10;:12::i;:::-;-1:-1:-1;;;;;24116:18:0;:2;-1:-1:-1;;;;;24116:18:0;;;24108:56;;;;-1:-1:-1;;;24108:56:0;;;;;;;;;24216:8;24177:18;:32;24196:12;:10;:12::i;:::-;-1:-1:-1;;;;;24177:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;24177:32:0;;;:36;;;;;;;;;;;;:47;;-1:-1:-1;;24177:47:0;;;;;;;;;;;24255:12;:10;:12::i;:::-;-1:-1:-1;;;;;24240:42:0;;24273:8;24240:42;;;;;;;;;;;;;;;24036:254;;:::o;27039:272::-;27154:41;27173:12;:10;:12::i;:::-;27187:7;27154:18;:41::i;:::-;27146:103;;;;-1:-1:-1;;;27146:103:0;;;;;;;;;27260:43;27278:4;27284:2;27288:7;27297:5;27260:17;:43::i;:::-;27039:272;;;;:::o;52162:344::-;52279:8;;;;:4;:8;;;;;;;;52258:29;;;;;;;;;;;;;;;;;52221:24;;;;52258:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52258:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52298:31;52354:5;:12;52332:35;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;52332:35:0;-1:-1:-1;52298:69:0;-1:-1:-1;52383:6:0;52378:97;52399:5;:12;52395:1;:16;52378:97;;;52445:5;52451:1;52445:8;;;;;;;;;;;;;;:18;;;52433:6;52440:1;52433:9;;;;;;;;-1:-1:-1;;;;;52433:30:0;;;:9;;;;;;;;;;;:30;52413:3;;52378:97;;48687:28;;;;;;;;;;;;;;;-1:-1:-1;;48687:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53725:210;53783:13;53817:16;53825:7;53817;:16::i;:::-;53809:76;;;;-1:-1:-1;;;53809:76:0;;;;;;;;;53903:24;53919:7;53903:15;:24::i;48016:25::-;;;;;;;;;;;;;;;-1:-1:-1;;48016:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24620:147;-1:-1:-1;;;;;24724:25:0;;;24700:4;24724:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;24620:147::o;3156:109::-;2262:9;:7;:9::i;:::-;2254:54;;;;-1:-1:-1;;;2254:54:0;;;;;;;;;3229:28;3248:8;3229:18;:28::i;28504:155::-;28561:4;28594:20;;;:11;:20;;;;;;-1:-1:-1;;;;;28594:20:0;28632:19;;;28504:155::o;841:98::-;921:10;841:98;:::o;29029:333::-;29114:4;29139:16;29147:7;29139;:16::i;:::-;29131:73;;;;-1:-1:-1;;;29131:73:0;;;;;;;;;29215:13;29231:16;29239:7;29231;:16::i;:::-;29215:32;;29277:5;-1:-1:-1;;;;;29266:16:0;:7;-1:-1:-1;;;;;29266:16:0;;:51;;;;29310:7;-1:-1:-1;;;;;29286:31:0;:20;29298:7;29286:11;:20::i;:::-;-1:-1:-1;;;;;29286:31:0;;29266:51;:87;;;;29321:32;29338:5;29345:7;29321:16;:32::i;:::-;29258:96;29029:333;-1:-1:-1;;;;29029:333:0:o;39312:245::-;39398:38;39418:4;39424:2;39428:7;39398:19;:38::i;:::-;39449:47;39482:4;39488:7;39449:32;:47::i;:::-;39509:40;39537:2;39541:7;39509:27;:40::i;32247:92::-;32299:32;32305:16;32313:7;32305;:16::i;:::-;32323:7;32299:5;:32::i;52822:696::-;52906:18;52912:2;52916:7;52906:5;:18::i;:::-;52935:27;52979:5;:12;52965:27;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;52965:27:0;;52935:57;;53003:17;53034:5;:12;53023:24;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;53023:24:0;-1:-1:-1;53003:44:0;-1:-1:-1;53063:6:0;53058:346;53079:5;:12;53075:1;:16;53058:346;;;53151:3;-1:-1:-1;;;;;53121:34:0;:5;53127:1;53121:8;;;;;;;;;;;;;;:18;;;-1:-1:-1;;;;;53121:34:0;;;53113:74;;;;-1:-1:-1;;;53113:74:0;;;;;;;;;53210:5;53216:1;53210:8;;;;;;;;;;;;;;:14;;;53228:1;53210:19;;53202:60;;;;-1:-1:-1;;;53202:60:0;;;;;;;;;53277:13;;;;:4;:13;;;;;53296:8;;:5;;53302:1;;53296:8;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;53277:28:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;53277:28:0;-1:-1:-1;;;;;53277:28:0;;;;;;;;;;;;;;;53336:8;;;;53342:1;;53336:8;;;;;;;;;;;;:18;;;53320:10;53331:1;53320:13;;;;;;;;;;;;;:34;-1:-1:-1;;;;;53320:34:0;;;-1:-1:-1;;;;;53320:34:0;;;;;53378:5;53384:1;53378:8;;;;;;;;;;;;;;:14;;;53369:3;53373:1;53369:6;;;;;;;;;;;;;;;;;:23;53093:3;;53058:346;;;-1:-1:-1;53418:12:0;;:16;53414:97;;53456:43;53474:7;53483:10;53495:3;53456:43;;;;;;;;;;;;;;;;;53414:97;52822:696;;;;;:::o;54182:202::-;54268:16;54276:7;54268;:16::i;:::-;54260:73;;;;-1:-1:-1;;;54260:73:0;;;;;;;;;54344:32;54363:7;54372:3;54344:18;:32::i;:::-;54182:202;;:::o;17349:114::-;17441:14;;17349:114::o;48482:107::-;48555:26;;;;:11;;:26;;;;;:::i;49771:119::-;49850:32;;;;:14;;:32;;;;;:::i;28030:272::-;28140:32;28154:4;28160:2;28164:7;28140:13;:32::i;:::-;28191:48;28214:4;28220:2;28224:7;28233:5;28191:22;:48::i;:::-;28183:111;;;;-1:-1:-1;;;28183:111:0;;;;;;;;49126:142;49240:19;;;;:10;:19;;;;;;;;;49218:42;;;;;;;;;;;-1:-1:-1;;49218:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;49185:13;;49218:42;;;;49240:19;49218:42;;49240:19;49218:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49218:14:0;:21;;;;;;;;-1:-1:-1;;49218:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49218:14:0;;-1:-1:-1;49218:21:0;-1:-1:-1;49218:21:0;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;:::i;3371:229::-;-1:-1:-1;;;;;3445:22:0;;3437:73;;;;-1:-1:-1;;;3437:73:0;;;;;;;;;3547:6;;;3526:38;;-1:-1:-1;;;;;3526:38:0;;;;3547:6;;;3526:38;;;3575:6;:17;;-1:-1:-1;;;;;;3575:17:0;-1:-1:-1;;;;;3575:17:0;;;;;;;;;;3371:229::o;32725:459::-;32839:4;-1:-1:-1;;;;;32819:24:0;:16;32827:7;32819;:16::i;:::-;-1:-1:-1;;;;;32819:24:0;;32811:78;;;;-1:-1:-1;;;32811:78:0;;;;;;;;;-1:-1:-1;;;;;32908:16:0;;32900:65;;;;-1:-1:-1;;;32900:65:0;;;;;;;;;32978:23;32993:7;32978:14;:23::i;:::-;-1:-1:-1;;;;;33014:23:0;;;;;;:17;:23;;;;;:35;;:33;:35::i;:::-;-1:-1:-1;;;;;33060:21:0;;;;;;:17;:21;;;;;:33;;:31;:33::i;:::-;33106:20;;;;:11;:20;;;;;;:25;;-1:-1:-1;;;;;;33106:25:0;-1:-1:-1;;;;;33106:25:0;;;;;;;;;33149:27;;33106:20;;33149:27;;;;;;;32725:459;;;:::o;42497:1148::-;-1:-1:-1;;;;;42788:18:0;;42763:22;42788:18;;;:12;:18;;;;;:25;:32;;42818:1;42788:32;:29;:32;:::i;:::-;42831:18;42852:26;;;:17;:26;;;;;;42763:57;;-1:-1:-1;42985:28:0;;;42981:328;;-1:-1:-1;;;;;43052:18:0;;43030:19;43052:18;;;:12;:18;;;;;:34;;43071:14;;43052:34;;;;;;;;;;;;;;43030:56;;43136:11;43103:12;:18;43116:4;-1:-1:-1;;;;;43103:18:0;-1:-1:-1;;;;;43103:18:0;;;;;;;;;;;;43122:10;43103:30;;;;;;;;;;;;;;;;;;;:44;;;;43220:30;;;:17;:30;;;;;:43;;;42981:328;-1:-1:-1;;;;;43398:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;43398:27:0;;;:::i;41319:186::-;-1:-1:-1;;;;;41433:16:0;;;;;;;:12;:16;;;;;;;;:23;;41404:26;;;:17;:26;;;;;:52;;;41467:16;;;39:1:-1;23:18;;45:23;;41467:30:0;;;;;;;;41319:186::o;54686:136::-;54753:27;54765:5;54772:7;54753:11;:27::i;:::-;54791:23;54806:7;54791:14;:23::i;39822:202::-;39886:24;39898:2;39902:7;39886:11;:24::i;:::-;39923:40;39951:2;39955:7;39923:27;:40::i;:::-;39976;40008:7;39976:31;:40::i;49515:111::-;49593:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;33836:1079::-;33958:4;33985:15;:2;-1:-1:-1;;;;;33985:13:0;;:15::i;:::-;33980:60;;-1:-1:-1;34024:4:0;34017:11;;33980:60;34111:12;34125:23;-1:-1:-1;;;;;34152:7:0;;-1:-1:-1;;;34257:12:0;:10;:12::i;:::-;34284:4;34303:7;34325:5;34160:181;;;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;34160:181:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;34160:181:0;;;179:29:-1;;;;160:49;;;34152:190:0;;;;34160:181;34152:190;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;34110:232:0;;;;34358:7;34353:555;;34386:17;;:21;34382:384;;34554:10;34548:17;34615:15;34602:10;34598:2;34594:19;34587:44;34502:148;34690:60;;-1:-1:-1;;;34690:60:0;;;;;;;;34353:555;34798:13;34825:10;34814:32;;;;;;;;;;;;;;-1:-1:-1;;;;;;34869:26:0;-1:-1:-1;;;34869:26:0;;-1:-1:-1;34861:35:0;;-1:-1:-1;;;34861:35:0;45601:422;45676:13;45702:16;45727:2;45702:28;;45741:16;45766:2;45741:28;;45780:16;45822:3;:10;45809:3;:10;:23;45799:34;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;45799:34:0;87::-1;135:17;;-1:-1;45799:34:0;-1:-1:-1;45780:53:0;-1:-1:-1;45844:6:0;;45865:55;45886:3;:10;45882:1;:14;45865:55;;;45914:3;45918:1;45914:6;;;;;;;;;;;;;;;;45903:3;45907;;;;;;45903:8;;;;;;;;;;;:17;-1:-1:-1;;;;;45903:17:0;;;;;;;;-1:-1:-1;45898:3:0;;45865:55;;;-1:-1:-1;45936:6:0;45931:55;45952:3;:10;45948:1;:14;45931:55;;;45980:3;45984:1;45980:6;;;;;;;;;;;;;;;;45969:3;45973;;;;;;45969:8;;;;;;;;;;;:17;-1:-1:-1;;;;;45969:17:0;;;;;;;;-1:-1:-1;45964:3:0;;45931:55;;;-1:-1:-1;46011:3:0;;45601:422;-1:-1:-1;;;;;;45601:422:0:o;35083:175::-;35183:1;35147:24;;;:15;:24;;;;;;-1:-1:-1;;;;;35147:24:0;:38;35143:108;;35237:1;35202:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;35202:37:0;;;35083:175::o;17660:110::-;17741:14;;:21;;17760:1;17741:21;:18;:21;:::i;:::-;17724:38;;17660:110::o;17471:181::-;17625:19;;17643:1;17625:19;;;17471:181::o;9179:136::-;9237:7;9264:43;9268:1;9271;9264:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9257:50;9179:136;-1:-1:-1;;;9179:136:0:o;40308:372::-;40375:27;40387:5;40394:7;40375:11;:27::i;:::-;40415:48;40448:5;40455:7;40415:32;:48::i;:::-;40613:1;40584:26;;;:17;:26;;;;;:30;40627:45;40602:7;40627:36;:45::i;49898:165::-;49969:19;;;;:10;:19;;;;;49963:33;;-1:-1:-1;;49963:33:0;;;;;;;;;;;:38;49959:97;;50025:19;;;;:10;:19;;;;;50018:26;;;:::i;31114:335::-;-1:-1:-1;;;;;31186:16:0;;31178:61;;;;-1:-1:-1;;;31178:61:0;;;;;;;;;31259:16;31267:7;31259;:16::i;:::-;31258:17;31250:58;;;;-1:-1:-1;;;31250:58:0;;;;;;;;;31321:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;31321:25:0;-1:-1:-1;;;;;31321:25:0;;;;;;;;31357:21;;:17;:21;;;;;:33;;:31;:33::i;:::-;31408;;31433:7;;-1:-1:-1;;;;;31408:33:0;;;31425:1;;31408:33;;31425:1;;31408:33;31114:335;;:::o;41706:164::-;41810:10;:17;;41783:24;;;;:15;:24;;;;;:44;;;39:1:-1;23:18;;45:23;;41838:24:0;;;;;;;41706:164::o;14002:619::-;14062:4;14530:20;;14373:66;14570:23;;;;;;:42;;-1:-1:-1;;14597:15:0;;;14562:51;-1:-1:-1;;14002:619:0:o;9652:192::-;9738:7;9774:12;9766:6;;;;9758:29;;;;-1:-1:-1;;;9758:29:0;;;;;;;;;;-1:-1:-1;;;9810:5:0;;;9652:192::o;31726:333::-;31821:5;-1:-1:-1;;;;;31801:25:0;:16;31809:7;31801;:16::i;:::-;-1:-1:-1;;;;;31801:25:0;;31793:75;;;;-1:-1:-1;;;31793:75:0;;;;;;;;;31881:23;31896:7;31881:14;:23::i;:::-;-1:-1:-1;;;;;31917:24:0;;;;;;:17;:24;;;;;:36;;:34;:36::i;:::-;31995:1;31964:20;;;:11;:20;;;;;;:33;;-1:-1:-1;;;;;;31964:33:0;;;32015:36;31976:7;;31995:1;-1:-1:-1;;;;;32015:36:0;;;;;31995:1;;32015:36;31726:333;;:::o;43940:1082::-;44218:10;:17;44193:22;;44218:24;;44240:1;44218:24;:21;:24;:::i;:::-;44253:18;44274:24;;;:15;:24;;;;;;44647:10;:26;;44193:49;;-1:-1:-1;44274:24:0;;44193:49;;44647:26;;;;;;;;;;;;;;44625:48;;44711:11;44686:10;44697;44686:22;;;;;;;;;;;;;;;;;;;:36;;;;44791:28;;;:15;:28;;;;;;:41;;;44956:10;:19;;;;;-1:-1:-1;;44956:19:0;;;:::i;:::-;-1:-1:-1;;;45013:1:0;44986:24;;;-1:-1:-1;44986:15:0;:24;;;;;:28;43940:1082::o;54908:1001::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54908:1001:0;;;-1:-1:-1;54908:1001:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;327:758;;461:3;454:4;446:6;442:17;438:27;428:2;;479:1;476;469:12;428:2;516:6;503:20;538:97;553:81;627:6;553:81;;;538:97;;;529:106;;652:5;677:6;670:5;663:21;707:4;699:6;695:17;685:27;;729:4;724:3;720:14;713:21;;782:6;829:3;821:4;813:6;809:17;804:3;800:27;797:36;794:2;;;846:1;843;836:12;794:2;871:1;856:223;881:6;878:1;875:13;856:223;;;939:3;961:54;1011:3;999:10;961:54;;;949:67;;-1:-1;1039:4;1030:14;;;;1067:4;1058:14;;;;;903:1;896:9;856:223;;;860:14;421:664;;;;;;;;1093:124;1157:20;;1182:30;1157:20;1182:30;;1224:130;1291:20;;1316:33;1291:20;1316:33;;1361:128;1427:20;;1452:32;1427:20;1452:32;;1496:132;1573:13;;1591:32;1573:13;1591:32;;1636:440;;1737:3;1730:4;1722:6;1718:17;1714:27;1704:2;;1755:1;1752;1745:12;1704:2;1792:6;1779:20;1814:64;1829:48;1870:6;1829:48;;1814:64;1805:73;;1898:6;1891:5;1884:21;1934:4;1926:6;1922:17;1967:4;1960:5;1956:16;2002:3;1993:6;1988:3;1984:16;1981:25;1978:2;;;2019:1;2016;2009:12;1978:2;2029:41;2063:6;2058:3;2053;2029:41;;;1697:379;;;;;;;;2563:473;;2669:4;2657:9;2652:3;2648:19;2644:30;2641:2;;;2687:1;2684;2677:12;2641:2;2705:20;2720:4;2705:20;;;2696:29;-1:-1;2780:1;2812:57;2865:3;2845:9;2812:57;;;2787:83;;-1:-1;2932:2;2965:49;3010:3;2986:22;;;2965:49;;;2958:4;2951:5;2947:16;2940:75;2891:135;2635:401;;;;;3180:126;3245:20;;3270:31;3245:20;3270:31;;3313:241;;3417:2;3405:9;3396:7;3392:23;3388:32;3385:2;;;3433:1;3430;3423:12;3385:2;3468:1;3485:53;3530:7;3510:9;3485:53;;3561:366;;;3682:2;3670:9;3661:7;3657:23;3653:32;3650:2;;;3698:1;3695;3688:12;3650:2;3733:1;3750:53;3795:7;3775:9;3750:53;;;3740:63;;3712:97;3840:2;3858:53;3903:7;3894:6;3883:9;3879:22;3858:53;;;3848:63;;3819:98;3644:283;;;;;;3934:491;;;;4072:2;4060:9;4051:7;4047:23;4043:32;4040:2;;;4088:1;4085;4078:12;4040:2;4123:1;4140:53;4185:7;4165:9;4140:53;;;4130:63;;4102:97;4230:2;4248:53;4293:7;4284:6;4273:9;4269:22;4248:53;;;4238:63;;4209:98;4338:2;4356:53;4401:7;4392:6;4381:9;4377:22;4356:53;;;4346:63;;4317:98;4034:391;;;;;;4432:721;;;;;4596:3;4584:9;4575:7;4571:23;4567:33;4564:2;;;4613:1;4610;4603:12;4564:2;4648:1;4665:53;4710:7;4690:9;4665:53;;;4655:63;;4627:97;4755:2;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;;;4763:63;;4734:98;4863:2;4881:53;4926:7;4917:6;4906:9;4902:22;4881:53;;;4871:63;;4842:98;4999:2;4988:9;4984:18;4971:32;5023:18;5015:6;5012:30;5009:2;;;5055:1;5052;5045:12;5009:2;5075:62;5129:7;5120:6;5109:9;5105:22;5075:62;;;5065:72;;4950:193;4558:595;;;;;;;;5160:360;;;5278:2;5266:9;5257:7;5253:23;5249:32;5246:2;;;5294:1;5291;5284:12;5246:2;5329:1;5346:53;5391:7;5371:9;5346:53;;;5336:63;;5308:97;5436:2;5454:50;5496:7;5487:6;5476:9;5472:22;5454:50;;5527:366;;;5648:2;5636:9;5627:7;5623:23;5619:32;5616:2;;;5664:1;5661;5654:12;5616:2;5699:1;5716:53;5761:7;5741:9;5716:53;;;5706:63;;5678:97;5806:2;5824:53;5869:7;5860:6;5849:9;5845:22;5824:53;;5900:239;;6003:2;5991:9;5982:7;5978:23;5974:32;5971:2;;;6019:1;6016;6009:12;5971:2;6054:1;6071:52;6115:7;6095:9;6071:52;;6146:261;;6260:2;6248:9;6239:7;6235:23;6231:32;6228:2;;;6276:1;6273;6266:12;6228:2;6311:1;6328:63;6383:7;6363:9;6328:63;;6414:347;;6528:2;6516:9;6507:7;6503:23;6499:32;6496:2;;;6544:1;6541;6534:12;6496:2;6579:31;;6630:18;6619:30;;6616:2;;;6662:1;6659;6652:12;6616:2;6682:63;6737:7;6728:6;6717:9;6713:22;6682:63;;6768:241;;6872:2;6860:9;6851:7;6847:23;6843:32;6840:2;;;6888:1;6885;6878:12;6840:2;6923:1;6940:53;6985:7;6965:9;6940:53;;7016:366;;;7137:2;7125:9;7116:7;7112:23;7108:32;7105:2;;;7153:1;7150;7143:12;7105:2;7188:1;7205:53;7250:7;7230:9;7205:53;;7389:1141;;;;;;;7628:3;7616:9;7607:7;7603:23;7599:33;7596:2;;;7645:1;7642;7635:12;7596:2;7680:1;7697:53;7742:7;7722:9;7697:53;;;7687:63;;7659:97;7787:2;7805:51;7848:7;7839:6;7828:9;7824:22;7805:51;;;7795:61;;7766:96;7893:2;7911:53;7956:7;7947:6;7936:9;7932:22;7911:53;;;7901:63;;7872:98;8001:2;8019:53;8064:7;8055:6;8044:9;8040:22;8019:53;;;8009:63;;7980:98;8137:3;8126:9;8122:19;8109:33;8162:18;8154:6;8151:30;8148:2;;;8194:1;8191;8184:12;8148:2;8214:95;8301:7;8292:6;8281:9;8277:22;8214:95;;;8204:105;;8088:227;8374:3;8363:9;8359:19;8346:33;8399:18;8391:6;8388:30;8385:2;;;8431:1;8428;8421:12;8385:2;8451:63;8506:7;8497:6;8486:9;8482:22;8451:63;;;8441:73;;8325:195;7590:940;;;;;;;;;8538:205;;8641:62;8699:3;8691:6;8641:62;;;-1:-1;;8732:4;8723:14;;8634:109;8934:173;;9021:46;9063:3;9055:6;9021:46;;9115:127;9204:32;9230:5;9204:32;;;9199:3;9192:45;9186:56;;;9654:690;;9799:54;9847:5;9799:54;;;9866:86;9945:6;9940:3;9866:86;;;9859:93;;9973:56;10023:5;9973:56;;;10049:7;10077:1;10062:260;10087:6;10084:1;10081:13;10062:260;;;10154:6;10148:13;10175:63;10234:3;10219:13;10175:63;;;10168:70;;10255:60;10308:6;10255:60;;;10245:70;-1:-1;;10109:1;10102:9;10062:260;;;-1:-1;10335:3;;9778:566;-1:-1;;;;;9778:566;10399:754;;10560:62;10616:5;10560:62;;;10635:94;10722:6;10717:3;10635:94;;;10628:101;;10750:64;10808:5;10750:64;;;10834:7;10862:1;10847:284;10872:6;10869:1;10866:13;10847:284;;;10939:6;10933:13;10960:79;11035:3;11020:13;10960:79;;;10953:86;;11056:68;11117:6;11056:68;;;11046:78;-1:-1;;10894:1;10887:9;10847:284;;11192:690;;11337:54;11385:5;11337:54;;;11404:86;11483:6;11478:3;11404:86;;;11397:93;;11511:56;11561:5;11511:56;;;11587:7;11615:1;11600:260;11625:6;11622:1;11619:13;11600:260;;;11692:6;11686:13;11713:63;11772:3;11757:13;11713:63;;;11706:70;;11793:60;11846:6;11793:60;;;11783:70;-1:-1;;11647:1;11640:9;11600:260;;11890:104;11967:21;11982:5;11967:21;;12001:113;12084:24;12102:5;12084:24;;12121:343;;12231:38;12263:5;12231:38;;;12281:70;12344:6;12339:3;12281:70;;;12274:77;;12356:52;12401:6;12396:3;12389:4;12382:5;12378:16;12356:52;;;12429:29;12451:6;12429:29;;;12420:39;;;;12211:253;-1:-1;;;12211:253;12471:356;;12599:38;12631:5;12599:38;;;12649:88;12730:6;12725:3;12649:88;;;12642:95;;12742:52;12787:6;12782:3;12775:4;12768:5;12764:16;12742:52;;;12806:16;;;;;12579:248;-1:-1;;12579:248;12834:209;12957:80;12977:59;13030:5;12977:59;;;12957:80;;13751:328;;13911:67;13975:2;13970:3;13911:67;;;14011:30;13991:51;;14070:2;14061:12;;13897:182;-1:-1;;13897:182;14088:380;;14248:67;14312:2;14307:3;14248:67;;;14348:34;14328:55;;-1:-1;;;14412:2;14403:12;;14396:35;14459:2;14450:12;;14234:234;-1:-1;;14234:234;14477:387;;14637:67;14701:2;14696:3;14637:67;;;14737:34;14717:55;;-1:-1;;;14801:2;14792:12;;14785:42;14855:2;14846:12;;14623:241;-1:-1;;14623:241;14873:375;;15033:67;15097:2;15092:3;15033:67;;;15133:34;15113:55;;-1:-1;;;15197:2;15188:12;;15181:30;15239:2;15230:12;;15019:229;-1:-1;;15019:229;15257:328;;15417:67;15481:2;15476:3;15417:67;;;15517:30;15497:51;;15576:2;15567:12;;15403:182;-1:-1;;15403:182;15594:373;;15754:67;15818:2;15813:3;15754:67;;;15854:34;15834:55;;-1:-1;;;15918:2;15909:12;;15902:28;15958:2;15949:12;;15740:227;-1:-1;;15740:227;15976:325;;16136:67;16200:2;16195:3;16136:67;;;16236:27;16216:48;;16292:2;16283:12;;16122:179;-1:-1;;16122:179;16310:381;;16470:67;16534:2;16529:3;16470:67;;;16570:34;16550:55;;-1:-1;;;16634:2;16625:12;;16618:36;16682:2;16673:12;;16456:235;-1:-1;;16456:235;16700:325;;16860:67;16924:2;16919:3;16860:67;;;16960:27;16940:48;;17016:2;17007:12;;16846:179;-1:-1;;16846:179;17034:393;;17194:67;17258:2;17253:3;17194:67;;;17294:34;17274:55;;17363:26;17358:2;17349:12;;17342:48;17418:2;17409:12;;17180:247;-1:-1;;17180:247;17436:379;;17596:67;17660:2;17655:3;17596:67;;;17696:34;17676:55;;-1:-1;;;17760:2;17751:12;;17744:34;17806:2;17797:12;;17582:233;-1:-1;;17582:233;17824:378;;17984:67;18048:2;18043:3;17984:67;;;18084:34;18064:55;;-1:-1;;;18148:2;18139:12;;18132:33;18193:2;18184:12;;17970:232;-1:-1;;17970:232;18211:332;;18371:67;18435:2;18430:3;18371:67;;;18471:34;18451:55;;18534:2;18525:12;;18357:186;-1:-1;;18357:186;18552:381;;18712:67;18776:2;18771:3;18712:67;;;18812:34;18792:55;;-1:-1;;;18876:2;18867:12;;18860:36;18924:2;18915:12;;18698:235;-1:-1;;18698:235;18942:381;;19102:67;19166:2;19161:3;19102:67;;;19202:34;19182:55;;-1:-1;;;19266:2;19257:12;;19250:36;19314:2;19305:12;;19088:235;-1:-1;;19088:235;19332:332;;19492:67;19556:2;19551:3;19492:67;;;19592:34;19572:55;;19655:2;19646:12;;19478:186;-1:-1;;19478:186;19673:378;;19833:67;19897:2;19892:3;19833:67;;;19933:34;19913:55;;-1:-1;;;19997:2;19988:12;;19981:33;20042:2;20033:12;;19819:232;-1:-1;;19819:232;20060:384;;20220:67;20284:2;20279:3;20220:67;;;20320:34;20300:55;;-1:-1;;;20384:2;20375:12;;20368:39;20435:2;20426:12;;20206:238;-1:-1;;20206:238;20453:370;;20613:67;20677:2;20672:3;20613:67;;;20713:34;20693:55;;-1:-1;;;20777:2;20768:12;;20761:25;20814:2;20805:12;;20599:224;-1:-1;;20599:224;20832:386;;20992:67;21056:2;21051:3;20992:67;;;21092:34;21072:55;;-1:-1;;;21156:2;21147:12;;21140:41;21209:2;21200:12;;20978:240;-1:-1;;20978:240;21227:381;;21387:67;21451:2;21446:3;21387:67;;;21487:34;21467:55;;-1:-1;;;21551:2;21542:12;;21535:36;21599:2;21590:12;;21373:235;-1:-1;;21373:235;21617:374;;21777:67;21841:2;21836:3;21777:67;;;21877:34;21857:55;;-1:-1;;;21941:2;21932:12;;21925:29;21982:2;21973:12;;21763:228;-1:-1;;21763:228;22000:327;;22160:67;22224:2;22219:3;22160:67;;;22260:29;22240:50;;22318:2;22309:12;;22146:181;-1:-1;;22146:181;22336:385;;22496:67;22560:2;22555:3;22496:67;;;22596:34;22576:55;;-1:-1;;;22660:2;22651:12;;22644:40;22712:2;22703:12;;22482:239;-1:-1;;22482:239;22959:152;23060:45;23080:24;23098:5;23080:24;;;23060:45;;23118:107;23197:22;23213:5;23197:22;;23232:262;;23376:93;23465:3;23456:6;23376:93;;23501:427;;23670:97;23763:3;23754:6;23670:97;;;23789:2;23784:3;23780:12;23773:19;;23803:75;23874:3;23865:6;23803:75;;;-1:-1;23900:2;23891:12;;23658:270;-1:-1;;23658:270;23935:213;24053:2;24038:18;;24067:71;24042:9;24111:6;24067:71;;24155:663;24391:3;24376:19;;24406:87;24380:9;24466:6;24406:87;;;24504:72;24572:2;24561:9;24557:18;24548:6;24504:72;;;24587;24655:2;24644:9;24640:18;24631:6;24587:72;;;24707:9;24701:4;24697:20;24692:2;24681:9;24677:18;24670:48;24732:76;24803:4;24794:6;24732:76;;;24724:84;24362:456;-1:-1;;;;;;24362:456;24825:356;24987:2;24972:18;;25001:87;24976:9;25061:6;25001:87;;;25099:72;25167:2;25156:9;25152:18;25143:6;25099:72;;25188:393;25372:2;25386:47;;;25357:18;;25447:124;25357:18;25557:6;25447:124;;25588:361;25756:2;25770:47;;;25741:18;;25831:108;25741:18;25925:6;25831:108;;25956:201;26068:2;26053:18;;26082:65;26057:9;26120:6;26082:65;;26164:539;26362:3;26347:19;;26377:71;26351:9;26421:6;26377:71;;;26459:68;26523:2;26512:9;26508:18;26499:6;26459:68;;;26538:72;26606:2;26595:9;26591:18;26582:6;26538:72;;;26621;26689:2;26678:9;26674:18;26665:6;26621:72;;;26333:370;;;;;;;;26710:293;26844:2;26858:47;;;26829:18;;26919:74;26829:18;26979:6;26919:74;;27318:407;27509:2;27523:47;;;27494:18;;27584:131;27494:18;27584:131;;27732:407;27923:2;27937:47;;;27908:18;;27998:131;27908:18;27998:131;;28146:407;28337:2;28351:47;;;28322:18;;28412:131;28322:18;28412:131;;28560:407;28751:2;28765:47;;;28736:18;;28826:131;28736:18;28826:131;;28974:407;29165:2;29179:47;;;29150:18;;29240:131;29150:18;29240:131;;29388:407;29579:2;29593:47;;;29564:18;;29654:131;29564:18;29654:131;;29802:407;29993:2;30007:47;;;29978:18;;30068:131;29978:18;30068:131;;30216:407;30407:2;30421:47;;;30392:18;;30482:131;30392:18;30482:131;;30630:407;30821:2;30835:47;;;30806:18;;30896:131;30806:18;30896:131;;31044:407;31235:2;31249:47;;;31220:18;;31310:131;31220:18;31310:131;;31458:407;31649:2;31663:47;;;31634:18;;31724:131;31634:18;31724:131;;31872:407;32063:2;32077:47;;;32048:18;;32138:131;32048:18;32138:131;;32286:407;32477:2;32491:47;;;32462:18;;32552:131;32462:18;32552:131;;32700:407;32891:2;32905:47;;;32876:18;;32966:131;32876:18;32966:131;;33114:407;33305:2;33319:47;;;33290:18;;33380:131;33290:18;33380:131;;33528:407;33719:2;33733:47;;;33704:18;;33794:131;33704:18;33794:131;;33942:407;34133:2;34147:47;;;34118:18;;34208:131;34118:18;34208:131;;34356:407;34547:2;34561:47;;;34532:18;;34622:131;34532:18;34622:131;;34770:407;34961:2;34975:47;;;34946:18;;35036:131;34946:18;35036:131;;35184:407;35375:2;35389:47;;;35360:18;;35450:131;35360:18;35450:131;;35598:407;35789:2;35803:47;;;35774:18;;35864:131;35774:18;35864:131;;36012:407;36203:2;36217:47;;;36188:18;;36278:131;36188:18;36278:131;;36426:407;36617:2;36631:47;;;36602:18;;36692:131;36602:18;36692:131;;36840:407;37031:2;37045:47;;;37016:18;;37106:131;37016:18;37106:131;;37254:213;37372:2;37357:18;;37386:71;37361:9;37430:6;37386:71;;37474:731;37748:2;37733:18;;37762:71;37737:9;37806:6;37762:71;;;37881:9;37875:4;37871:20;37866:2;37855:9;37851:18;37844:48;37906:108;38009:4;38000:6;37906:108;;;37898:116;;38062:9;38056:4;38052:20;38047:2;38036:9;38032:18;38025:48;38087:108;38190:4;38181:6;38087:108;;38212:256;38274:2;38268:9;38300:17;;;38375:18;38360:34;;38396:22;;;38357:62;38354:2;;;38432:1;38429;38422:12;38354:2;38448;38441:22;38252:216;;-1:-1;38252:216;38475:321;;38651:18;38643:6;38640:30;38637:2;;;38683:1;38680;38673:12;38637:2;-1:-1;38718:4;38706:17;;;38771:15;;38574:222;38803:321;;38946:18;38938:6;38935:30;38932:2;;;38978:1;38975;38968:12;38932:2;-1:-1;39109:4;39045;39022:17;;;;-1:-1;;39018:33;39099:15;;38869:255;39460:151;39584:4;39575:14;;39532:79;39942:137;40045:12;;40016:63;41118:178;41236:19;;;41285:4;41276:14;;41229:67;41858:144;41993:3;41971:31;-1:-1;41971:31;42182:91;;42244:24;42262:5;42244:24;;42386:85;42452:13;42445:21;;42428:43;42557:144;-1:-1;;;;;;42618:78;;42601:100;42708:121;-1:-1;;;;;42770:54;;42753:76;42915:81;42986:4;42975:16;;42958:38;43003:165;;43104:59;43157:5;43104:59;;43313:145;43394:6;43389:3;43384;43371:30;-1:-1;43450:1;43432:16;;43425:27;43364:94;43467:268;43532:1;43539:101;43553:6;43550:1;43547:13;43539:101;;;43620:11;;;43614:18;43601:11;;;43594:39;43575:2;43568:10;43539:101;;;43655:6;43652:1;43649:13;43646:2;;;-1:-1;;43720:1;43702:16;;43695:27;43516:219;43743:95;;43807:26;43827:5;43845:89;43909:20;43923:5;43909:20;;44022:97;44110:2;44090:14;-1:-1;;44086:28;;44070:49;44127:94;44201:2;44197:14;;44169:52;44229:117;44298:24;44316:5;44298:24;;;44291:5;44288:35;44278:2;;44337:1;44334;44327:12;44493:111;44559:21;44574:5;44559:21;;44611:117;44680:24;44698:5;44680:24;;44735:115;44803:23;44820:5;44803:23;;44981:113;45048:22;45064:5;45048:22;
Swarm Source
bzzr://201c77075700435b8055570069128b2f78068fa97620d263c3a15d9d6a537079
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.