Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmsaavedra/273e59689cbbb836ca04df922bfd695d to your computer and use it in GitHub Desktop.
Save jmsaavedra/273e59689cbbb836ca04df922bfd695d to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.18+commit.87f61d96.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol";
import "../extensions/ICreatorExtensionTokenURI.sol";
import "../extensions/ICreatorExtensionRoyalties.sol";
import "./ICreatorCore.sol";
/**
* @dev Core creator implementation
*/
abstract contract CreatorCore is ReentrancyGuard, ICreatorCore, ERC165 {
using Strings for uint256;
using EnumerableSet for EnumerableSet.AddressSet;
using AddressUpgradeable for address;
uint256 internal _tokenCount = 0;
// Base approve transfers address location
address internal _approveTransferBase;
// Track registered extensions data
EnumerableSet.AddressSet internal _extensions;
EnumerableSet.AddressSet internal _blacklistedExtensions;
// The baseURI for a given extension
mapping (address => string) private _extensionBaseURI;
mapping (address => bool) private _extensionBaseURIIdentical;
// The prefix for any tokens with a uri configured
mapping (address => string) private _extensionURIPrefix;
// Mapping for individual token URIs
mapping (uint256 => string) internal _tokenURIs;
// Royalty configurations
struct RoyaltyConfig {
address payable receiver;
uint16 bps;
}
mapping (address => RoyaltyConfig[]) internal _extensionRoyalty;
mapping (uint256 => RoyaltyConfig[]) internal _tokenRoyalty;
bytes4 private constant _CREATOR_CORE_V1 = 0x28f10a21;
/**
* External interface identifiers for royalties
*/
/**
* @dev CreatorCore
*
* bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6
*
* => 0xbb3bafd6 = 0xbb3bafd6
*/
bytes4 private constant _INTERFACE_ID_ROYALTIES_CREATORCORE = 0xbb3bafd6;
/**
* @dev Rarible: RoyaltiesV1
*
* bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb
* bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f
*
* => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584
*/
bytes4 private constant _INTERFACE_ID_ROYALTIES_RARIBLE = 0xb7799584;
/**
* @dev Foundation
*
* bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c
*
* => 0xd5a06d4c = 0xd5a06d4c
*/
bytes4 private constant _INTERFACE_ID_ROYALTIES_FOUNDATION = 0xd5a06d4c;
/**
* @dev EIP-2981
*
* bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a
*
* => 0x2a55205a = 0x2a55205a
*/
bytes4 private constant _INTERFACE_ID_ROYALTIES_EIP2981 = 0x2a55205a;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(ICreatorCore).interfaceId || interfaceId == _CREATOR_CORE_V1 || super.supportsInterface(interfaceId)
|| interfaceId == _INTERFACE_ID_ROYALTIES_CREATORCORE || interfaceId == _INTERFACE_ID_ROYALTIES_RARIBLE
|| interfaceId == _INTERFACE_ID_ROYALTIES_FOUNDATION || interfaceId == _INTERFACE_ID_ROYALTIES_EIP2981;
}
/**
* @dev Only allows registered extensions to call the specified function
*/
function requireExtension() internal view {
require(_extensions.contains(msg.sender), "Must be registered extension");
}
/**
* @dev Only allows non-blacklisted extensions
*/
function requireNonBlacklist(address extension) internal view {
require(!_blacklistedExtensions.contains(extension), "Extension blacklisted");
}
/**
* @dev See {ICreatorCore-getExtensions}.
*/
function getExtensions() external view override returns (address[] memory extensions) {
extensions = new address[](_extensions.length());
for (uint i; i < _extensions.length();) {
extensions[i] = _extensions.at(i);
unchecked { ++i; }
}
return extensions;
}
/**
* @dev Register an extension
*/
function _registerExtension(address extension, string calldata baseURI, bool baseURIIdentical) internal virtual {
require(extension != address(this) && extension.isContract(), "Invalid");
emit ExtensionRegistered(extension, msg.sender);
_extensionBaseURI[extension] = baseURI;
_extensionBaseURIIdentical[extension] = baseURIIdentical;
_extensions.add(extension);
_setApproveTransferExtension(extension, true);
}
/**
* @dev See {ICreatorCore-setApproveTransferExtension}.
*/
function setApproveTransferExtension(bool enabled) external override {
requireExtension();
_setApproveTransferExtension(msg.sender, enabled);
}
/**
* @dev Set whether or not tokens minted by the extension defers transfer approvals to the extension
*/
function _setApproveTransferExtension(address extension, bool enabled) internal virtual;
/**
* @dev Unregister an extension
*/
function _unregisterExtension(address extension) internal {
emit ExtensionUnregistered(extension, msg.sender);
_extensions.remove(extension);
}
/**
* @dev Blacklist an extension
*/
function _blacklistExtension(address extension) internal {
require(extension != address(0) && extension != address(this), "Cannot blacklist yourself");
if (_extensions.contains(extension)) {
emit ExtensionUnregistered(extension, msg.sender);
_extensions.remove(extension);
}
if (!_blacklistedExtensions.contains(extension)) {
emit ExtensionBlacklisted(extension, msg.sender);
_blacklistedExtensions.add(extension);
}
}
/**
* @dev Set base token uri for an extension
*/
function _setBaseTokenURIExtension(string calldata uri, bool identical) internal {
_extensionBaseURI[msg.sender] = uri;
_extensionBaseURIIdentical[msg.sender] = identical;
}
/**
* @dev Set token uri prefix for an extension
*/
function _setTokenURIPrefixExtension(string calldata prefix) internal {
_extensionURIPrefix[msg.sender] = prefix;
}
/**
* @dev Set token uri for a token of an extension
*/
function _setTokenURIExtension(uint256 tokenId, string calldata uri) internal {
require(_tokenExtension(tokenId) == msg.sender, "Invalid token");
_tokenURIs[tokenId] = uri;
}
/**
* @dev Set base token uri for tokens with no extension
*/
function _setBaseTokenURI(string calldata uri) internal {
_extensionBaseURI[address(0)] = uri;
}
/**
* @dev Set token uri prefix for tokens with no extension
*/
function _setTokenURIPrefix(string calldata prefix) internal {
_extensionURIPrefix[address(0)] = prefix;
}
/**
* @dev Set token uri for a token with no extension
*/
function _setTokenURI(uint256 tokenId, string calldata uri) internal {
require(tokenId > 0 && tokenId <= _tokenCount && _tokenExtension(tokenId) == address(0), "Invalid token");
_tokenURIs[tokenId] = uri;
}
/**
* @dev Retrieve a token's URI
*/
function _tokenURI(uint256 tokenId) internal view returns (string memory) {
require(tokenId > 0 && tokenId <= _tokenCount, "Invalid token");
address extension = _tokenExtension(tokenId);
require(!_blacklistedExtensions.contains(extension), "Extension blacklisted");
if (bytes(_tokenURIs[tokenId]).length != 0) {
if (bytes(_extensionURIPrefix[extension]).length != 0) {
return string(abi.encodePacked(_extensionURIPrefix[extension], _tokenURIs[tokenId]));
}
return _tokenURIs[tokenId];
}
if (ERC165Checker.supportsInterface(extension, type(ICreatorExtensionTokenURI).interfaceId)) {
return ICreatorExtensionTokenURI(extension).tokenURI(address(this), tokenId);
}
if (!_extensionBaseURIIdentical[extension]) {
return string(abi.encodePacked(_extensionBaseURI[extension], tokenId.toString()));
} else {
return _extensionBaseURI[extension];
}
}
/**
* Helper to get royalties for a token
*/
function _getRoyalties(uint256 tokenId) view internal returns (address payable[] memory receivers, uint256[] memory bps) {
// Get token level royalties
RoyaltyConfig[] memory royalties = _tokenRoyalty[tokenId];
if (royalties.length == 0) {
// Get extension specific royalties
address extension = _tokenExtension(tokenId);
if (extension != address(0)) {
if (ERC165Checker.supportsInterface(extension, type(ICreatorExtensionRoyalties).interfaceId)) {
(receivers, bps) = ICreatorExtensionRoyalties(extension).getRoyalties(address(this), tokenId);
// Extension override exists, just return that
if (receivers.length > 0) return (receivers, bps);
}
royalties = _extensionRoyalty[extension];
}
}
if (royalties.length == 0) {
// Get the default royalty
royalties = _extensionRoyalty[address(0)];
}
if (royalties.length > 0) {
receivers = new address payable[](royalties.length);
bps = new uint256[](royalties.length);
for (uint i; i < royalties.length;) {
receivers[i] = royalties[i].receiver;
bps[i] = royalties[i].bps;
unchecked { ++i; }
}
}
}
/**
* Helper to get royalty receivers for a token
*/
function _getRoyaltyReceivers(uint256 tokenId) view internal returns (address payable[] memory recievers) {
(recievers, ) = _getRoyalties(tokenId);
}
/**
* Helper to get royalty basis points for a token
*/
function _getRoyaltyBPS(uint256 tokenId) view internal returns (uint256[] memory bps) {
(, bps) = _getRoyalties(tokenId);
}
function _getRoyaltyInfo(uint256 tokenId, uint256 value) view internal returns (address receiver, uint256 amount){
(address payable[] memory receivers, uint256[] memory bps) = _getRoyalties(tokenId);
require(receivers.length <= 1, "More than 1 royalty receiver");
if (receivers.length == 0) {
return (address(this), 0);
}
return (receivers[0], bps[0]*value/10000);
}
/**
* Set royalties for a token
*/
function _setRoyalties(uint256 tokenId, address payable[] calldata receivers, uint256[] calldata basisPoints) internal {
_checkRoyalties(receivers, basisPoints);
delete _tokenRoyalty[tokenId];
_setRoyalties(receivers, basisPoints, _tokenRoyalty[tokenId]);
emit RoyaltiesUpdated(tokenId, receivers, basisPoints);
}
/**
* Set royalties for all tokens of an extension
*/
function _setRoyaltiesExtension(address extension, address payable[] calldata receivers, uint256[] calldata basisPoints) internal {
_checkRoyalties(receivers, basisPoints);
delete _extensionRoyalty[extension];
_setRoyalties(receivers, basisPoints, _extensionRoyalty[extension]);
if (extension == address(0)) {
emit DefaultRoyaltiesUpdated(receivers, basisPoints);
} else {
emit ExtensionRoyaltiesUpdated(extension, receivers, basisPoints);
}
}
/**
* Helper function to check that royalties provided are valid
*/
function _checkRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints) private pure {
require(receivers.length == basisPoints.length, "Invalid input");
uint256 totalBasisPoints;
for (uint i; i < basisPoints.length;) {
totalBasisPoints += basisPoints[i];
unchecked { ++i; }
}
require(totalBasisPoints < 10000, "Invalid total royalties");
}
/**
* Helper function to set royalties
*/
function _setRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints, RoyaltyConfig[] storage royalties) private {
for (uint i; i < basisPoints.length;) {
royalties.push(
RoyaltyConfig(
{
receiver: receivers[i],
bps: uint16(basisPoints[i])
}
)
);
unchecked { ++i; }
}
}
/**
* @dev Set the base contract's approve transfer contract location
*/
function _setApproveTransferBase(address extension) internal {
_approveTransferBase = extension;
emit ApproveTransferUpdated(extension);
}
/**
* @dev See {ICreatorCore-getApproveTransfer}.
*/
function getApproveTransfer() external view override returns (address) {
return _approveTransferBase;
}
/**
* @dev Get the extension for the given token
*/
function _tokenExtension(uint256 tokenId) internal virtual view returns(address);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @dev Core creator interface
*/
interface ICreatorCore is IERC165 {
event ExtensionRegistered(address indexed extension, address indexed sender);
event ExtensionUnregistered(address indexed extension, address indexed sender);
event ExtensionBlacklisted(address indexed extension, address indexed sender);
event MintPermissionsUpdated(address indexed extension, address indexed permissions, address indexed sender);
event RoyaltiesUpdated(uint256 indexed tokenId, address payable[] receivers, uint256[] basisPoints);
event DefaultRoyaltiesUpdated(address payable[] receivers, uint256[] basisPoints);
event ApproveTransferUpdated(address extension);
event ExtensionRoyaltiesUpdated(address indexed extension, address payable[] receivers, uint256[] basisPoints);
event ExtensionApproveTransferUpdated(address indexed extension, bool enabled);
/**
* @dev gets address of all extensions
*/
function getExtensions() external view returns (address[] memory);
/**
* @dev add an extension. Can only be called by contract owner or admin.
* extension address must point to a contract implementing ICreatorExtension.
* Returns True if newly added, False if already added.
*/
function registerExtension(address extension, string calldata baseURI) external;
/**
* @dev add an extension. Can only be called by contract owner or admin.
* extension address must point to a contract implementing ICreatorExtension.
* Returns True if newly added, False if already added.
*/
function registerExtension(address extension, string calldata baseURI, bool baseURIIdentical) external;
/**
* @dev add an extension. Can only be called by contract owner or admin.
* Returns True if removed, False if already removed.
*/
function unregisterExtension(address extension) external;
/**
* @dev blacklist an extension. Can only be called by contract owner or admin.
* This function will destroy all ability to reference the metadata of any tokens created
* by the specified extension. It will also unregister the extension if needed.
* Returns True if removed, False if already removed.
*/
function blacklistExtension(address extension) external;
/**
* @dev set the baseTokenURI of an extension. Can only be called by extension.
*/
function setBaseTokenURIExtension(string calldata uri) external;
/**
* @dev set the baseTokenURI of an extension. Can only be called by extension.
* For tokens with no uri configured, tokenURI will return "uri+tokenId"
*/
function setBaseTokenURIExtension(string calldata uri, bool identical) external;
/**
* @dev set the common prefix of an extension. Can only be called by extension.
* If configured, and a token has a uri set, tokenURI will return "prefixURI+tokenURI"
* Useful if you want to use ipfs/arweave
*/
function setTokenURIPrefixExtension(string calldata prefix) external;
/**
* @dev set the tokenURI of a token extension. Can only be called by extension that minted token.
*/
function setTokenURIExtension(uint256 tokenId, string calldata uri) external;
/**
* @dev set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token.
*/
function setTokenURIExtension(uint256[] memory tokenId, string[] calldata uri) external;
/**
* @dev set the baseTokenURI for tokens with no extension. Can only be called by owner/admin.
* For tokens with no uri configured, tokenURI will return "uri+tokenId"
*/
function setBaseTokenURI(string calldata uri) external;
/**
* @dev set the common prefix for tokens with no extension. Can only be called by owner/admin.
* If configured, and a token has a uri set, tokenURI will return "prefixURI+tokenURI"
* Useful if you want to use ipfs/arweave
*/
function setTokenURIPrefix(string calldata prefix) external;
/**
* @dev set the tokenURI of a token with no extension. Can only be called by owner/admin.
*/
function setTokenURI(uint256 tokenId, string calldata uri) external;
/**
* @dev set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin.
*/
function setTokenURI(uint256[] memory tokenIds, string[] calldata uris) external;
/**
* @dev set a permissions contract for an extension. Used to control minting.
*/
function setMintPermissions(address extension, address permissions) external;
/**
* @dev Configure so transfers of tokens created by the caller (must be extension) gets approval
* from the extension before transferring
*/
function setApproveTransferExtension(bool enabled) external;
/**
* @dev get the extension of a given token
*/
function tokenExtension(uint256 tokenId) external view returns (address);
/**
* @dev Set default royalties
*/
function setRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints) external;
/**
* @dev Set royalties of a token
*/
function setRoyalties(uint256 tokenId, address payable[] calldata receivers, uint256[] calldata basisPoints) external;
/**
* @dev Set royalties of an extension
*/
function setRoyaltiesExtension(address extension, address payable[] calldata receivers, uint256[] calldata basisPoints) external;
/**
* @dev Get royalites of a token. Returns list of receivers and basisPoints
*/
function getRoyalties(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);
// Royalty support for various other standards
function getFeeRecipients(uint256 tokenId) external view returns (address payable[] memory);
function getFeeBps(uint256 tokenId) external view returns (uint[] memory);
function getFees(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);
function royaltyInfo(uint256 tokenId, uint256 value) external view returns (address, uint256);
/**
* @dev Set the default approve transfer contract location.
*/
function setApproveTransfer(address extension) external;
/**
* @dev Get the default approve transfer contract location.
*/
function getApproveTransfer() external view returns (address);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "./CreatorCore.sol";
/**
* @dev Core ERC1155 creator interface
*/
interface IERC1155CreatorCore is ICreatorCore {
/**
* @dev mint a token with no extension. Can only be called by an admin.
*
* @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)
* @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array
* @param uris - If no elements, all tokens use the default uri.
* If any element is an empty string, the corresponding token uses the default uri.
*
*
* Requirements: If to is a multi-element array, then uris must be empty or single element array
* If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size
* If to is a single element array, uris must be empty or the same length as amounts
*
* Examples:
* mintBaseNew(['0x....1', '0x....2'], [1], [])
* Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri.
*
* mintBaseNew(['0x....1', '0x....2'], [1, 2], [])
* Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri.
*
* mintBaseNew(['0x....1'], [1, 2], ["", "http://token2.com"])
* Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses "http://token2.com".
*
* @return Returns list of tokenIds minted
*/
function mintBaseNew(address[] calldata to, uint256[] calldata amounts, string[] calldata uris) external returns (uint256[] memory);
/**
* @dev batch mint existing token with no extension. Can only be called by an admin.
*
* @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)
* @param tokenIds - Can be a single element array (all recipients get the same token) or a multi-element array
* @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array
*
* Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays
*
* Examples:
* mintBaseExisting(['0x....1', '0x....2'], [1], [10])
* Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'.
*
* mintBaseExisting(['0x....1', '0x....2'], [1, 2], [10, 20])
* Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'.
*
* mintBaseExisting(['0x....1'], [1, 2], [10, 20])
* Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'.
*
* mintBaseExisting(['0x....1', '0x....2'], [1], [10, 20])
* Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'.
*
*/
function mintBaseExisting(address[] calldata to, uint256[] calldata tokenIds, uint256[] calldata amounts) external;
/**
* @dev mint a token from an extension. Can only be called by a registered extension.
*
* @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)
* @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array
* @param uris - If no elements, all tokens use the default uri.
* If any element is an empty string, the corresponding token uses the default uri.
*
*
* Requirements: If to is a multi-element array, then uris must be empty or single element array
* If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size
* If to is a single element array, uris must be empty or the same length as amounts
*
* Examples:
* mintExtensionNew(['0x....1', '0x....2'], [1], [])
* Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri.
*
* mintExtensionNew(['0x....1', '0x....2'], [1, 2], [])
* Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri.
*
* mintExtensionNew(['0x....1'], [1, 2], ["", "http://token2.com"])
* Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses "http://token2.com".
*
* @return Returns list of tokenIds minted
*/
function mintExtensionNew(address[] calldata to, uint256[] calldata amounts, string[] calldata uris) external returns (uint256[] memory);
/**
* @dev batch mint existing token from extension. Can only be called by a registered extension.
*
* @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)
* @param tokenIds - Can be a single element array (all recipients get the same token) or a multi-element array
* @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array
*
* Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays
*
* Examples:
* mintExtensionExisting(['0x....1', '0x....2'], [1], [10])
* Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'.
*
* mintExtensionExisting(['0x....1', '0x....2'], [1, 2], [10, 20])
* Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'.
*
* mintExtensionExisting(['0x....1'], [1, 2], [10, 20])
* Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'.
*
* mintExtensionExisting(['0x....1', '0x....2'], [1], [10, 20])
* Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'.
*
*/
function mintExtensionExisting(address[] calldata to, uint256[] calldata tokenIds, uint256[] calldata amounts) external;
/**
* @dev burn tokens. Can only be called by token owner or approved address.
* On burn, calls back to the registered extension's onBurn method
*/
function burn(address account, uint256[] calldata tokenIds, uint256[] calldata amounts) external;
/**
* @dev Total amount of tokens in with a given tokenId.
*/
function totalSupply(uint256 tokenId) external view returns (uint256);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* Implement this if you want your extension to approve a transfer
*/
interface IERC1155CreatorExtensionApproveTransfer is IERC165 {
/**
* @dev Set whether or not the creator contract will check the extension for approval of token transfer
*/
function setApproveTransfer(address creator, bool enabled) external;
/**
* @dev Called by creator contract to approve a transfer
*/
function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @dev Implement this if you want your extension to have overloadable royalties
*/
interface ICreatorExtensionRoyalties is IERC165 {
/**
* Get the royalties for a given creator/tokenId
*/
function getRoyalties(address creator, uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @dev Implement this if you want your extension to have overloadable URI's
*/
interface ICreatorExtensionTokenURI is IERC165 {
/**
* Get the uri for a given creator/tokenId
*/
function tokenURI(address creator, uint256 tokenId) external view returns (string memory);
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./IAdminControl.sol";
abstract contract AdminControl is Ownable, IAdminControl, ERC165 {
using EnumerableSet for EnumerableSet.AddressSet;
// Track registered admins
EnumerableSet.AddressSet private _admins;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IAdminControl).interfaceId
|| super.supportsInterface(interfaceId);
}
/**
* @dev Only allows approved admins to call the specified function
*/
modifier adminRequired() {
require(owner() == msg.sender || _admins.contains(msg.sender), "AdminControl: Must be owner or admin");
_;
}
/**
* @dev See {IAdminControl-getAdmins}.
*/
function getAdmins() external view override returns (address[] memory admins) {
admins = new address[](_admins.length());
for (uint i = 0; i < _admins.length(); i++) {
admins[i] = _admins.at(i);
}
return admins;
}
/**
* @dev See {IAdminControl-approveAdmin}.
*/
function approveAdmin(address admin) external override onlyOwner {
if (!_admins.contains(admin)) {
emit AdminApproved(admin, msg.sender);
_admins.add(admin);
}
}
/**
* @dev See {IAdminControl-revokeAdmin}.
*/
function revokeAdmin(address admin) external override onlyOwner {
if (_admins.contains(admin)) {
emit AdminRevoked(admin, msg.sender);
_admins.remove(admin);
}
}
/**
* @dev See {IAdminControl-isAdmin}.
*/
function isAdmin(address admin) public override view returns (bool) {
return (owner() == admin || _admins.contains(admin));
}
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: manifold.xyz
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @dev Interface for admin control
*/
interface IAdminControl is IERC165 {
event AdminApproved(address indexed account, address indexed sender);
event AdminRevoked(address indexed account, address indexed sender);
/**
* @dev gets address of all admins
*/
function getAdmins() external view returns (address[] memory);
/**
* @dev add an admin. Can only be called by contract owner.
*/
function approveAdmin(address admin) external;
/**
* @dev remove an admin. Can only be called by contract owner.
*/
function revokeAdmin(address admin) external;
/**
* @dev checks whether or not given address is an admin
* Returns True if they are
*/
function isAdmin(address admin) external view returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library AddressUpgradeable {
/**
* @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
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/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.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/introspection/ERC165Checker.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Library used to query support of an interface declared via {IERC165}.
*
* Note that these functions return the actual result of the query: they do not
* `revert` if an interface is not supported. It is up to the caller to decide
* what to do in these cases.
*/
library ERC165Checker {
// As per the EIP-165 spec, no interface should ever match 0xffffffff
bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;
/**
* @dev Returns true if `account` supports the {IERC165} interface.
*/
function supportsERC165(address account) internal view returns (bool) {
// Any contract that implements ERC165 must explicitly indicate support of
// InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid
return
supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) &&
!supportsERC165InterfaceUnchecked(account, _INTERFACE_ID_INVALID);
}
/**
* @dev Returns true if `account` supports the interface defined by
* `interfaceId`. Support for {IERC165} itself is queried automatically.
*
* See {IERC165-supportsInterface}.
*/
function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {
// query support of both ERC165 as per the spec and support of _interfaceId
return supportsERC165(account) && supportsERC165InterfaceUnchecked(account, interfaceId);
}
/**
* @dev Returns a boolean array where each value corresponds to the
* interfaces passed in and whether they're supported or not. This allows
* you to batch check interfaces for a contract where your expectation
* is that some interfaces may not be supported.
*
* See {IERC165-supportsInterface}.
*
* _Available since v3.4._
*/
function getSupportedInterfaces(
address account,
bytes4[] memory interfaceIds
) internal view returns (bool[] memory) {
// an array of booleans corresponding to interfaceIds and whether they're supported or not
bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);
// query support of ERC165 itself
if (supportsERC165(account)) {
// query support of each interface in interfaceIds
for (uint256 i = 0; i < interfaceIds.length; i++) {
interfaceIdsSupported[i] = supportsERC165InterfaceUnchecked(account, interfaceIds[i]);
}
}
return interfaceIdsSupported;
}
/**
* @dev Returns true if `account` supports all the interfaces defined in
* `interfaceIds`. Support for {IERC165} itself is queried automatically.
*
* Batch-querying can lead to gas savings by skipping repeated checks for
* {IERC165} support.
*
* See {IERC165-supportsInterface}.
*/
function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {
// query support of ERC165 itself
if (!supportsERC165(account)) {
return false;
}
// query support of each interface in interfaceIds
for (uint256 i = 0; i < interfaceIds.length; i++) {
if (!supportsERC165InterfaceUnchecked(account, interfaceIds[i])) {
return false;
}
}
// all interfaces supported
return true;
}
/**
* @notice Query if a contract implements an interface, does not check ERC165 support
* @param account The address of the contract to query for support of an interface
* @param interfaceId The interface identifier, as specified in ERC-165
* @return true if the contract at account indicates support of the interface with
* identifier interfaceId, false otherwise
* @dev Assumes that account contains a contract that supports ERC165, otherwise
* the behavior of this method is undefined. This precondition can be checked
* with {supportsERC165}.
*
* Some precompiled contracts will falsely indicate support for a given interface, so caution
* should be exercised when using this function.
*
* Interface identification is specified in ERC-165.
*/
function supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) {
// prepare call
bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);
// perform static call
bool success;
uint256 returnSize;
uint256 returnValue;
assembly {
success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20)
returnSize := returndatasize()
returnValue := mload(0x00)
}
return success && returnSize >= 0x20 && returnValue > 0;
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1, "Math: mulDiv overflow");
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
import "./math/Math.sol";
import "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `int256` to its ASCII `string` decimal representation.
*/
function toString(int256 value) internal pure returns (string memory) {
return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
/**
* @dev Returns true if the two strings are equal.
*/
function equal(string memory a, string memory b) internal pure returns (bool) {
return keccak256(bytes(a)) == keccak256(bytes(b));
}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.
pragma solidity ^0.8.0;
/**
* @dev Library for managing
* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
* types.
*
* Sets have the following properties:
*
* - Elements are added, removed, and checked for existence in constant time
* (O(1)).
* - Elements are enumerated in O(n). No guarantees are made on the ordering.
*
* ```solidity
* contract Example {
* // Add the library methods
* using EnumerableSet for EnumerableSet.AddressSet;
*
* // Declare a set state variable
* EnumerableSet.AddressSet private mySet;
* }
* ```
*
* As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
* and `uint256` (`UintSet`) are supported.
*
* [WARNING]
* ====
* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
* unusable.
* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
*
* In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
* array of EnumerableSet.
* ====
*/
library EnumerableSet {
// To implement this library for multiple types with as little code
// repetition as possible, we write it in terms of a generic Set type with
// bytes32 values.
// The Set implementation uses private functions, and user-facing
// implementations (such as AddressSet) are just wrappers around the
// underlying Set.
// This means that we can only create new EnumerableSets for types that fit
// in bytes32.
struct Set {
// Storage of set values
bytes32[] _values;
// Position of the value in the `values` array, plus 1 because index 0
// means a value is not in the set.
mapping(bytes32 => uint256) _indexes;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
// The value is stored at length-1, but we add 1 to all indexes
// and use 0 as a sentinel value
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function _remove(Set storage set, bytes32 value) private returns (bool) {
// We read and store the value's index to prevent multiple reads from the same storage slot
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
// Equivalent to contains(set, value)
// To delete an element from the _values array in O(1), we swap the element to delete with the last one in
// the array, and then remove the last element (sometimes called as 'swap and pop').
// This modifies the order of the array, as noted in {at}.
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
// Move the last value to the index where the value to delete is
set._values[toDeleteIndex] = lastValue;
// Update the index for the moved value
set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
}
// Delete the slot where the moved value was stored
set._values.pop();
// Delete the index for the deleted slot
delete set._indexes[value];
return true;
} else {
return false;
}
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
/**
* @dev Returns the number of values on the set. O(1).
*/
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
// Bytes32Set
struct Bytes32Set {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
bytes32[] memory store = _values(set._inner);
bytes32[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// AddressSet
struct AddressSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
// UintSet
struct UintSet {
Set _inner;
}
/**
* @dev Add a value to a set. O(1).
*
* Returns true if the value was added to the set, that is if it was not
* already present.
*/
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
/**
* @dev Removes a value from a set. O(1).
*
* Returns true if the value was removed from the set, that is if it was
* present.
*/
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
/**
* @dev Returns true if the value is in the set. O(1).
*/
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
/**
* @dev Returns the number of values in the set. O(1).
*/
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
/**
* @dev Returns the value stored at position `index` in the set. O(1).
*
* Note that there are no guarantees on the ordering of values inside the
* array, and it may change when more values are added or removed.
*
* Requirements:
*
* - `index` must be strictly less than {length}.
*/
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
/**
* @dev Return the entire set in an array
*
* WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
* to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
* this function has an unbounded cost, and using it as part of a state-changing function may render the function
* uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
*/
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
/// @solidity memory-safe-assembly
assembly {
result := store
}
return result;
}
}
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
library console {
address constant CONSOLE_ADDRESS =
0x000000000000000000636F6e736F6c652e6c6f67;
function _sendLogPayloadImplementation(bytes memory payload) internal view {
address consoleAddress = CONSOLE_ADDRESS;
/// @solidity memory-safe-assembly
assembly {
pop(
staticcall(
gas(),
consoleAddress,
add(payload, 32),
mload(payload),
0,
0
)
)
}
}
function _castToPure(
function(bytes memory) internal view fnIn
) internal pure returns (function(bytes memory) pure fnOut) {
assembly {
fnOut := fnIn
}
}
function _sendLogPayload(bytes memory payload) internal pure {
_castToPure(_sendLogPayloadImplementation)(payload);
}
function log() internal pure {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
}
function logUint(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function logString(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function logBool(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function logAddress(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function logBytes(bytes memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
}
function logBytes1(bytes1 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
}
function logBytes2(bytes2 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
}
function logBytes3(bytes3 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
}
function logBytes4(bytes4 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
}
function logBytes5(bytes5 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
}
function logBytes6(bytes6 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
}
function logBytes7(bytes7 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
}
function logBytes8(bytes8 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
}
function logBytes9(bytes9 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
}
function logBytes10(bytes10 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
}
function logBytes11(bytes11 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
}
function logBytes12(bytes12 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
}
function logBytes13(bytes13 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
}
function logBytes14(bytes14 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
}
function logBytes15(bytes15 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
}
function logBytes16(bytes16 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
}
function logBytes17(bytes17 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
}
function logBytes18(bytes18 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
}
function logBytes19(bytes19 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
}
function logBytes20(bytes20 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
}
function logBytes21(bytes21 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
}
function logBytes22(bytes22 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
}
function logBytes23(bytes23 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
}
function logBytes24(bytes24 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
}
function logBytes25(bytes25 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
}
function logBytes26(bytes26 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
}
function logBytes27(bytes27 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
}
function logBytes28(bytes28 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
}
function logBytes29(bytes29 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
}
function logBytes30(bytes30 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
}
function logBytes31(bytes31 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
}
function logBytes32(bytes32 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
}
function log(uint256 p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
}
function log(string memory p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
}
function log(bool p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
}
function log(address p0) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
}
function log(uint256 p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
}
function log(uint256 p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
}
function log(uint256 p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
}
function log(uint256 p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
}
function log(string memory p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
}
function log(string memory p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
}
function log(string memory p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
}
function log(string memory p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
}
function log(bool p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
}
function log(bool p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
}
function log(bool p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
}
function log(bool p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
}
function log(address p0, uint256 p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
}
function log(address p0, string memory p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
}
function log(address p0, bool p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
}
function log(address p0, address p1) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
}
function log(uint256 p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
}
function log(uint256 p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
}
function log(uint256 p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
}
function log(uint256 p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
}
function log(uint256 p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
}
function log(uint256 p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
}
function log(uint256 p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
}
function log(uint256 p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
}
function log(uint256 p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
}
function log(uint256 p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
}
function log(string memory p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
}
function log(string memory p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
}
function log(string memory p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
}
function log(string memory p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
}
function log(string memory p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
}
function log(string memory p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
}
function log(string memory p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
}
function log(string memory p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
}
function log(string memory p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
}
function log(string memory p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
}
function log(string memory p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
}
function log(string memory p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
}
function log(string memory p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
}
function log(bool p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
}
function log(bool p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
}
function log(bool p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
}
function log(bool p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
}
function log(bool p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
}
function log(bool p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
}
function log(bool p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
}
function log(bool p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
}
function log(bool p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
}
function log(bool p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
}
function log(bool p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
}
function log(bool p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
}
function log(bool p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
}
function log(bool p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
}
function log(bool p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
}
function log(bool p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
}
function log(address p0, uint256 p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
}
function log(address p0, uint256 p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
}
function log(address p0, uint256 p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
}
function log(address p0, uint256 p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
}
function log(address p0, string memory p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
}
function log(address p0, string memory p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
}
function log(address p0, string memory p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
}
function log(address p0, string memory p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
}
function log(address p0, bool p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
}
function log(address p0, bool p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
}
function log(address p0, bool p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
}
function log(address p0, bool p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
}
function log(address p0, address p1, uint256 p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
}
function log(address p0, address p1, string memory p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
}
function log(address p0, address p1, bool p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
}
function log(address p0, address p1, address p2) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
}
function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
}
function log(uint256 p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
}
function log(string memory p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
}
function log(bool p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3));
}
function log(address p0, uint256 p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
}
function log(address p0, string memory p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
}
function log(address p0, bool p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, uint256 p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, string memory p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, bool p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, uint256 p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, string memory p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, bool p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
}
function log(address p0, address p1, address p2, address p3) internal pure {
_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
}
}
{
"overrides": [
{
"files": "*.sol",
"options": {
"printWidth": 80,
"tabWidth": 4,
"useTabs": false,
"singleQuote": false,
"bracketSpacing": false
}
},
{
"files": "*.yml",
"options": {}
},
{
"files": "*.yaml",
"options": {}
},
{
"files": "*.toml",
"options": {}
},
{
"files": "*.json",
"options": {}
},
{
"files": "*.js",
"options": {}
},
{
"files": "*.ts",
"options": {}
}
]
}
REMIX DEFAULT WORKSPACE
Remix default workspace is present when:
i. Remix loads for the very first time
ii. A new workspace is created with 'Default' template
iii. There are no files existing in the File Explorer
This workspace contains 3 directories:
1. 'contracts': Holds three contracts with increasing levels of complexity.
2. 'scripts': Contains four typescript files to deploy a contract. It is explained below.
3. 'tests': Contains one Solidity test file for 'Ballot' contract & one JS test file for 'Storage' contract.
SCRIPTS
The 'scripts' folder has four typescript files which help to deploy the 'Storage' contract using 'web3.js' and 'ethers.js' libraries.
For the deployment of any other contract, just update the contract's name from 'Storage' to the desired contract and provide constructor arguments accordingly
in the file `deploy_with_ethers.ts` or `deploy_with_web3.ts`
In the 'tests' folder there is a script containing Mocha-Chai unit tests for 'Storage' contract.
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled.
Output from script will appear in remix terminal.
Please note, require/import is supported in a limited manner for Remix supported modules.
For now, modules supported by Remix are ethers, web3, swarmgw, chai, multihashes, remix and hardhat only for hardhat.ethers object/plugin.
For unsupported modules, an error like this will be thrown: '<module_name> module require is not supported by Remix IDE' will be shown.
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {
"@_2107": {
"entryPoint": null,
"id": 2107,
"parameterSlots": 0,
"returnSlots": 0
},
"@_msgSender_2273": {
"entryPoint": 50,
"id": 2273,
"parameterSlots": 0,
"returnSlots": 1
},
"@_transferOwnership_2195": {
"entryPoint": 58,
"id": 2195,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [],
"linkReferences": {},
"object": "608060405234801561001057600080fd5b5061002d61002261003260201b60201c565b61003a60201b60201c565b6100fe565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6114038061010d6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80636d73e669116100665780636d73e66914610159578063715018a6146101755780638da5cb5b1461017f578063e48351771461019d578063f2fde38b146101cd5761009e565b806301ffc9a7146100a35780631b95a227146100d357806324d7806c146100ef5780632d3456701461011f57806331ae450b1461013b575b600080fd5b6100bd60048036038101906100b89190610bb1565b6101e9565b6040516100ca9190610bf9565b60405180910390f35b6100ed60048036038101906100e89190610c9e565b610263565b005b61010960048036038101906101049190610cde565b6102f7565b6040516101169190610bf9565b60405180910390f35b61013960048036038101906101349190610cde565b610351565b005b6101436103e5565b6040516101509190610dc9565b60405180910390f35b610173600480360381019061016e9190610cde565b6104c7565b005b61017d61055a565b005b61018761056e565b6040516101949190610dfa565b60405180910390f35b6101b760048036038101906101b29190610e7a565b610597565b6040516101c49190610bf9565b60405180910390f35b6101e760048036038101906101e29190610cde565b610676565b005b60007f553e757e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061025c575061025b826106f9565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661028261056e565b73ffffffffffffffffffffffffffffffffffffffff1614806102b457506102b333600161076390919063ffffffff16565b5b6102f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ea90610fb9565b60405180910390fd5b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1661031861056e565b73ffffffffffffffffffffffffffffffffffffffff16148061034a575061034982600161076390919063ffffffff16565b5b9050919050565b610359610793565b61036d81600161076390919063ffffffff16565b156103e2573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d560405160405180910390a36103e081600161081190919063ffffffff16565b505b50565b60606103f16001610841565b67ffffffffffffffff81111561040a57610409610fd9565b5b6040519080825280602002602001820160405280156104385781602001602082028036833780820191505090505b50905060005b6104486001610841565b8110156104c35761046381600161085690919063ffffffff16565b82828151811061047657610475611008565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806104bb90611070565b91505061043e565b5090565b6104cf610793565b6104e381600161076390919063ffffffff16565b610557573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb160405160405180910390a361055581600161087090919063ffffffff16565b505b50565b610562610793565b61056c60006108a0565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006105a2336102f7565b6105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d89061112a565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff1663e4835177898989898989896040518863ffffffff1660e01b815260040161062697969594939291906111c5565b6020604051808303816000875af1158015610645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610669919061123f565b9050979650505050505050565b61067e610793565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e4906112de565b60405180910390fd5b6106f6816108a0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061078b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610964565b905092915050565b61079b610987565b73ffffffffffffffffffffffffffffffffffffffff166107b961056e565b73ffffffffffffffffffffffffffffffffffffffff161461080f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108069061134a565b60405180910390fd5b565b6000610839836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61098f565b905092915050565b600061084f82600001610aa3565b9050919050565b60006108658360000183610ab4565b60001c905092915050565b6000610898836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610adf565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080836001016000848152602001908152602001600020541415905092915050565b600033905090565b60008083600101600084815260200190815260200160002054905060008114610a975760006001826109c1919061136a565b90506000600186600001805490506109d9919061136a565b9050818114610a485760008660000182815481106109fa576109f9611008565b5b9060005260206000200154905080876000018481548110610a1e57610a1d611008565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480610a5c57610a5b61139e565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a9d565b60009150505b92915050565b600081600001805490509050919050565b6000826000018281548110610acc57610acb611008565b5b9060005260206000200154905092915050565b6000610aeb8383610964565b610b44578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050610b49565b600090505b92915050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610b8e81610b59565b8114610b9957600080fd5b50565b600081359050610bab81610b85565b92915050565b600060208284031215610bc757610bc6610b4f565b5b6000610bd584828501610b9c565b91505092915050565b60008115159050919050565b610bf381610bde565b82525050565b6000602082019050610c0e6000830184610bea565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c3f82610c14565b9050919050565b610c4f81610c34565b8114610c5a57600080fd5b50565b600081359050610c6c81610c46565b92915050565b610c7b81610bde565b8114610c8657600080fd5b50565b600081359050610c9881610c72565b92915050565b60008060408385031215610cb557610cb4610b4f565b5b6000610cc385828601610c5d565b9250506020610cd485828601610c89565b9150509250929050565b600060208284031215610cf457610cf3610b4f565b5b6000610d0284828501610c5d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610d4081610c34565b82525050565b6000610d528383610d37565b60208301905092915050565b6000602082019050919050565b6000610d7682610d0b565b610d808185610d16565b9350610d8b83610d27565b8060005b83811015610dbc578151610da38882610d46565b9750610dae83610d5e565b925050600181019050610d8f565b5085935050505092915050565b60006020820190508181036000830152610de38184610d6b565b905092915050565b610df481610c34565b82525050565b6000602082019050610e0f6000830184610deb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e3a57610e39610e15565b5b8235905067ffffffffffffffff811115610e5757610e56610e1a565b5b602083019150836020820283011115610e7357610e72610e1f565b5b9250929050565b600080600080600080600060a0888a031215610e9957610e98610b4f565b5b6000610ea78a828b01610c5d565b9750506020610eb88a828b01610c5d565b9650506040610ec98a828b01610c5d565b955050606088013567ffffffffffffffff811115610eea57610ee9610b54565b5b610ef68a828b01610e24565b9450945050608088013567ffffffffffffffff811115610f1957610f18610b54565b5b610f258a828b01610e24565b925092505092959891949750929550565b600082825260208201905092915050565b7f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f72206160008201527f646d696e00000000000000000000000000000000000000000000000000000000602082015250565b6000610fa3602483610f36565b9150610fae82610f47565b604082019050919050565b60006020820190508181036000830152610fd281610f96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600061107b82611066565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036110ad576110ac611037565b5b600182019050919050565b7f4f6e6c7920636f6e7472616374206f776e65722063616e207472616e7366657260008201527f2074686520746f6b656e00000000000000000000000000000000000000000000602082015250565b6000611114602a83610f36565b915061111f826110b8565b604082019050919050565b6000602082019050818103600083015261114381611107565b9050919050565b600082825260208201905092915050565b600080fd5b82818337505050565b6000611175838561114a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156111a8576111a761115b565b5b6020830292506111b9838584611160565b82840190509392505050565b600060a0820190506111da600083018a610deb565b6111e76020830189610deb565b6111f46040830188610deb565b8181036060830152611207818688611169565b9050818103608083015261121c818486611169565b905098975050505050505050565b60008151905061123981610c72565b92915050565b60006020828403121561125557611254610b4f565b5b60006112638482850161122a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006112c8602683610f36565b91506112d38261126c565b604082019050919050565b600060208201905081810360008301526112f7816112bb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611334602083610f36565b915061133f826112fe565b602082019050919050565b6000602082019050818103600083015261136381611327565b9050919050565b600061137582611066565b915061138083611066565b925082820390508181111561139857611397611037565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122025cd0236e344d3a9918ee6b5633d7ef0157c31d68373e3d96b17d5365d577fe464736f6c63430008120033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D PUSH2 0x22 PUSH2 0x32 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0x3A PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH2 0x1403 DUP1 PUSH2 0x10D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6D73E669 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x6D73E669 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0xE4835177 EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1CD JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x1B95A227 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x24D7806C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x2D345670 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x31AE450B EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0xBB1 JUMP JUMPDEST PUSH2 0x1E9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCA SWAP2 SWAP1 PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xED PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE8 SWAP2 SWAP1 PUSH2 0xC9E JUMP JUMPDEST PUSH2 0x263 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x2F7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x116 SWAP2 SWAP1 PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x139 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x134 SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x351 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x143 PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xDC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x16E SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x4C7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17D PUSH2 0x55A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x187 PUSH2 0x56E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x194 SWAP2 SWAP1 PUSH2 0xDFA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1B2 SWAP2 SWAP1 PUSH2 0xE7A JUMP JUMPDEST PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C4 SWAP2 SWAP1 PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1E2 SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x676 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0x553E757E00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x25C JUMPI POP PUSH2 0x25B DUP3 PUSH2 0x6F9 JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x282 PUSH2 0x56E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x2B4 JUMPI POP PUSH2 0x2B3 CALLER PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST JUMPDEST PUSH2 0x2F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EA SWAP1 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x318 PUSH2 0x56E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x34A JUMPI POP PUSH2 0x349 DUP3 PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x359 PUSH2 0x793 JUMP JUMPDEST PUSH2 0x36D DUP2 PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO PUSH2 0x3E2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7C0C3C84C67C85FCAC635147348BFE374C24A1A93D0366D1CFE9D8853CBF89D5 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x3E0 DUP2 PUSH1 0x1 PUSH2 0x811 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F1 PUSH1 0x1 PUSH2 0x841 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40A JUMPI PUSH2 0x409 PUSH2 0xFD9 JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x438 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x448 PUSH1 0x1 PUSH2 0x841 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x4C3 JUMPI PUSH2 0x463 DUP2 PUSH1 0x1 PUSH2 0x856 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x476 JUMPI PUSH2 0x475 PUSH2 0x1008 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP1 DUP1 PUSH2 0x4BB SWAP1 PUSH2 0x1070 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x43E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x4CF PUSH2 0x793 JUMP JUMPDEST PUSH2 0x4E3 DUP2 PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x557 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7E1A1A08D52E4BA0E21554733D66165FD5151F99460116223D9E3A608EEC5CB1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x555 DUP2 PUSH1 0x1 PUSH2 0x870 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH2 0x562 PUSH2 0x793 JUMP JUMPDEST PUSH2 0x56C PUSH1 0x0 PUSH2 0x8A0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A2 CALLER PUSH2 0x2F7 JUMP JUMPDEST PUSH2 0x5E1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5D8 SWAP1 PUSH2 0x112A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE4835177 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x626 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x11C5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x645 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x669 SWAP2 SWAP1 PUSH2 0x123F JUMP JUMPDEST SWAP1 POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x67E PUSH2 0x793 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x6ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6E4 SWAP1 PUSH2 0x12DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F6 DUP2 PUSH2 0x8A0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78B DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0x964 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x79B PUSH2 0x987 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x7B9 PUSH2 0x56E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x80F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x806 SWAP1 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x839 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0x98F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x84F DUP3 PUSH1 0x0 ADD PUSH2 0xAA3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x865 DUP4 PUSH1 0x0 ADD DUP4 PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x0 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x898 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0xADF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD EQ ISZERO SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ PUSH2 0xA97 JUMPI PUSH1 0x0 PUSH1 0x1 DUP3 PUSH2 0x9C1 SWAP2 SWAP1 PUSH2 0x136A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP PUSH2 0x9D9 SWAP2 SWAP1 PUSH2 0x136A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0xA48 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x9FA JUMPI PUSH2 0x9F9 PUSH2 0x1008 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xA1E JUMPI PUSH2 0xA1D PUSH2 0x1008 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP8 PUSH1 0x1 ADD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP JUMPDEST DUP6 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH2 0xA5C JUMPI PUSH2 0xA5B PUSH2 0x139E JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xA9D JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xACC JUMPI PUSH2 0xACB PUSH2 0x1008 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAEB DUP4 DUP4 PUSH2 0x964 JUMP JUMPDEST PUSH2 0xB44 JUMPI DUP3 PUSH1 0x0 ADD DUP3 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE DUP3 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x1 SWAP1 POP PUSH2 0xB49 JUMP JUMPDEST PUSH1 0x0 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xB8E DUP2 PUSH2 0xB59 JUMP JUMPDEST DUP2 EQ PUSH2 0xB99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBAB DUP2 PUSH2 0xB85 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBC7 JUMPI PUSH2 0xBC6 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xBD5 DUP5 DUP3 DUP6 ADD PUSH2 0xB9C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xBF3 DUP2 PUSH2 0xBDE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xC0E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xBEA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC3F DUP3 PUSH2 0xC14 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC4F DUP2 PUSH2 0xC34 JUMP JUMPDEST DUP2 EQ PUSH2 0xC5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC6C DUP2 PUSH2 0xC46 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC7B DUP2 PUSH2 0xBDE JUMP JUMPDEST DUP2 EQ PUSH2 0xC86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC98 DUP2 PUSH2 0xC72 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCB5 JUMPI PUSH2 0xCB4 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xCC3 DUP6 DUP3 DUP7 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xCD4 DUP6 DUP3 DUP7 ADD PUSH2 0xC89 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCF4 JUMPI PUSH2 0xCF3 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD02 DUP5 DUP3 DUP6 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD40 DUP2 PUSH2 0xC34 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD52 DUP4 DUP4 PUSH2 0xD37 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD76 DUP3 PUSH2 0xD0B JUMP JUMPDEST PUSH2 0xD80 DUP2 DUP6 PUSH2 0xD16 JUMP JUMPDEST SWAP4 POP PUSH2 0xD8B DUP4 PUSH2 0xD27 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDBC JUMPI DUP2 MLOAD PUSH2 0xDA3 DUP9 DUP3 PUSH2 0xD46 JUMP JUMPDEST SWAP8 POP PUSH2 0xDAE DUP4 PUSH2 0xD5E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xD8F JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xDE3 DUP2 DUP5 PUSH2 0xD6B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xDF4 DUP2 PUSH2 0xC34 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE0F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xDEB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xE3A JUMPI PUSH2 0xE39 PUSH2 0xE15 JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE57 JUMPI PUSH2 0xE56 PUSH2 0xE1A JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0xE73 JUMPI PUSH2 0xE72 PUSH2 0xE1F JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xE99 JUMPI PUSH2 0xE98 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xEA7 DUP11 DUP3 DUP12 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 PUSH2 0xEB8 DUP11 DUP3 DUP12 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 PUSH2 0xEC9 DUP11 DUP3 DUP12 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEEA JUMPI PUSH2 0xEE9 PUSH2 0xB54 JUMP JUMPDEST JUMPDEST PUSH2 0xEF6 DUP11 DUP3 DUP12 ADD PUSH2 0xE24 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF19 JUMPI PUSH2 0xF18 PUSH2 0xB54 JUMP JUMPDEST JUMPDEST PUSH2 0xF25 DUP11 DUP3 DUP12 ADD PUSH2 0xE24 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x41646D696E436F6E74726F6C3A204D757374206265206F776E6572206F722061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x646D696E00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFA3 PUSH1 0x24 DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0xFAE DUP3 PUSH2 0xF47 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xFD2 DUP2 PUSH2 0xF96 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107B DUP3 PUSH2 0x1066 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SUB PUSH2 0x10AD JUMPI PUSH2 0x10AC PUSH2 0x1037 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4F6E6C7920636F6E7472616374206F776E65722063616E207472616E73666572 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x2074686520746F6B656E00000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1114 PUSH1 0x2A DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0x111F DUP3 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1143 DUP2 PUSH2 0x1107 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1175 DUP4 DUP6 PUSH2 0x114A JUMP JUMPDEST SWAP4 POP PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x11A8 JUMPI PUSH2 0x11A7 PUSH2 0x115B JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 MUL SWAP3 POP PUSH2 0x11B9 DUP4 DUP6 DUP5 PUSH2 0x1160 JUMP JUMPDEST DUP3 DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x11DA PUSH1 0x0 DUP4 ADD DUP11 PUSH2 0xDEB JUMP JUMPDEST PUSH2 0x11E7 PUSH1 0x20 DUP4 ADD DUP10 PUSH2 0xDEB JUMP JUMPDEST PUSH2 0x11F4 PUSH1 0x40 DUP4 ADD DUP9 PUSH2 0xDEB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1207 DUP2 DUP7 DUP9 PUSH2 0x1169 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x121C DUP2 DUP5 DUP7 PUSH2 0x1169 JUMP JUMPDEST SWAP1 POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1239 DUP2 PUSH2 0xC72 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1255 JUMPI PUSH2 0x1254 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1263 DUP5 DUP3 DUP6 ADD PUSH2 0x122A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12C8 PUSH1 0x26 DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0x12D3 DUP3 PUSH2 0x126C JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12F7 DUP2 PUSH2 0x12BB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1334 PUSH1 0x20 DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0x133F DUP3 PUSH2 0x12FE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1363 DUP2 PUSH2 0x1327 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1375 DUP3 PUSH2 0x1066 JUMP JUMPDEST SWAP2 POP PUSH2 0x1380 DUP4 PUSH2 0x1066 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x1398 JUMPI PUSH2 0x1397 PUSH2 0x1037 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xCD MUL CALLDATASIZE 0xE3 PREVRANDAO 0xD3 0xA9 SWAP2 DUP15 0xE6 0xB5 PUSH4 0x3D7EF015 PUSH29 0x31D68373E3D96B17D5365D577FE464736F6C6343000812003300000000 ",
"sourceMap": "368:769:19:-:0;;;;;;;;;;;;;936:32:9;955:12;:10;;;:12;;:::i;:::-;936:18;;;:32;;:::i;:::-;368:769:19;;640:96:11;693:7;719:10;712:17;;640:96;:::o;2426:187:9:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;368:769:19:-;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@_add_3766": {
"entryPoint": 2783,
"id": 3766,
"parameterSlots": 2,
"returnSlots": 1
},
"@_at_3900": {
"entryPoint": 2740,
"id": 3900,
"parameterSlots": 2,
"returnSlots": 1
},
"@_checkOwner_2138": {
"entryPoint": 1939,
"id": 2138,
"parameterSlots": 0,
"returnSlots": 0
},
"@_contains_3869": {
"entryPoint": 2404,
"id": 3869,
"parameterSlots": 2,
"returnSlots": 1
},
"@_length_3883": {
"entryPoint": 2723,
"id": 3883,
"parameterSlots": 1,
"returnSlots": 1
},
"@_msgSender_2273": {
"entryPoint": 2439,
"id": 2273,
"parameterSlots": 0,
"returnSlots": 1
},
"@_remove_3850": {
"entryPoint": 2447,
"id": 3850,
"parameterSlots": 2,
"returnSlots": 1
},
"@_transferOwnership_2195": {
"entryPoint": 2208,
"id": 2195,
"parameterSlots": 1,
"returnSlots": 0
},
"@add_4066": {
"entryPoint": 2160,
"id": 4066,
"parameterSlots": 2,
"returnSlots": 1
},
"@approveAdmin_1657": {
"entryPoint": 1223,
"id": 1657,
"parameterSlots": 1,
"returnSlots": 0
},
"@approveTransfer_4385": {
"entryPoint": 1431,
"id": 4385,
"parameterSlots": 7,
"returnSlots": 1
},
"@at_4162": {
"entryPoint": 2134,
"id": 4162,
"parameterSlots": 2,
"returnSlots": 1
},
"@contains_4120": {
"entryPoint": 1891,
"id": 4120,
"parameterSlots": 2,
"returnSlots": 1
},
"@getAdmins_1628": {
"entryPoint": 997,
"id": 1628,
"parameterSlots": 0,
"returnSlots": 1
},
"@isAdmin_1706": {
"entryPoint": 759,
"id": 1706,
"parameterSlots": 1,
"returnSlots": 1
},
"@length_4135": {
"entryPoint": 2113,
"id": 4135,
"parameterSlots": 1,
"returnSlots": 1
},
"@owner_2124": {
"entryPoint": 1390,
"id": 2124,
"parameterSlots": 0,
"returnSlots": 1
},
"@remove_4093": {
"entryPoint": 2065,
"id": 4093,
"parameterSlots": 2,
"returnSlots": 1
},
"@renounceOwnership_2152": {
"entryPoint": 1370,
"id": 2152,
"parameterSlots": 0,
"returnSlots": 0
},
"@revokeAdmin_1685": {
"entryPoint": 849,
"id": 1685,
"parameterSlots": 1,
"returnSlots": 0
},
"@setApproveTransfer_4347": {
"entryPoint": 611,
"id": 4347,
"parameterSlots": 2,
"returnSlots": 0
},
"@supportsInterface_1564": {
"entryPoint": 489,
"id": 1564,
"parameterSlots": 1,
"returnSlots": 1
},
"@supportsInterface_2535": {
"entryPoint": 1785,
"id": 2535,
"parameterSlots": 1,
"returnSlots": 1
},
"@transferOwnership_2175": {
"entryPoint": 1654,
"id": 2175,
"parameterSlots": 1,
"returnSlots": 0
},
"abi_decode_t_address": {
"entryPoint": 3165,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_array$_t_uint256_$dyn_calldata_ptr": {
"entryPoint": 3620,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_t_bool": {
"entryPoint": 3209,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bool_fromMemory": {
"entryPoint": 4650,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bytes4": {
"entryPoint": 2972,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_address": {
"entryPoint": 3294,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_addresst_addresst_addresst_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr": {
"entryPoint": 3706,
"id": null,
"parameterSlots": 2,
"returnSlots": 7
},
"abi_decode_tuple_t_addresst_bool": {
"entryPoint": 3230,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_bool_fromMemory": {
"entryPoint": 4671,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_bytes4": {
"entryPoint": 2993,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encodeUpdatedPos_t_address_to_t_address": {
"entryPoint": 3398,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_address_to_t_address": {
"entryPoint": 3383,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_address_to_t_address_fromStack": {
"entryPoint": 3563,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack": {
"entryPoint": 3435,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack": {
"entryPoint": 4457,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_encode_t_bool_to_t_bool_fromStack": {
"entryPoint": 3050,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack": {
"entryPoint": 4795,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack": {
"entryPoint": 4903,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec_to_t_string_memory_ptr_fromStack": {
"entryPoint": 4359,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack": {
"entryPoint": 3990,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
"entryPoint": 3578,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_address_t_address_t_address_t_array$_t_uint256_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_address_t_address_t_address_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed": {
"entryPoint": 4549,
"id": null,
"parameterSlots": 8,
"returnSlots": 1
},
"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
"entryPoint": 3529,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
"entryPoint": 3065,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 4830,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 4938,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 4394,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 4025,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"array_dataslot_t_array$_t_address_$dyn_memory_ptr": {
"entryPoint": 3367,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_length_t_array$_t_address_$dyn_memory_ptr": {
"entryPoint": 3339,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_nextElement_t_array$_t_address_$dyn_memory_ptr": {
"entryPoint": 3422,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack": {
"entryPoint": 3350,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack": {
"entryPoint": 4426,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_string_memory_ptr_fromStack": {
"entryPoint": 3894,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"checked_sub_t_uint256": {
"entryPoint": 4970,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"cleanup_t_address": {
"entryPoint": 3124,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bool": {
"entryPoint": 3038,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bytes4": {
"entryPoint": 2905,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 3092,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 4198,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"copy_calldata_to_memory": {
"entryPoint": 4448,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"increment_t_uint256": {
"entryPoint": 4208,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"panic_error_0x11": {
"entryPoint": 4151,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x31": {
"entryPoint": 5022,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x32": {
"entryPoint": 4104,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x41": {
"entryPoint": 4057,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490": {
"entryPoint": 3610,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": {
"entryPoint": 3605,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef": {
"entryPoint": 3615,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": 2900,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_d0468cefdb41083d2ff66f1e66140f10c9da08cd905521a779422e76a84d11ec": {
"entryPoint": 4443,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 2895,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe": {
"entryPoint": 4716,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe": {
"entryPoint": 4862,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"store_literal_in_memory_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec": {
"entryPoint": 4280,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687": {
"entryPoint": 3911,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_address": {
"entryPoint": 3142,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_bool": {
"entryPoint": 3186,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_bytes4": {
"entryPoint": 2949,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:15802:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:20",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:20"
},
"nodeType": "YulFunctionCall",
"src": "67:9:20"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:20"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:20",
"type": ""
}
],
"src": "7:75:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:20"
},
"nodeType": "YulFunctionCall",
"src": "187:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:20"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:20"
},
"nodeType": "YulFunctionCall",
"src": "310:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:20"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "378:105:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "388:89:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "403:5:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "410:66:20",
"type": "",
"value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "399:3:20"
},
"nodeType": "YulFunctionCall",
"src": "399:78:20"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "388:7:20"
}
]
}
]
},
"name": "cleanup_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "360:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "370:7:20",
"type": ""
}
],
"src": "334:149:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "531:78:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "587:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "596:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "599:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "589:6:20"
},
"nodeType": "YulFunctionCall",
"src": "589:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "589:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "554:5:20"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "578:5:20"
}
],
"functionName": {
"name": "cleanup_t_bytes4",
"nodeType": "YulIdentifier",
"src": "561:16:20"
},
"nodeType": "YulFunctionCall",
"src": "561:23:20"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "551:2:20"
},
"nodeType": "YulFunctionCall",
"src": "551:34:20"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "544:6:20"
},
"nodeType": "YulFunctionCall",
"src": "544:42:20"
},
"nodeType": "YulIf",
"src": "541:62:20"
}
]
},
"name": "validator_revert_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "524:5:20",
"type": ""
}
],
"src": "489:120:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "666:86:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "676:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "698:6:20"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "685:12:20"
},
"nodeType": "YulFunctionCall",
"src": "685:20:20"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "676:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "740:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bytes4",
"nodeType": "YulIdentifier",
"src": "714:25:20"
},
"nodeType": "YulFunctionCall",
"src": "714:32:20"
},
"nodeType": "YulExpressionStatement",
"src": "714:32:20"
}
]
},
"name": "abi_decode_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "644:6:20",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "652:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "660:5:20",
"type": ""
}
],
"src": "615:137:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "823:262:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "869:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "871:77:20"
},
"nodeType": "YulFunctionCall",
"src": "871:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "871:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "844:7:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "853:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "840:3:20"
},
"nodeType": "YulFunctionCall",
"src": "840:23:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "865:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "836:3:20"
},
"nodeType": "YulFunctionCall",
"src": "836:32:20"
},
"nodeType": "YulIf",
"src": "833:119:20"
},
{
"nodeType": "YulBlock",
"src": "962:116:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "977:15:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "991:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "981:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1006:62:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1040:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1051:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1036:3:20"
},
"nodeType": "YulFunctionCall",
"src": "1036:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1060:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bytes4",
"nodeType": "YulIdentifier",
"src": "1016:19:20"
},
"nodeType": "YulFunctionCall",
"src": "1016:52:20"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1006:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "793:9:20",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "804:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "816:6:20",
"type": ""
}
],
"src": "758:327:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1133:48:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1143:32:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1168:5:20"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1161:6:20"
},
"nodeType": "YulFunctionCall",
"src": "1161:13:20"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1154:6:20"
},
"nodeType": "YulFunctionCall",
"src": "1154:21:20"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1143:7:20"
}
]
}
]
},
"name": "cleanup_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1115:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1125:7:20",
"type": ""
}
],
"src": "1091:90:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1246:50:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1263:3:20"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1283:5:20"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nodeType": "YulIdentifier",
"src": "1268:14:20"
},
"nodeType": "YulFunctionCall",
"src": "1268:21:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1256:6:20"
},
"nodeType": "YulFunctionCall",
"src": "1256:34:20"
},
"nodeType": "YulExpressionStatement",
"src": "1256:34:20"
}
]
},
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1234:5:20",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1241:3:20",
"type": ""
}
],
"src": "1187:109:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1394:118:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1404:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1416:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1427:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1412:3:20"
},
"nodeType": "YulFunctionCall",
"src": "1412:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1404:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1478:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1491:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1502:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1487:3:20"
},
"nodeType": "YulFunctionCall",
"src": "1487:17:20"
}
],
"functionName": {
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nodeType": "YulIdentifier",
"src": "1440:37:20"
},
"nodeType": "YulFunctionCall",
"src": "1440:65:20"
},
"nodeType": "YulExpressionStatement",
"src": "1440:65:20"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1366:9:20",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1378:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1389:4:20",
"type": ""
}
],
"src": "1302:210:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1563:81:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1573:65:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1588:5:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1595:42:20",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1584:3:20"
},
"nodeType": "YulFunctionCall",
"src": "1584:54:20"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1573:7:20"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1545:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1555:7:20",
"type": ""
}
],
"src": "1518:126:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1695:51:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1705:35:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1734:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nodeType": "YulIdentifier",
"src": "1716:17:20"
},
"nodeType": "YulFunctionCall",
"src": "1716:24:20"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1705:7:20"
}
]
}
]
},
"name": "cleanup_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1677:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1687:7:20",
"type": ""
}
],
"src": "1650:96:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1795:79:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1852:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1861:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1864:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1854:6:20"
},
"nodeType": "YulFunctionCall",
"src": "1854:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "1854:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1818:5:20"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1843:5:20"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "1825:17:20"
},
"nodeType": "YulFunctionCall",
"src": "1825:24:20"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "1815:2:20"
},
"nodeType": "YulFunctionCall",
"src": "1815:35:20"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1808:6:20"
},
"nodeType": "YulFunctionCall",
"src": "1808:43:20"
},
"nodeType": "YulIf",
"src": "1805:63:20"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1788:5:20",
"type": ""
}
],
"src": "1752:122:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1932:87:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1942:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1964:6:20"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1951:12:20"
},
"nodeType": "YulFunctionCall",
"src": "1951:20:20"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1942:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2007:5:20"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1980:26:20"
},
"nodeType": "YulFunctionCall",
"src": "1980:33:20"
},
"nodeType": "YulExpressionStatement",
"src": "1980:33:20"
}
]
},
"name": "abi_decode_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1910:6:20",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "1918:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1926:5:20",
"type": ""
}
],
"src": "1880:139:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2065:76:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2119:16:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2128:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2131:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "2121:6:20"
},
"nodeType": "YulFunctionCall",
"src": "2121:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "2121:12:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2088:5:20"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2110:5:20"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nodeType": "YulIdentifier",
"src": "2095:14:20"
},
"nodeType": "YulFunctionCall",
"src": "2095:21:20"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "2085:2:20"
},
"nodeType": "YulFunctionCall",
"src": "2085:32:20"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2078:6:20"
},
"nodeType": "YulFunctionCall",
"src": "2078:40:20"
},
"nodeType": "YulIf",
"src": "2075:60:20"
}
]
},
"name": "validator_revert_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2058:5:20",
"type": ""
}
],
"src": "2025:116:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2196:84:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2206:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2228:6:20"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "2215:12:20"
},
"nodeType": "YulFunctionCall",
"src": "2215:20:20"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2206:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2268:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bool",
"nodeType": "YulIdentifier",
"src": "2244:23:20"
},
"nodeType": "YulFunctionCall",
"src": "2244:30:20"
},
"nodeType": "YulExpressionStatement",
"src": "2244:30:20"
}
]
},
"name": "abi_decode_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2174:6:20",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "2182:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2190:5:20",
"type": ""
}
],
"src": "2147:133:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2366:388:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2412:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "2414:77:20"
},
"nodeType": "YulFunctionCall",
"src": "2414:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "2414:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2387:7:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2396:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2383:3:20"
},
"nodeType": "YulFunctionCall",
"src": "2383:23:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2408:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2379:3:20"
},
"nodeType": "YulFunctionCall",
"src": "2379:32:20"
},
"nodeType": "YulIf",
"src": "2376:119:20"
},
{
"nodeType": "YulBlock",
"src": "2505:117:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2520:15:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "2534:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2524:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2549:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2584:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2595:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2580:3:20"
},
"nodeType": "YulFunctionCall",
"src": "2580:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2604:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "2559:20:20"
},
"nodeType": "YulFunctionCall",
"src": "2559:53:20"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2549:6:20"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "2632:115:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2647:16:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "2661:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2651:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2677:60:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2709:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2720:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2705:3:20"
},
"nodeType": "YulFunctionCall",
"src": "2705:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2729:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bool",
"nodeType": "YulIdentifier",
"src": "2687:17:20"
},
"nodeType": "YulFunctionCall",
"src": "2687:50:20"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "2677:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2328:9:20",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2339:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2351:6:20",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2359:6:20",
"type": ""
}
],
"src": "2286:468:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2826:263:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2872:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "2874:77:20"
},
"nodeType": "YulFunctionCall",
"src": "2874:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "2874:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2847:7:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2856:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2843:3:20"
},
"nodeType": "YulFunctionCall",
"src": "2843:23:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2868:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2839:3:20"
},
"nodeType": "YulFunctionCall",
"src": "2839:32:20"
},
"nodeType": "YulIf",
"src": "2836:119:20"
},
{
"nodeType": "YulBlock",
"src": "2965:117:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2980:15:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "2994:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2984:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "3009:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3044:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3055:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3040:3:20"
},
"nodeType": "YulFunctionCall",
"src": "3040:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3064:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "3019:20:20"
},
"nodeType": "YulFunctionCall",
"src": "3019:53:20"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3009:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2796:9:20",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2807:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2819:6:20",
"type": ""
}
],
"src": "2760:329:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3169:40:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3180:22:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3196:5:20"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3190:5:20"
},
"nodeType": "YulFunctionCall",
"src": "3190:12:20"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3180:6:20"
}
]
}
]
},
"name": "array_length_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3152:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3162:6:20",
"type": ""
}
],
"src": "3095:114:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3326:73:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3343:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3348:6:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3336:6:20"
},
"nodeType": "YulFunctionCall",
"src": "3336:19:20"
},
"nodeType": "YulExpressionStatement",
"src": "3336:19:20"
},
{
"nodeType": "YulAssignment",
"src": "3364:29:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3383:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3388:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3379:3:20"
},
"nodeType": "YulFunctionCall",
"src": "3379:14:20"
},
"variableNames": [
{
"name": "updated_pos",
"nodeType": "YulIdentifier",
"src": "3364:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3298:3:20",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3303:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nodeType": "YulTypedName",
"src": "3314:11:20",
"type": ""
}
],
"src": "3215:184:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3477:60:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3487:11:20",
"value": {
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "3495:3:20"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "3487:4:20"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3508:22:20",
"value": {
"arguments": [
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "3520:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3525:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3516:3:20"
},
"nodeType": "YulFunctionCall",
"src": "3516:14:20"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "3508:4:20"
}
]
}
]
},
"name": "array_dataslot_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "3464:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "3472:4:20",
"type": ""
}
],
"src": "3405:132:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3598:53:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3615:3:20"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3638:5:20"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "3620:17:20"
},
"nodeType": "YulFunctionCall",
"src": "3620:24:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3608:6:20"
},
"nodeType": "YulFunctionCall",
"src": "3608:37:20"
},
"nodeType": "YulExpressionStatement",
"src": "3608:37:20"
}
]
},
"name": "abi_encode_t_address_to_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3586:5:20",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3593:3:20",
"type": ""
}
],
"src": "3543:108:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3737:99:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3781:6:20"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3789:3:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address",
"nodeType": "YulIdentifier",
"src": "3747:33:20"
},
"nodeType": "YulFunctionCall",
"src": "3747:46:20"
},
"nodeType": "YulExpressionStatement",
"src": "3747:46:20"
},
{
"nodeType": "YulAssignment",
"src": "3802:28:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3820:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3825:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3816:3:20"
},
"nodeType": "YulFunctionCall",
"src": "3816:14:20"
},
"variableNames": [
{
"name": "updatedPos",
"nodeType": "YulIdentifier",
"src": "3802:10:20"
}
]
}
]
},
"name": "abi_encodeUpdatedPos_t_address_to_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "3710:6:20",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3718:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updatedPos",
"nodeType": "YulTypedName",
"src": "3726:10:20",
"type": ""
}
],
"src": "3657:179:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3917:38:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3927:22:20",
"value": {
"arguments": [
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "3939:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3944:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3935:3:20"
},
"nodeType": "YulFunctionCall",
"src": "3935:14:20"
},
"variableNames": [
{
"name": "next",
"nodeType": "YulIdentifier",
"src": "3927:4:20"
}
]
}
]
},
"name": "array_nextElement_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "3904:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "next",
"nodeType": "YulTypedName",
"src": "3912:4:20",
"type": ""
}
],
"src": "3842:113:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4115:608:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4125:68:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4187:5:20"
}
],
"functionName": {
"name": "array_length_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulIdentifier",
"src": "4139:47:20"
},
"nodeType": "YulFunctionCall",
"src": "4139:54:20"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "4129:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "4202:93:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4283:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4288:6:20"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "4209:73:20"
},
"nodeType": "YulFunctionCall",
"src": "4209:86:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4202:3:20"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "4304:71:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4369:5:20"
}
],
"functionName": {
"name": "array_dataslot_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulIdentifier",
"src": "4319:49:20"
},
"nodeType": "YulFunctionCall",
"src": "4319:56:20"
},
"variables": [
{
"name": "baseRef",
"nodeType": "YulTypedName",
"src": "4308:7:20",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "4384:21:20",
"value": {
"name": "baseRef",
"nodeType": "YulIdentifier",
"src": "4398:7:20"
},
"variables": [
{
"name": "srcPtr",
"nodeType": "YulTypedName",
"src": "4388:6:20",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "4474:224:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4488:34:20",
"value": {
"arguments": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "4515:6:20"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "4509:5:20"
},
"nodeType": "YulFunctionCall",
"src": "4509:13:20"
},
"variables": [
{
"name": "elementValue0",
"nodeType": "YulTypedName",
"src": "4492:13:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "4535:70:20",
"value": {
"arguments": [
{
"name": "elementValue0",
"nodeType": "YulIdentifier",
"src": "4586:13:20"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4601:3:20"
}
],
"functionName": {
"name": "abi_encodeUpdatedPos_t_address_to_t_address",
"nodeType": "YulIdentifier",
"src": "4542:43:20"
},
"nodeType": "YulFunctionCall",
"src": "4542:63:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4535:3:20"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4618:70:20",
"value": {
"arguments": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "4681:6:20"
}
],
"functionName": {
"name": "array_nextElement_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulIdentifier",
"src": "4628:52:20"
},
"nodeType": "YulFunctionCall",
"src": "4628:60:20"
},
"variableNames": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "4618:6:20"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4436:1:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4439:6:20"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "4433:2:20"
},
"nodeType": "YulFunctionCall",
"src": "4433:13:20"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "4447:18:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4449:14:20",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4458:1:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4461:1:20",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4454:3:20"
},
"nodeType": "YulFunctionCall",
"src": "4454:9:20"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "4449:1:20"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "4418:14:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4420:10:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "4429:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "4424:1:20",
"type": ""
}
]
}
]
},
"src": "4414:284:20"
},
{
"nodeType": "YulAssignment",
"src": "4707:10:20",
"value": {
"name": "pos",
"nodeType": "YulIdentifier",
"src": "4714:3:20"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "4707:3:20"
}
]
}
]
},
"name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4094:5:20",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "4101:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "4110:3:20",
"type": ""
}
],
"src": "3991:732:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4877:225:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4887:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4899:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4910:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4895:3:20"
},
"nodeType": "YulFunctionCall",
"src": "4895:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4887:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4934:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4945:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4930:3:20"
},
"nodeType": "YulFunctionCall",
"src": "4930:17:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4953:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4959:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4949:3:20"
},
"nodeType": "YulFunctionCall",
"src": "4949:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4923:6:20"
},
"nodeType": "YulFunctionCall",
"src": "4923:47:20"
},
"nodeType": "YulExpressionStatement",
"src": "4923:47:20"
},
{
"nodeType": "YulAssignment",
"src": "4979:116:20",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5081:6:20"
},
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5090:4:20"
}
],
"functionName": {
"name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "4987:93:20"
},
"nodeType": "YulFunctionCall",
"src": "4987:108:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4979:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "4849:9:20",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4861:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4872:4:20",
"type": ""
}
],
"src": "4729:373:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5173:53:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "5190:3:20"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "5213:5:20"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "5195:17:20"
},
"nodeType": "YulFunctionCall",
"src": "5195:24:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5183:6:20"
},
"nodeType": "YulFunctionCall",
"src": "5183:37:20"
},
"nodeType": "YulExpressionStatement",
"src": "5183:37:20"
}
]
},
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "5161:5:20",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "5168:3:20",
"type": ""
}
],
"src": "5108:118:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5330:124:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5340:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5352:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5363:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5348:3:20"
},
"nodeType": "YulFunctionCall",
"src": "5348:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "5340:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "5420:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "5433:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5444:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5429:3:20"
},
"nodeType": "YulFunctionCall",
"src": "5429:17:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulIdentifier",
"src": "5376:43:20"
},
"nodeType": "YulFunctionCall",
"src": "5376:71:20"
},
"nodeType": "YulExpressionStatement",
"src": "5376:71:20"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "5302:9:20",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "5314:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "5325:4:20",
"type": ""
}
],
"src": "5232:222:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5549:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5566:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5569:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5559:6:20"
},
"nodeType": "YulFunctionCall",
"src": "5559:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "5559:12:20"
}
]
},
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nodeType": "YulFunctionDefinition",
"src": "5460:117:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5672:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5689:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5692:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5682:6:20"
},
"nodeType": "YulFunctionCall",
"src": "5682:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "5682:12:20"
}
]
},
"name": "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490",
"nodeType": "YulFunctionDefinition",
"src": "5583:117:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5795:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5812:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5815:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "5805:6:20"
},
"nodeType": "YulFunctionCall",
"src": "5805:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "5805:12:20"
}
]
},
"name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef",
"nodeType": "YulFunctionDefinition",
"src": "5706:117:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5936:478:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "5985:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nodeType": "YulIdentifier",
"src": "5987:77:20"
},
"nodeType": "YulFunctionCall",
"src": "5987:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "5987:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "5964:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5972:4:20",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5960:3:20"
},
"nodeType": "YulFunctionCall",
"src": "5960:17:20"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "5979:3:20"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "5956:3:20"
},
"nodeType": "YulFunctionCall",
"src": "5956:27:20"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "5949:6:20"
},
"nodeType": "YulFunctionCall",
"src": "5949:35:20"
},
"nodeType": "YulIf",
"src": "5946:122:20"
},
{
"nodeType": "YulAssignment",
"src": "6077:30:20",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6100:6:20"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "6087:12:20"
},
"nodeType": "YulFunctionCall",
"src": "6087:20:20"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6077:6:20"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6150:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490",
"nodeType": "YulIdentifier",
"src": "6152:77:20"
},
"nodeType": "YulFunctionCall",
"src": "6152:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "6152:79:20"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6122:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6130:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6119:2:20"
},
"nodeType": "YulFunctionCall",
"src": "6119:30:20"
},
"nodeType": "YulIf",
"src": "6116:117:20"
},
{
"nodeType": "YulAssignment",
"src": "6242:29:20",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6258:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6266:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6254:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6254:17:20"
},
"variableNames": [
{
"name": "arrayPos",
"nodeType": "YulIdentifier",
"src": "6242:8:20"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6325:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef",
"nodeType": "YulIdentifier",
"src": "6327:77:20"
},
"nodeType": "YulFunctionCall",
"src": "6327:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "6327:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "arrayPos",
"nodeType": "YulIdentifier",
"src": "6290:8:20"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6304:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6312:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "6300:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6300:17:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6286:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6286:32:20"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6320:3:20"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6283:2:20"
},
"nodeType": "YulFunctionCall",
"src": "6283:41:20"
},
"nodeType": "YulIf",
"src": "6280:128:20"
}
]
},
"name": "abi_decode_t_array$_t_uint256_$dyn_calldata_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "5903:6:20",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "5911:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "arrayPos",
"nodeType": "YulTypedName",
"src": "5919:8:20",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "5929:6:20",
"type": ""
}
],
"src": "5846:568:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6624:1167:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6671:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "6673:77:20"
},
"nodeType": "YulFunctionCall",
"src": "6673:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "6673:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "6645:7:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6654:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "6641:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6641:23:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6666:3:20",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "6637:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6637:33:20"
},
"nodeType": "YulIf",
"src": "6634:120:20"
},
{
"nodeType": "YulBlock",
"src": "6764:117:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6779:15:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "6793:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "6783:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "6808:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6843:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6854:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6839:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6839:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "6863:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "6818:20:20"
},
"nodeType": "YulFunctionCall",
"src": "6818:53:20"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "6808:6:20"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "6891:118:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6906:16:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "6920:2:20",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "6910:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "6936:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6971:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6982:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6967:3:20"
},
"nodeType": "YulFunctionCall",
"src": "6967:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "6991:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "6946:20:20"
},
"nodeType": "YulFunctionCall",
"src": "6946:53:20"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "6936:6:20"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "7019:118:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7034:16:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7048:2:20",
"type": "",
"value": "64"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "7038:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "7064:63:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7099:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7110:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7095:3:20"
},
"nodeType": "YulFunctionCall",
"src": "7095:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "7119:7:20"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "7074:20:20"
},
"nodeType": "YulFunctionCall",
"src": "7074:53:20"
},
"variableNames": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "7064:6:20"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "7147:313:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7162:46:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7193:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7204:2:20",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7189:3:20"
},
"nodeType": "YulFunctionCall",
"src": "7189:18:20"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "7176:12:20"
},
"nodeType": "YulFunctionCall",
"src": "7176:32:20"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "7166:6:20",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "7255:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulIdentifier",
"src": "7257:77:20"
},
"nodeType": "YulFunctionCall",
"src": "7257:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "7257:79:20"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7227:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7235:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "7224:2:20"
},
"nodeType": "YulFunctionCall",
"src": "7224:30:20"
},
"nodeType": "YulIf",
"src": "7221:117:20"
},
{
"nodeType": "YulAssignment",
"src": "7352:98:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7422:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7433:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7418:3:20"
},
"nodeType": "YulFunctionCall",
"src": "7418:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "7442:7:20"
}
],
"functionName": {
"name": "abi_decode_t_array$_t_uint256_$dyn_calldata_ptr",
"nodeType": "YulIdentifier",
"src": "7370:47:20"
},
"nodeType": "YulFunctionCall",
"src": "7370:80:20"
},
"variableNames": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "7352:6:20"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "7360:6:20"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "7470:314:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7485:47:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7516:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7527:3:20",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7512:3:20"
},
"nodeType": "YulFunctionCall",
"src": "7512:19:20"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "7499:12:20"
},
"nodeType": "YulFunctionCall",
"src": "7499:33:20"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "7489:6:20",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "7579:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulIdentifier",
"src": "7581:77:20"
},
"nodeType": "YulFunctionCall",
"src": "7581:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "7581:79:20"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7551:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7559:18:20",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "7548:2:20"
},
"nodeType": "YulFunctionCall",
"src": "7548:30:20"
},
"nodeType": "YulIf",
"src": "7545:117:20"
},
{
"nodeType": "YulAssignment",
"src": "7676:98:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7746:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7757:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7742:3:20"
},
"nodeType": "YulFunctionCall",
"src": "7742:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "7766:7:20"
}
],
"functionName": {
"name": "abi_decode_t_array$_t_uint256_$dyn_calldata_ptr",
"nodeType": "YulIdentifier",
"src": "7694:47:20"
},
"nodeType": "YulFunctionCall",
"src": "7694:80:20"
},
"variableNames": [
{
"name": "value5",
"nodeType": "YulIdentifier",
"src": "7676:6:20"
},
{
"name": "value6",
"nodeType": "YulIdentifier",
"src": "7684:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_addresst_addresst_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "6546:9:20",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "6557:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "6569:6:20",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "6577:6:20",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "6585:6:20",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "6593:6:20",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "6601:6:20",
"type": ""
},
{
"name": "value5",
"nodeType": "YulTypedName",
"src": "6609:6:20",
"type": ""
},
{
"name": "value6",
"nodeType": "YulTypedName",
"src": "6617:6:20",
"type": ""
}
],
"src": "6420:1371:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7893:73:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7910:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "7915:6:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7903:6:20"
},
"nodeType": "YulFunctionCall",
"src": "7903:19:20"
},
"nodeType": "YulExpressionStatement",
"src": "7903:19:20"
},
{
"nodeType": "YulAssignment",
"src": "7931:29:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7950:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7955:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7946:3:20"
},
"nodeType": "YulFunctionCall",
"src": "7946:14:20"
},
"variableNames": [
{
"name": "updated_pos",
"nodeType": "YulIdentifier",
"src": "7931:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "7865:3:20",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "7870:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nodeType": "YulTypedName",
"src": "7881:11:20",
"type": ""
}
],
"src": "7797:169:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8078:117:20",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "8100:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8108:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8096:3:20"
},
"nodeType": "YulFunctionCall",
"src": "8096:14:20"
},
{
"hexValue": "41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f722061",
"kind": "string",
"nodeType": "YulLiteral",
"src": "8112:34:20",
"type": "",
"value": "AdminControl: Must be owner or a"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8089:6:20"
},
"nodeType": "YulFunctionCall",
"src": "8089:58:20"
},
"nodeType": "YulExpressionStatement",
"src": "8089:58:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "8168:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8176:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8164:3:20"
},
"nodeType": "YulFunctionCall",
"src": "8164:15:20"
},
{
"hexValue": "646d696e",
"kind": "string",
"nodeType": "YulLiteral",
"src": "8181:6:20",
"type": "",
"value": "dmin"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8157:6:20"
},
"nodeType": "YulFunctionCall",
"src": "8157:31:20"
},
"nodeType": "YulExpressionStatement",
"src": "8157:31:20"
}
]
},
"name": "store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "8070:6:20",
"type": ""
}
],
"src": "7972:223:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8347:220:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "8357:74:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8423:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8428:2:20",
"type": "",
"value": "36"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "8364:58:20"
},
"nodeType": "YulFunctionCall",
"src": "8364:67:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8357:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8529:3:20"
}
],
"functionName": {
"name": "store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687",
"nodeType": "YulIdentifier",
"src": "8440:88:20"
},
"nodeType": "YulFunctionCall",
"src": "8440:93:20"
},
"nodeType": "YulExpressionStatement",
"src": "8440:93:20"
},
{
"nodeType": "YulAssignment",
"src": "8542:19:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8553:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8558:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8549:3:20"
},
"nodeType": "YulFunctionCall",
"src": "8549:12:20"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "8542:3:20"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "8335:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "8343:3:20",
"type": ""
}
],
"src": "8201:366:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8744:248:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "8754:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8766:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8777:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8762:3:20"
},
"nodeType": "YulFunctionCall",
"src": "8762:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8754:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8801:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8812:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8797:3:20"
},
"nodeType": "YulFunctionCall",
"src": "8797:17:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8820:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8826:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "8816:3:20"
},
"nodeType": "YulFunctionCall",
"src": "8816:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8790:6:20"
},
"nodeType": "YulFunctionCall",
"src": "8790:47:20"
},
"nodeType": "YulExpressionStatement",
"src": "8790:47:20"
},
{
"nodeType": "YulAssignment",
"src": "8846:139:20",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8980:4:20"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "8854:124:20"
},
"nodeType": "YulFunctionCall",
"src": "8854:131:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "8846:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "8724:9:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "8739:4:20",
"type": ""
}
],
"src": "8573:419:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9026:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9043:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9046:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9036:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9036:88:20"
},
"nodeType": "YulExpressionStatement",
"src": "9036:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9140:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9143:4:20",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9133:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9133:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "9133:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9164:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9167:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "9157:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9157:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "9157:15:20"
}
]
},
"name": "panic_error_0x41",
"nodeType": "YulFunctionDefinition",
"src": "8998:180:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9212:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9229:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9232:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9222:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9222:88:20"
},
"nodeType": "YulExpressionStatement",
"src": "9222:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9326:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9329:4:20",
"type": "",
"value": "0x32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9319:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9319:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "9319:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9350:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9353:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "9343:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9343:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "9343:15:20"
}
]
},
"name": "panic_error_0x32",
"nodeType": "YulFunctionDefinition",
"src": "9184:180:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9398:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9415:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9418:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9408:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9408:88:20"
},
"nodeType": "YulExpressionStatement",
"src": "9408:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9512:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9515:4:20",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9505:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9505:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "9505:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9536:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9539:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "9529:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9529:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "9529:15:20"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "9370:180:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9601:32:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9611:16:20",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "9622:5:20"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "9611:7:20"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "9583:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "9593:7:20",
"type": ""
}
],
"src": "9556:77:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9682:190:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9692:33:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9719:5:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "9701:17:20"
},
"nodeType": "YulFunctionCall",
"src": "9701:24:20"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9692:5:20"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "9815:22:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "9817:16:20"
},
"nodeType": "YulFunctionCall",
"src": "9817:18:20"
},
"nodeType": "YulExpressionStatement",
"src": "9817:18:20"
}
]
},
"condition": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9740:5:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9747:66:20",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "9737:2:20"
},
"nodeType": "YulFunctionCall",
"src": "9737:77:20"
},
"nodeType": "YulIf",
"src": "9734:103:20"
},
{
"nodeType": "YulAssignment",
"src": "9846:20:20",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9857:5:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9864:1:20",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9853:3:20"
},
"nodeType": "YulFunctionCall",
"src": "9853:13:20"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "9846:3:20"
}
]
}
]
},
"name": "increment_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "9668:5:20",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "9678:3:20",
"type": ""
}
],
"src": "9639:233:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9984:123:20",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "10006:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10014:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10002:3:20"
},
"nodeType": "YulFunctionCall",
"src": "10002:14:20"
},
{
"hexValue": "4f6e6c7920636f6e7472616374206f776e65722063616e207472616e73666572",
"kind": "string",
"nodeType": "YulLiteral",
"src": "10018:34:20",
"type": "",
"value": "Only contract owner can transfer"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9995:6:20"
},
"nodeType": "YulFunctionCall",
"src": "9995:58:20"
},
"nodeType": "YulExpressionStatement",
"src": "9995:58:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "10074:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10082:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10070:3:20"
},
"nodeType": "YulFunctionCall",
"src": "10070:15:20"
},
{
"hexValue": "2074686520746f6b656e",
"kind": "string",
"nodeType": "YulLiteral",
"src": "10087:12:20",
"type": "",
"value": " the token"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10063:6:20"
},
"nodeType": "YulFunctionCall",
"src": "10063:37:20"
},
"nodeType": "YulExpressionStatement",
"src": "10063:37:20"
}
]
},
"name": "store_literal_in_memory_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "9976:6:20",
"type": ""
}
],
"src": "9878:229:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10259:220:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "10269:74:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10335:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10340:2:20",
"type": "",
"value": "42"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "10276:58:20"
},
"nodeType": "YulFunctionCall",
"src": "10276:67:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10269:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10441:3:20"
}
],
"functionName": {
"name": "store_literal_in_memory_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec",
"nodeType": "YulIdentifier",
"src": "10352:88:20"
},
"nodeType": "YulFunctionCall",
"src": "10352:93:20"
},
"nodeType": "YulExpressionStatement",
"src": "10352:93:20"
},
{
"nodeType": "YulAssignment",
"src": "10454:19:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "10465:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10470:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10461:3:20"
},
"nodeType": "YulFunctionCall",
"src": "10461:12:20"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "10454:3:20"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "10247:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "10255:3:20",
"type": ""
}
],
"src": "10113:366:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10656:248:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "10666:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10678:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10689:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10674:3:20"
},
"nodeType": "YulFunctionCall",
"src": "10674:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10666:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10713:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10724:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10709:3:20"
},
"nodeType": "YulFunctionCall",
"src": "10709:17:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10732:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "10738:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "10728:3:20"
},
"nodeType": "YulFunctionCall",
"src": "10728:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10702:6:20"
},
"nodeType": "YulFunctionCall",
"src": "10702:47:20"
},
"nodeType": "YulExpressionStatement",
"src": "10702:47:20"
},
{
"nodeType": "YulAssignment",
"src": "10758:139:20",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10892:4:20"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "10766:124:20"
},
"nodeType": "YulFunctionCall",
"src": "10766:131:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "10758:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "10636:9:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "10651:4:20",
"type": ""
}
],
"src": "10485:419:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11021:73:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11038:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11043:6:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11031:6:20"
},
"nodeType": "YulFunctionCall",
"src": "11031:19:20"
},
"nodeType": "YulExpressionStatement",
"src": "11031:19:20"
},
{
"nodeType": "YulAssignment",
"src": "11059:29:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11078:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11083:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11074:3:20"
},
"nodeType": "YulFunctionCall",
"src": "11074:14:20"
},
"variableNames": [
{
"name": "updated_pos",
"nodeType": "YulIdentifier",
"src": "11059:11:20"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "10993:3:20",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "10998:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nodeType": "YulTypedName",
"src": "11009:11:20",
"type": ""
}
],
"src": "10910:184:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11189:28:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11206:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11209:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "11199:6:20"
},
"nodeType": "YulFunctionCall",
"src": "11199:12:20"
},
"nodeType": "YulExpressionStatement",
"src": "11199:12:20"
}
]
},
"name": "revert_error_d0468cefdb41083d2ff66f1e66140f10c9da08cd905521a779422e76a84d11ec",
"nodeType": "YulFunctionDefinition",
"src": "11100:117:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11274:47:20",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "11297:3:20"
},
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "11302:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11307:6:20"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "11284:12:20"
},
"nodeType": "YulFunctionCall",
"src": "11284:30:20"
},
"nodeType": "YulExpressionStatement",
"src": "11284:30:20"
}
]
},
"name": "copy_calldata_to_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "11256:3:20",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "11261:3:20",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "11266:6:20",
"type": ""
}
],
"src": "11223:98:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11489:405:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11499:93:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11580:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11585:6:20"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "11506:73:20"
},
"nodeType": "YulFunctionCall",
"src": "11506:86:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11499:3:20"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "11684:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_d0468cefdb41083d2ff66f1e66140f10c9da08cd905521a779422e76a84d11ec",
"nodeType": "YulIdentifier",
"src": "11686:77:20"
},
"nodeType": "YulFunctionCall",
"src": "11686:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "11686:79:20"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11608:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11616:66:20",
"type": "",
"value": "0x07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "11605:2:20"
},
"nodeType": "YulFunctionCall",
"src": "11605:78:20"
},
"nodeType": "YulIf",
"src": "11602:165:20"
},
{
"nodeType": "YulAssignment",
"src": "11776:27:20",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11790:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11798:4:20",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "11786:3:20"
},
"nodeType": "YulFunctionCall",
"src": "11786:17:20"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11776:6:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "11837:5:20"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11844:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11849:6:20"
}
],
"functionName": {
"name": "copy_calldata_to_memory",
"nodeType": "YulIdentifier",
"src": "11813:23:20"
},
"nodeType": "YulFunctionCall",
"src": "11813:43:20"
},
"nodeType": "YulExpressionStatement",
"src": "11813:43:20"
},
{
"nodeType": "YulAssignment",
"src": "11865:23:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11876:3:20"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11881:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11872:3:20"
},
"nodeType": "YulFunctionCall",
"src": "11872:16:20"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "11865:3:20"
}
]
}
]
},
"name": "abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "start",
"nodeType": "YulTypedName",
"src": "11462:5:20",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "11469:6:20",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "11477:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "11485:3:20",
"type": ""
}
],
"src": "11357:537:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12230:676:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12240:27:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12252:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12263:3:20",
"type": "",
"value": "160"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12248:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12248:19:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12240:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "12321:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12334:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12345:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12330:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12330:17:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulIdentifier",
"src": "12277:43:20"
},
"nodeType": "YulFunctionCall",
"src": "12277:71:20"
},
"nodeType": "YulExpressionStatement",
"src": "12277:71:20"
},
{
"expression": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "12402:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12415:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12426:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12411:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12411:18:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulIdentifier",
"src": "12358:43:20"
},
"nodeType": "YulFunctionCall",
"src": "12358:72:20"
},
"nodeType": "YulExpressionStatement",
"src": "12358:72:20"
},
{
"expression": {
"arguments": [
{
"name": "value2",
"nodeType": "YulIdentifier",
"src": "12484:6:20"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12497:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12508:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12493:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12493:18:20"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulIdentifier",
"src": "12440:43:20"
},
"nodeType": "YulFunctionCall",
"src": "12440:72:20"
},
"nodeType": "YulExpressionStatement",
"src": "12440:72:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12533:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12544:2:20",
"type": "",
"value": "96"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12529:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12529:18:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12553:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12559:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "12549:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12549:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12522:6:20"
},
"nodeType": "YulFunctionCall",
"src": "12522:48:20"
},
"nodeType": "YulExpressionStatement",
"src": "12522:48:20"
},
{
"nodeType": "YulAssignment",
"src": "12579:126:20",
"value": {
"arguments": [
{
"name": "value3",
"nodeType": "YulIdentifier",
"src": "12683:6:20"
},
{
"name": "value4",
"nodeType": "YulIdentifier",
"src": "12691:6:20"
},
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12700:4:20"
}
],
"functionName": {
"name": "abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "12587:95:20"
},
"nodeType": "YulFunctionCall",
"src": "12587:118:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12579:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12726:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12737:3:20",
"type": "",
"value": "128"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12722:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12722:19:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12747:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "12753:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "12743:3:20"
},
"nodeType": "YulFunctionCall",
"src": "12743:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12715:6:20"
},
"nodeType": "YulFunctionCall",
"src": "12715:49:20"
},
"nodeType": "YulExpressionStatement",
"src": "12715:49:20"
},
{
"nodeType": "YulAssignment",
"src": "12773:126:20",
"value": {
"arguments": [
{
"name": "value5",
"nodeType": "YulIdentifier",
"src": "12877:6:20"
},
{
"name": "value6",
"nodeType": "YulIdentifier",
"src": "12885:6:20"
},
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12894:4:20"
}
],
"functionName": {
"name": "abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "12781:95:20"
},
"nodeType": "YulFunctionCall",
"src": "12781:118:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "12773:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_address_t_address_t_address_t_array$_t_uint256_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_address_t_address_t_address_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "12154:9:20",
"type": ""
},
{
"name": "value6",
"nodeType": "YulTypedName",
"src": "12166:6:20",
"type": ""
},
{
"name": "value5",
"nodeType": "YulTypedName",
"src": "12174:6:20",
"type": ""
},
{
"name": "value4",
"nodeType": "YulTypedName",
"src": "12182:6:20",
"type": ""
},
{
"name": "value3",
"nodeType": "YulTypedName",
"src": "12190:6:20",
"type": ""
},
{
"name": "value2",
"nodeType": "YulTypedName",
"src": "12198:6:20",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "12206:6:20",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "12214:6:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "12225:4:20",
"type": ""
}
],
"src": "11900:1006:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12972:77:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12982:22:20",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "12997:6:20"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "12991:5:20"
},
"nodeType": "YulFunctionCall",
"src": "12991:13:20"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12982:5:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "13037:5:20"
}
],
"functionName": {
"name": "validator_revert_t_bool",
"nodeType": "YulIdentifier",
"src": "13013:23:20"
},
"nodeType": "YulFunctionCall",
"src": "13013:30:20"
},
"nodeType": "YulExpressionStatement",
"src": "13013:30:20"
}
]
},
"name": "abi_decode_t_bool_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "12950:6:20",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "12958:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12966:5:20",
"type": ""
}
],
"src": "12912:137:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13129:271:20",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "13175:83:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "13177:77:20"
},
"nodeType": "YulFunctionCall",
"src": "13177:79:20"
},
"nodeType": "YulExpressionStatement",
"src": "13177:79:20"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "13150:7:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13159:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "13146:3:20"
},
"nodeType": "YulFunctionCall",
"src": "13146:23:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13171:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "13142:3:20"
},
"nodeType": "YulFunctionCall",
"src": "13142:32:20"
},
"nodeType": "YulIf",
"src": "13139:119:20"
},
{
"nodeType": "YulBlock",
"src": "13268:125:20",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "13283:15:20",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "13297:1:20",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "13287:6:20",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "13312:71:20",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "13355:9:20"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "13366:6:20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13351:3:20"
},
"nodeType": "YulFunctionCall",
"src": "13351:22:20"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "13375:7:20"
}
],
"functionName": {
"name": "abi_decode_t_bool_fromMemory",
"nodeType": "YulIdentifier",
"src": "13322:28:20"
},
"nodeType": "YulFunctionCall",
"src": "13322:61:20"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "13312:6:20"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bool_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "13099:9:20",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "13110:7:20",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "13122:6:20",
"type": ""
}
],
"src": "13055:345:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13512:119:20",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "13534:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13542:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13530:3:20"
},
"nodeType": "YulFunctionCall",
"src": "13530:14:20"
},
{
"hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
"kind": "string",
"nodeType": "YulLiteral",
"src": "13546:34:20",
"type": "",
"value": "Ownable: new owner is the zero a"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13523:6:20"
},
"nodeType": "YulFunctionCall",
"src": "13523:58:20"
},
"nodeType": "YulExpressionStatement",
"src": "13523:58:20"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "13602:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13610:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13598:3:20"
},
"nodeType": "YulFunctionCall",
"src": "13598:15:20"
},
{
"hexValue": "646472657373",
"kind": "string",
"nodeType": "YulLiteral",
"src": "13615:8:20",
"type": "",
"value": "ddress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "13591:6:20"
},
"nodeType": "YulFunctionCall",
"src": "13591:33:20"
},
"nodeType": "YulExpressionStatement",
"src": "13591:33:20"
}
]
},
"name": "store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "13504:6:20",
"type": ""
}
],
"src": "13406:225:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13783:220:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "13793:74:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "13859:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13864:2:20",
"type": "",
"value": "38"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "13800:58:20"
},
"nodeType": "YulFunctionCall",
"src": "13800:67:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "13793:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "13965:3:20"
}
],
"functionName": {
"name": "store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
"nodeType": "YulIdentifier",
"src": "13876:88:20"
},
"nodeType": "YulFunctionCall",
"src": "13876:93:20"
},
"nodeType": "YulExpressionStatement",
"src": "13876:93:20"
},
{
"nodeType": "YulAssignment",
"src": "13978:19:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "13989:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13994:2:20",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13985:3:20"
},
"nodeType": "YulFunctionCall",
"src": "13985:12:20"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "13978:3:20"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "13771:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "13779:3:20",
"type": ""
}
],
"src": "13637:366:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14180:248:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "14190:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14202:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14213:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14198:3:20"
},
"nodeType": "YulFunctionCall",
"src": "14198:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "14190:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14237:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14248:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14233:3:20"
},
"nodeType": "YulFunctionCall",
"src": "14233:17:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "14256:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "14262:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "14252:3:20"
},
"nodeType": "YulFunctionCall",
"src": "14252:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14226:6:20"
},
"nodeType": "YulFunctionCall",
"src": "14226:47:20"
},
"nodeType": "YulExpressionStatement",
"src": "14226:47:20"
},
{
"nodeType": "YulAssignment",
"src": "14282:139:20",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "14416:4:20"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "14290:124:20"
},
"nodeType": "YulFunctionCall",
"src": "14290:131:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "14282:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "14160:9:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "14175:4:20",
"type": ""
}
],
"src": "14009:419:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14540:76:20",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "14562:6:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14570:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14558:3:20"
},
"nodeType": "YulFunctionCall",
"src": "14558:14:20"
},
{
"hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
"kind": "string",
"nodeType": "YulLiteral",
"src": "14574:34:20",
"type": "",
"value": "Ownable: caller is not the owner"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "14551:6:20"
},
"nodeType": "YulFunctionCall",
"src": "14551:58:20"
},
"nodeType": "YulExpressionStatement",
"src": "14551:58:20"
}
]
},
"name": "store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "14532:6:20",
"type": ""
}
],
"src": "14434:182:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14768:220:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "14778:74:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "14844:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14849:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "14785:58:20"
},
"nodeType": "YulFunctionCall",
"src": "14785:67:20"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "14778:3:20"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "14950:3:20"
}
],
"functionName": {
"name": "store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
"nodeType": "YulIdentifier",
"src": "14861:88:20"
},
"nodeType": "YulFunctionCall",
"src": "14861:93:20"
},
"nodeType": "YulExpressionStatement",
"src": "14861:93:20"
},
{
"nodeType": "YulAssignment",
"src": "14963:19:20",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "14974:3:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14979:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14970:3:20"
},
"nodeType": "YulFunctionCall",
"src": "14970:12:20"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "14963:3:20"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "14756:3:20",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "14764:3:20",
"type": ""
}
],
"src": "14622:366:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "15165:248:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "15175:26:20",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15187:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15198:2:20",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15183:3:20"
},
"nodeType": "YulFunctionCall",
"src": "15183:18:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15175:4:20"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15222:9:20"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15233:1:20",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15218:3:20"
},
"nodeType": "YulFunctionCall",
"src": "15218:17:20"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15241:4:20"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "15247:9:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "15237:3:20"
},
"nodeType": "YulFunctionCall",
"src": "15237:20:20"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15211:6:20"
},
"nodeType": "YulFunctionCall",
"src": "15211:47:20"
},
"nodeType": "YulExpressionStatement",
"src": "15211:47:20"
},
{
"nodeType": "YulAssignment",
"src": "15267:139:20",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15401:4:20"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "15275:124:20"
},
"nodeType": "YulFunctionCall",
"src": "15275:131:20"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "15267:4:20"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "15145:9:20",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "15160:4:20",
"type": ""
}
],
"src": "14994:419:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "15464:149:20",
"statements": [
{
"nodeType": "YulAssignment",
"src": "15474:25:20",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "15497:1:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "15479:17:20"
},
"nodeType": "YulFunctionCall",
"src": "15479:20:20"
},
"variableNames": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "15474:1:20"
}
]
},
{
"nodeType": "YulAssignment",
"src": "15508:25:20",
"value": {
"arguments": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "15531:1:20"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "15513:17:20"
},
"nodeType": "YulFunctionCall",
"src": "15513:20:20"
},
"variableNames": [
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "15508:1:20"
}
]
},
{
"nodeType": "YulAssignment",
"src": "15542:17:20",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "15554:1:20"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "15557:1:20"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "15550:3:20"
},
"nodeType": "YulFunctionCall",
"src": "15550:9:20"
},
"variableNames": [
{
"name": "diff",
"nodeType": "YulIdentifier",
"src": "15542:4:20"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "15584:22:20",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "15586:16:20"
},
"nodeType": "YulFunctionCall",
"src": "15586:18:20"
},
"nodeType": "YulExpressionStatement",
"src": "15586:18:20"
}
]
},
"condition": {
"arguments": [
{
"name": "diff",
"nodeType": "YulIdentifier",
"src": "15575:4:20"
},
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "15581:1:20"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "15572:2:20"
},
"nodeType": "YulFunctionCall",
"src": "15572:11:20"
},
"nodeType": "YulIf",
"src": "15569:37:20"
}
]
},
"name": "checked_sub_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "x",
"nodeType": "YulTypedName",
"src": "15450:1:20",
"type": ""
},
{
"name": "y",
"nodeType": "YulTypedName",
"src": "15453:1:20",
"type": ""
}
],
"returnVariables": [
{
"name": "diff",
"nodeType": "YulTypedName",
"src": "15459:4:20",
"type": ""
}
],
"src": "15419:194:20"
},
{
"body": {
"nodeType": "YulBlock",
"src": "15647:152:20",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15664:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15667:77:20",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15657:6:20"
},
"nodeType": "YulFunctionCall",
"src": "15657:88:20"
},
"nodeType": "YulExpressionStatement",
"src": "15657:88:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15761:1:20",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15764:4:20",
"type": "",
"value": "0x31"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "15754:6:20"
},
"nodeType": "YulFunctionCall",
"src": "15754:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "15754:15:20"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15785:1:20",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15788:4:20",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "15778:6:20"
},
"nodeType": "YulFunctionCall",
"src": "15778:15:20"
},
"nodeType": "YulExpressionStatement",
"src": "15778:15:20"
}
]
},
"name": "panic_error_0x31",
"nodeType": "YulFunctionDefinition",
"src": "15619:180:20"
}
]
},
"contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_bytes4(value) -> cleaned {\n cleaned := and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000)\n }\n\n function validator_revert_t_bytes4(value) {\n if iszero(eq(value, cleanup_t_bytes4(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bytes4(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bytes4(value)\n }\n\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bytes4(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_bool(value) -> cleaned {\n cleaned := iszero(iszero(value))\n }\n\n function abi_encode_t_bool_to_t_bool_fromStack(value, pos) {\n mstore(pos, cleanup_t_bool(value))\n }\n\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_bool_to_t_bool_fromStack(value0, add(headStart, 0))\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function validator_revert_t_address(value) {\n if iszero(eq(value, cleanup_t_address(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_address(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n\n function validator_revert_t_bool(value) {\n if iszero(eq(value, cleanup_t_bool(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_bool(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1 {\n if slt(sub(dataEnd, headStart), 64) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_bool(add(headStart, offset), dataEnd)\n }\n\n }\n\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_length_t_array$_t_address_$dyn_memory_ptr(value) -> length {\n\n length := mload(value)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function array_dataslot_t_array$_t_address_$dyn_memory_ptr(ptr) -> data {\n data := ptr\n\n data := add(ptr, 0x20)\n\n }\n\n function abi_encode_t_address_to_t_address(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encodeUpdatedPos_t_address_to_t_address(value0, pos) -> updatedPos {\n abi_encode_t_address_to_t_address(value0, pos)\n updatedPos := add(pos, 0x20)\n }\n\n function array_nextElement_t_array$_t_address_$dyn_memory_ptr(ptr) -> next {\n next := add(ptr, 0x20)\n }\n\n // address[] -> address[]\n function abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value, pos) -> end {\n let length := array_length_t_array$_t_address_$dyn_memory_ptr(value)\n pos := array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack(pos, length)\n let baseRef := array_dataslot_t_array$_t_address_$dyn_memory_ptr(value)\n let srcPtr := baseRef\n for { let i := 0 } lt(i, length) { i := add(i, 1) }\n {\n let elementValue0 := mload(srcPtr)\n pos := abi_encodeUpdatedPos_t_address_to_t_address(elementValue0, pos)\n srcPtr := array_nextElement_t_array$_t_address_$dyn_memory_ptr(srcPtr)\n }\n end := pos\n }\n\n function abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack(value0, tail)\n\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n }\n\n function revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() {\n revert(0, 0)\n }\n\n function revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() {\n revert(0, 0)\n }\n\n function revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() {\n revert(0, 0)\n }\n\n // uint256[]\n function abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(offset, end) -> arrayPos, length {\n if iszero(slt(add(offset, 0x1f), end)) { revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d() }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert_error_15abf5612cd996bc235ba1e55a4a30ac60e6bb601ff7ba4ad3f179b6be8d0490() }\n arrayPos := add(offset, 0x20)\n if gt(add(arrayPos, mul(length, 0x20)), end) { revert_error_81385d8c0b31fffe14be1da910c8bd3a80be4cfa248e04f42ec0faea3132a8ef() }\n }\n\n function abi_decode_tuple_t_addresst_addresst_addresst_array$_t_uint256_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5, value6 {\n if slt(sub(dataEnd, headStart), 160) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 32\n\n value1 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := 64\n\n value2 := abi_decode_t_address(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value3, value4 := abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n }\n\n {\n\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() }\n\n value5, value6 := abi_decode_t_array$_t_uint256_$dyn_calldata_ptr(add(headStart, offset), dataEnd)\n }\n\n }\n\n function array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687(memPtr) {\n\n mstore(add(memPtr, 0), \"AdminControl: Must be owner or a\")\n\n mstore(add(memPtr, 32), \"dmin\")\n\n }\n\n function abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 36)\n store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function panic_error_0x41() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n\n function panic_error_0x32() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function increment_t_uint256(value) -> ret {\n value := cleanup_t_uint256(value)\n if eq(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { panic_error_0x11() }\n ret := add(value, 1)\n }\n\n function store_literal_in_memory_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec(memPtr) {\n\n mstore(add(memPtr, 0), \"Only contract owner can transfer\")\n\n mstore(add(memPtr, 32), \" the token\")\n\n }\n\n function abi_encode_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 42)\n store_literal_in_memory_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_b574197fd70aa6a4a8375ebfd79f1ece2bdefa1e53c30a03158facfdf825abec_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack(pos, length) -> updated_pos {\n mstore(pos, length)\n updated_pos := add(pos, 0x20)\n }\n\n function revert_error_d0468cefdb41083d2ff66f1e66140f10c9da08cd905521a779422e76a84d11ec() {\n revert(0, 0)\n }\n\n function copy_calldata_to_memory(src, dst, length) {\n calldatacopy(dst, src, length)\n\n }\n\n // uint256[] -> uint256[]\n function abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack(start, length, pos) -> end {\n pos := array_storeLengthForEncoding_t_array$_t_uint256_$dyn_memory_ptr_fromStack(pos, length)\n\n if gt(length, 0x07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) { revert_error_d0468cefdb41083d2ff66f1e66140f10c9da08cd905521a779422e76a84d11ec() }\n length := mul(length, 0x20)\n\n copy_calldata_to_memory(start, pos, length)\n end := add(pos, length)\n }\n\n function abi_encode_tuple_t_address_t_address_t_address_t_array$_t_uint256_$dyn_calldata_ptr_t_array$_t_uint256_$dyn_calldata_ptr__to_t_address_t_address_t_address_t_array$_t_uint256_$dyn_memory_ptr_t_array$_t_uint256_$dyn_memory_ptr__fromStack_reversed(headStart , value6, value5, value4, value3, value2, value1, value0) -> tail {\n tail := add(headStart, 160)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_address_to_t_address_fromStack(value1, add(headStart, 32))\n\n abi_encode_t_address_to_t_address_fromStack(value2, add(headStart, 64))\n\n mstore(add(headStart, 96), sub(tail, headStart))\n tail := abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack(value3, value4, tail)\n\n mstore(add(headStart, 128), sub(tail, headStart))\n tail := abi_encode_t_array$_t_uint256_$dyn_calldata_ptr_to_t_array$_t_uint256_$dyn_memory_ptr_fromStack(value5, value6, tail)\n\n }\n\n function abi_decode_t_bool_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_bool_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(memPtr) {\n\n mstore(add(memPtr, 0), \"Ownable: new owner is the zero a\")\n\n mstore(add(memPtr, 32), \"ddress\")\n\n }\n\n function abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 38)\n store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe(pos)\n end := add(pos, 64)\n }\n\n function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(memPtr) {\n\n mstore(add(memPtr, 0), \"Ownable: caller is not the owner\")\n\n }\n\n function abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack(pos) -> end {\n pos := array_storeLengthForEncoding_t_string_memory_ptr_fromStack(pos, 32)\n store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe(pos)\n end := add(pos, 32)\n }\n\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart ) -> tail {\n tail := add(headStart, 32)\n\n mstore(add(headStart, 0), sub(tail, headStart))\n tail := abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack( tail)\n\n }\n\n function checked_sub_t_uint256(x, y) -> diff {\n x := cleanup_t_uint256(x)\n y := cleanup_t_uint256(y)\n diff := sub(x, y)\n\n if gt(diff, x) { panic_error_0x11() }\n\n }\n\n function panic_error_0x31() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x31)\n revert(0, 0x24)\n }\n\n}\n",
"id": 20,
"language": "Yul",
"name": "#utility.yul"
}
],
"immutableReferences": {},
"linkReferences": {},
"object": "608060405234801561001057600080fd5b506004361061009e5760003560e01c80636d73e669116100665780636d73e66914610159578063715018a6146101755780638da5cb5b1461017f578063e48351771461019d578063f2fde38b146101cd5761009e565b806301ffc9a7146100a35780631b95a227146100d357806324d7806c146100ef5780632d3456701461011f57806331ae450b1461013b575b600080fd5b6100bd60048036038101906100b89190610bb1565b6101e9565b6040516100ca9190610bf9565b60405180910390f35b6100ed60048036038101906100e89190610c9e565b610263565b005b61010960048036038101906101049190610cde565b6102f7565b6040516101169190610bf9565b60405180910390f35b61013960048036038101906101349190610cde565b610351565b005b6101436103e5565b6040516101509190610dc9565b60405180910390f35b610173600480360381019061016e9190610cde565b6104c7565b005b61017d61055a565b005b61018761056e565b6040516101949190610dfa565b60405180910390f35b6101b760048036038101906101b29190610e7a565b610597565b6040516101c49190610bf9565b60405180910390f35b6101e760048036038101906101e29190610cde565b610676565b005b60007f553e757e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061025c575061025b826106f9565b5b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661028261056e565b73ffffffffffffffffffffffffffffffffffffffff1614806102b457506102b333600161076390919063ffffffff16565b5b6102f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ea90610fb9565b60405180910390fd5b5050565b60008173ffffffffffffffffffffffffffffffffffffffff1661031861056e565b73ffffffffffffffffffffffffffffffffffffffff16148061034a575061034982600161076390919063ffffffff16565b5b9050919050565b610359610793565b61036d81600161076390919063ffffffff16565b156103e2573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d560405160405180910390a36103e081600161081190919063ffffffff16565b505b50565b60606103f16001610841565b67ffffffffffffffff81111561040a57610409610fd9565b5b6040519080825280602002602001820160405280156104385781602001602082028036833780820191505090505b50905060005b6104486001610841565b8110156104c35761046381600161085690919063ffffffff16565b82828151811061047657610475611008565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806104bb90611070565b91505061043e565b5090565b6104cf610793565b6104e381600161076390919063ffffffff16565b610557573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb160405160405180910390a361055581600161087090919063ffffffff16565b505b50565b610562610793565b61056c60006108a0565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006105a2336102f7565b6105e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d89061112a565b60405180910390fd5b8773ffffffffffffffffffffffffffffffffffffffff1663e4835177898989898989896040518863ffffffff1660e01b815260040161062697969594939291906111c5565b6020604051808303816000875af1158015610645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610669919061123f565b9050979650505050505050565b61067e610793565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e4906112de565b60405180910390fd5b6106f6816108a0565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061078b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610964565b905092915050565b61079b610987565b73ffffffffffffffffffffffffffffffffffffffff166107b961056e565b73ffffffffffffffffffffffffffffffffffffffff161461080f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108069061134a565b60405180910390fd5b565b6000610839836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61098f565b905092915050565b600061084f82600001610aa3565b9050919050565b60006108658360000183610ab4565b60001c905092915050565b6000610898836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610adf565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080836001016000848152602001908152602001600020541415905092915050565b600033905090565b60008083600101600084815260200190815260200160002054905060008114610a975760006001826109c1919061136a565b90506000600186600001805490506109d9919061136a565b9050818114610a485760008660000182815481106109fa576109f9611008565b5b9060005260206000200154905080876000018481548110610a1e57610a1d611008565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480610a5c57610a5b61139e565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a9d565b60009150505b92915050565b600081600001805490509050919050565b6000826000018281548110610acc57610acb611008565b5b9060005260206000200154905092915050565b6000610aeb8383610964565b610b44578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050610b49565b600090505b92915050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610b8e81610b59565b8114610b9957600080fd5b50565b600081359050610bab81610b85565b92915050565b600060208284031215610bc757610bc6610b4f565b5b6000610bd584828501610b9c565b91505092915050565b60008115159050919050565b610bf381610bde565b82525050565b6000602082019050610c0e6000830184610bea565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c3f82610c14565b9050919050565b610c4f81610c34565b8114610c5a57600080fd5b50565b600081359050610c6c81610c46565b92915050565b610c7b81610bde565b8114610c8657600080fd5b50565b600081359050610c9881610c72565b92915050565b60008060408385031215610cb557610cb4610b4f565b5b6000610cc385828601610c5d565b9250506020610cd485828601610c89565b9150509250929050565b600060208284031215610cf457610cf3610b4f565b5b6000610d0284828501610c5d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610d4081610c34565b82525050565b6000610d528383610d37565b60208301905092915050565b6000602082019050919050565b6000610d7682610d0b565b610d808185610d16565b9350610d8b83610d27565b8060005b83811015610dbc578151610da38882610d46565b9750610dae83610d5e565b925050600181019050610d8f565b5085935050505092915050565b60006020820190508181036000830152610de38184610d6b565b905092915050565b610df481610c34565b82525050565b6000602082019050610e0f6000830184610deb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e3a57610e39610e15565b5b8235905067ffffffffffffffff811115610e5757610e56610e1a565b5b602083019150836020820283011115610e7357610e72610e1f565b5b9250929050565b600080600080600080600060a0888a031215610e9957610e98610b4f565b5b6000610ea78a828b01610c5d565b9750506020610eb88a828b01610c5d565b9650506040610ec98a828b01610c5d565b955050606088013567ffffffffffffffff811115610eea57610ee9610b54565b5b610ef68a828b01610e24565b9450945050608088013567ffffffffffffffff811115610f1957610f18610b54565b5b610f258a828b01610e24565b925092505092959891949750929550565b600082825260208201905092915050565b7f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f72206160008201527f646d696e00000000000000000000000000000000000000000000000000000000602082015250565b6000610fa3602483610f36565b9150610fae82610f47565b604082019050919050565b60006020820190508181036000830152610fd281610f96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600061107b82611066565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036110ad576110ac611037565b5b600182019050919050565b7f4f6e6c7920636f6e7472616374206f776e65722063616e207472616e7366657260008201527f2074686520746f6b656e00000000000000000000000000000000000000000000602082015250565b6000611114602a83610f36565b915061111f826110b8565b604082019050919050565b6000602082019050818103600083015261114381611107565b9050919050565b600082825260208201905092915050565b600080fd5b82818337505050565b6000611175838561114a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156111a8576111a761115b565b5b6020830292506111b9838584611160565b82840190509392505050565b600060a0820190506111da600083018a610deb565b6111e76020830189610deb565b6111f46040830188610deb565b8181036060830152611207818688611169565b9050818103608083015261121c818486611169565b905098975050505050505050565b60008151905061123981610c72565b92915050565b60006020828403121561125557611254610b4f565b5b60006112638482850161122a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006112c8602683610f36565b91506112d38261126c565b604082019050919050565b600060208201905081810360008301526112f7816112bb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611334602083610f36565b915061133f826112fe565b602082019050919050565b6000602082019050818103600083015261136381611327565b9050919050565b600061137582611066565b915061138083611066565b925082820390508181111561139857611397611037565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122025cd0236e344d3a9918ee6b5633d7ef0157c31d68373e3d96b17d5365d577fe464736f6c63430008120033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6D73E669 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x6D73E669 EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x17F JUMPI DUP1 PUSH4 0xE4835177 EQ PUSH2 0x19D JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1CD JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0x1B95A227 EQ PUSH2 0xD3 JUMPI DUP1 PUSH4 0x24D7806C EQ PUSH2 0xEF JUMPI DUP1 PUSH4 0x2D345670 EQ PUSH2 0x11F JUMPI DUP1 PUSH4 0x31AE450B EQ PUSH2 0x13B JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBD PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0xBB1 JUMP JUMPDEST PUSH2 0x1E9 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xCA SWAP2 SWAP1 PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xED PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xE8 SWAP2 SWAP1 PUSH2 0xC9E JUMP JUMPDEST PUSH2 0x263 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x109 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x104 SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x2F7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x116 SWAP2 SWAP1 PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x139 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x134 SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x351 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x143 PUSH2 0x3E5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x150 SWAP2 SWAP1 PUSH2 0xDC9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x173 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x16E SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x4C7 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x17D PUSH2 0x55A JUMP JUMPDEST STOP JUMPDEST PUSH2 0x187 PUSH2 0x56E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x194 SWAP2 SWAP1 PUSH2 0xDFA JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1B7 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1B2 SWAP2 SWAP1 PUSH2 0xE7A JUMP JUMPDEST PUSH2 0x597 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1C4 SWAP2 SWAP1 PUSH2 0xBF9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1E7 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1E2 SWAP2 SWAP1 PUSH2 0xCDE JUMP JUMPDEST PUSH2 0x676 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0x553E757E00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x25C JUMPI POP PUSH2 0x25B DUP3 PUSH2 0x6F9 JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x282 PUSH2 0x56E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x2B4 JUMPI POP PUSH2 0x2B3 CALLER PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST JUMPDEST PUSH2 0x2F3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2EA SWAP1 PUSH2 0xFB9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x318 PUSH2 0x56E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x34A JUMPI POP PUSH2 0x349 DUP3 PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x359 PUSH2 0x793 JUMP JUMPDEST PUSH2 0x36D DUP2 PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO PUSH2 0x3E2 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7C0C3C84C67C85FCAC635147348BFE374C24A1A93D0366D1CFE9D8853CBF89D5 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x3E0 DUP2 PUSH1 0x1 PUSH2 0x811 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x3F1 PUSH1 0x1 PUSH2 0x841 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x40A JUMPI PUSH2 0x409 PUSH2 0xFD9 JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x438 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST PUSH2 0x448 PUSH1 0x1 PUSH2 0x841 JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x4C3 JUMPI PUSH2 0x463 DUP2 PUSH1 0x1 PUSH2 0x856 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x476 JUMPI PUSH2 0x475 PUSH2 0x1008 JUMP JUMPDEST JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE POP POP DUP1 DUP1 PUSH2 0x4BB SWAP1 PUSH2 0x1070 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x43E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST PUSH2 0x4CF PUSH2 0x793 JUMP JUMPDEST PUSH2 0x4E3 DUP2 PUSH1 0x1 PUSH2 0x763 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x557 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7E1A1A08D52E4BA0E21554733D66165FD5151F99460116223D9E3A608EEC5CB1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x555 DUP2 PUSH1 0x1 PUSH2 0x870 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH2 0x562 PUSH2 0x793 JUMP JUMPDEST PUSH2 0x56C PUSH1 0x0 PUSH2 0x8A0 JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x5A2 CALLER PUSH2 0x2F7 JUMP JUMPDEST PUSH2 0x5E1 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x5D8 SWAP1 PUSH2 0x112A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE4835177 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD DUP9 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x626 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x11C5 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x645 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x669 SWAP2 SWAP1 PUSH2 0x123F JUMP JUMPDEST SWAP1 POP SWAP8 SWAP7 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x67E PUSH2 0x793 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x6ED JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6E4 SWAP1 PUSH2 0x12DE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x6F6 DUP2 PUSH2 0x8A0 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x78B DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0x964 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x79B PUSH2 0x987 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x7B9 PUSH2 0x56E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x80F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x806 SWAP1 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x839 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0x98F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x84F DUP3 PUSH1 0x0 ADD PUSH2 0xAA3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x865 DUP4 PUSH1 0x0 ADD DUP4 PUSH2 0xAB4 JUMP JUMPDEST PUSH1 0x0 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x898 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0xADF JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD EQ ISZERO SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 CALLER SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP PUSH1 0x0 DUP2 EQ PUSH2 0xA97 JUMPI PUSH1 0x0 PUSH1 0x1 DUP3 PUSH2 0x9C1 SWAP2 SWAP1 PUSH2 0x136A JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP PUSH2 0x9D9 SWAP2 SWAP1 PUSH2 0x136A JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0xA48 JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x9FA JUMPI PUSH2 0x9F9 PUSH2 0x1008 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP DUP1 DUP8 PUSH1 0x0 ADD DUP5 DUP2 SLOAD DUP2 LT PUSH2 0xA1E JUMPI PUSH2 0xA1D PUSH2 0x1008 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD DUP2 SWAP1 SSTORE POP DUP4 DUP8 PUSH1 0x1 ADD PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP JUMPDEST DUP6 PUSH1 0x0 ADD DUP1 SLOAD DUP1 PUSH2 0xA5C JUMPI PUSH2 0xA5B PUSH2 0x139E JUMP JUMPDEST JUMPDEST PUSH1 0x1 SWAP1 SUB DUP2 DUP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SSTORE SWAP1 SSTORE DUP6 PUSH1 0x1 ADD PUSH1 0x0 DUP7 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SSTORE PUSH1 0x1 SWAP4 POP POP POP POP PUSH2 0xA9D JUMP JUMPDEST PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xACC JUMPI PUSH2 0xACB PUSH2 0x1008 JUMP JUMPDEST JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xAEB DUP4 DUP4 PUSH2 0x964 JUMP JUMPDEST PUSH2 0xB44 JUMPI DUP3 PUSH1 0x0 ADD DUP3 SWAP1 DUP1 PUSH1 0x1 DUP2 SLOAD ADD DUP1 DUP3 SSTORE DUP1 SWAP2 POP POP PUSH1 0x1 SWAP1 SUB SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SWAP2 SWAP1 SWAP2 SWAP1 SWAP2 POP SSTORE DUP3 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP DUP4 PUSH1 0x1 ADD PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH1 0x1 SWAP1 POP PUSH2 0xB49 JUMP JUMPDEST PUSH1 0x0 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xB8E DUP2 PUSH2 0xB59 JUMP JUMPDEST DUP2 EQ PUSH2 0xB99 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xBAB DUP2 PUSH2 0xB85 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xBC7 JUMPI PUSH2 0xBC6 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xBD5 DUP5 DUP3 DUP6 ADD PUSH2 0xB9C JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xBF3 DUP2 PUSH2 0xBDE JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xC0E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xBEA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xC3F DUP3 PUSH2 0xC14 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xC4F DUP2 PUSH2 0xC34 JUMP JUMPDEST DUP2 EQ PUSH2 0xC5A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC6C DUP2 PUSH2 0xC46 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xC7B DUP2 PUSH2 0xBDE JUMP JUMPDEST DUP2 EQ PUSH2 0xC86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xC98 DUP2 PUSH2 0xC72 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xCB5 JUMPI PUSH2 0xCB4 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xCC3 DUP6 DUP3 DUP7 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0xCD4 DUP6 DUP3 DUP7 ADD PUSH2 0xC89 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xCF4 JUMPI PUSH2 0xCF3 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD02 DUP5 DUP3 DUP6 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xD40 DUP2 PUSH2 0xC34 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD52 DUP4 DUP4 PUSH2 0xD37 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xD76 DUP3 PUSH2 0xD0B JUMP JUMPDEST PUSH2 0xD80 DUP2 DUP6 PUSH2 0xD16 JUMP JUMPDEST SWAP4 POP PUSH2 0xD8B DUP4 PUSH2 0xD27 JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xDBC JUMPI DUP2 MLOAD PUSH2 0xDA3 DUP9 DUP3 PUSH2 0xD46 JUMP JUMPDEST SWAP8 POP PUSH2 0xDAE DUP4 PUSH2 0xD5E JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0xD8F JUMP JUMPDEST POP DUP6 SWAP4 POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xDE3 DUP2 DUP5 PUSH2 0xD6B JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0xDF4 DUP2 PUSH2 0xC34 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE0F PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xDEB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xE3A JUMPI PUSH2 0xE39 PUSH2 0xE15 JUMP JUMPDEST JUMPDEST DUP3 CALLDATALOAD SWAP1 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xE57 JUMPI PUSH2 0xE56 PUSH2 0xE1A JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 MUL DUP4 ADD GT ISZERO PUSH2 0xE73 JUMPI PUSH2 0xE72 PUSH2 0xE1F JUMP JUMPDEST JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0xA0 DUP9 DUP11 SUB SLT ISZERO PUSH2 0xE99 JUMPI PUSH2 0xE98 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xEA7 DUP11 DUP3 DUP12 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP8 POP POP PUSH1 0x20 PUSH2 0xEB8 DUP11 DUP3 DUP12 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP7 POP POP PUSH1 0x40 PUSH2 0xEC9 DUP11 DUP3 DUP12 ADD PUSH2 0xC5D JUMP JUMPDEST SWAP6 POP POP PUSH1 0x60 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xEEA JUMPI PUSH2 0xEE9 PUSH2 0xB54 JUMP JUMPDEST JUMPDEST PUSH2 0xEF6 DUP11 DUP3 DUP12 ADD PUSH2 0xE24 JUMP JUMPDEST SWAP5 POP SWAP5 POP POP PUSH1 0x80 DUP9 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xF19 JUMPI PUSH2 0xF18 PUSH2 0xB54 JUMP JUMPDEST JUMPDEST PUSH2 0xF25 DUP11 DUP3 DUP12 ADD PUSH2 0xE24 JUMP JUMPDEST SWAP3 POP SWAP3 POP POP SWAP3 SWAP6 SWAP9 SWAP2 SWAP5 SWAP8 POP SWAP3 SWAP6 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x41646D696E436F6E74726F6C3A204D757374206265206F776E6572206F722061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x646D696E00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xFA3 PUSH1 0x24 DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0xFAE DUP3 PUSH2 0xF47 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0xFD2 DUP2 PUSH2 0xF96 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x107B DUP3 PUSH2 0x1066 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SUB PUSH2 0x10AD JUMPI PUSH2 0x10AC PUSH2 0x1037 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4F6E6C7920636F6E7472616374206F776E65722063616E207472616E73666572 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x2074686520746F6B656E00000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1114 PUSH1 0x2A DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0x111F DUP3 PUSH2 0x10B8 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1143 DUP2 PUSH2 0x1107 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1175 DUP4 DUP6 PUSH2 0x114A JUMP JUMPDEST SWAP4 POP PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 GT ISZERO PUSH2 0x11A8 JUMPI PUSH2 0x11A7 PUSH2 0x115B JUMP JUMPDEST JUMPDEST PUSH1 0x20 DUP4 MUL SWAP3 POP PUSH2 0x11B9 DUP4 DUP6 DUP5 PUSH2 0x1160 JUMP JUMPDEST DUP3 DUP5 ADD SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x11DA PUSH1 0x0 DUP4 ADD DUP11 PUSH2 0xDEB JUMP JUMPDEST PUSH2 0x11E7 PUSH1 0x20 DUP4 ADD DUP10 PUSH2 0xDEB JUMP JUMPDEST PUSH2 0x11F4 PUSH1 0x40 DUP4 ADD DUP9 PUSH2 0xDEB JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x1207 DUP2 DUP7 DUP9 PUSH2 0x1169 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 SUB PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x121C DUP2 DUP5 DUP7 PUSH2 0x1169 JUMP JUMPDEST SWAP1 POP SWAP9 SWAP8 POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x1239 DUP2 PUSH2 0xC72 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x1255 JUMPI PUSH2 0x1254 PUSH2 0xB4F JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x1263 DUP5 DUP3 DUP6 ADD PUSH2 0x122A JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x12C8 PUSH1 0x26 DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0x12D3 DUP3 PUSH2 0x126C JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x12F7 DUP2 PUSH2 0x12BB JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1334 PUSH1 0x20 DUP4 PUSH2 0xF36 JUMP JUMPDEST SWAP2 POP PUSH2 0x133F DUP3 PUSH2 0x12FE JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x1363 DUP2 PUSH2 0x1327 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1375 DUP3 PUSH2 0x1066 JUMP JUMPDEST SWAP2 POP PUSH2 0x1380 DUP4 PUSH2 0x1066 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x1398 JUMPI PUSH2 0x1397 PUSH2 0x1037 JUMP JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x31 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x25 0xCD MUL CALLDATASIZE 0xE3 PREVRANDAO 0xD3 0xA9 SWAP2 DUP15 0xE6 0xB5 PUSH4 0x3D7EF015 PUSH29 0x31D68373E3D96B17D5365D577FE464736F6C6343000812003300000000 ",
"sourceMap": "368:769:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;565:230:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;583:107:19;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1980:137:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1712:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1111:261;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1440:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1824:101:9;;;:::i;:::-;;1201:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;773:362:19;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2074:198:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;565:230:6;667:4;705:31;690:46;;;:11;:46;;;;:98;;;;752:36;776:11;752:23;:36::i;:::-;690:98;683:105;;565:230;;;:::o;583:107:19:-;942:10:6;931:21;;:7;:5;:7::i;:::-;:21;;;:53;;;;956:28;973:10;956:7;:16;;:28;;;;:::i;:::-;931:53;923:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;583:107:19;;:::o;1980:137:6:-;2042:4;2077:5;2066:16;;:7;:5;:7::i;:::-;:16;;;:43;;;;2086:23;2103:5;2086:7;:16;;:23;;;;:::i;:::-;2066:43;2058:52;;1980:137;;;:::o;1712:205::-;1094:13:9;:11;:13::i;:::-;1790:23:6::1;1807:5;1790:7;:16;;:23;;;;:::i;:::-;1786:125;;;1854:10;1834:31;;1847:5;1834:31;;;;;;;;;;;;1879:21;1894:5;1879:7;:14;;:21;;;;:::i;:::-;;1786:125;1712:205:::0;:::o;1111:261::-;1164:23;1222:16;:7;:14;:16::i;:::-;1208:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1199:40;;1254:6;1249:94;1270:16;:7;:14;:16::i;:::-;1266:1;:20;1249:94;;;1319:13;1330:1;1319:7;:10;;:13;;;;:::i;:::-;1307:6;1314:1;1307:9;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;1288:3;;;;;:::i;:::-;;;;1249:94;;;;1111:261;:::o;1440:205::-;1094:13:9;:11;:13::i;:::-;1520:23:6::1;1537:5;1520:7;:16;;:23;;;;:::i;:::-;1515:124;;1585:10;1564:32;;1578:5;1564:32;;;;;;;;;;;;1610:18;1622:5;1610:7;:11;;:18;;;;:::i;:::-;;1515:124;1440:205:::0;:::o;1824:101:9:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1201:85::-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;773:362:19:-;917:4;941:19;949:10;941:7;:19::i;:::-;933:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;1064:8;1024:65;;;1090:8;1100:4;1106:2;1110:8;;1120:7;;1024:104;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1017:111;;773:362;;;;;;;;;:::o;2074:198:9:-;1094:13;:11;:13::i;:::-;2182:1:::1;2162:22;;:8;:22;;::::0;2154:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2237:28;2256:8;2237:18;:28::i;:::-;2074:198:::0;:::o;829:155:13:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;8860:165:18:-;8940:4;8963:55;8973:3;:10;;9009:5;8993:23;;8985:32;;8963:9;:55::i;:::-;8956:62;;8860:165;;;;:::o;1359:130:9:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;8623:156:18:-;8696:4;8719:53;8727:3;:10;;8763:5;8747:23;;8739:32;;8719:7;:53::i;:::-;8712:60;;8623:156;;;;:::o;9106:115::-;9169:7;9195:19;9203:3;:10;;9195:7;:19::i;:::-;9188:26;;9106:115;;;:::o;9563:156::-;9637:7;9687:22;9691:3;:10;;9703:5;9687:3;:22::i;:::-;9679:31;;9656:56;;9563:156;;;;:::o;8305:150::-;8375:4;8398:50;8403:3;:10;;8439:5;8423:23;;8415:32;;8398:4;:50::i;:::-;8391:57;;8305:150;;;;:::o;2426:187:9:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;4255:127:18:-;4328:4;4374:1;4351:3;:12;;:19;4364:5;4351:19;;;;;;;;;;;;:24;;4344:31;;4255:127;;;;:::o;640:96:11:-;693:7;719:10;712:17;;640:96;:::o;2786:1388:18:-;2852:4;2968:18;2989:3;:12;;:19;3002:5;2989:19;;;;;;;;;;;;2968:40;;3037:1;3023:10;:15;3019:1149;;3392:21;3429:1;3416:10;:14;;;;:::i;:::-;3392:38;;3444:17;3485:1;3464:3;:11;;:18;;;;:22;;;;:::i;:::-;3444:42;;3518:13;3505:9;:26;3501:398;;3551:17;3571:3;:11;;3583:9;3571:22;;;;;;;;:::i;:::-;;;;;;;;;;3551:42;;3722:9;3693:3;:11;;3705:13;3693:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;3831:10;3805:3;:12;;:23;3818:9;3805:23;;;;;;;;;;;:36;;;;3533:366;3501:398;3977:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4069:3;:12;;:19;4082:5;4069:19;;;;;;;;;;;4062:26;;;4110:4;4103:11;;;;;;;3019:1149;4152:5;4145:12;;;2786:1388;;;;;:::o;4463:107::-;4519:7;4545:3;:11;;:18;;;;4538:25;;4463:107;;;:::o;4912:118::-;4979:7;5005:3;:11;;5017:5;5005:18;;;;;;;;:::i;:::-;;;;;;;;;;4998:25;;4912:118;;;;:::o;2214:404::-;2277:4;2298:21;2308:3;2313:5;2298:9;:21::i;:::-;2293:319;;2335:3;:11;;2352:5;2335:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2515:3;:11;;:18;;;;2493:3;:12;;:19;2506:5;2493:19;;;;;;;;;;;:40;;;;2554:4;2547:11;;;;2293:319;2596:5;2589:12;;2214:404;;;;;:::o;88:117:20:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:116::-;2095:21;2110:5;2095:21;:::i;:::-;2088:5;2085:32;2075:60;;2131:1;2128;2121:12;2075:60;2025:116;:::o;2147:133::-;2190:5;2228:6;2215:20;2206:29;;2244:30;2268:5;2244:30;:::i;:::-;2147:133;;;;:::o;2286:468::-;2351:6;2359;2408:2;2396:9;2387:7;2383:23;2379:32;2376:119;;;2414:79;;:::i;:::-;2376:119;2534:1;2559:53;2604:7;2595:6;2584:9;2580:22;2559:53;:::i;:::-;2549:63;;2505:117;2661:2;2687:50;2729:7;2720:6;2709:9;2705:22;2687:50;:::i;:::-;2677:60;;2632:115;2286:468;;;;;:::o;2760:329::-;2819:6;2868:2;2856:9;2847:7;2843:23;2839:32;2836:119;;;2874:79;;:::i;:::-;2836:119;2994:1;3019:53;3064:7;3055:6;3044:9;3040:22;3019:53;:::i;:::-;3009:63;;2965:117;2760:329;;;;:::o;3095:114::-;3162:6;3196:5;3190:12;3180:22;;3095:114;;;:::o;3215:184::-;3314:11;3348:6;3343:3;3336:19;3388:4;3383:3;3379:14;3364:29;;3215:184;;;;:::o;3405:132::-;3472:4;3495:3;3487:11;;3525:4;3520:3;3516:14;3508:22;;3405:132;;;:::o;3543:108::-;3620:24;3638:5;3620:24;:::i;:::-;3615:3;3608:37;3543:108;;:::o;3657:179::-;3726:10;3747:46;3789:3;3781:6;3747:46;:::i;:::-;3825:4;3820:3;3816:14;3802:28;;3657:179;;;;:::o;3842:113::-;3912:4;3944;3939:3;3935:14;3927:22;;3842:113;;;:::o;3991:732::-;4110:3;4139:54;4187:5;4139:54;:::i;:::-;4209:86;4288:6;4283:3;4209:86;:::i;:::-;4202:93;;4319:56;4369:5;4319:56;:::i;:::-;4398:7;4429:1;4414:284;4439:6;4436:1;4433:13;4414:284;;;4515:6;4509:13;4542:63;4601:3;4586:13;4542:63;:::i;:::-;4535:70;;4628:60;4681:6;4628:60;:::i;:::-;4618:70;;4474:224;4461:1;4458;4454:9;4449:14;;4414:284;;;4418:14;4714:3;4707:10;;4115:608;;;3991:732;;;;:::o;4729:373::-;4872:4;4910:2;4899:9;4895:18;4887:26;;4959:9;4953:4;4949:20;4945:1;4934:9;4930:17;4923:47;4987:108;5090:4;5081:6;4987:108;:::i;:::-;4979:116;;4729:373;;;;:::o;5108:118::-;5195:24;5213:5;5195:24;:::i;:::-;5190:3;5183:37;5108:118;;:::o;5232:222::-;5325:4;5363:2;5352:9;5348:18;5340:26;;5376:71;5444:1;5433:9;5429:17;5420:6;5376:71;:::i;:::-;5232:222;;;;:::o;5460:117::-;5569:1;5566;5559:12;5583:117;5692:1;5689;5682:12;5706:117;5815:1;5812;5805:12;5846:568;5919:8;5929:6;5979:3;5972:4;5964:6;5960:17;5956:27;5946:122;;5987:79;;:::i;:::-;5946:122;6100:6;6087:20;6077:30;;6130:18;6122:6;6119:30;6116:117;;;6152:79;;:::i;:::-;6116:117;6266:4;6258:6;6254:17;6242:29;;6320:3;6312:4;6304:6;6300:17;6290:8;6286:32;6283:41;6280:128;;;6327:79;;:::i;:::-;6280:128;5846:568;;;;;:::o;6420:1371::-;6569:6;6577;6585;6593;6601;6609;6617;6666:3;6654:9;6645:7;6641:23;6637:33;6634:120;;;6673:79;;:::i;:::-;6634:120;6793:1;6818:53;6863:7;6854:6;6843:9;6839:22;6818:53;:::i;:::-;6808:63;;6764:117;6920:2;6946:53;6991:7;6982:6;6971:9;6967:22;6946:53;:::i;:::-;6936:63;;6891:118;7048:2;7074:53;7119:7;7110:6;7099:9;7095:22;7074:53;:::i;:::-;7064:63;;7019:118;7204:2;7193:9;7189:18;7176:32;7235:18;7227:6;7224:30;7221:117;;;7257:79;;:::i;:::-;7221:117;7370:80;7442:7;7433:6;7422:9;7418:22;7370:80;:::i;:::-;7352:98;;;;7147:313;7527:3;7516:9;7512:19;7499:33;7559:18;7551:6;7548:30;7545:117;;;7581:79;;:::i;:::-;7545:117;7694:80;7766:7;7757:6;7746:9;7742:22;7694:80;:::i;:::-;7676:98;;;;7470:314;6420:1371;;;;;;;;;;:::o;7797:169::-;7881:11;7915:6;7910:3;7903:19;7955:4;7950:3;7946:14;7931:29;;7797:169;;;;:::o;7972:223::-;8112:34;8108:1;8100:6;8096:14;8089:58;8181:6;8176:2;8168:6;8164:15;8157:31;7972:223;:::o;8201:366::-;8343:3;8364:67;8428:2;8423:3;8364:67;:::i;:::-;8357:74;;8440:93;8529:3;8440:93;:::i;:::-;8558:2;8553:3;8549:12;8542:19;;8201:366;;;:::o;8573:419::-;8739:4;8777:2;8766:9;8762:18;8754:26;;8826:9;8820:4;8816:20;8812:1;8801:9;8797:17;8790:47;8854:131;8980:4;8854:131;:::i;:::-;8846:139;;8573:419;;;:::o;8998:180::-;9046:77;9043:1;9036:88;9143:4;9140:1;9133:15;9167:4;9164:1;9157:15;9184:180;9232:77;9229:1;9222:88;9329:4;9326:1;9319:15;9353:4;9350:1;9343:15;9370:180;9418:77;9415:1;9408:88;9515:4;9512:1;9505:15;9539:4;9536:1;9529:15;9556:77;9593:7;9622:5;9611:16;;9556:77;;;:::o;9639:233::-;9678:3;9701:24;9719:5;9701:24;:::i;:::-;9692:33;;9747:66;9740:5;9737:77;9734:103;;9817:18;;:::i;:::-;9734:103;9864:1;9857:5;9853:13;9846:20;;9639:233;;;:::o;9878:229::-;10018:34;10014:1;10006:6;10002:14;9995:58;10087:12;10082:2;10074:6;10070:15;10063:37;9878:229;:::o;10113:366::-;10255:3;10276:67;10340:2;10335:3;10276:67;:::i;:::-;10269:74;;10352:93;10441:3;10352:93;:::i;:::-;10470:2;10465:3;10461:12;10454:19;;10113:366;;;:::o;10485:419::-;10651:4;10689:2;10678:9;10674:18;10666:26;;10738:9;10732:4;10728:20;10724:1;10713:9;10709:17;10702:47;10766:131;10892:4;10766:131;:::i;:::-;10758:139;;10485:419;;;:::o;10910:184::-;11009:11;11043:6;11038:3;11031:19;11083:4;11078:3;11074:14;11059:29;;10910:184;;;;:::o;11100:117::-;11209:1;11206;11199:12;11223:98;11307:6;11302:3;11297;11284:30;11223:98;;;:::o;11357:537::-;11485:3;11506:86;11585:6;11580:3;11506:86;:::i;:::-;11499:93;;11616:66;11608:6;11605:78;11602:165;;;11686:79;;:::i;:::-;11602:165;11798:4;11790:6;11786:17;11776:27;;11813:43;11849:6;11844:3;11837:5;11813:43;:::i;:::-;11881:6;11876:3;11872:16;11865:23;;11357:537;;;;;:::o;11900:1006::-;12225:4;12263:3;12252:9;12248:19;12240:27;;12277:71;12345:1;12334:9;12330:17;12321:6;12277:71;:::i;:::-;12358:72;12426:2;12415:9;12411:18;12402:6;12358:72;:::i;:::-;12440;12508:2;12497:9;12493:18;12484:6;12440:72;:::i;:::-;12559:9;12553:4;12549:20;12544:2;12533:9;12529:18;12522:48;12587:118;12700:4;12691:6;12683;12587:118;:::i;:::-;12579:126;;12753:9;12747:4;12743:20;12737:3;12726:9;12722:19;12715:49;12781:118;12894:4;12885:6;12877;12781:118;:::i;:::-;12773:126;;11900:1006;;;;;;;;;;:::o;12912:137::-;12966:5;12997:6;12991:13;12982:22;;13013:30;13037:5;13013:30;:::i;:::-;12912:137;;;;:::o;13055:345::-;13122:6;13171:2;13159:9;13150:7;13146:23;13142:32;13139:119;;;13177:79;;:::i;:::-;13139:119;13297:1;13322:61;13375:7;13366:6;13355:9;13351:22;13322:61;:::i;:::-;13312:71;;13268:125;13055:345;;;;:::o;13406:225::-;13546:34;13542:1;13534:6;13530:14;13523:58;13615:8;13610:2;13602:6;13598:15;13591:33;13406:225;:::o;13637:366::-;13779:3;13800:67;13864:2;13859:3;13800:67;:::i;:::-;13793:74;;13876:93;13965:3;13876:93;:::i;:::-;13994:2;13989:3;13985:12;13978:19;;13637:366;;;:::o;14009:419::-;14175:4;14213:2;14202:9;14198:18;14190:26;;14262:9;14256:4;14252:20;14248:1;14237:9;14233:17;14226:47;14290:131;14416:4;14290:131;:::i;:::-;14282:139;;14009:419;;;:::o;14434:182::-;14574:34;14570:1;14562:6;14558:14;14551:58;14434:182;:::o;14622:366::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:419::-;15160:4;15198:2;15187:9;15183:18;15175:26;;15247:9;15241:4;15237:20;15233:1;15222:9;15218:17;15211:47;15275:131;15401:4;15275:131;:::i;:::-;15267:139;;14994:419;;;:::o;15419:194::-;15459:4;15479:20;15497:1;15479:20;:::i;:::-;15474:25;;15513:20;15531:1;15513:20;:::i;:::-;15508:25;;15557:1;15554;15550:9;15542:17;;15581:1;15575:4;15572:11;15569:37;;;15586:18;;:::i;:::-;15569:37;15419:194;;;;:::o;15619:180::-;15667:77;15664:1;15657:88;15764:4;15761:1;15754:15;15788:4;15785:1;15778:15"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "1024600",
"executionCost": "infinite",
"totalCost": "infinite"
},
"external": {
"approveAdmin(address)": "infinite",
"approveTransfer(address,address,address,uint256[],uint256[])": "infinite",
"getAdmins()": "infinite",
"isAdmin(address)": "infinite",
"owner()": "2566",
"renounceOwnership()": "30420",
"revokeAdmin(address)": "infinite",
"setApproveTransfer(address,bool)": "infinite",
"supportsInterface(bytes4)": "728",
"transferOwnership(address)": "30832"
}
},
"methodIdentifiers": {
"approveAdmin(address)": "6d73e669",
"approveTransfer(address,address,address,uint256[],uint256[])": "e4835177",
"getAdmins()": "31ae450b",
"isAdmin(address)": "24d7806c",
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"revokeAdmin(address)": "2d345670",
"setApproveTransfer(address,bool)": "1b95a227",
"supportsInterface(bytes4)": "01ffc9a7",
"transferOwnership(address)": "f2fde38b"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminApproved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminRevoked",
"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"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "approveAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "approveTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getAdmins",
"outputs": [
{
"internalType": "address[]",
"name": "admins",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "revokeAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.18+commit.87f61d96"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminApproved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminRevoked",
"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"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "approveAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "approveTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getAdmins",
"outputs": [
{
"internalType": "address[]",
"name": "admins",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "revokeAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"approveAdmin(address)": {
"details": "See {IAdminControl-approveAdmin}."
},
"approveTransfer(address,address,address,uint256[],uint256[])": {
"details": "Called by creator contract to approve a transfer"
},
"getAdmins()": {
"details": "See {IAdminControl-getAdmins}."
},
"isAdmin(address)": {
"details": "See {IAdminControl-isAdmin}."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"revokeAdmin(address)": {
"details": "See {IAdminControl-revokeAdmin}."
},
"setApproveTransfer(address,bool)": {
"details": "Set whether or not the creator contract will check the extension for approval of token transfer"
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
"contracts/IoSingleTransferExt.sol": "IoSingleTransferExt"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol": {
"keccak256": "0x6e8b20c32d6122ed1d23af683260ea242f1197dc95b063b63ccfac5b90e65f31",
"license": "MIT",
"urls": [
"bzz-raw://bffa862c93d614e9d5727ff595cb8595dbb9eae43bfdf06f65c7331aec09c268",
"dweb:/ipfs/QmUsPC55S2vdfQWL3HQTYDz66yRFhdbPGCjr1NYyxBT83P"
]
},
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol": {
"keccak256": "0x6bdcb757953594d3a259f1d68ec3d208ca42dba02115f08a6e32e2936ccb0349",
"license": "MIT",
"urls": [
"bzz-raw://dd1853dabcd57eb9b735b3991cf59259cd28cdeca1353495b5c59dc0db2d85df",
"dweb:/ipfs/QmfJLFZ7RoMvdR7kJLR7QmqreS1x5VNJSa7xvjVsC4mXte"
]
},
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol": {
"keccak256": "0xc91d0050b622fbb41b7516c6a8c75ab6236e6a52feab681d36fb75b8b49fc8c0",
"license": "MIT",
"urls": [
"bzz-raw://f045081bb40c91837c076530bb07b9f8b7fa77cbd1191748a12920f01f1678f8",
"dweb:/ipfs/QmP5kx53wBz2eUqZV26ttYJmsHP7R9n3rF6dAbTjVPh5gL"
]
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol": {
"keccak256": "0x721390972cc45ff82d97046f5b9e560369a4bf25ae1db2ee0998c8dfc484b782",
"license": "MIT",
"urls": [
"bzz-raw://f564087ce1ed42a2dbb0bd4dd463643ebb51dc8662c6a8ff34b073d94f38ca24",
"dweb:/ipfs/QmNyZnZLe3dTxpCVLxA2hKamUjDUhds4BjSb7EvegS52yS"
]
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol": {
"keccak256": "0xf61dcf7e6bc3e49e629630ad28377f079a31b154ecd0e604d1c0a51ae2a057f2",
"license": "MIT",
"urls": [
"bzz-raw://2fda5e6d49a47fbe347ed9198c1fff5555bd687a3a73d2a9f45d5c3a2d053e40",
"dweb:/ipfs/QmdrLJ3rscxvpMTjdRp1FyhPtYDTDL1CCQyhFeLFuFkFXH"
]
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol": {
"keccak256": "0x6c8ca804ee7dea9d78f0dacdd9233b1b75ca2b2fa517f52f0fdf6beb34780a51",
"license": "MIT",
"urls": [
"bzz-raw://4a04a6f0cce2bbdb022a8125e147519c7fbaa89692c8f0cfee69a67a2956316f",
"dweb:/ipfs/QmdUxwBEnFshm1j5FEcJctC7DbFWUznis2LaPcKR7FEZX7"
]
},
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": {
"keccak256": "0xaed5e7784e33745ab1b16f1d87b22084a8b25d531c1dcb8dc41fc2a89e2617da",
"license": "MIT",
"urls": [
"bzz-raw://44837a9cc639062b2d7424a10e9d579b8d3a9bc1cefede2cfbb917bee8f452ae",
"dweb:/ipfs/QmburkqmRDZYWjKPRUynhdfkAfP5QDKcXH4WCbH1JC8UDq"
]
},
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": {
"keccak256": "0x7cc2e4e7d9052532f445e62ec1fa2f05cc0f5d1d8ee1fea913b43a132277bf2f",
"license": "MIT",
"urls": [
"bzz-raw://266618317d0654fe209b5450b8b5afa3a4a8d41294a2b37ddbae540099859887",
"dweb:/ipfs/QmYksDqoxhachoqZquXGtjfiuAWJ1rxAKLtUYPL3YboBkE"
]
},
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": {
"keccak256": "0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422",
"license": "MIT",
"urls": [
"bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b",
"dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq"
]
},
"@openzeppelin/contracts/access/Ownable.sol": {
"keccak256": "0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218",
"license": "MIT",
"urls": [
"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32",
"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz"
]
},
"@openzeppelin/contracts/security/ReentrancyGuard.sol": {
"keccak256": "0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1",
"license": "MIT",
"urls": [
"bzz-raw://41319e7f621f2dc3733511332c4fd032f8e32ad2aa7fd6f665c19741d9941a34",
"dweb:/ipfs/QmcYR3bd862GD1Bc7jwrU9bGxrhUu5na1oP964bDCu2id1"
]
},
"@openzeppelin/contracts/utils/Context.sol": {
"keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
"license": "MIT",
"urls": [
"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
]
},
"@openzeppelin/contracts/utils/Strings.sol": {
"keccak256": "0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0",
"license": "MIT",
"urls": [
"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f",
"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n"
]
},
"@openzeppelin/contracts/utils/introspection/ERC165.sol": {
"keccak256": "0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b",
"license": "MIT",
"urls": [
"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d",
"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43"
]
},
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": {
"keccak256": "0x5a08ad61f4e82b8a3323562661a86fb10b10190848073fdc13d4ac43710ffba5",
"license": "MIT",
"urls": [
"bzz-raw://6f7bb74cf88fd88daa34e118bc6e363381d05044f34f391d39a10c0c9dac3ebd",
"dweb:/ipfs/QmNbQ3v8v4zuDtg7VeLAbdhAm3tCzUodNoDZZ8ekmCHWZX"
]
},
"@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1",
"license": "MIT",
"urls": [
"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f",
"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"
]
},
"@openzeppelin/contracts/utils/math/Math.sol": {
"keccak256": "0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3",
"license": "MIT",
"urls": [
"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c",
"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS"
]
},
"@openzeppelin/contracts/utils/math/SignedMath.sol": {
"keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc",
"license": "MIT",
"urls": [
"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7",
"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6"
]
},
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
"keccak256": "0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514",
"license": "MIT",
"urls": [
"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df",
"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW"
]
},
"contracts/IoSingleTransferExt.sol": {
"keccak256": "0xdc1c36911770a0b546a4ec4f5fe1439b473fcca65542467c760380aceb6b141d",
"license": "MIT",
"urls": [
"bzz-raw://c3f695379ea20d463af07898019f85dd2c59fe1b597ec4441f6ed325f0136875",
"dweb:/ipfs/QmX88LJD2C4DLojerQkngeDaoTrk3Tsn2CN4GXTVai8E4T"
]
}
},
"version": 1
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/// @author: Infinite Objects
import "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol";
import "@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol";
import "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol";
contract IoSingleTransferExt is AdminControl, IERC1155CreatorExtensionApproveTransfer{
/**
* @dev Set whether or not the creator contract will check the extension for approval of token transfer
*/
function setApproveTransfer(address creator, bool enabled) external override adminRequired {
}
/**
* @dev Called by creator contract to approve a transfer
*/
function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool) {
require(isAdmin(msg.sender), "Only contract owner can transfer the token");
return IERC1155CreatorExtensionApproveTransfer(operator).approveTransfer(operator, from, to, tokenIds, amounts);
}
}
This file has been truncated, but you can view the full file.
{
"id": "8632420e4d43fdc031ad4cf4b4244d44",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.18",
"solcLongVersion": "0.8.18+commit.87f61d96",
"input": {
"language": "Solidity",
"sources": {
"contracts/IoSingleTransferExt.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: Infinite Objects\n\nimport \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\";\nimport \"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol\";\nimport \"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol\";\n\ncontract IoSingleTransferExt is AdminControl, IERC1155CreatorExtensionApproveTransfer{\n /**\n * @dev Set whether or not the creator contract will check the extension for approval of token transfer\n */\n function setApproveTransfer(address creator, bool enabled) external override adminRequired {\n \n }\n\n /**\n * @dev Called by creator contract to approve a transfer\n */\n function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool) {\n require(isAdmin(msg.sender), \"Only contract owner can transfer the token\");\n return IERC1155CreatorExtensionApproveTransfer(operator).approveTransfer(operator, from, to, tokenIds, amounts);\n }\n}"
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\n/**\n * Implement this if you want your extension to approve a transfer\n */\ninterface IERC1155CreatorExtensionApproveTransfer is IERC165 {\n\n /**\n * @dev Set whether or not the creator contract will check the extension for approval of token transfer\n */\n function setApproveTransfer(address creator, bool enabled) external;\n\n /**\n * @dev Called by creator contract to approve a transfer\n */\n function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool);\n}"
},
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"./CreatorCore.sol\";\n\n/**\n * @dev Core ERC1155 creator interface\n */\ninterface IERC1155CreatorCore is ICreatorCore {\n\n /**\n * @dev mint a token with no extension. Can only be called by an admin.\n *\n * @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\n * @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array\n * @param uris - If no elements, all tokens use the default uri.\n * If any element is an empty string, the corresponding token uses the default uri.\n *\n *\n * Requirements: If to is a multi-element array, then uris must be empty or single element array\n * If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size\n * If to is a single element array, uris must be empty or the same length as amounts\n *\n * Examples:\n * mintBaseNew(['0x....1', '0x....2'], [1], [])\n * Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri.\n * \n * mintBaseNew(['0x....1', '0x....2'], [1, 2], [])\n * Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri.\n * \n * mintBaseNew(['0x....1'], [1, 2], [\"\", \"http://token2.com\"])\n * Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses \"http://token2.com\".\n * \n * @return Returns list of tokenIds minted\n */\n function mintBaseNew(address[] calldata to, uint256[] calldata amounts, string[] calldata uris) external returns (uint256[] memory);\n\n /**\n * @dev batch mint existing token with no extension. Can only be called by an admin.\n *\n * @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\n * @param tokenIds - Can be a single element array (all recipients get the same token) or a multi-element array\n * @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array\n *\n * Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays\n *\n * Examples:\n * mintBaseExisting(['0x....1', '0x....2'], [1], [10])\n * Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'.\n * \n * mintBaseExisting(['0x....1', '0x....2'], [1, 2], [10, 20])\n * Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'.\n * \n * mintBaseExisting(['0x....1'], [1, 2], [10, 20])\n * Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'.\n * \n * mintBaseExisting(['0x....1', '0x....2'], [1], [10, 20])\n * Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'.\n * \n */\n function mintBaseExisting(address[] calldata to, uint256[] calldata tokenIds, uint256[] calldata amounts) external;\n\n /**\n * @dev mint a token from an extension. Can only be called by a registered extension.\n *\n * @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\n * @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array\n * @param uris - If no elements, all tokens use the default uri.\n * If any element is an empty string, the corresponding token uses the default uri.\n *\n *\n * Requirements: If to is a multi-element array, then uris must be empty or single element array\n * If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size\n * If to is a single element array, uris must be empty or the same length as amounts\n *\n * Examples:\n * mintExtensionNew(['0x....1', '0x....2'], [1], [])\n * Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri.\n * \n * mintExtensionNew(['0x....1', '0x....2'], [1, 2], [])\n * Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri.\n * \n * mintExtensionNew(['0x....1'], [1, 2], [\"\", \"http://token2.com\"])\n * Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses \"http://token2.com\".\n * \n * @return Returns list of tokenIds minted\n */\n function mintExtensionNew(address[] calldata to, uint256[] calldata amounts, string[] calldata uris) external returns (uint256[] memory);\n\n /**\n * @dev batch mint existing token from extension. Can only be called by a registered extension.\n *\n * @param to - Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\n * @param tokenIds - Can be a single element array (all recipients get the same token) or a multi-element array\n * @param amounts - Can be a single element array (all recipients get the same amount) or a multi-element array\n *\n * Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays\n *\n * Examples:\n * mintExtensionExisting(['0x....1', '0x....2'], [1], [10])\n * Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'.\n * \n * mintExtensionExisting(['0x....1', '0x....2'], [1, 2], [10, 20])\n * Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'.\n * \n * mintExtensionExisting(['0x....1'], [1, 2], [10, 20])\n * Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'.\n * \n * mintExtensionExisting(['0x....1', '0x....2'], [1], [10, 20])\n * Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'.\n * \n */\n function mintExtensionExisting(address[] calldata to, uint256[] calldata tokenIds, uint256[] calldata amounts) external;\n\n /**\n * @dev burn tokens. Can only be called by token owner or approved address.\n * On burn, calls back to the registered extension's onBurn method\n */\n function burn(address account, uint256[] calldata tokenIds, uint256[] calldata amounts) external;\n\n /**\n * @dev Total amount of tokens in with a given tokenId.\n */\n function totalSupply(uint256 tokenId) external view returns (uint256);\n}"
},
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\nimport \"./IAdminControl.sol\";\n\nabstract contract AdminControl is Ownable, IAdminControl, ERC165 {\n using EnumerableSet for EnumerableSet.AddressSet;\n\n // Track registered admins\n EnumerableSet.AddressSet private _admins;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return interfaceId == type(IAdminControl).interfaceId\n || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Only allows approved admins to call the specified function\n */\n modifier adminRequired() {\n require(owner() == msg.sender || _admins.contains(msg.sender), \"AdminControl: Must be owner or admin\");\n _;\n } \n\n /**\n * @dev See {IAdminControl-getAdmins}.\n */\n function getAdmins() external view override returns (address[] memory admins) {\n admins = new address[](_admins.length());\n for (uint i = 0; i < _admins.length(); i++) {\n admins[i] = _admins.at(i);\n }\n return admins;\n }\n\n /**\n * @dev See {IAdminControl-approveAdmin}.\n */\n function approveAdmin(address admin) external override onlyOwner {\n if (!_admins.contains(admin)) {\n emit AdminApproved(admin, msg.sender);\n _admins.add(admin);\n }\n }\n\n /**\n * @dev See {IAdminControl-revokeAdmin}.\n */\n function revokeAdmin(address admin) external override onlyOwner {\n if (_admins.contains(admin)) {\n emit AdminRevoked(admin, msg.sender);\n _admins.remove(admin);\n }\n }\n\n /**\n * @dev See {IAdminControl-isAdmin}.\n */\n function isAdmin(address admin) public override view returns (bool) {\n return (owner() == admin || _admins.contains(admin));\n }\n\n}"
},
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\n/**\n * @dev Interface for admin control\n */\ninterface IAdminControl is IERC165 {\n\n event AdminApproved(address indexed account, address indexed sender);\n event AdminRevoked(address indexed account, address indexed sender);\n\n /**\n * @dev gets address of all admins\n */\n function getAdmins() external view returns (address[] memory);\n\n /**\n * @dev add an admin. Can only be called by contract owner.\n */\n function approveAdmin(address admin) external;\n\n /**\n * @dev remove an admin. Can only be called by contract owner.\n */\n function revokeAdmin(address admin) external;\n\n /**\n * @dev checks whether or not given address is an admin\n * Returns True if they are\n */\n function isAdmin(address admin) external view returns (bool);\n\n}"
},
"@openzeppelin/contracts/access/Ownable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"
},
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)\n// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n *\n * [WARNING]\n * ====\n * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure\n * unusable.\n * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.\n *\n * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an\n * array of EnumerableSet.\n * ====\n */\nlibrary EnumerableSet {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n if (lastIndex != toDeleteIndex) {\n bytes32 lastValue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastValue;\n // Update the index for the moved value\n set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex\n }\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n return set._values[index];\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function _values(Set storage set) private view returns (bytes32[] memory) {\n return set._values;\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {\n bytes32[] memory store = _values(set._inner);\n bytes32[] memory result;\n\n /// @solidity memory-safe-assembly\n assembly {\n result := store\n }\n\n return result;\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(AddressSet storage set) internal view returns (address[] memory) {\n bytes32[] memory store = _values(set._inner);\n address[] memory result;\n\n /// @solidity memory-safe-assembly\n assembly {\n result := store\n }\n\n return result;\n }\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n\n /**\n * @dev Return the entire set in an array\n *\n * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed\n * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that\n * this function has an unbounded cost, and using it as part of a state-changing function may render the function\n * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.\n */\n function values(UintSet storage set) internal view returns (uint256[] memory) {\n bytes32[] memory store = _values(set._inner);\n uint256[] memory result;\n\n /// @solidity memory-safe-assembly\n assembly {\n result := store\n }\n\n return result;\n }\n}\n"
},
"@openzeppelin/contracts/utils/introspection/ERC165.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"
},
"@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
},
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/security/ReentrancyGuard.sol\";\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\";\nimport \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\n\nimport \"../extensions/ICreatorExtensionTokenURI.sol\";\nimport \"../extensions/ICreatorExtensionRoyalties.sol\";\n\nimport \"./ICreatorCore.sol\";\n\n/**\n * @dev Core creator implementation\n */\nabstract contract CreatorCore is ReentrancyGuard, ICreatorCore, ERC165 {\n using Strings for uint256;\n using EnumerableSet for EnumerableSet.AddressSet;\n using AddressUpgradeable for address;\n\n uint256 internal _tokenCount = 0;\n\n // Base approve transfers address location\n address internal _approveTransferBase;\n\n // Track registered extensions data\n EnumerableSet.AddressSet internal _extensions;\n EnumerableSet.AddressSet internal _blacklistedExtensions;\n\n // The baseURI for a given extension\n mapping (address => string) private _extensionBaseURI;\n mapping (address => bool) private _extensionBaseURIIdentical;\n\n // The prefix for any tokens with a uri configured\n mapping (address => string) private _extensionURIPrefix;\n\n // Mapping for individual token URIs\n mapping (uint256 => string) internal _tokenURIs;\n\n // Royalty configurations\n struct RoyaltyConfig {\n address payable receiver;\n uint16 bps;\n }\n mapping (address => RoyaltyConfig[]) internal _extensionRoyalty;\n mapping (uint256 => RoyaltyConfig[]) internal _tokenRoyalty;\n\n bytes4 private constant _CREATOR_CORE_V1 = 0x28f10a21;\n\n /**\n * External interface identifiers for royalties\n */\n\n /**\n * @dev CreatorCore\n *\n * bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6\n *\n * => 0xbb3bafd6 = 0xbb3bafd6\n */\n bytes4 private constant _INTERFACE_ID_ROYALTIES_CREATORCORE = 0xbb3bafd6;\n\n /**\n * @dev Rarible: RoyaltiesV1\n *\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n *\n * => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584\n */\n bytes4 private constant _INTERFACE_ID_ROYALTIES_RARIBLE = 0xb7799584;\n\n /**\n * @dev Foundation\n *\n * bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c\n *\n * => 0xd5a06d4c = 0xd5a06d4c\n */\n bytes4 private constant _INTERFACE_ID_ROYALTIES_FOUNDATION = 0xd5a06d4c;\n\n /**\n * @dev EIP-2981\n *\n * bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n *\n * => 0x2a55205a = 0x2a55205a\n */\n bytes4 private constant _INTERFACE_ID_ROYALTIES_EIP2981 = 0x2a55205a;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {\n return interfaceId == type(ICreatorCore).interfaceId || interfaceId == _CREATOR_CORE_V1 || super.supportsInterface(interfaceId)\n || interfaceId == _INTERFACE_ID_ROYALTIES_CREATORCORE || interfaceId == _INTERFACE_ID_ROYALTIES_RARIBLE\n || interfaceId == _INTERFACE_ID_ROYALTIES_FOUNDATION || interfaceId == _INTERFACE_ID_ROYALTIES_EIP2981;\n }\n\n /**\n * @dev Only allows registered extensions to call the specified function\n */\n function requireExtension() internal view {\n require(_extensions.contains(msg.sender), \"Must be registered extension\");\n }\n\n /**\n * @dev Only allows non-blacklisted extensions\n */\n function requireNonBlacklist(address extension) internal view {\n require(!_blacklistedExtensions.contains(extension), \"Extension blacklisted\");\n } \n\n /**\n * @dev See {ICreatorCore-getExtensions}.\n */\n function getExtensions() external view override returns (address[] memory extensions) {\n extensions = new address[](_extensions.length());\n for (uint i; i < _extensions.length();) {\n extensions[i] = _extensions.at(i);\n unchecked { ++i; }\n }\n return extensions;\n }\n\n /**\n * @dev Register an extension\n */\n function _registerExtension(address extension, string calldata baseURI, bool baseURIIdentical) internal virtual {\n require(extension != address(this) && extension.isContract(), \"Invalid\");\n emit ExtensionRegistered(extension, msg.sender);\n _extensionBaseURI[extension] = baseURI;\n _extensionBaseURIIdentical[extension] = baseURIIdentical;\n _extensions.add(extension);\n _setApproveTransferExtension(extension, true);\n }\n\n /**\n * @dev See {ICreatorCore-setApproveTransferExtension}.\n */\n function setApproveTransferExtension(bool enabled) external override {\n requireExtension();\n _setApproveTransferExtension(msg.sender, enabled);\n }\n\n /**\n * @dev Set whether or not tokens minted by the extension defers transfer approvals to the extension\n */\n function _setApproveTransferExtension(address extension, bool enabled) internal virtual;\n\n /**\n * @dev Unregister an extension\n */\n function _unregisterExtension(address extension) internal {\n emit ExtensionUnregistered(extension, msg.sender);\n _extensions.remove(extension);\n }\n\n /**\n * @dev Blacklist an extension\n */\n function _blacklistExtension(address extension) internal {\n require(extension != address(0) && extension != address(this), \"Cannot blacklist yourself\");\n if (_extensions.contains(extension)) {\n emit ExtensionUnregistered(extension, msg.sender);\n _extensions.remove(extension);\n }\n if (!_blacklistedExtensions.contains(extension)) {\n emit ExtensionBlacklisted(extension, msg.sender);\n _blacklistedExtensions.add(extension);\n }\n }\n\n /**\n * @dev Set base token uri for an extension\n */\n function _setBaseTokenURIExtension(string calldata uri, bool identical) internal {\n _extensionBaseURI[msg.sender] = uri;\n _extensionBaseURIIdentical[msg.sender] = identical;\n }\n\n /**\n * @dev Set token uri prefix for an extension\n */\n function _setTokenURIPrefixExtension(string calldata prefix) internal {\n _extensionURIPrefix[msg.sender] = prefix;\n }\n\n /**\n * @dev Set token uri for a token of an extension\n */\n function _setTokenURIExtension(uint256 tokenId, string calldata uri) internal {\n require(_tokenExtension(tokenId) == msg.sender, \"Invalid token\");\n _tokenURIs[tokenId] = uri;\n }\n\n /**\n * @dev Set base token uri for tokens with no extension\n */\n function _setBaseTokenURI(string calldata uri) internal {\n _extensionBaseURI[address(0)] = uri;\n }\n\n /**\n * @dev Set token uri prefix for tokens with no extension\n */\n function _setTokenURIPrefix(string calldata prefix) internal {\n _extensionURIPrefix[address(0)] = prefix;\n }\n\n\n /**\n * @dev Set token uri for a token with no extension\n */\n function _setTokenURI(uint256 tokenId, string calldata uri) internal {\n require(tokenId > 0 && tokenId <= _tokenCount && _tokenExtension(tokenId) == address(0), \"Invalid token\");\n _tokenURIs[tokenId] = uri;\n }\n\n /**\n * @dev Retrieve a token's URI\n */\n function _tokenURI(uint256 tokenId) internal view returns (string memory) {\n require(tokenId > 0 && tokenId <= _tokenCount, \"Invalid token\");\n\n address extension = _tokenExtension(tokenId);\n require(!_blacklistedExtensions.contains(extension), \"Extension blacklisted\");\n\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n if (bytes(_extensionURIPrefix[extension]).length != 0) {\n return string(abi.encodePacked(_extensionURIPrefix[extension], _tokenURIs[tokenId]));\n }\n return _tokenURIs[tokenId];\n }\n\n if (ERC165Checker.supportsInterface(extension, type(ICreatorExtensionTokenURI).interfaceId)) {\n return ICreatorExtensionTokenURI(extension).tokenURI(address(this), tokenId);\n }\n\n if (!_extensionBaseURIIdentical[extension]) {\n return string(abi.encodePacked(_extensionBaseURI[extension], tokenId.toString()));\n } else {\n return _extensionBaseURI[extension];\n }\n }\n\n /**\n * Helper to get royalties for a token\n */\n function _getRoyalties(uint256 tokenId) view internal returns (address payable[] memory receivers, uint256[] memory bps) {\n\n // Get token level royalties\n RoyaltyConfig[] memory royalties = _tokenRoyalty[tokenId];\n if (royalties.length == 0) {\n // Get extension specific royalties\n address extension = _tokenExtension(tokenId);\n if (extension != address(0)) {\n if (ERC165Checker.supportsInterface(extension, type(ICreatorExtensionRoyalties).interfaceId)) {\n (receivers, bps) = ICreatorExtensionRoyalties(extension).getRoyalties(address(this), tokenId);\n // Extension override exists, just return that\n if (receivers.length > 0) return (receivers, bps);\n }\n royalties = _extensionRoyalty[extension];\n }\n }\n if (royalties.length == 0) {\n // Get the default royalty\n royalties = _extensionRoyalty[address(0)];\n }\n \n if (royalties.length > 0) {\n receivers = new address payable[](royalties.length);\n bps = new uint256[](royalties.length);\n for (uint i; i < royalties.length;) {\n receivers[i] = royalties[i].receiver;\n bps[i] = royalties[i].bps;\n unchecked { ++i; }\n }\n }\n }\n\n /**\n * Helper to get royalty receivers for a token\n */\n function _getRoyaltyReceivers(uint256 tokenId) view internal returns (address payable[] memory recievers) {\n (recievers, ) = _getRoyalties(tokenId);\n }\n\n /**\n * Helper to get royalty basis points for a token\n */\n function _getRoyaltyBPS(uint256 tokenId) view internal returns (uint256[] memory bps) {\n (, bps) = _getRoyalties(tokenId);\n }\n\n function _getRoyaltyInfo(uint256 tokenId, uint256 value) view internal returns (address receiver, uint256 amount){\n (address payable[] memory receivers, uint256[] memory bps) = _getRoyalties(tokenId);\n require(receivers.length <= 1, \"More than 1 royalty receiver\");\n \n if (receivers.length == 0) {\n return (address(this), 0);\n }\n return (receivers[0], bps[0]*value/10000);\n }\n\n /**\n * Set royalties for a token\n */\n function _setRoyalties(uint256 tokenId, address payable[] calldata receivers, uint256[] calldata basisPoints) internal {\n _checkRoyalties(receivers, basisPoints);\n delete _tokenRoyalty[tokenId];\n _setRoyalties(receivers, basisPoints, _tokenRoyalty[tokenId]);\n emit RoyaltiesUpdated(tokenId, receivers, basisPoints);\n }\n\n /**\n * Set royalties for all tokens of an extension\n */\n function _setRoyaltiesExtension(address extension, address payable[] calldata receivers, uint256[] calldata basisPoints) internal {\n _checkRoyalties(receivers, basisPoints);\n delete _extensionRoyalty[extension];\n _setRoyalties(receivers, basisPoints, _extensionRoyalty[extension]);\n if (extension == address(0)) {\n emit DefaultRoyaltiesUpdated(receivers, basisPoints);\n } else {\n emit ExtensionRoyaltiesUpdated(extension, receivers, basisPoints);\n }\n }\n\n /**\n * Helper function to check that royalties provided are valid\n */\n function _checkRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints) private pure {\n require(receivers.length == basisPoints.length, \"Invalid input\");\n uint256 totalBasisPoints;\n for (uint i; i < basisPoints.length;) {\n totalBasisPoints += basisPoints[i];\n unchecked { ++i; }\n }\n require(totalBasisPoints < 10000, \"Invalid total royalties\");\n }\n\n /**\n * Helper function to set royalties\n */\n function _setRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints, RoyaltyConfig[] storage royalties) private {\n for (uint i; i < basisPoints.length;) {\n royalties.push(\n RoyaltyConfig(\n {\n receiver: receivers[i],\n bps: uint16(basisPoints[i])\n }\n )\n );\n unchecked { ++i; }\n }\n }\n\n /**\n * @dev Set the base contract's approve transfer contract location\n */\n function _setApproveTransferBase(address extension) internal {\n _approveTransferBase = extension;\n emit ApproveTransferUpdated(extension);\n }\n\n /**\n * @dev See {ICreatorCore-getApproveTransfer}.\n */\n function getApproveTransfer() external view override returns (address) {\n return _approveTransferBase;\n }\n\n /**\n * @dev Get the extension for the given token\n */\n function _tokenExtension(uint256 tokenId) internal virtual view returns(address);\n}\n"
},
"@openzeppelin/contracts/utils/Context.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"
},
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\n/**\n * @dev Core creator interface\n */\ninterface ICreatorCore is IERC165 {\n\n event ExtensionRegistered(address indexed extension, address indexed sender);\n event ExtensionUnregistered(address indexed extension, address indexed sender);\n event ExtensionBlacklisted(address indexed extension, address indexed sender);\n event MintPermissionsUpdated(address indexed extension, address indexed permissions, address indexed sender);\n event RoyaltiesUpdated(uint256 indexed tokenId, address payable[] receivers, uint256[] basisPoints);\n event DefaultRoyaltiesUpdated(address payable[] receivers, uint256[] basisPoints);\n event ApproveTransferUpdated(address extension);\n event ExtensionRoyaltiesUpdated(address indexed extension, address payable[] receivers, uint256[] basisPoints);\n event ExtensionApproveTransferUpdated(address indexed extension, bool enabled);\n\n /**\n * @dev gets address of all extensions\n */\n function getExtensions() external view returns (address[] memory);\n\n /**\n * @dev add an extension. Can only be called by contract owner or admin.\n * extension address must point to a contract implementing ICreatorExtension.\n * Returns True if newly added, False if already added.\n */\n function registerExtension(address extension, string calldata baseURI) external;\n\n /**\n * @dev add an extension. Can only be called by contract owner or admin.\n * extension address must point to a contract implementing ICreatorExtension.\n * Returns True if newly added, False if already added.\n */\n function registerExtension(address extension, string calldata baseURI, bool baseURIIdentical) external;\n\n /**\n * @dev add an extension. Can only be called by contract owner or admin.\n * Returns True if removed, False if already removed.\n */\n function unregisterExtension(address extension) external;\n\n /**\n * @dev blacklist an extension. Can only be called by contract owner or admin.\n * This function will destroy all ability to reference the metadata of any tokens created\n * by the specified extension. It will also unregister the extension if needed.\n * Returns True if removed, False if already removed.\n */\n function blacklistExtension(address extension) external;\n\n /**\n * @dev set the baseTokenURI of an extension. Can only be called by extension.\n */\n function setBaseTokenURIExtension(string calldata uri) external;\n\n /**\n * @dev set the baseTokenURI of an extension. Can only be called by extension.\n * For tokens with no uri configured, tokenURI will return \"uri+tokenId\"\n */\n function setBaseTokenURIExtension(string calldata uri, bool identical) external;\n\n /**\n * @dev set the common prefix of an extension. Can only be called by extension.\n * If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\"\n * Useful if you want to use ipfs/arweave\n */\n function setTokenURIPrefixExtension(string calldata prefix) external;\n\n /**\n * @dev set the tokenURI of a token extension. Can only be called by extension that minted token.\n */\n function setTokenURIExtension(uint256 tokenId, string calldata uri) external;\n\n /**\n * @dev set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token.\n */\n function setTokenURIExtension(uint256[] memory tokenId, string[] calldata uri) external;\n\n /**\n * @dev set the baseTokenURI for tokens with no extension. Can only be called by owner/admin.\n * For tokens with no uri configured, tokenURI will return \"uri+tokenId\"\n */\n function setBaseTokenURI(string calldata uri) external;\n\n /**\n * @dev set the common prefix for tokens with no extension. Can only be called by owner/admin.\n * If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\"\n * Useful if you want to use ipfs/arweave\n */\n function setTokenURIPrefix(string calldata prefix) external;\n\n /**\n * @dev set the tokenURI of a token with no extension. Can only be called by owner/admin.\n */\n function setTokenURI(uint256 tokenId, string calldata uri) external;\n\n /**\n * @dev set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin.\n */\n function setTokenURI(uint256[] memory tokenIds, string[] calldata uris) external;\n\n /**\n * @dev set a permissions contract for an extension. Used to control minting.\n */\n function setMintPermissions(address extension, address permissions) external;\n\n /**\n * @dev Configure so transfers of tokens created by the caller (must be extension) gets approval\n * from the extension before transferring\n */\n function setApproveTransferExtension(bool enabled) external;\n\n /**\n * @dev get the extension of a given token\n */\n function tokenExtension(uint256 tokenId) external view returns (address);\n\n /**\n * @dev Set default royalties\n */\n function setRoyalties(address payable[] calldata receivers, uint256[] calldata basisPoints) external;\n\n /**\n * @dev Set royalties of a token\n */\n function setRoyalties(uint256 tokenId, address payable[] calldata receivers, uint256[] calldata basisPoints) external;\n\n /**\n * @dev Set royalties of an extension\n */\n function setRoyaltiesExtension(address extension, address payable[] calldata receivers, uint256[] calldata basisPoints) external;\n\n /**\n * @dev Get royalites of a token. Returns list of receivers and basisPoints\n */\n function getRoyalties(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);\n \n // Royalty support for various other standards\n function getFeeRecipients(uint256 tokenId) external view returns (address payable[] memory);\n function getFeeBps(uint256 tokenId) external view returns (uint[] memory);\n function getFees(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);\n function royaltyInfo(uint256 tokenId, uint256 value) external view returns (address, uint256);\n\n /**\n * @dev Set the default approve transfer contract location.\n */\n function setApproveTransfer(address extension) external; \n\n /**\n * @dev Get the default approve transfer contract location.\n */\n function getApproveTransfer() external view returns (address);\n}\n"
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\n/**\n * @dev Implement this if you want your extension to have overloadable royalties\n */\ninterface ICreatorExtensionRoyalties is IERC165 {\n\n /**\n * Get the royalties for a given creator/tokenId\n */\n function getRoyalties(address creator, uint256 tokenId) external view returns (address payable[] memory, uint256[] memory);\n}\n"
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"@openzeppelin/contracts/utils/introspection/IERC165.sol\";\n\n/**\n * @dev Implement this if you want your extension to have overloadable URI's\n */\ninterface ICreatorExtensionTokenURI is IERC165 {\n\n /**\n * Get the uri for a given creator/tokenId\n */\n function tokenURI(address creator, uint256 tokenId) external view returns (string memory);\n}\n"
},
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n *\n * Furthermore, `isContract` will also return true if the target contract within\n * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,\n * which only has an effect at the end of a transaction.\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface.\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) &&\n !supportsERC165InterfaceUnchecked(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && supportsERC165InterfaceUnchecked(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(\n address account,\n bytes4[] memory interfaceIds\n ) internal view returns (bool[] memory) {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = supportsERC165InterfaceUnchecked(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!supportsERC165InterfaceUnchecked(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n *\n * Some precompiled contracts will falsely indicate support for a given interface, so caution\n * should be exercised when using this function.\n *\n * Interface identification is specified in ERC-165.\n */\n function supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) {\n // prepare call\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n\n // perform static call\n bool success;\n uint256 returnSize;\n uint256 returnValue;\n assembly {\n success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20)\n returnSize := returndatasize()\n returnValue := mload(0x00)\n }\n\n return success && returnSize >= 0x20 && returnValue > 0;\n }\n}\n"
},
"@openzeppelin/contracts/utils/Strings.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\nimport \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toString(int256 value) internal pure returns (string memory) {\n return string(abi.encodePacked(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value))));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n"
},
"@openzeppelin/contracts/security/ReentrancyGuard.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be _NOT_ENTERED\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n }\n\n function _nonReentrantAfter() private {\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _status == _ENTERED;\n }\n}\n"
},
"@openzeppelin/contracts/utils/math/SignedMath.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n"
},
"@openzeppelin/contracts/utils/math/Math.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1, \"Math: mulDiv overflow\");\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol": {
"CreatorCore": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "ApproveTransferUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "DefaultRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "ExtensionApproveTransferUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionBlacklisted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "ExtensionRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionUnregistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "permissions",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "MintPermissionsUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "RoyaltiesUpdated",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "blacklistExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getApproveTransfer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getExtensions",
"outputs": [
{
"internalType": "address[]",
"name": "extensions",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFeeBps",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFeeRecipients",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFees",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getRoyalties",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "string",
"name": "baseURI",
"type": "string"
}
],
"name": "registerExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "string",
"name": "baseURI",
"type": "string"
},
{
"internalType": "bool",
"name": "baseURIIdentical",
"type": "bool"
}
],
"name": "registerExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "royaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransferExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
},
{
"internalType": "bool",
"name": "identical",
"type": "bool"
}
],
"name": "setBaseTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "address",
"name": "permissions",
"type": "address"
}
],
"name": "setMintPermissions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyaltiesExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenId",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uri",
"type": "string[]"
}
],
"name": "setTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "prefix",
"type": "string"
}
],
"name": "setTokenURIPrefix",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "prefix",
"type": "string"
}
],
"name": "setTokenURIPrefixExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenExtension",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "unregisterExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Core creator implementation",
"kind": "dev",
"methods": {
"blacklistExtension(address)": {
"details": "blacklist an extension. Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed."
},
"getApproveTransfer()": {
"details": "See {ICreatorCore-getApproveTransfer}."
},
"getExtensions()": {
"details": "See {ICreatorCore-getExtensions}."
},
"getRoyalties(uint256)": {
"details": "Get royalites of a token. Returns list of receivers and basisPoints"
},
"registerExtension(address,string)": {
"details": "add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
},
"registerExtension(address,string,bool)": {
"details": "add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
},
"setApproveTransfer(address)": {
"details": "Set the default approve transfer contract location."
},
"setApproveTransferExtension(bool)": {
"details": "See {ICreatorCore-setApproveTransferExtension}."
},
"setBaseTokenURI(string)": {
"details": "set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
},
"setBaseTokenURIExtension(string)": {
"details": "set the baseTokenURI of an extension. Can only be called by extension."
},
"setBaseTokenURIExtension(string,bool)": {
"details": "set the baseTokenURI of an extension. Can only be called by extension. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
},
"setMintPermissions(address,address)": {
"details": "set a permissions contract for an extension. Used to control minting."
},
"setRoyalties(address[],uint256[])": {
"details": "Set default royalties"
},
"setRoyalties(uint256,address[],uint256[])": {
"details": "Set royalties of a token"
},
"setRoyaltiesExtension(address,address[],uint256[])": {
"details": "Set royalties of an extension"
},
"setTokenURI(uint256,string)": {
"details": "set the tokenURI of a token with no extension. Can only be called by owner/admin."
},
"setTokenURI(uint256[],string[])": {
"details": "set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin."
},
"setTokenURIExtension(uint256,string)": {
"details": "set the tokenURI of a token extension. Can only be called by extension that minted token."
},
"setTokenURIExtension(uint256[],string[])": {
"details": "set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token."
},
"setTokenURIPrefix(string)": {
"details": "set the common prefix for tokens with no extension. Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
},
"setTokenURIPrefixExtension(string)": {
"details": "set the common prefix of an extension. Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
},
"tokenExtension(uint256)": {
"details": "get the extension of a given token"
},
"unregisterExtension(address)": {
"details": "add an extension. Can only be called by contract owner or admin. Returns True if removed, False if already removed."
}
},
"stateVariables": {
"_INTERFACE_ID_ROYALTIES_CREATORCORE": {
"details": "CreatorCore bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6 => 0xbb3bafd6 = 0xbb3bafd6"
},
"_INTERFACE_ID_ROYALTIES_EIP2981": {
"details": "EIP-2981 bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a => 0x2a55205a = 0x2a55205a"
},
"_INTERFACE_ID_ROYALTIES_FOUNDATION": {
"details": "Foundation bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c => 0xd5a06d4c = 0xd5a06d4c"
},
"_INTERFACE_ID_ROYALTIES_RARIBLE": {
"details": "Rarible: RoyaltiesV1 bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584"
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"blacklistExtension(address)": "02e7afb7",
"getApproveTransfer()": "22f374d0",
"getExtensions()": "83b7db63",
"getFeeBps(uint256)": "0ebd4c7f",
"getFeeRecipients(uint256)": "b9c4d9fb",
"getFees(uint256)": "d5a06d4c",
"getRoyalties(uint256)": "bb3bafd6",
"registerExtension(address,string)": "3071a0f9",
"registerExtension(address,string,bool)": "3f0f37f6",
"royaltyInfo(uint256,uint256)": "2a55205a",
"setApproveTransfer(address)": "596798ad",
"setApproveTransferExtension(bool)": "ac0c8cfa",
"setBaseTokenURI(string)": "30176e13",
"setBaseTokenURIExtension(string)": "3e6134b8",
"setBaseTokenURIExtension(string,bool)": "82dcc0c8",
"setMintPermissions(address,address)": "f0cdc499",
"setRoyalties(address[],uint256[])": "332dd1ae",
"setRoyalties(uint256,address[],uint256[])": "20e4afe2",
"setRoyaltiesExtension(address,address[],uint256[])": "b0fe87c9",
"setTokenURI(uint256,string)": "162094c4",
"setTokenURI(uint256[],string[])": "aafb2d44",
"setTokenURIExtension(uint256,string)": "e92a89f6",
"setTokenURIExtension(uint256[],string[])": "61e5bc6b",
"setTokenURIPrefix(string)": "99e0dd7c",
"setTokenURIPrefixExtension(string)": "66d1e9d0",
"supportsInterface(bytes4)": "01ffc9a7",
"tokenExtension(uint256)": "239be317",
"unregisterExtension(address)": "ce8aee9d"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"ApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"DefaultRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ExtensionApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"ExtensionRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionUnregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"MintPermissionsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"RoyaltiesUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"blacklistExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApproveTransfer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExtensions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"extensions\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeBps\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeRecipients\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFees\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"baseURIIdentical\",\"type\":\"bool\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"setApproveTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setApproveTransferExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"identical\",\"type\":\"bool\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"}],\"name\":\"setMintPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyaltiesExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenId\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uri\",\"type\":\"string[]\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefix\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefixExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"unregisterExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Core creator implementation\",\"kind\":\"dev\",\"methods\":{\"blacklistExtension(address)\":{\"details\":\"blacklist an extension. Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed.\"},\"getApproveTransfer()\":{\"details\":\"See {ICreatorCore-getApproveTransfer}.\"},\"getExtensions()\":{\"details\":\"See {ICreatorCore-getExtensions}.\"},\"getRoyalties(uint256)\":{\"details\":\"Get royalites of a token. Returns list of receivers and basisPoints\"},\"registerExtension(address,string)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"registerExtension(address,string,bool)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"setApproveTransfer(address)\":{\"details\":\"Set the default approve transfer contract location.\"},\"setApproveTransferExtension(bool)\":{\"details\":\"See {ICreatorCore-setApproveTransferExtension}.\"},\"setBaseTokenURI(string)\":{\"details\":\"set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setBaseTokenURIExtension(string)\":{\"details\":\"set the baseTokenURI of an extension. Can only be called by extension.\"},\"setBaseTokenURIExtension(string,bool)\":{\"details\":\"set the baseTokenURI of an extension. Can only be called by extension. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setMintPermissions(address,address)\":{\"details\":\"set a permissions contract for an extension. Used to control minting.\"},\"setRoyalties(address[],uint256[])\":{\"details\":\"Set default royalties\"},\"setRoyalties(uint256,address[],uint256[])\":{\"details\":\"Set royalties of a token\"},\"setRoyaltiesExtension(address,address[],uint256[])\":{\"details\":\"Set royalties of an extension\"},\"setTokenURI(uint256,string)\":{\"details\":\"set the tokenURI of a token with no extension. Can only be called by owner/admin.\"},\"setTokenURI(uint256[],string[])\":{\"details\":\"set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin.\"},\"setTokenURIExtension(uint256,string)\":{\"details\":\"set the tokenURI of a token extension. Can only be called by extension that minted token.\"},\"setTokenURIExtension(uint256[],string[])\":{\"details\":\"set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token.\"},\"setTokenURIPrefix(string)\":{\"details\":\"set the common prefix for tokens with no extension. Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"setTokenURIPrefixExtension(string)\":{\"details\":\"set the common prefix of an extension. Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"tokenExtension(uint256)\":{\"details\":\"get the extension of a given token\"},\"unregisterExtension(address)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. Returns True if removed, False if already removed.\"}},\"stateVariables\":{\"_INTERFACE_ID_ROYALTIES_CREATORCORE\":{\"details\":\"CreatorCore bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6 => 0xbb3bafd6 = 0xbb3bafd6\"},\"_INTERFACE_ID_ROYALTIES_EIP2981\":{\"details\":\"EIP-2981 bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a => 0x2a55205a = 0x2a55205a\"},\"_INTERFACE_ID_ROYALTIES_FOUNDATION\":{\"details\":\"Foundation bytes4(keccak256('getFees(uint256)')) == 0xd5a06d4c => 0xd5a06d4c = 0xd5a06d4c\"},\"_INTERFACE_ID_ROYALTIES_RARIBLE\":{\"details\":\"Rarible: RoyaltiesV1 bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f => 0xb9c4d9fb ^ 0x0ebd4c7f = 0xb7799584\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol\":\"CreatorCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol\":{\"keccak256\":\"0x6e8b20c32d6122ed1d23af683260ea242f1197dc95b063b63ccfac5b90e65f31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bffa862c93d614e9d5727ff595cb8595dbb9eae43bfdf06f65c7331aec09c268\",\"dweb:/ipfs/QmUsPC55S2vdfQWL3HQTYDz66yRFhdbPGCjr1NYyxBT83P\"]},\"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol\":{\"keccak256\":\"0x6bdcb757953594d3a259f1d68ec3d208ca42dba02115f08a6e32e2936ccb0349\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd1853dabcd57eb9b735b3991cf59259cd28cdeca1353495b5c59dc0db2d85df\",\"dweb:/ipfs/QmfJLFZ7RoMvdR7kJLR7QmqreS1x5VNJSa7xvjVsC4mXte\"]},\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol\":{\"keccak256\":\"0xf61dcf7e6bc3e49e629630ad28377f079a31b154ecd0e604d1c0a51ae2a057f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2fda5e6d49a47fbe347ed9198c1fff5555bd687a3a73d2a9f45d5c3a2d053e40\",\"dweb:/ipfs/QmdrLJ3rscxvpMTjdRp1FyhPtYDTDL1CCQyhFeLFuFkFXH\"]},\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol\":{\"keccak256\":\"0x6c8ca804ee7dea9d78f0dacdd9233b1b75ca2b2fa517f52f0fdf6beb34780a51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a04a6f0cce2bbdb022a8125e147519c7fbaa89692c8f0cfee69a67a2956316f\",\"dweb:/ipfs/QmdUxwBEnFshm1j5FEcJctC7DbFWUznis2LaPcKR7FEZX7\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b\",\"dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41319e7f621f2dc3733511332c4fd032f8e32ad2aa7fd6f665c19741d9941a34\",\"dweb:/ipfs/QmcYR3bd862GD1Bc7jwrU9bGxrhUu5na1oP964bDCu2id1\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x5a08ad61f4e82b8a3323562661a86fb10b10190848073fdc13d4ac43710ffba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f7bb74cf88fd88daa34e118bc6e363381d05044f34f391d39a10c0c9dac3ebd\",\"dweb:/ipfs/QmNbQ3v8v4zuDtg7VeLAbdhAm3tCzUodNoDZZ8ekmCHWZX\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df\",\"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 2207,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_status",
"offset": 0,
"slot": "0",
"type": "t_uint256"
},
{
"astId": 30,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_tokenCount",
"offset": 0,
"slot": "1",
"type": "t_uint256"
},
{
"astId": 32,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_approveTransferBase",
"offset": 0,
"slot": "2",
"type": "t_address"
},
{
"astId": 35,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_extensions",
"offset": 0,
"slot": "3",
"type": "t_struct(AddressSet)4039_storage"
},
{
"astId": 38,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_blacklistedExtensions",
"offset": 0,
"slot": "5",
"type": "t_struct(AddressSet)4039_storage"
},
{
"astId": 42,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_extensionBaseURI",
"offset": 0,
"slot": "7",
"type": "t_mapping(t_address,t_string_storage)"
},
{
"astId": 46,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_extensionBaseURIIdentical",
"offset": 0,
"slot": "8",
"type": "t_mapping(t_address,t_bool)"
},
{
"astId": 50,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_extensionURIPrefix",
"offset": 0,
"slot": "9",
"type": "t_mapping(t_address,t_string_storage)"
},
{
"astId": 54,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_tokenURIs",
"offset": 0,
"slot": "10",
"type": "t_mapping(t_uint256,t_string_storage)"
},
{
"astId": 65,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_extensionRoyalty",
"offset": 0,
"slot": "11",
"type": "t_mapping(t_address,t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage)"
},
{
"astId": 71,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_tokenRoyalty",
"offset": 0,
"slot": "12",
"type": "t_mapping(t_uint256,t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage)"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_address_payable": {
"encoding": "inplace",
"label": "address payable",
"numberOfBytes": "20"
},
"t_array(t_bytes32)dyn_storage": {
"base": "t_bytes32",
"encoding": "dynamic_array",
"label": "bytes32[]",
"numberOfBytes": "32"
},
"t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage": {
"base": "t_struct(RoyaltyConfig)59_storage",
"encoding": "dynamic_array",
"label": "struct CreatorCore.RoyaltyConfig[]",
"numberOfBytes": "32"
},
"t_bool": {
"encoding": "inplace",
"label": "bool",
"numberOfBytes": "1"
},
"t_bytes32": {
"encoding": "inplace",
"label": "bytes32",
"numberOfBytes": "32"
},
"t_mapping(t_address,t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage)": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => struct CreatorCore.RoyaltyConfig[])",
"numberOfBytes": "32",
"value": "t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage"
},
"t_mapping(t_address,t_bool)": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => bool)",
"numberOfBytes": "32",
"value": "t_bool"
},
"t_mapping(t_address,t_string_storage)": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => string)",
"numberOfBytes": "32",
"value": "t_string_storage"
},
"t_mapping(t_bytes32,t_uint256)": {
"encoding": "mapping",
"key": "t_bytes32",
"label": "mapping(bytes32 => uint256)",
"numberOfBytes": "32",
"value": "t_uint256"
},
"t_mapping(t_uint256,t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage)": {
"encoding": "mapping",
"key": "t_uint256",
"label": "mapping(uint256 => struct CreatorCore.RoyaltyConfig[])",
"numberOfBytes": "32",
"value": "t_array(t_struct(RoyaltyConfig)59_storage)dyn_storage"
},
"t_mapping(t_uint256,t_string_storage)": {
"encoding": "mapping",
"key": "t_uint256",
"label": "mapping(uint256 => string)",
"numberOfBytes": "32",
"value": "t_string_storage"
},
"t_string_storage": {
"encoding": "bytes",
"label": "string",
"numberOfBytes": "32"
},
"t_struct(AddressSet)4039_storage": {
"encoding": "inplace",
"label": "struct EnumerableSet.AddressSet",
"members": [
{
"astId": 4038,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_inner",
"offset": 0,
"slot": "0",
"type": "t_struct(Set)3724_storage"
}
],
"numberOfBytes": "64"
},
"t_struct(RoyaltyConfig)59_storage": {
"encoding": "inplace",
"label": "struct CreatorCore.RoyaltyConfig",
"members": [
{
"astId": 56,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "receiver",
"offset": 0,
"slot": "0",
"type": "t_address_payable"
},
{
"astId": 58,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "bps",
"offset": 20,
"slot": "0",
"type": "t_uint16"
}
],
"numberOfBytes": "32"
},
"t_struct(Set)3724_storage": {
"encoding": "inplace",
"label": "struct EnumerableSet.Set",
"members": [
{
"astId": 3719,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_values",
"offset": 0,
"slot": "0",
"type": "t_array(t_bytes32)dyn_storage"
},
{
"astId": 3723,
"contract": "@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol:CreatorCore",
"label": "_indexes",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_bytes32,t_uint256)"
}
],
"numberOfBytes": "64"
},
"t_uint16": {
"encoding": "inplace",
"label": "uint16",
"numberOfBytes": "2"
},
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol": {
"ICreatorCore": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "ApproveTransferUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "DefaultRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "ExtensionApproveTransferUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionBlacklisted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "ExtensionRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionUnregistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "permissions",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "MintPermissionsUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "RoyaltiesUpdated",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "blacklistExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getApproveTransfer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getExtensions",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFeeBps",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFeeRecipients",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFees",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getRoyalties",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "string",
"name": "baseURI",
"type": "string"
}
],
"name": "registerExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "string",
"name": "baseURI",
"type": "string"
},
{
"internalType": "bool",
"name": "baseURIIdentical",
"type": "bool"
}
],
"name": "registerExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "royaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransferExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
},
{
"internalType": "bool",
"name": "identical",
"type": "bool"
}
],
"name": "setBaseTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "address",
"name": "permissions",
"type": "address"
}
],
"name": "setMintPermissions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyaltiesExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenId",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uri",
"type": "string[]"
}
],
"name": "setTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "prefix",
"type": "string"
}
],
"name": "setTokenURIPrefix",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "prefix",
"type": "string"
}
],
"name": "setTokenURIPrefixExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenExtension",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "unregisterExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Core creator interface",
"kind": "dev",
"methods": {
"blacklistExtension(address)": {
"details": "blacklist an extension. Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed."
},
"getApproveTransfer()": {
"details": "Get the default approve transfer contract location."
},
"getExtensions()": {
"details": "gets address of all extensions"
},
"getRoyalties(uint256)": {
"details": "Get royalites of a token. Returns list of receivers and basisPoints"
},
"registerExtension(address,string)": {
"details": "add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
},
"registerExtension(address,string,bool)": {
"details": "add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
},
"setApproveTransfer(address)": {
"details": "Set the default approve transfer contract location."
},
"setApproveTransferExtension(bool)": {
"details": "Configure so transfers of tokens created by the caller (must be extension) gets approval from the extension before transferring"
},
"setBaseTokenURI(string)": {
"details": "set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
},
"setBaseTokenURIExtension(string)": {
"details": "set the baseTokenURI of an extension. Can only be called by extension."
},
"setBaseTokenURIExtension(string,bool)": {
"details": "set the baseTokenURI of an extension. Can only be called by extension. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
},
"setMintPermissions(address,address)": {
"details": "set a permissions contract for an extension. Used to control minting."
},
"setRoyalties(address[],uint256[])": {
"details": "Set default royalties"
},
"setRoyalties(uint256,address[],uint256[])": {
"details": "Set royalties of a token"
},
"setRoyaltiesExtension(address,address[],uint256[])": {
"details": "Set royalties of an extension"
},
"setTokenURI(uint256,string)": {
"details": "set the tokenURI of a token with no extension. Can only be called by owner/admin."
},
"setTokenURI(uint256[],string[])": {
"details": "set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin."
},
"setTokenURIExtension(uint256,string)": {
"details": "set the tokenURI of a token extension. Can only be called by extension that minted token."
},
"setTokenURIExtension(uint256[],string[])": {
"details": "set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token."
},
"setTokenURIPrefix(string)": {
"details": "set the common prefix for tokens with no extension. Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
},
"setTokenURIPrefixExtension(string)": {
"details": "set the common prefix of an extension. Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
},
"supportsInterface(bytes4)": {
"details": "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."
},
"tokenExtension(uint256)": {
"details": "get the extension of a given token"
},
"unregisterExtension(address)": {
"details": "add an extension. Can only be called by contract owner or admin. Returns True if removed, False if already removed."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"blacklistExtension(address)": "02e7afb7",
"getApproveTransfer()": "22f374d0",
"getExtensions()": "83b7db63",
"getFeeBps(uint256)": "0ebd4c7f",
"getFeeRecipients(uint256)": "b9c4d9fb",
"getFees(uint256)": "d5a06d4c",
"getRoyalties(uint256)": "bb3bafd6",
"registerExtension(address,string)": "3071a0f9",
"registerExtension(address,string,bool)": "3f0f37f6",
"royaltyInfo(uint256,uint256)": "2a55205a",
"setApproveTransfer(address)": "596798ad",
"setApproveTransferExtension(bool)": "ac0c8cfa",
"setBaseTokenURI(string)": "30176e13",
"setBaseTokenURIExtension(string)": "3e6134b8",
"setBaseTokenURIExtension(string,bool)": "82dcc0c8",
"setMintPermissions(address,address)": "f0cdc499",
"setRoyalties(address[],uint256[])": "332dd1ae",
"setRoyalties(uint256,address[],uint256[])": "20e4afe2",
"setRoyaltiesExtension(address,address[],uint256[])": "b0fe87c9",
"setTokenURI(uint256,string)": "162094c4",
"setTokenURI(uint256[],string[])": "aafb2d44",
"setTokenURIExtension(uint256,string)": "e92a89f6",
"setTokenURIExtension(uint256[],string[])": "61e5bc6b",
"setTokenURIPrefix(string)": "99e0dd7c",
"setTokenURIPrefixExtension(string)": "66d1e9d0",
"supportsInterface(bytes4)": "01ffc9a7",
"tokenExtension(uint256)": "239be317",
"unregisterExtension(address)": "ce8aee9d"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"ApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"DefaultRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ExtensionApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"ExtensionRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionUnregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"MintPermissionsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"RoyaltiesUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"blacklistExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApproveTransfer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExtensions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeBps\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeRecipients\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFees\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"baseURIIdentical\",\"type\":\"bool\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"setApproveTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setApproveTransferExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"identical\",\"type\":\"bool\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"}],\"name\":\"setMintPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyaltiesExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenId\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uri\",\"type\":\"string[]\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefix\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefixExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"unregisterExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Core creator interface\",\"kind\":\"dev\",\"methods\":{\"blacklistExtension(address)\":{\"details\":\"blacklist an extension. Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed.\"},\"getApproveTransfer()\":{\"details\":\"Get the default approve transfer contract location.\"},\"getExtensions()\":{\"details\":\"gets address of all extensions\"},\"getRoyalties(uint256)\":{\"details\":\"Get royalites of a token. Returns list of receivers and basisPoints\"},\"registerExtension(address,string)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"registerExtension(address,string,bool)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"setApproveTransfer(address)\":{\"details\":\"Set the default approve transfer contract location.\"},\"setApproveTransferExtension(bool)\":{\"details\":\"Configure so transfers of tokens created by the caller (must be extension) gets approval from the extension before transferring\"},\"setBaseTokenURI(string)\":{\"details\":\"set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setBaseTokenURIExtension(string)\":{\"details\":\"set the baseTokenURI of an extension. Can only be called by extension.\"},\"setBaseTokenURIExtension(string,bool)\":{\"details\":\"set the baseTokenURI of an extension. Can only be called by extension. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setMintPermissions(address,address)\":{\"details\":\"set a permissions contract for an extension. Used to control minting.\"},\"setRoyalties(address[],uint256[])\":{\"details\":\"Set default royalties\"},\"setRoyalties(uint256,address[],uint256[])\":{\"details\":\"Set royalties of a token\"},\"setRoyaltiesExtension(address,address[],uint256[])\":{\"details\":\"Set royalties of an extension\"},\"setTokenURI(uint256,string)\":{\"details\":\"set the tokenURI of a token with no extension. Can only be called by owner/admin.\"},\"setTokenURI(uint256[],string[])\":{\"details\":\"set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin.\"},\"setTokenURIExtension(uint256,string)\":{\"details\":\"set the tokenURI of a token extension. Can only be called by extension that minted token.\"},\"setTokenURIExtension(uint256[],string[])\":{\"details\":\"set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token.\"},\"setTokenURIPrefix(string)\":{\"details\":\"set the common prefix for tokens with no extension. Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"setTokenURIPrefixExtension(string)\":{\"details\":\"set the common prefix of an extension. Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"supportsInterface(bytes4)\":{\"details\":\"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.\"},\"tokenExtension(uint256)\":{\"details\":\"get the extension of a given token\"},\"unregisterExtension(address)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. Returns True if removed, False if already removed.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol\":\"ICreatorCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol\":{\"keccak256\":\"0x6bdcb757953594d3a259f1d68ec3d208ca42dba02115f08a6e32e2936ccb0349\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd1853dabcd57eb9b735b3991cf59259cd28cdeca1353495b5c59dc0db2d85df\",\"dweb:/ipfs/QmfJLFZ7RoMvdR7kJLR7QmqreS1x5VNJSa7xvjVsC4mXte\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol": {
"IERC1155CreatorCore": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "ApproveTransferUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "DefaultRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "ExtensionApproveTransferUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionBlacklisted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionRegistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "ExtensionRoyaltiesUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ExtensionUnregistered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "permissions",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "MintPermissionsUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "RoyaltiesUpdated",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "blacklistExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getApproveTransfer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getExtensions",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFeeBps",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFeeRecipients",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getFees",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getRoyalties",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "mintBaseExisting",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "mintBaseNew",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "mintExtensionExisting",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "mintExtensionNew",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "string",
"name": "baseURI",
"type": "string"
}
],
"name": "registerExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "string",
"name": "baseURI",
"type": "string"
},
{
"internalType": "bool",
"name": "baseURIIdentical",
"type": "bool"
}
],
"name": "registerExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "royaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransferExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setBaseTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
},
{
"internalType": "bool",
"name": "identical",
"type": "bool"
}
],
"name": "setBaseTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "address",
"name": "permissions",
"type": "address"
}
],
"name": "setMintPermissions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyalties",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
},
{
"internalType": "address payable[]",
"name": "receivers",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "basisPoints",
"type": "uint256[]"
}
],
"name": "setRoyaltiesExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "setTokenURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenId",
"type": "uint256[]"
},
{
"internalType": "string[]",
"name": "uri",
"type": "string[]"
}
],
"name": "setTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setTokenURIExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "prefix",
"type": "string"
}
],
"name": "setTokenURIPrefix",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "prefix",
"type": "string"
}
],
"name": "setTokenURIPrefixExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenExtension",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "extension",
"type": "address"
}
],
"name": "unregisterExtension",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Core ERC1155 creator interface",
"kind": "dev",
"methods": {
"blacklistExtension(address)": {
"details": "blacklist an extension. Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed."
},
"burn(address,uint256[],uint256[])": {
"details": "burn tokens. Can only be called by token owner or approved address. On burn, calls back to the registered extension's onBurn method"
},
"getApproveTransfer()": {
"details": "Get the default approve transfer contract location."
},
"getExtensions()": {
"details": "gets address of all extensions"
},
"getRoyalties(uint256)": {
"details": "Get royalites of a token. Returns list of receivers and basisPoints"
},
"mintBaseExisting(address[],uint256[],uint256[])": {
"details": "batch mint existing token with no extension. Can only be called by an admin.",
"params": {
"amounts": "- Can be a single element array (all recipients get the same amount) or a multi-element array Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays Examples: mintBaseExisting(['0x....1', '0x....2'], [1], [10]) Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'. mintBaseExisting(['0x....1', '0x....2'], [1, 2], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'. mintBaseExisting(['0x....1'], [1, 2], [10, 20]) Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'. mintBaseExisting(['0x....1', '0x....2'], [1], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'. ",
"to": "- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)",
"tokenIds": "- Can be a single element array (all recipients get the same token) or a multi-element array"
}
},
"mintBaseNew(address[],uint256[],string[])": {
"details": "mint a token with no extension. Can only be called by an admin.",
"params": {
"amounts": "- Can be a single element array (all recipients get the same amount) or a multi-element array",
"to": "- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)",
"uris": "- If no elements, all tokens use the default uri. If any element is an empty string, the corresponding token uses the default uri. Requirements: If to is a multi-element array, then uris must be empty or single element array If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size If to is a single element array, uris must be empty or the same length as amounts Examples: mintBaseNew(['0x....1', '0x....2'], [1], []) Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri. mintBaseNew(['0x....1', '0x....2'], [1, 2], []) Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri. mintBaseNew(['0x....1'], [1, 2], [\"\", \"http://token2.com\"]) Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses \"http://token2.com\". "
},
"returns": {
"_0": "Returns list of tokenIds minted"
}
},
"mintExtensionExisting(address[],uint256[],uint256[])": {
"details": "batch mint existing token from extension. Can only be called by a registered extension.",
"params": {
"amounts": "- Can be a single element array (all recipients get the same amount) or a multi-element array Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays Examples: mintExtensionExisting(['0x....1', '0x....2'], [1], [10]) Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'. mintExtensionExisting(['0x....1', '0x....2'], [1, 2], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'. mintExtensionExisting(['0x....1'], [1, 2], [10, 20]) Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'. mintExtensionExisting(['0x....1', '0x....2'], [1], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'. ",
"to": "- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)",
"tokenIds": "- Can be a single element array (all recipients get the same token) or a multi-element array"
}
},
"mintExtensionNew(address[],uint256[],string[])": {
"details": "mint a token from an extension. Can only be called by a registered extension.",
"params": {
"amounts": "- Can be a single element array (all recipients get the same amount) or a multi-element array",
"to": "- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)",
"uris": "- If no elements, all tokens use the default uri. If any element is an empty string, the corresponding token uses the default uri. Requirements: If to is a multi-element array, then uris must be empty or single element array If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size If to is a single element array, uris must be empty or the same length as amounts Examples: mintExtensionNew(['0x....1', '0x....2'], [1], []) Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri. mintExtensionNew(['0x....1', '0x....2'], [1, 2], []) Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri. mintExtensionNew(['0x....1'], [1, 2], [\"\", \"http://token2.com\"]) Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses \"http://token2.com\". "
},
"returns": {
"_0": "Returns list of tokenIds minted"
}
},
"registerExtension(address,string)": {
"details": "add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
},
"registerExtension(address,string,bool)": {
"details": "add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added."
},
"setApproveTransfer(address)": {
"details": "Set the default approve transfer contract location."
},
"setApproveTransferExtension(bool)": {
"details": "Configure so transfers of tokens created by the caller (must be extension) gets approval from the extension before transferring"
},
"setBaseTokenURI(string)": {
"details": "set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
},
"setBaseTokenURIExtension(string)": {
"details": "set the baseTokenURI of an extension. Can only be called by extension."
},
"setBaseTokenURIExtension(string,bool)": {
"details": "set the baseTokenURI of an extension. Can only be called by extension. For tokens with no uri configured, tokenURI will return \"uri+tokenId\""
},
"setMintPermissions(address,address)": {
"details": "set a permissions contract for an extension. Used to control minting."
},
"setRoyalties(address[],uint256[])": {
"details": "Set default royalties"
},
"setRoyalties(uint256,address[],uint256[])": {
"details": "Set royalties of a token"
},
"setRoyaltiesExtension(address,address[],uint256[])": {
"details": "Set royalties of an extension"
},
"setTokenURI(uint256,string)": {
"details": "set the tokenURI of a token with no extension. Can only be called by owner/admin."
},
"setTokenURI(uint256[],string[])": {
"details": "set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin."
},
"setTokenURIExtension(uint256,string)": {
"details": "set the tokenURI of a token extension. Can only be called by extension that minted token."
},
"setTokenURIExtension(uint256[],string[])": {
"details": "set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token."
},
"setTokenURIPrefix(string)": {
"details": "set the common prefix for tokens with no extension. Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
},
"setTokenURIPrefixExtension(string)": {
"details": "set the common prefix of an extension. Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \"prefixURI+tokenURI\" Useful if you want to use ipfs/arweave"
},
"supportsInterface(bytes4)": {
"details": "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."
},
"tokenExtension(uint256)": {
"details": "get the extension of a given token"
},
"totalSupply(uint256)": {
"details": "Total amount of tokens in with a given tokenId."
},
"unregisterExtension(address)": {
"details": "add an extension. Can only be called by contract owner or admin. Returns True if removed, False if already removed."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"blacklistExtension(address)": "02e7afb7",
"burn(address,uint256[],uint256[])": "3db0f8ab",
"getApproveTransfer()": "22f374d0",
"getExtensions()": "83b7db63",
"getFeeBps(uint256)": "0ebd4c7f",
"getFeeRecipients(uint256)": "b9c4d9fb",
"getFees(uint256)": "d5a06d4c",
"getRoyalties(uint256)": "bb3bafd6",
"mintBaseExisting(address[],uint256[],uint256[])": "695c96e6",
"mintBaseNew(address[],uint256[],string[])": "feeb5a9a",
"mintExtensionExisting(address[],uint256[],uint256[])": "e6c884dc",
"mintExtensionNew(address[],uint256[],string[])": "8c6e8472",
"registerExtension(address,string)": "3071a0f9",
"registerExtension(address,string,bool)": "3f0f37f6",
"royaltyInfo(uint256,uint256)": "2a55205a",
"setApproveTransfer(address)": "596798ad",
"setApproveTransferExtension(bool)": "ac0c8cfa",
"setBaseTokenURI(string)": "30176e13",
"setBaseTokenURIExtension(string)": "3e6134b8",
"setBaseTokenURIExtension(string,bool)": "82dcc0c8",
"setMintPermissions(address,address)": "f0cdc499",
"setRoyalties(address[],uint256[])": "332dd1ae",
"setRoyalties(uint256,address[],uint256[])": "20e4afe2",
"setRoyaltiesExtension(address,address[],uint256[])": "b0fe87c9",
"setTokenURI(uint256,string)": "162094c4",
"setTokenURI(uint256[],string[])": "aafb2d44",
"setTokenURIExtension(uint256,string)": "e92a89f6",
"setTokenURIExtension(uint256[],string[])": "61e5bc6b",
"setTokenURIPrefix(string)": "99e0dd7c",
"setTokenURIPrefixExtension(string)": "66d1e9d0",
"supportsInterface(bytes4)": "01ffc9a7",
"tokenExtension(uint256)": "239be317",
"totalSupply(uint256)": "bd85b039",
"unregisterExtension(address)": "ce8aee9d"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"ApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"DefaultRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"ExtensionApproveTransferUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionBlacklisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"ExtensionRoyaltiesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ExtensionUnregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"MintPermissionsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"RoyaltiesUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"blacklistExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getApproveTransfer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getExtensions\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeBps\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFeeRecipients\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getFees\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintBaseExisting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"mintBaseNew\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"mintExtensionExisting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"to\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"mintExtensionNew\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"baseURIIdentical\",\"type\":\"bool\"}],\"name\":\"registerExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"setApproveTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setApproveTransferExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"identical\",\"type\":\"bool\"}],\"name\":\"setBaseTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"permissions\",\"type\":\"address\"}],\"name\":\"setMintPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyalties\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"},{\"internalType\":\"address payable[]\",\"name\":\"receivers\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"basisPoints\",\"type\":\"uint256[]\"}],\"name\":\"setRoyaltiesExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"setTokenURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenId\",\"type\":\"uint256[]\"},{\"internalType\":\"string[]\",\"name\":\"uri\",\"type\":\"string[]\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"setTokenURIExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefix\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"prefix\",\"type\":\"string\"}],\"name\":\"setTokenURIPrefixExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"extension\",\"type\":\"address\"}],\"name\":\"unregisterExtension\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Core ERC1155 creator interface\",\"kind\":\"dev\",\"methods\":{\"blacklistExtension(address)\":{\"details\":\"blacklist an extension. Can only be called by contract owner or admin. This function will destroy all ability to reference the metadata of any tokens created by the specified extension. It will also unregister the extension if needed. Returns True if removed, False if already removed.\"},\"burn(address,uint256[],uint256[])\":{\"details\":\"burn tokens. Can only be called by token owner or approved address. On burn, calls back to the registered extension's onBurn method\"},\"getApproveTransfer()\":{\"details\":\"Get the default approve transfer contract location.\"},\"getExtensions()\":{\"details\":\"gets address of all extensions\"},\"getRoyalties(uint256)\":{\"details\":\"Get royalites of a token. Returns list of receivers and basisPoints\"},\"mintBaseExisting(address[],uint256[],uint256[])\":{\"details\":\"batch mint existing token with no extension. Can only be called by an admin.\",\"params\":{\"amounts\":\"- Can be a single element array (all recipients get the same amount) or a multi-element array Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays Examples: mintBaseExisting(['0x....1', '0x....2'], [1], [10]) Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'. mintBaseExisting(['0x....1', '0x....2'], [1, 2], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'. mintBaseExisting(['0x....1'], [1, 2], [10, 20]) Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'. mintBaseExisting(['0x....1', '0x....2'], [1], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'. \",\"to\":\"- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\",\"tokenIds\":\"- Can be a single element array (all recipients get the same token) or a multi-element array\"}},\"mintBaseNew(address[],uint256[],string[])\":{\"details\":\"mint a token with no extension. Can only be called by an admin.\",\"params\":{\"amounts\":\"- Can be a single element array (all recipients get the same amount) or a multi-element array\",\"to\":\"- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\",\"uris\":\"- If no elements, all tokens use the default uri. If any element is an empty string, the corresponding token uses the default uri. Requirements: If to is a multi-element array, then uris must be empty or single element array If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size If to is a single element array, uris must be empty or the same length as amounts Examples: mintBaseNew(['0x....1', '0x....2'], [1], []) Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri. mintBaseNew(['0x....1', '0x....2'], [1, 2], []) Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri. mintBaseNew(['0x....1'], [1, 2], [\\\"\\\", \\\"http://token2.com\\\"]) Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses \\\"http://token2.com\\\". \"},\"returns\":{\"_0\":\"Returns list of tokenIds minted\"}},\"mintExtensionExisting(address[],uint256[],uint256[])\":{\"details\":\"batch mint existing token from extension. Can only be called by a registered extension.\",\"params\":{\"amounts\":\"- Can be a single element array (all recipients get the same amount) or a multi-element array Requirements: If any of the parameters are multi-element arrays, they need to be the same length as other multi-element arrays Examples: mintExtensionExisting(['0x....1', '0x....2'], [1], [10]) Mints 10 of tokenId 1 to each of '0x....1' and '0x....2'. mintExtensionExisting(['0x....1', '0x....2'], [1, 2], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 2 to '0x....2'. mintExtensionExisting(['0x....1'], [1, 2], [10, 20]) Mints 10 of tokenId 1 and 20 of tokenId 2 to '0x....1'. mintExtensionExisting(['0x....1', '0x....2'], [1], [10, 20]) Mints 10 of tokenId 1 to '0x....1' and 20 of tokenId 1 to '0x....2'. \",\"to\":\"- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\",\"tokenIds\":\"- Can be a single element array (all recipients get the same token) or a multi-element array\"}},\"mintExtensionNew(address[],uint256[],string[])\":{\"details\":\"mint a token from an extension. Can only be called by a registered extension.\",\"params\":{\"amounts\":\"- Can be a single element array (all recipients get the same amount) or a multi-element array\",\"to\":\"- Can be a single element array (all tokens go to same address) or multi-element array (single token to many recipients)\",\"uris\":\"- If no elements, all tokens use the default uri. If any element is an empty string, the corresponding token uses the default uri. Requirements: If to is a multi-element array, then uris must be empty or single element array If to is a multi-element array, then amounts must be a single element array or a multi-element array of the same size If to is a single element array, uris must be empty or the same length as amounts Examples: mintExtensionNew(['0x....1', '0x....2'], [1], []) Mints a single new token, and gives 1 each to '0x....1' and '0x....2'. Token uses default uri. mintExtensionNew(['0x....1', '0x....2'], [1, 2], []) Mints a single new token, and gives 1 to '0x....1' and 2 to '0x....2'. Token uses default uri. mintExtensionNew(['0x....1'], [1, 2], [\\\"\\\", \\\"http://token2.com\\\"]) Mints two new tokens to '0x....1'. 1 of the first token, 2 of the second. 1st token uses default uri, second uses \\\"http://token2.com\\\". \"},\"returns\":{\"_0\":\"Returns list of tokenIds minted\"}},\"registerExtension(address,string)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"registerExtension(address,string,bool)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. extension address must point to a contract implementing ICreatorExtension. Returns True if newly added, False if already added.\"},\"setApproveTransfer(address)\":{\"details\":\"Set the default approve transfer contract location.\"},\"setApproveTransferExtension(bool)\":{\"details\":\"Configure so transfers of tokens created by the caller (must be extension) gets approval from the extension before transferring\"},\"setBaseTokenURI(string)\":{\"details\":\"set the baseTokenURI for tokens with no extension. Can only be called by owner/admin. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setBaseTokenURIExtension(string)\":{\"details\":\"set the baseTokenURI of an extension. Can only be called by extension.\"},\"setBaseTokenURIExtension(string,bool)\":{\"details\":\"set the baseTokenURI of an extension. Can only be called by extension. For tokens with no uri configured, tokenURI will return \\\"uri+tokenId\\\"\"},\"setMintPermissions(address,address)\":{\"details\":\"set a permissions contract for an extension. Used to control minting.\"},\"setRoyalties(address[],uint256[])\":{\"details\":\"Set default royalties\"},\"setRoyalties(uint256,address[],uint256[])\":{\"details\":\"Set royalties of a token\"},\"setRoyaltiesExtension(address,address[],uint256[])\":{\"details\":\"Set royalties of an extension\"},\"setTokenURI(uint256,string)\":{\"details\":\"set the tokenURI of a token with no extension. Can only be called by owner/admin.\"},\"setTokenURI(uint256[],string[])\":{\"details\":\"set the tokenURI of multiple tokens with no extension. Can only be called by owner/admin.\"},\"setTokenURIExtension(uint256,string)\":{\"details\":\"set the tokenURI of a token extension. Can only be called by extension that minted token.\"},\"setTokenURIExtension(uint256[],string[])\":{\"details\":\"set the tokenURI of a token extension for multiple tokens. Can only be called by extension that minted token.\"},\"setTokenURIPrefix(string)\":{\"details\":\"set the common prefix for tokens with no extension. Can only be called by owner/admin. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"setTokenURIPrefixExtension(string)\":{\"details\":\"set the common prefix of an extension. Can only be called by extension. If configured, and a token has a uri set, tokenURI will return \\\"prefixURI+tokenURI\\\" Useful if you want to use ipfs/arweave\"},\"supportsInterface(bytes4)\":{\"details\":\"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.\"},\"tokenExtension(uint256)\":{\"details\":\"get the extension of a given token\"},\"totalSupply(uint256)\":{\"details\":\"Total amount of tokens in with a given tokenId.\"},\"unregisterExtension(address)\":{\"details\":\"add an extension. Can only be called by contract owner or admin. Returns True if removed, False if already removed.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol\":\"IERC1155CreatorCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol\":{\"keccak256\":\"0x6e8b20c32d6122ed1d23af683260ea242f1197dc95b063b63ccfac5b90e65f31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bffa862c93d614e9d5727ff595cb8595dbb9eae43bfdf06f65c7331aec09c268\",\"dweb:/ipfs/QmUsPC55S2vdfQWL3HQTYDz66yRFhdbPGCjr1NYyxBT83P\"]},\"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol\":{\"keccak256\":\"0x6bdcb757953594d3a259f1d68ec3d208ca42dba02115f08a6e32e2936ccb0349\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd1853dabcd57eb9b735b3991cf59259cd28cdeca1353495b5c59dc0db2d85df\",\"dweb:/ipfs/QmfJLFZ7RoMvdR7kJLR7QmqreS1x5VNJSa7xvjVsC4mXte\"]},\"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol\":{\"keccak256\":\"0xc91d0050b622fbb41b7516c6a8c75ab6236e6a52feab681d36fb75b8b49fc8c0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f045081bb40c91837c076530bb07b9f8b7fa77cbd1191748a12920f01f1678f8\",\"dweb:/ipfs/QmP5kx53wBz2eUqZV26ttYJmsHP7R9n3rF6dAbTjVPh5gL\"]},\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol\":{\"keccak256\":\"0xf61dcf7e6bc3e49e629630ad28377f079a31b154ecd0e604d1c0a51ae2a057f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2fda5e6d49a47fbe347ed9198c1fff5555bd687a3a73d2a9f45d5c3a2d053e40\",\"dweb:/ipfs/QmdrLJ3rscxvpMTjdRp1FyhPtYDTDL1CCQyhFeLFuFkFXH\"]},\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol\":{\"keccak256\":\"0x6c8ca804ee7dea9d78f0dacdd9233b1b75ca2b2fa517f52f0fdf6beb34780a51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a04a6f0cce2bbdb022a8125e147519c7fbaa89692c8f0cfee69a67a2956316f\",\"dweb:/ipfs/QmdUxwBEnFshm1j5FEcJctC7DbFWUznis2LaPcKR7FEZX7\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b\",\"dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq\"]},\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41319e7f621f2dc3733511332c4fd032f8e32ad2aa7fd6f665c19741d9941a34\",\"dweb:/ipfs/QmcYR3bd862GD1Bc7jwrU9bGxrhUu5na1oP964bDCu2id1\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x5a08ad61f4e82b8a3323562661a86fb10b10190848073fdc13d4ac43710ffba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f7bb74cf88fd88daa34e118bc6e363381d05044f34f391d39a10c0c9dac3ebd\",\"dweb:/ipfs/QmNbQ3v8v4zuDtg7VeLAbdhAm3tCzUodNoDZZ8ekmCHWZX\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df\",\"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol": {
"IERC1155CreatorExtensionApproveTransfer": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "approveTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"approveTransfer(address,address,address,uint256[],uint256[])": {
"details": "Called by creator contract to approve a transfer"
},
"setApproveTransfer(address,bool)": {
"details": "Set whether or not the creator contract will check the extension for approval of token transfer"
},
"supportsInterface(bytes4)": {
"details": "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."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"approveTransfer(address,address,address,uint256[],uint256[])": "e4835177",
"setApproveTransfer(address,bool)": "1b95a227",
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"approveTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setApproveTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveTransfer(address,address,address,uint256[],uint256[])\":{\"details\":\"Called by creator contract to approve a transfer\"},\"setApproveTransfer(address,bool)\":{\"details\":\"Set whether or not the creator contract will check the extension for approval of token transfer\"},\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Implement this if you want your extension to approve a transfer\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol\":\"IERC1155CreatorExtensionApproveTransfer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol\":{\"keccak256\":\"0x721390972cc45ff82d97046f5b9e560369a4bf25ae1db2ee0998c8dfc484b782\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f564087ce1ed42a2dbb0bd4dd463643ebb51dc8662c6a8ff34b073d94f38ca24\",\"dweb:/ipfs/QmNyZnZLe3dTxpCVLxA2hKamUjDUhds4BjSb7EvegS52yS\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"notice": "Implement this if you want your extension to approve a transfer",
"version": 1
}
}
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol": {
"ICreatorExtensionRoyalties": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getRoyalties",
"outputs": [
{
"internalType": "address payable[]",
"name": "",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "Implement this if you want your extension to have overloadable royalties",
"kind": "dev",
"methods": {
"supportsInterface(bytes4)": {
"details": "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."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"getRoyalties(address,uint256)": "9ca7dc7a",
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"internalType\":\"address payable[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implement this if you want your extension to have overloadable royalties\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRoyalties(address,uint256)\":{\"notice\":\"Get the royalties for a given creator/tokenId\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol\":\"ICreatorExtensionRoyalties\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol\":{\"keccak256\":\"0xf61dcf7e6bc3e49e629630ad28377f079a31b154ecd0e604d1c0a51ae2a057f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2fda5e6d49a47fbe347ed9198c1fff5555bd687a3a73d2a9f45d5c3a2d053e40\",\"dweb:/ipfs/QmdrLJ3rscxvpMTjdRp1FyhPtYDTDL1CCQyhFeLFuFkFXH\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"getRoyalties(address,uint256)": {
"notice": "Get the royalties for a given creator/tokenId"
}
},
"version": 1
}
}
},
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol": {
"ICreatorExtensionTokenURI": {
"abi": [
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "Implement this if you want your extension to have overloadable URI's",
"kind": "dev",
"methods": {
"supportsInterface(bytes4)": {
"details": "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."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"supportsInterface(bytes4)": "01ffc9a7",
"tokenURI(address,uint256)": "e9dc6375"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implement this if you want your extension to have overloadable URI's\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"tokenURI(address,uint256)\":{\"notice\":\"Get the uri for a given creator/tokenId\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol\":\"ICreatorExtensionTokenURI\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol\":{\"keccak256\":\"0x6c8ca804ee7dea9d78f0dacdd9233b1b75ca2b2fa517f52f0fdf6beb34780a51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a04a6f0cce2bbdb022a8125e147519c7fbaa89692c8f0cfee69a67a2956316f\",\"dweb:/ipfs/QmdUxwBEnFshm1j5FEcJctC7DbFWUznis2LaPcKR7FEZX7\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {
"tokenURI(address,uint256)": {
"notice": "Get the uri for a given creator/tokenId"
}
},
"version": 1
}
}
},
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol": {
"AdminControl": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminApproved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminRevoked",
"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"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "approveAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getAdmins",
"outputs": [
{
"internalType": "address[]",
"name": "admins",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "revokeAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"approveAdmin(address)": {
"details": "See {IAdminControl-approveAdmin}."
},
"getAdmins()": {
"details": "See {IAdminControl-getAdmins}."
},
"isAdmin(address)": {
"details": "See {IAdminControl-isAdmin}."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"revokeAdmin(address)": {
"details": "See {IAdminControl-revokeAdmin}."
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"approveAdmin(address)": "6d73e669",
"getAdmins()": "31ae450b",
"isAdmin(address)": "24d7806c",
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"revokeAdmin(address)": "2d345670",
"supportsInterface(bytes4)": "01ffc9a7",
"transferOwnership(address)": "f2fde38b"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AdminApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AdminRevoked\",\"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\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"approveAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmins\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"admins\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"revokeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveAdmin(address)\":{\"details\":\"See {IAdminControl-approveAdmin}.\"},\"getAdmins()\":{\"details\":\"See {IAdminControl-getAdmins}.\"},\"isAdmin(address)\":{\"details\":\"See {IAdminControl-isAdmin}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"revokeAdmin(address)\":{\"details\":\"See {IAdminControl-revokeAdmin}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":\"AdminControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":{\"keccak256\":\"0xaed5e7784e33745ab1b16f1d87b22084a8b25d531c1dcb8dc41fc2a89e2617da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://44837a9cc639062b2d7424a10e9d579b8d3a9bc1cefede2cfbb917bee8f452ae\",\"dweb:/ipfs/QmburkqmRDZYWjKPRUynhdfkAfP5QDKcXH4WCbH1JC8UDq\"]},\"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol\":{\"keccak256\":\"0x7cc2e4e7d9052532f445e62ec1fa2f05cc0f5d1d8ee1fea913b43a132277bf2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://266618317d0654fe209b5450b8b5afa3a4a8d41294a2b37ddbae540099859887\",\"dweb:/ipfs/QmYksDqoxhachoqZquXGtjfiuAWJ1rxAKLtUYPL3YboBkE\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df\",\"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 2091,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
},
{
"astId": 1540,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_admins",
"offset": 0,
"slot": "1",
"type": "t_struct(AddressSet)4039_storage"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_array(t_bytes32)dyn_storage": {
"base": "t_bytes32",
"encoding": "dynamic_array",
"label": "bytes32[]",
"numberOfBytes": "32"
},
"t_bytes32": {
"encoding": "inplace",
"label": "bytes32",
"numberOfBytes": "32"
},
"t_mapping(t_bytes32,t_uint256)": {
"encoding": "mapping",
"key": "t_bytes32",
"label": "mapping(bytes32 => uint256)",
"numberOfBytes": "32",
"value": "t_uint256"
},
"t_struct(AddressSet)4039_storage": {
"encoding": "inplace",
"label": "struct EnumerableSet.AddressSet",
"members": [
{
"astId": 4038,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_inner",
"offset": 0,
"slot": "0",
"type": "t_struct(Set)3724_storage"
}
],
"numberOfBytes": "64"
},
"t_struct(Set)3724_storage": {
"encoding": "inplace",
"label": "struct EnumerableSet.Set",
"members": [
{
"astId": 3719,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_values",
"offset": 0,
"slot": "0",
"type": "t_array(t_bytes32)dyn_storage"
},
{
"astId": 3723,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_indexes",
"offset": 0,
"slot": "1",
"type": "t_mapping(t_bytes32,t_uint256)"
}
],
"numberOfBytes": "64"
},
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol": {
"IAdminControl": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminApproved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminRevoked",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "approveAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getAdmins",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "revokeAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "Interface for admin control",
"kind": "dev",
"methods": {
"approveAdmin(address)": {
"details": "add an admin. Can only be called by contract owner."
},
"getAdmins()": {
"details": "gets address of all admins"
},
"isAdmin(address)": {
"details": "checks whether or not given address is an admin Returns True if they are"
},
"revokeAdmin(address)": {
"details": "remove an admin. Can only be called by contract owner."
},
"supportsInterface(bytes4)": {
"details": "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."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"approveAdmin(address)": "6d73e669",
"getAdmins()": "31ae450b",
"isAdmin(address)": "24d7806c",
"revokeAdmin(address)": "2d345670",
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AdminApproved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AdminRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"approveAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAdmins\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"revokeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for admin control\",\"kind\":\"dev\",\"methods\":{\"approveAdmin(address)\":{\"details\":\"add an admin. Can only be called by contract owner.\"},\"getAdmins()\":{\"details\":\"gets address of all admins\"},\"isAdmin(address)\":{\"details\":\"checks whether or not given address is an admin Returns True if they are\"},\"revokeAdmin(address)\":{\"details\":\"remove an admin. Can only be called by contract owner.\"},\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol\":\"IAdminControl\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol\":{\"keccak256\":\"0x7cc2e4e7d9052532f445e62ec1fa2f05cc0f5d1d8ee1fea913b43a132277bf2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://266618317d0654fe209b5450b8b5afa3a4a8d41294a2b37ddbae540099859887\",\"dweb:/ipfs/QmYksDqoxhachoqZquXGtjfiuAWJ1rxAKLtUYPL3YboBkE\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": {
"AddressUpgradeable": {
"abi": [],
"devdoc": {
"details": "Collection of functions related to the address type",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":194:9374 library AddressUpgradeable {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":194:9374 library AddressUpgradeable {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220e1e81d06f794b6904b45d3f960374dfb635fb61dd133ccef6cfd6da7056794d964736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e1e81d06f794b6904b45d3f960374dfb635fb61dd133ccef6cfd6da7056794d964736f6c63430008120033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE1 0xE8 SAR MOD 0xF7 SWAP5 0xB6 SWAP1 0x4B GASLIMIT 0xD3 0xF9 PUSH1 0x37 0x4D 0xFB PUSH4 0x5FB61DD1 CALLER 0xCC 0xEF PUSH13 0xFD6DA7056794D964736F6C6343 STOP ADDMOD SLT STOP CALLER ",
"sourceMap": "194:9180:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e1e81d06f794b6904b45d3f960374dfb635fb61dd133ccef6cfd6da7056794d964736f6c63430008120033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE1 0xE8 SAR MOD 0xF7 SWAP5 0xB6 SWAP1 0x4B GASLIMIT 0xD3 0xF9 PUSH1 0x37 0x4D 0xFB PUSH4 0x5FB61DD1 CALLER 0xCC 0xEF PUSH13 0xFD6DA7056794D964736F6C6343 STOP ADDMOD SLT STOP CALLER ",
"sourceMap": "194:9180:8:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"_revert(bytes memory,string memory)": "infinite",
"functionCall(address,bytes memory)": "infinite",
"functionCall(address,bytes memory,string memory)": "infinite",
"functionCallWithValue(address,bytes memory,uint256)": "infinite",
"functionCallWithValue(address,bytes memory,uint256,string memory)": "infinite",
"functionDelegateCall(address,bytes memory)": "infinite",
"functionDelegateCall(address,bytes memory,string memory)": "infinite",
"functionStaticCall(address,bytes memory)": "infinite",
"functionStaticCall(address,bytes memory,string memory)": "infinite",
"isContract(address)": "infinite",
"sendValue(address payable,uint256)": "infinite",
"verifyCallResult(bool,bytes memory,string memory)": "infinite",
"verifyCallResultFromTarget(address,bool,bytes memory,string memory)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 194,
"end": 9374,
"name": "PUSH #[$]",
"source": 8,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 9374,
"name": "PUSH [$]",
"source": 8,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "B"
},
{
"begin": 194,
"end": 9374,
"name": "DUP3",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "DUP3",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "DUP3",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "CODECOPY",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "DUP1",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "MLOAD",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 194,
"end": 9374,
"name": "BYTE",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "73"
},
{
"begin": 194,
"end": 9374,
"name": "EQ",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH [tag]",
"source": 8,
"value": "1"
},
{
"begin": 194,
"end": 9374,
"name": "JUMPI",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 194,
"end": 9374,
"name": "MSTORE",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "4"
},
{
"begin": 194,
"end": 9374,
"name": "MSTORE",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "24"
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 194,
"end": 9374,
"name": "REVERT",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "tag",
"source": 8,
"value": "1"
},
{
"begin": 194,
"end": 9374,
"name": "JUMPDEST",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "ADDRESS",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 194,
"end": 9374,
"name": "MSTORE",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "73"
},
{
"begin": 194,
"end": 9374,
"name": "DUP2",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "MSTORE8",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "DUP3",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "DUP2",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "RETURN",
"source": 8
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220e1e81d06f794b6904b45d3f960374dfb635fb61dd133ccef6cfd6da7056794d964736f6c63430008120033",
".code": [
{
"begin": 194,
"end": 9374,
"name": "PUSHDEPLOYADDRESS",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "ADDRESS",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "EQ",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "80"
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "40"
},
{
"begin": 194,
"end": 9374,
"name": "MSTORE",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 194,
"end": 9374,
"name": "DUP1",
"source": 8
},
{
"begin": 194,
"end": 9374,
"name": "REVERT",
"source": 8
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol",
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol",
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"@openzeppelin/contracts/access/Ownable.sol",
"@openzeppelin/contracts/security/ReentrancyGuard.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.sol",
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/math/Math.sol",
"@openzeppelin/contracts/utils/math/SignedMath.sol",
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
"contracts/IoSingleTransferExt.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":\"AddressUpgradeable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b\",\"dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/access/Ownable.sol": {
"Ownable": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.",
"kind": "dev",
"methods": {
"constructor": {
"details": "Initializes the contract setting the deployer as the initial owner."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"owner()": "8da5cb5b",
"renounceOwnership()": "715018a6",
"transferOwnership(address)": "f2fde38b"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xba43b97fba0d32eb4254f6a5a297b39a19a247082a02d6e69349e071e2946218\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc980984badf3984b6303b377711220e067722bbd6a135b24669ff5069ef9f32\",\"dweb:/ipfs/QmPHXMSXj99XjSVM21YsY6aNtLLjLVXDbyN76J5HQYvvrz\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 2091,
"contract": "@openzeppelin/contracts/access/Ownable.sol:Ownable",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/security/ReentrancyGuard.sol": {
"ReentrancyGuard": {
"abi": [],
"devdoc": {
"details": "Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Contract module that helps prevent reentrant calls to a function. Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier available, which can be applied to functions to make sure there are no nested (reentrant) calls to them. Note that because there is a single `nonReentrant` guard, functions marked as `nonReentrant` may not call one another. This can be worked around by making those functions `private`, and then adding `external` `nonReentrant` entry points to them. TIP: If you would like to learn more about reentrancy and alternative ways to protect against it, check out our blog post https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":\"ReentrancyGuard\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/ReentrancyGuard.sol\":{\"keccak256\":\"0xa535a5df777d44e945dd24aa43a11e44b024140fc340ad0dfe42acf4002aade1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://41319e7f621f2dc3733511332c4fd032f8e32ad2aa7fd6f665c19741d9941a34\",\"dweb:/ipfs/QmcYR3bd862GD1Bc7jwrU9bGxrhUu5na1oP964bDCu2id1\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 2207,
"contract": "@openzeppelin/contracts/security/ReentrancyGuard.sol:ReentrancyGuard",
"label": "_status",
"offset": 0,
"slot": "0",
"type": "t_uint256"
}
],
"types": {
"t_uint256": {
"encoding": "inplace",
"label": "uint256",
"numberOfBytes": "32"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/Context.sol": {
"Context": {
"abi": [],
"devdoc": {
"details": "Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/Strings.sol": {
"Strings": {
"abi": [],
"devdoc": {
"details": "String operations.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/Strings.sol\":220:2779 library Strings {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/Strings.sol\":220:2779 library Strings {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220ab6a269a65f5803da06b288908b4f00629e38397f6d295ec471d84279be2e1d564736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ab6a269a65f5803da06b288908b4f00629e38397f6d295ec471d84279be2e1d564736f6c63430008120033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB PUSH11 0x269A65F5803DA06B288908 0xB4 CREATE MOD 0x29 0xE3 DUP4 SWAP8 0xF6 0xD2 SWAP6 0xEC SELFBALANCE SAR DUP5 0x27 SWAP12 0xE2 0xE1 0xD5 PUSH5 0x736F6C6343 STOP ADDMOD SLT STOP CALLER ",
"sourceMap": "220:2559:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ab6a269a65f5803da06b288908b4f00629e38397f6d295ec471d84279be2e1d564736f6c63430008120033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB PUSH11 0x269A65F5803DA06B288908 0xB4 CREATE MOD 0x29 0xE3 DUP4 SWAP8 0xF6 0xD2 SWAP6 0xEC SELFBALANCE SAR DUP5 0x27 SWAP12 0xE2 0xE1 0xD5 PUSH5 0x736F6C6343 STOP ADDMOD SLT STOP CALLER ",
"sourceMap": "220:2559:12:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"equal(string memory,string memory)": "infinite",
"toHexString(address)": "infinite",
"toHexString(uint256)": "infinite",
"toHexString(uint256,uint256)": "infinite",
"toString(int256)": "infinite",
"toString(uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 220,
"end": 2779,
"name": "PUSH #[$]",
"source": 12,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH [$]",
"source": 12,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "B"
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "CODECOPY",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "DUP1",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "MLOAD",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "BYTE",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "73"
},
{
"begin": 220,
"end": 2779,
"name": "EQ",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH [tag]",
"source": 12,
"value": "1"
},
{
"begin": 220,
"end": 2779,
"name": "JUMPI",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "4"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "24"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "REVERT",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "tag",
"source": 12,
"value": "1"
},
{
"begin": 220,
"end": 2779,
"name": "JUMPDEST",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "ADDRESS",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "73"
},
{
"begin": 220,
"end": 2779,
"name": "DUP2",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE8",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "DUP2",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "RETURN",
"source": 12
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220ab6a269a65f5803da06b288908b4f00629e38397f6d295ec471d84279be2e1d564736f6c63430008120033",
".code": [
{
"begin": 220,
"end": 2779,
"name": "PUSHDEPLOYADDRESS",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "ADDRESS",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "EQ",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "80"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "40"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "DUP1",
"source": 12
},
{
"begin": 220,
"end": 2779,
"name": "REVERT",
"source": 12
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol",
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol",
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"@openzeppelin/contracts/access/Ownable.sol",
"@openzeppelin/contracts/security/ReentrancyGuard.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.sol",
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/math/Math.sol",
"@openzeppelin/contracts/utils/math/SignedMath.sol",
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
"contracts/IoSingleTransferExt.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x3088eb2868e8d13d89d16670b5f8612c4ab9ff8956272837d8e90106c59c14a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b81d9ff6559ea5c47fc573e17ece6d9ba5d6839e213e6ebc3b4c5c8fe4199d7f\",\"dweb:/ipfs/QmPCW1bFisUzJkyjroY3yipwfism9RRCigCcK1hbXtVM8n\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/introspection/ERC165.sol": {
"ERC165": {
"abi": [
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.",
"kind": "dev",
"methods": {
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ``` Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol": {
"ERC165Checker": {
"abi": [],
"devdoc": {
"details": "Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":449:5070 library ERC165Checker {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":449:5070 library ERC165Checker {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220abb98ed54d4ad0677d5cb3ca83e6ac385b8aabd9cbd67135529df91276a5173b64736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220abb98ed54d4ad0677d5cb3ca83e6ac385b8aabd9cbd67135529df91276a5173b64736f6c63430008120033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB 0xB9 DUP15 0xD5 0x4D 0x4A 0xD0 PUSH8 0x7D5CB3CA83E6AC38 JUMPDEST DUP11 0xAB 0xD9 0xCB 0xD6 PUSH18 0x35529DF91276A5173B64736F6C6343000812 STOP CALLER ",
"sourceMap": "449:4621:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220abb98ed54d4ad0677d5cb3ca83e6ac385b8aabd9cbd67135529df91276a5173b64736f6c63430008120033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAB 0xB9 DUP15 0xD5 0x4D 0x4A 0xD0 PUSH8 0x7D5CB3CA83E6AC38 JUMPDEST DUP11 0xAB 0xD9 0xCB 0xD6 PUSH18 0x35529DF91276A5173B64736F6C6343000812 STOP CALLER ",
"sourceMap": "449:4621:14:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"getSupportedInterfaces(address,bytes4[] memory)": "infinite",
"supportsAllInterfaces(address,bytes4[] memory)": "infinite",
"supportsERC165(address)": "infinite",
"supportsERC165InterfaceUnchecked(address,bytes4)": "infinite",
"supportsInterface(address,bytes4)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 449,
"end": 5070,
"name": "PUSH #[$]",
"source": 14,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 449,
"end": 5070,
"name": "PUSH [$]",
"source": 14,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "B"
},
{
"begin": 449,
"end": 5070,
"name": "DUP3",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "DUP3",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "DUP3",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "CODECOPY",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "DUP1",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "MLOAD",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "0"
},
{
"begin": 449,
"end": 5070,
"name": "BYTE",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "73"
},
{
"begin": 449,
"end": 5070,
"name": "EQ",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH [tag]",
"source": 14,
"value": "1"
},
{
"begin": 449,
"end": 5070,
"name": "JUMPI",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "0"
},
{
"begin": 449,
"end": 5070,
"name": "MSTORE",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "0"
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "4"
},
{
"begin": 449,
"end": 5070,
"name": "MSTORE",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "24"
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "0"
},
{
"begin": 449,
"end": 5070,
"name": "REVERT",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "tag",
"source": 14,
"value": "1"
},
{
"begin": 449,
"end": 5070,
"name": "JUMPDEST",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "ADDRESS",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "0"
},
{
"begin": 449,
"end": 5070,
"name": "MSTORE",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "73"
},
{
"begin": 449,
"end": 5070,
"name": "DUP2",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "MSTORE8",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "DUP3",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "DUP2",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "RETURN",
"source": 14
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220abb98ed54d4ad0677d5cb3ca83e6ac385b8aabd9cbd67135529df91276a5173b64736f6c63430008120033",
".code": [
{
"begin": 449,
"end": 5070,
"name": "PUSHDEPLOYADDRESS",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "ADDRESS",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "EQ",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "80"
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "40"
},
{
"begin": 449,
"end": 5070,
"name": "MSTORE",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "PUSH",
"source": 14,
"value": "0"
},
{
"begin": 449,
"end": 5070,
"name": "DUP1",
"source": 14
},
{
"begin": 449,
"end": 5070,
"name": "REVERT",
"source": 14
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol",
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol",
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"@openzeppelin/contracts/access/Ownable.sol",
"@openzeppelin/contracts/security/ReentrancyGuard.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.sol",
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/math/Math.sol",
"@openzeppelin/contracts/utils/math/SignedMath.sol",
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
"contracts/IoSingleTransferExt.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library used to query support of an interface declared via {IERC165}. Note that these functions return the actual result of the query: they do not `revert` if an interface is not supported. It is up to the caller to decide what to do in these cases.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":\"ERC165Checker\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0x5a08ad61f4e82b8a3323562661a86fb10b10190848073fdc13d4ac43710ffba5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f7bb74cf88fd88daa34e118bc6e363381d05044f34f391d39a10c0c9dac3ebd\",\"dweb:/ipfs/QmNbQ3v8v4zuDtg7VeLAbdhAm3tCzUodNoDZZ8ekmCHWZX\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/introspection/IERC165.sol": {
"IERC165": {
"abi": [
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "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}.",
"kind": "dev",
"methods": {
"supportsInterface(bytes4)": {
"details": "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."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/math/Math.sol": {
"Math": {
"abi": [],
"devdoc": {
"details": "Standard math utilities missing in the Solidity language.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/math/Math.sol\":202:12784 library Math {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":202:12784 library Math {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212209150934ab0c91ee4f9e04d862390c6531c91524dc4cebd8ff4df5e5c5f78cf9a64736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209150934ab0c91ee4f9e04d862390c6531c91524dc4cebd8ff4df5e5c5f78cf9a64736f6c63430008120033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 POP SWAP4 0x4A 0xB0 0xC9 0x1E 0xE4 0xF9 0xE0 0x4D DUP7 0x23 SWAP1 0xC6 MSTORE8 SHR SWAP2 MSTORE 0x4D 0xC4 0xCE 0xBD DUP16 DELEGATECALL 0xDF 0x5E 0x5C 0x5F PUSH25 0xCF9A64736F6C63430008120033000000000000000000000000 ",
"sourceMap": "202:12582:16:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209150934ab0c91ee4f9e04d862390c6531c91524dc4cebd8ff4df5e5c5f78cf9a64736f6c63430008120033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP2 POP SWAP4 0x4A 0xB0 0xC9 0x1E 0xE4 0xF9 0xE0 0x4D DUP7 0x23 SWAP1 0xC6 MSTORE8 SHR SWAP2 MSTORE 0x4D 0xC4 0xCE 0xBD DUP16 DELEGATECALL 0xDF 0x5E 0x5C 0x5F PUSH25 0xCF9A64736F6C63430008120033000000000000000000000000 ",
"sourceMap": "202:12582:16:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"average(uint256,uint256)": "infinite",
"ceilDiv(uint256,uint256)": "infinite",
"log10(uint256)": "infinite",
"log10(uint256,enum Math.Rounding)": "infinite",
"log2(uint256)": "infinite",
"log2(uint256,enum Math.Rounding)": "infinite",
"log256(uint256)": "infinite",
"log256(uint256,enum Math.Rounding)": "infinite",
"max(uint256,uint256)": "infinite",
"min(uint256,uint256)": "infinite",
"mulDiv(uint256,uint256,uint256)": "infinite",
"mulDiv(uint256,uint256,uint256,enum Math.Rounding)": "infinite",
"sqrt(uint256)": "infinite",
"sqrt(uint256,enum Math.Rounding)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 202,
"end": 12784,
"name": "PUSH #[$]",
"source": 16,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH [$]",
"source": 16,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "B"
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "CODECOPY",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "DUP1",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "MLOAD",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "BYTE",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "73"
},
{
"begin": 202,
"end": 12784,
"name": "EQ",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH [tag]",
"source": 16,
"value": "1"
},
{
"begin": 202,
"end": 12784,
"name": "JUMPI",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "4"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "24"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "REVERT",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "tag",
"source": 16,
"value": "1"
},
{
"begin": 202,
"end": 12784,
"name": "JUMPDEST",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "ADDRESS",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "73"
},
{
"begin": 202,
"end": 12784,
"name": "DUP2",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE8",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "DUP2",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "RETURN",
"source": 16
}
],
".data": {
"0": {
".auxdata": "a26469706673582212209150934ab0c91ee4f9e04d862390c6531c91524dc4cebd8ff4df5e5c5f78cf9a64736f6c63430008120033",
".code": [
{
"begin": 202,
"end": 12784,
"name": "PUSHDEPLOYADDRESS",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "ADDRESS",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "EQ",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "80"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "40"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 16,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "DUP1",
"source": 16
},
{
"begin": 202,
"end": 12784,
"name": "REVERT",
"source": 16
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol",
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol",
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"@openzeppelin/contracts/access/Ownable.sol",
"@openzeppelin/contracts/security/ReentrancyGuard.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.sol",
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/math/Math.sol",
"@openzeppelin/contracts/utils/math/SignedMath.sol",
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
"contracts/IoSingleTransferExt.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xe4455ac1eb7fc497bb7402579e7b4d64d928b846fce7d2b6fde06d366f21c2b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cc8841b3cd48ad125e2f46323c8bad3aa0e88e399ec62acb9e57efa7e7c8058c\",\"dweb:/ipfs/QmSqE4mXHA2BXW58deDbXE8MTcsL5JSKNDbm23sVQxRLPS\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/math/SignedMath.sol": {
"SignedMath": {
"abi": [],
"devdoc": {
"details": "Standard signed math utilities missing in the Solidity language.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/math/SignedMath.sol\":215:1262 library SignedMath {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/math/SignedMath.sol\":215:1262 library SignedMath {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa2646970667358221220d721ecf1dbea5e9bc0132744e6031bb93b88801904ab98161f4e012e5110763064736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d721ecf1dbea5e9bc0132744e6031bb93b88801904ab98161f4e012e5110763064736f6c63430008120033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 0x21 0xEC CALL 0xDB 0xEA 0x5E SWAP12 0xC0 SGT 0x27 PREVRANDAO 0xE6 SUB SHL 0xB9 EXTCODESIZE DUP9 DUP1 NOT DIV 0xAB SWAP9 AND 0x1F 0x4E ADD 0x2E MLOAD LT PUSH23 0x3064736F6C634300081200330000000000000000000000 ",
"sourceMap": "215:1047:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d721ecf1dbea5e9bc0132744e6031bb93b88801904ab98161f4e012e5110763064736f6c63430008120033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD7 0x21 0xEC CALL 0xDB 0xEA 0x5E SWAP12 0xC0 SGT 0x27 PREVRANDAO 0xE6 SUB SHL 0xB9 EXTCODESIZE DUP9 DUP1 NOT DIV 0xAB SWAP9 AND 0x1F 0x4E ADD 0x2E MLOAD LT PUSH23 0x3064736F6C634300081200330000000000000000000000 ",
"sourceMap": "215:1047:17:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"abs(int256)": "infinite",
"average(int256,int256)": "infinite",
"max(int256,int256)": "infinite",
"min(int256,int256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 215,
"end": 1262,
"name": "PUSH #[$]",
"source": 17,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH [$]",
"source": 17,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "B"
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "CODECOPY",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "DUP1",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "MLOAD",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "BYTE",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "73"
},
{
"begin": 215,
"end": 1262,
"name": "EQ",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH [tag]",
"source": 17,
"value": "1"
},
{
"begin": 215,
"end": 1262,
"name": "JUMPI",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "4"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "24"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "REVERT",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "tag",
"source": 17,
"value": "1"
},
{
"begin": 215,
"end": 1262,
"name": "JUMPDEST",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "ADDRESS",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "73"
},
{
"begin": 215,
"end": 1262,
"name": "DUP2",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE8",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "DUP2",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "RETURN",
"source": 17
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220d721ecf1dbea5e9bc0132744e6031bb93b88801904ab98161f4e012e5110763064736f6c63430008120033",
".code": [
{
"begin": 215,
"end": 1262,
"name": "PUSHDEPLOYADDRESS",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "ADDRESS",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "EQ",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "80"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "40"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 17,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "DUP1",
"source": 17
},
{
"begin": 215,
"end": 1262,
"name": "REVERT",
"source": 17
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol",
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol",
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"@openzeppelin/contracts/access/Ownable.sol",
"@openzeppelin/contracts/security/ReentrancyGuard.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.sol",
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/math/Math.sol",
"@openzeppelin/contracts/utils/math/SignedMath.sol",
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
"contracts/IoSingleTransferExt.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol": {
"EnumerableSet": {
"abi": [],
"devdoc": {
"details": "Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ```solidity contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":1329:12959 library EnumerableSet {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":1329:12959 library EnumerableSet {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212206728774bc3951bceaefc40b21aea722a3a50c2711b871663923cbc8fcbe3b39464736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206728774bc3951bceaefc40b21aea722a3a50c2711b871663923cbc8fcbe3b39464736f6c63430008120033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x28774BC3951BCEAE 0xFC BLOCKHASH 0xB2 BYTE 0xEA PUSH19 0x2A3A50C2711B871663923CBC8FCBE3B3946473 PUSH16 0x6C634300081200330000000000000000 ",
"sourceMap": "1329:11630:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206728774bc3951bceaefc40b21aea722a3a50c2711b871663923cbc8fcbe3b39464736f6c63430008120033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x28774BC3951BCEAE 0xFC BLOCKHASH 0xB2 BYTE 0xEA PUSH19 0x2A3A50C2711B871663923CBC8FCBE3B3946473 PUSH16 0x6C634300081200330000000000000000 ",
"sourceMap": "1329:11630:18:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"_add(struct EnumerableSet.Set storage pointer,bytes32)": "infinite",
"_at(struct EnumerableSet.Set storage pointer,uint256)": "infinite",
"_contains(struct EnumerableSet.Set storage pointer,bytes32)": "infinite",
"_length(struct EnumerableSet.Set storage pointer)": "infinite",
"_remove(struct EnumerableSet.Set storage pointer,bytes32)": "infinite",
"_values(struct EnumerableSet.Set storage pointer)": "infinite",
"add(struct EnumerableSet.AddressSet storage pointer,address)": "infinite",
"add(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite",
"add(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
"at(struct EnumerableSet.AddressSet storage pointer,uint256)": "infinite",
"at(struct EnumerableSet.Bytes32Set storage pointer,uint256)": "infinite",
"at(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
"contains(struct EnumerableSet.AddressSet storage pointer,address)": "infinite",
"contains(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite",
"contains(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
"length(struct EnumerableSet.AddressSet storage pointer)": "infinite",
"length(struct EnumerableSet.Bytes32Set storage pointer)": "infinite",
"length(struct EnumerableSet.UintSet storage pointer)": "infinite",
"remove(struct EnumerableSet.AddressSet storage pointer,address)": "infinite",
"remove(struct EnumerableSet.Bytes32Set storage pointer,bytes32)": "infinite",
"remove(struct EnumerableSet.UintSet storage pointer,uint256)": "infinite",
"values(struct EnumerableSet.AddressSet storage pointer)": "infinite",
"values(struct EnumerableSet.Bytes32Set storage pointer)": "infinite",
"values(struct EnumerableSet.UintSet storage pointer)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 1329,
"end": 12959,
"name": "PUSH #[$]",
"source": 18,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH [$]",
"source": 18,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "B"
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "CODECOPY",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "DUP1",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "MLOAD",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "BYTE",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "73"
},
{
"begin": 1329,
"end": 12959,
"name": "EQ",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH [tag]",
"source": 18,
"value": "1"
},
{
"begin": 1329,
"end": 12959,
"name": "JUMPI",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "4"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "24"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "REVERT",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "tag",
"source": 18,
"value": "1"
},
{
"begin": 1329,
"end": 12959,
"name": "JUMPDEST",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "ADDRESS",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "73"
},
{
"begin": 1329,
"end": 12959,
"name": "DUP2",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE8",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "DUP2",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "RETURN",
"source": 18
}
],
".data": {
"0": {
".auxdata": "a26469706673582212206728774bc3951bceaefc40b21aea722a3a50c2711b871663923cbc8fcbe3b39464736f6c63430008120033",
".code": [
{
"begin": 1329,
"end": 12959,
"name": "PUSHDEPLOYADDRESS",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "ADDRESS",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "EQ",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "80"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "40"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 18,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "DUP1",
"source": 18
},
{
"begin": 1329,
"end": 12959,
"name": "REVERT",
"source": 18
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC1155CreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionRoyalties.sol",
"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol",
"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol",
"@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol",
"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol",
"@openzeppelin/contracts/access/Ownable.sol",
"@openzeppelin/contracts/security/ReentrancyGuard.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.sol",
"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
"@openzeppelin/contracts/utils/introspection/IERC165.sol",
"@openzeppelin/contracts/utils/math/Math.sol",
"@openzeppelin/contracts/utils/math/SignedMath.sol",
"@openzeppelin/contracts/utils/structs/EnumerableSet.sol",
"contracts/IoSingleTransferExt.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for managing https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ```solidity contract Example { // Add the library methods using EnumerableSet for EnumerableSet.AddressSet; // Declare a set state variable EnumerableSet.AddressSet private mySet; } ``` As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) and `uint256` (`UintSet`) are supported. [WARNING] ==== Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. ====\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":\"EnumerableSet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df\",\"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"contracts/IoSingleTransferExt.sol": {
"IoSingleTransferExt": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminApproved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "AdminRevoked",
"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"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "approveAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "approveTransfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getAdmins",
"outputs": [
{
"internalType": "address[]",
"name": "admins",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "isAdmin",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "admin",
"type": "address"
}
],
"name": "revokeAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
},
{
"internalType": "bool",
"name": "enabled",
"type": "bool"
}
],
"name": "setApproveTransfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"kind": "dev",
"methods": {
"approveAdmin(address)": {
"details": "See {IAdminControl-approveAdmin}."
},
"approveTransfer(address,address,address,uint256[],uint256[])": {
"details": "Called by creator contract to approve a transfer"
},
"getAdmins()": {
"details": "See {IAdminControl-getAdmins}."
},
"isAdmin(address)": {
"details": "See {IAdminControl-isAdmin}."
},
"owner()": {
"details": "Returns the address of the current owner."
},
"renounceOwnership()": {
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
},
"revokeAdmin(address)": {
"details": "See {IAdminControl-revokeAdmin}."
},
"setApproveTransfer(address,bool)": {
"details": "Set whether or not the creator contract will check the extension for approval of token transfer"
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
},
"transferOwnership(address)": {
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
}
},
"version": 1
},
"evm": {
"assembly": " /* \"contracts/IoSingleTransferExt.sol\":368:1137 contract IoSingleTransferExt is AdminControl, IERC1155CreatorExtensionApproveTransfer{... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":936:968 _transferOwnership(_msgSender()) */\n tag_4\n /* \"@openzeppelin/contracts/access/Ownable.sol\":955:967 _msgSender() */\n tag_5\n /* \"@openzeppelin/contracts/access/Ownable.sol\":955:965 _msgSender */\n shl(0x20, tag_6)\n /* \"@openzeppelin/contracts/access/Ownable.sol\":955:967 _msgSender() */\n 0x20\n shr\n jump\t// in\ntag_5:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":936:954 _transferOwnership */\n shl(0x20, tag_7)\n /* \"@openzeppelin/contracts/access/Ownable.sol\":936:968 _transferOwnership(_msgSender()) */\n 0x20\n shr\n jump\t// in\ntag_4:\n /* \"contracts/IoSingleTransferExt.sol\":368:1137 contract IoSingleTransferExt is AdminControl, IERC1155CreatorExtensionApproveTransfer{... */\n jump(tag_8)\n /* \"@openzeppelin/contracts/utils/Context.sol\":640:736 function _msgSender() internal view virtual returns (address) {... */\ntag_6:\n /* \"@openzeppelin/contracts/utils/Context.sol\":693:700 address */\n 0x00\n /* \"@openzeppelin/contracts/utils/Context.sol\":719:729 msg.sender */\n caller\n /* \"@openzeppelin/contracts/utils/Context.sol\":712:729 return msg.sender */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/Context.sol\":640:736 function _msgSender() internal view virtual returns (address) {... */\n swap1\n jump\t// out\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2426:2613 function _transferOwnership(address newOwner) internal virtual {... */\ntag_7:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2499:2515 address oldOwner */\n 0x00\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2518:2524 _owner */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2499:2524 address oldOwner = _owner */\n swap1\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2543:2551 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2534:2540 _owner */\n 0x00\n dup1\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2534:2551 _owner = newOwner */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2597:2605 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2566:2606 OwnershipTransferred(oldOwner, newOwner) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2587:2595 oldOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2566:2606 OwnershipTransferred(oldOwner, newOwner) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2489:2613 {... */\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2426:2613 function _transferOwnership(address newOwner) internal virtual {... */\n pop\n jump\t// out\n /* \"contracts/IoSingleTransferExt.sol\":368:1137 contract IoSingleTransferExt is AdminControl, IERC1155CreatorExtensionApproveTransfer{... */\ntag_8:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"contracts/IoSingleTransferExt.sol\":368:1137 contract IoSingleTransferExt is AdminControl, IERC1155CreatorExtensionApproveTransfer{... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x6d73e669\n gt\n tag_13\n jumpi\n dup1\n 0x6d73e669\n eq\n tag_8\n jumpi\n dup1\n 0x715018a6\n eq\n tag_9\n jumpi\n dup1\n 0x8da5cb5b\n eq\n tag_10\n jumpi\n dup1\n 0xe4835177\n eq\n tag_11\n jumpi\n dup1\n 0xf2fde38b\n eq\n tag_12\n jumpi\n jump(tag_2)\n tag_13:\n dup1\n 0x01ffc9a7\n eq\n tag_3\n jumpi\n dup1\n 0x1b95a227\n eq\n tag_4\n jumpi\n dup1\n 0x24d7806c\n eq\n tag_5\n jumpi\n dup1\n 0x2d345670\n eq\n tag_6\n jumpi\n dup1\n 0x31ae450b\n eq\n tag_7\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":565:795 function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {... */\n tag_3:\n tag_14\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n tag_17\n jump\t// in\n tag_14:\n mload(0x40)\n tag_18\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"contracts/IoSingleTransferExt.sol\":583:690 function setApproveTransfer(address creator, bool enabled) external override adminRequired {... */\n tag_4:\n tag_20\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_21\n swap2\n swap1\n tag_22\n jump\t// in\n tag_21:\n tag_23\n jump\t// in\n tag_20:\n stop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1980:2117 function isAdmin(address admin) public override view returns (bool) {... */\n tag_5:\n tag_24\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_25\n swap2\n swap1\n tag_26\n jump\t// in\n tag_25:\n tag_27\n jump\t// in\n tag_24:\n mload(0x40)\n tag_28\n swap2\n swap1\n tag_19\n jump\t// in\n tag_28:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1712:1917 function revokeAdmin(address admin) external override onlyOwner {... */\n tag_6:\n tag_29\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_30\n swap2\n swap1\n tag_26\n jump\t// in\n tag_30:\n tag_31\n jump\t// in\n tag_29:\n stop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1111:1372 function getAdmins() external view override returns (address[] memory admins) {... */\n tag_7:\n tag_32\n tag_33\n jump\t// in\n tag_32:\n mload(0x40)\n tag_34\n swap2\n swap1\n tag_35\n jump\t// in\n tag_34:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1440:1645 function approveAdmin(address admin) external override onlyOwner {... */\n tag_8:\n tag_36\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_37\n swap2\n swap1\n tag_26\n jump\t// in\n tag_37:\n tag_38\n jump\t// in\n tag_36:\n stop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1824:1925 function renounceOwnership() public virtual onlyOwner {... */\n tag_9:\n tag_39\n tag_40\n jump\t// in\n tag_39:\n stop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1201:1286 function owner() public view virtual returns (address) {... */\n tag_10:\n tag_41\n tag_42\n jump\t// in\n tag_41:\n mload(0x40)\n tag_43\n swap2\n swap1\n tag_44\n jump\t// in\n tag_43:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"contracts/IoSingleTransferExt.sol\":773:1135 function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool) {... */\n tag_11:\n tag_45\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_46\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n tag_48\n jump\t// in\n tag_45:\n mload(0x40)\n tag_49\n swap2\n swap1\n tag_19\n jump\t// in\n tag_49:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2074:2272 function transferOwnership(address newOwner) public virtual onlyOwner {... */\n tag_12:\n tag_50\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_51\n swap2\n swap1\n tag_26\n jump\t// in\n tag_51:\n tag_52\n jump\t// in\n tag_50:\n stop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":565:795 function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {... */\n tag_17:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":667:671 bool */\n 0x00\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":705:736 type(IAdminControl).interfaceId */\n 0x553e757e00000000000000000000000000000000000000000000000000000000\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":690:736 interfaceId == type(IAdminControl).interfaceId */\n not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":690:701 interfaceId */\n dup3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":690:736 interfaceId == type(IAdminControl).interfaceId */\n not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n eq\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":690:788 interfaceId == type(IAdminControl).interfaceId... */\n dup1\n tag_54\n jumpi\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":752:788 super.supportsInterface(interfaceId) */\n tag_55\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":776:787 interfaceId */\n dup3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":752:775 super.supportsInterface */\n tag_56\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":752:788 super.supportsInterface(interfaceId) */\n jump\t// in\n tag_55:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":690:788 interfaceId == type(IAdminControl).interfaceId... */\n tag_54:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":683:788 return interfaceId == type(IAdminControl).interfaceId... */\n swap1\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":565:795 function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"contracts/IoSingleTransferExt.sol\":583:690 function setApproveTransfer(address creator, bool enabled) external override adminRequired {... */\n tag_23:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":942:952 msg.sender */\n caller\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:952 owner() == msg.sender */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:938 owner() */\n tag_58\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:936 owner */\n tag_42\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:938 owner() */\n jump\t// in\n tag_58:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:952 owner() == msg.sender */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n eq\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:984 owner() == msg.sender || _admins.contains(msg.sender) */\n dup1\n tag_59\n jumpi\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":956:984 _admins.contains(msg.sender) */\n tag_60\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":973:983 msg.sender */\n caller\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":956:963 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":956:972 _admins.contains */\n tag_61\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":956:984 _admins.contains(msg.sender) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_60:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:984 owner() == msg.sender || _admins.contains(msg.sender) */\n tag_59:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":923:1025 require(owner() == msg.sender || _admins.contains(msg.sender), \"AdminControl: Must be owner or admin\") */\n tag_62\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_63\n swap1\n tag_64\n jump\t// in\n tag_63:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_62:\n /* \"contracts/IoSingleTransferExt.sol\":583:690 function setApproveTransfer(address creator, bool enabled) external override adminRequired {... */\n pop\n pop\n jump\t// out\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1980:2117 function isAdmin(address admin) public override view returns (bool) {... */\n tag_27:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2042:2046 bool */\n 0x00\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2077:2082 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2082 owner() == admin */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2073 owner() */\n tag_67\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2071 owner */\n tag_42\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2073 owner() */\n jump\t// in\n tag_67:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2082 owner() == admin */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n eq\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2109 owner() == admin || _admins.contains(admin) */\n dup1\n tag_68\n jumpi\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2086:2109 _admins.contains(admin) */\n tag_69\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2103:2108 admin */\n dup3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2086:2093 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2086:2102 _admins.contains */\n tag_61\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2086:2109 _admins.contains(admin) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_69:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2109 owner() == admin || _admins.contains(admin) */\n tag_68:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2058:2110 return (owner() == admin || _admins.contains(admin)) */\n swap1\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1980:2117 function isAdmin(address admin) public override view returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1712:1917 function revokeAdmin(address admin) external override onlyOwner {... */\n tag_31:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_71\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_72\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_71:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1790:1813 _admins.contains(admin) */\n tag_74\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1807:1812 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1790:1797 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1790:1806 _admins.contains */\n tag_61\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1790:1813 _admins.contains(admin) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_74:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1786:1911 if (_admins.contains(admin)) {... */\n iszero\n tag_75\n jumpi\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1854:1864 msg.sender */\n caller\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1834:1865 AdminRevoked(admin, msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1847:1852 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1834:1865 AdminRevoked(admin, msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d5\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1879:1900 _admins.remove(admin) */\n tag_76\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1894:1899 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1879:1886 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1879:1893 _admins.remove */\n tag_77\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1879:1900 _admins.remove(admin) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_76:\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1786:1911 if (_admins.contains(admin)) {... */\n tag_75:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1712:1917 function revokeAdmin(address admin) external override onlyOwner {... */\n pop\n jump\t// out\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1111:1372 function getAdmins() external view override returns (address[] memory admins) {... */\n tag_33:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1164:1187 address[] memory admins */\n 0x60\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1222:1238 _admins.length() */\n tag_79\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1222:1229 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1222:1236 _admins.length */\n tag_80\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1222:1238 _admins.length() */\n jump\t// in\n tag_79:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1208:1239 new address[](_admins.length()) */\n 0xffffffffffffffff\n dup2\n gt\n iszero\n tag_81\n jumpi\n tag_82\n tag_83\n jump\t// in\n tag_82:\n tag_81:\n mload(0x40)\n swap1\n dup1\n dup3\n mstore\n dup1\n 0x20\n mul\n 0x20\n add\n dup3\n add\n 0x40\n mstore\n dup1\n iszero\n tag_84\n jumpi\n dup2\n 0x20\n add\n 0x20\n dup3\n mul\n dup1\n calldatasize\n dup4\n calldatacopy\n dup1\n dup3\n add\n swap2\n pop\n pop\n swap1\n pop\n tag_84:\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1199:1239 admins = new address[](_admins.length()) */\n swap1\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1254:1260 uint i */\n 0x00\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1249:1343 for (uint i = 0; i < _admins.length(); i++) {... */\n tag_85:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1270:1286 _admins.length() */\n tag_88\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1270:1277 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1270:1284 _admins.length */\n tag_80\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1270:1286 _admins.length() */\n jump\t// in\n tag_88:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1266:1267 i */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1266:1286 i < _admins.length() */\n lt\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1249:1343 for (uint i = 0; i < _admins.length(); i++) {... */\n iszero\n tag_86\n jumpi\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1319:1332 _admins.at(i) */\n tag_89\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1330:1331 i */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1319:1326 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1319:1329 _admins.at */\n tag_90\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1319:1332 _admins.at(i) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_89:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1307:1313 admins */\n dup3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1314:1315 i */\n dup3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1307:1316 admins[i] */\n dup2\n mload\n dup2\n lt\n tag_91\n jumpi\n tag_92\n tag_93\n jump\t// in\n tag_92:\n tag_91:\n 0x20\n mul\n 0x20\n add\n add\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1307:1332 admins[i] = _admins.at(i) */\n swap1\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n swap1\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n dup2\n mstore\n pop\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1288:1291 i++ */\n dup1\n dup1\n tag_94\n swap1\n tag_95\n jump\t// in\n tag_94:\n swap2\n pop\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1249:1343 for (uint i = 0; i < _admins.length(); i++) {... */\n jump(tag_85)\n tag_86:\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1111:1372 function getAdmins() external view override returns (address[] memory admins) {... */\n swap1\n jump\t// out\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1440:1645 function approveAdmin(address admin) external override onlyOwner {... */\n tag_38:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_97\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_72\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_97:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1520:1543 _admins.contains(admin) */\n tag_99\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1537:1542 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1520:1527 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1520:1536 _admins.contains */\n tag_61\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1520:1543 _admins.contains(admin) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_99:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1515:1639 if (!_admins.contains(admin)) {... */\n tag_100\n jumpi\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1585:1595 msg.sender */\n caller\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1564:1596 AdminApproved(admin, msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1578:1583 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1564:1596 AdminApproved(admin, msg.sender) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb1\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1610:1628 _admins.add(admin) */\n tag_101\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1622:1627 admin */\n dup2\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1610:1617 _admins */\n 0x01\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1610:1621 _admins.add */\n tag_102\n swap1\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1610:1628 _admins.add(admin) */\n swap2\n swap1\n 0xffffffff\n and\n jump\t// in\n tag_101:\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1515:1639 if (!_admins.contains(admin)) {... */\n tag_100:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1440:1645 function approveAdmin(address admin) external override onlyOwner {... */\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1824:1925 function renounceOwnership() public virtual onlyOwner {... */\n tag_40:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_104\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_72\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_104:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1888:1918 _transferOwnership(address(0)) */\n tag_106\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1915:1916 0 */\n 0x00\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1888:1906 _transferOwnership */\n tag_107\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1888:1918 _transferOwnership(address(0)) */\n jump\t// in\n tag_106:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1824:1925 function renounceOwnership() public virtual onlyOwner {... */\n jump\t// out\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1201:1286 function owner() public view virtual returns (address) {... */\n tag_42:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1247:1254 address */\n 0x00\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1273:1279 _owner */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1266:1279 return _owner */\n swap1\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1201:1286 function owner() public view virtual returns (address) {... */\n swap1\n jump\t// out\n /* \"contracts/IoSingleTransferExt.sol\":773:1135 function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool) {... */\n tag_48:\n /* \"contracts/IoSingleTransferExt.sol\":917:921 bool */\n 0x00\n /* \"contracts/IoSingleTransferExt.sol\":941:960 isAdmin(msg.sender) */\n tag_110\n /* \"contracts/IoSingleTransferExt.sol\":949:959 msg.sender */\n caller\n /* \"contracts/IoSingleTransferExt.sol\":941:948 isAdmin */\n tag_27\n /* \"contracts/IoSingleTransferExt.sol\":941:960 isAdmin(msg.sender) */\n jump\t// in\n tag_110:\n /* \"contracts/IoSingleTransferExt.sol\":933:1007 require(isAdmin(msg.sender), \"Only contract owner can transfer the token\") */\n tag_111\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_112\n swap1\n tag_113\n jump\t// in\n tag_112:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_111:\n /* \"contracts/IoSingleTransferExt.sol\":1064:1072 operator */\n dup8\n /* \"contracts/IoSingleTransferExt.sol\":1024:1089 IERC1155CreatorExtensionApproveTransfer(operator).approveTransfer */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0xe4835177\n /* \"contracts/IoSingleTransferExt.sol\":1090:1098 operator */\n dup10\n /* \"contracts/IoSingleTransferExt.sol\":1100:1104 from */\n dup10\n /* \"contracts/IoSingleTransferExt.sol\":1106:1108 to */\n dup10\n /* \"contracts/IoSingleTransferExt.sol\":1110:1118 tokenIds */\n dup10\n dup10\n /* \"contracts/IoSingleTransferExt.sol\":1120:1127 amounts */\n dup10\n dup10\n /* \"contracts/IoSingleTransferExt.sol\":1024:1128 IERC1155CreatorExtensionApproveTransfer(operator).approveTransfer(operator, from, to, tokenIds, amounts) */\n mload(0x40)\n dup9\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_114\n swap8\n swap7\n swap6\n swap5\n swap4\n swap3\n swap2\n swap1\n tag_115\n jump\t// in\n tag_114:\n 0x20\n mload(0x40)\n dup1\n dup4\n sub\n dup2\n 0x00\n dup8\n gas\n call\n iszero\n dup1\n iszero\n tag_117\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_117:\n pop\n pop\n pop\n pop\n mload(0x40)\n returndatasize\n not(0x1f)\n 0x1f\n dup3\n add\n and\n dup3\n add\n dup1\n 0x40\n mstore\n pop\n dup2\n add\n swap1\n tag_118\n swap2\n swap1\n tag_119\n jump\t// in\n tag_118:\n /* \"contracts/IoSingleTransferExt.sol\":1017:1128 return IERC1155CreatorExtensionApproveTransfer(operator).approveTransfer(operator, from, to, tokenIds, amounts) */\n swap1\n pop\n /* \"contracts/IoSingleTransferExt.sol\":773:1135 function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool) {... */\n swap8\n swap7\n pop\n pop\n pop\n pop\n pop\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2074:2272 function transferOwnership(address newOwner) public virtual onlyOwner {... */\n tag_52:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_121\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_72\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_121:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2182:2183 0 */\n 0x00\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2162:2184 newOwner != address(0) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2162:2170 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2162:2184 newOwner != address(0) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n sub\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2154:2227 require(newOwner != address(0), \"Ownable: new owner is the zero address\") */\n tag_123\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_124\n swap1\n tag_125\n jump\t// in\n tag_124:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_123:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2237:2265 _transferOwnership(newOwner) */\n tag_126\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2256:2264 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2237:2255 _transferOwnership */\n tag_107\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2237:2265 _transferOwnership(newOwner) */\n jump\t// in\n tag_126:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2074:2272 function transferOwnership(address newOwner) public virtual onlyOwner {... */\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":829:984 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {... */\n tag_56:\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":914:918 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":952:977 type(IERC165).interfaceId */\n 0x01ffc9a700000000000000000000000000000000000000000000000000000000\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":937:977 interfaceId == type(IERC165).interfaceId */\n not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":937:948 interfaceId */\n dup3\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":937:977 interfaceId == type(IERC165).interfaceId */\n not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n eq\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":930:977 return interfaceId == type(IERC165).interfaceId */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/introspection/ERC165.sol\":829:984 function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8860:9025 function contains(AddressSet storage set, address value) internal view returns (bool) {... */\n tag_61:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8940:8944 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8963:9018 _contains(set._inner, bytes32(uint256(uint160(value)))) */\n tag_129\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8973:8976 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8973:8983 set._inner */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9009:9014 value */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8993:9016 uint256(uint160(value)) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8985:9017 bytes32(uint256(uint160(value))) */\n 0x00\n shl\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8963:8972 _contains */\n tag_130\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8963:9018 _contains(set._inner, bytes32(uint256(uint160(value)))) */\n jump\t// in\n tag_129:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8956:9018 return _contains(set._inner, bytes32(uint256(uint160(value)))) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8860:9025 function contains(AddressSet storage set, address value) internal view returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1359:1489 function _checkOwner() internal view virtual {... */\n tag_72:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1433:1445 _msgSender() */\n tag_132\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1433:1443 _msgSender */\n tag_133\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1433:1445 _msgSender() */\n jump\t// in\n tag_132:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1445 owner() == _msgSender() */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1429 owner() */\n tag_134\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1427 owner */\n tag_42\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1429 owner() */\n jump\t// in\n tag_134:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1445 owner() == _msgSender() */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n eq\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1414:1482 require(owner() == _msgSender(), \"Ownable: caller is not the owner\") */\n tag_135\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_136\n swap1\n tag_137\n jump\t// in\n tag_136:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_135:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1359:1489 function _checkOwner() internal view virtual {... */\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8623:8779 function remove(AddressSet storage set, address value) internal returns (bool) {... */\n tag_77:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8696:8700 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8719:8772 _remove(set._inner, bytes32(uint256(uint160(value)))) */\n tag_139\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8727:8730 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8727:8737 set._inner */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8763:8768 value */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8747:8770 uint256(uint160(value)) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8739:8771 bytes32(uint256(uint160(value))) */\n 0x00\n shl\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8719:8726 _remove */\n tag_140\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8719:8772 _remove(set._inner, bytes32(uint256(uint160(value)))) */\n jump\t// in\n tag_139:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8712:8772 return _remove(set._inner, bytes32(uint256(uint160(value)))) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8623:8779 function remove(AddressSet storage set, address value) internal returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9106:9221 function length(AddressSet storage set) internal view returns (uint256) {... */\n tag_80:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9169:9176 uint256 */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9195:9214 _length(set._inner) */\n tag_142\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9203:9206 set */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9203:9213 set._inner */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9195:9202 _length */\n tag_143\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9195:9214 _length(set._inner) */\n jump\t// in\n tag_142:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9188:9214 return _length(set._inner) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9106:9221 function length(AddressSet storage set) internal view returns (uint256) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9563:9719 function at(AddressSet storage set, uint256 index) internal view returns (address) {... */\n tag_90:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9637:9644 address */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9687:9709 _at(set._inner, index) */\n tag_145\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9691:9694 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9691:9701 set._inner */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9703:9708 index */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9687:9690 _at */\n tag_146\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9687:9709 _at(set._inner, index) */\n jump\t// in\n tag_145:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9679:9710 uint256(_at(set._inner, index)) */\n 0x00\n shr\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9656:9712 return address(uint160(uint256(_at(set._inner, index)))) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9563:9719 function at(AddressSet storage set, uint256 index) internal view returns (address) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8305:8455 function add(AddressSet storage set, address value) internal returns (bool) {... */\n tag_102:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8375:8379 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8398:8448 _add(set._inner, bytes32(uint256(uint160(value)))) */\n tag_148\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8403:8406 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8403:8413 set._inner */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8439:8444 value */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8423:8446 uint256(uint160(value)) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8415:8447 bytes32(uint256(uint160(value))) */\n 0x00\n shl\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8398:8402 _add */\n tag_149\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8398:8448 _add(set._inner, bytes32(uint256(uint160(value)))) */\n jump\t// in\n tag_148:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8391:8448 return _add(set._inner, bytes32(uint256(uint160(value)))) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8305:8455 function add(AddressSet storage set, address value) internal returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2426:2613 function _transferOwnership(address newOwner) internal virtual {... */\n tag_107:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2499:2515 address oldOwner */\n 0x00\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2518:2524 _owner */\n dup1\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2499:2524 address oldOwner = _owner */\n swap1\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2543:2551 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2534:2540 _owner */\n 0x00\n dup1\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2534:2551 _owner = newOwner */\n 0x0100\n exp\n dup2\n sload\n dup2\n 0xffffffffffffffffffffffffffffffffffffffff\n mul\n not\n and\n swap1\n dup4\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n mul\n or\n swap1\n sstore\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2597:2605 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2566:2606 OwnershipTransferred(oldOwner, newOwner) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2587:2595 oldOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2566:2606 OwnershipTransferred(oldOwner, newOwner) */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0\n mload(0x40)\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log3\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2489:2613 {... */\n pop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2426:2613 function _transferOwnership(address newOwner) internal virtual {... */\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4255:4382 function _contains(Set storage set, bytes32 value) private view returns (bool) {... */\n tag_130:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4328:4332 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4374:4375 0 */\n dup1\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4351:4354 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4351:4363 set._indexes */\n 0x01\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4351:4370 set._indexes[value] */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4364:4369 value */\n dup5\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4351:4370 set._indexes[value] */\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n sload\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4351:4375 set._indexes[value] != 0 */\n eq\n iszero\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4344:4375 return set._indexes[value] != 0 */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4255:4382 function _contains(Set storage set, bytes32 value) private view returns (bool) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/Context.sol\":640:736 function _msgSender() internal view virtual returns (address) {... */\n tag_133:\n /* \"@openzeppelin/contracts/utils/Context.sol\":693:700 address */\n 0x00\n /* \"@openzeppelin/contracts/utils/Context.sol\":719:729 msg.sender */\n caller\n /* \"@openzeppelin/contracts/utils/Context.sol\":712:729 return msg.sender */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/Context.sol\":640:736 function _msgSender() internal view virtual returns (address) {... */\n swap1\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2786:4174 function _remove(Set storage set, bytes32 value) private returns (bool) {... */\n tag_140:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2852:2856 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2968:2986 uint256 valueIndex */\n dup1\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2989:2992 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2989:3001 set._indexes */\n 0x01\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2989:3008 set._indexes[value] */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3002:3007 value */\n dup5\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2989:3008 set._indexes[value] */\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n sload\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2968:3008 uint256 valueIndex = set._indexes[value] */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3037:3038 0 */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3023:3033 valueIndex */\n dup2\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3023:3038 valueIndex != 0 */\n eq\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3019:4168 if (valueIndex != 0) {... */\n tag_154\n jumpi\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3392:3413 uint256 toDeleteIndex */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3429:3430 1 */\n 0x01\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3416:3426 valueIndex */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3416:3430 valueIndex - 1 */\n tag_155\n swap2\n swap1\n tag_156\n jump\t// in\n tag_155:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3392:3430 uint256 toDeleteIndex = valueIndex - 1 */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3444:3461 uint256 lastIndex */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3485:3486 1 */\n 0x01\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3464:3467 set */\n dup7\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3464:3475 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3464:3482 set._values.length */\n dup1\n sload\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3464:3486 set._values.length - 1 */\n tag_157\n swap2\n swap1\n tag_156\n jump\t// in\n tag_157:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3444:3486 uint256 lastIndex = set._values.length - 1 */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3518:3531 toDeleteIndex */\n dup2\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3505:3514 lastIndex */\n dup2\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3505:3531 lastIndex != toDeleteIndex */\n eq\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3501:3899 if (lastIndex != toDeleteIndex) {... */\n tag_158\n jumpi\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3551:3568 bytes32 lastValue */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3571:3574 set */\n dup7\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3571:3582 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3583:3592 lastIndex */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3571:3593 set._values[lastIndex] */\n dup2\n sload\n dup2\n lt\n tag_159\n jumpi\n tag_160\n tag_93\n jump\t// in\n tag_160:\n tag_159:\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n sload\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3551:3593 bytes32 lastValue = set._values[lastIndex] */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3722:3731 lastValue */\n dup1\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3693:3696 set */\n dup8\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3693:3704 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3705:3718 toDeleteIndex */\n dup5\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3693:3719 set._values[toDeleteIndex] */\n dup2\n sload\n dup2\n lt\n tag_162\n jumpi\n tag_163\n tag_93\n jump\t// in\n tag_163:\n tag_162:\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3693:3731 set._values[toDeleteIndex] = lastValue */\n dup2\n swap1\n sstore\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3831:3841 valueIndex */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3805:3808 set */\n dup8\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3805:3817 set._indexes */\n 0x01\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3805:3828 set._indexes[lastValue] */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3818:3827 lastValue */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3805:3828 set._indexes[lastValue] */\n dup2\n mstore\n 0x20\n add\n swap1\n dup2\n mstore\n 0x20\n add\n 0x00\n keccak256\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3805:3841 set._indexes[lastValue] = valueIndex */\n dup2\n swap1\n sstore\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3533:3899 {... */\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3501:3899 if (lastIndex != toDeleteIndex) {... */\n tag_158:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3977:3980 set */\n dup6\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3977:3988 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSe
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment