Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save lastdof/3166e7a5f0a7f7e17c8d83c309c14342 to your computer and use it in GitHub Desktop.
Save lastdof/3166e7a5f0a7f7e17c8d83c309c14342 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/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 "./ICreatorCore.sol";
/**
* @dev Core ERC721 creator interface
*/
interface IERC721CreatorCore is ICreatorCore {
/**
* @dev mint a token with no extension. Can only be called by an admin.
* Returns tokenId minted
*/
function mintBase(address to) external returns (uint256);
/**
* @dev mint a token with no extension. Can only be called by an admin.
* Returns tokenId minted
*/
function mintBase(address to, string calldata uri) external returns (uint256);
/**
* @dev batch mint a token with no extension. Can only be called by an admin.
* Returns tokenId minted
*/
function mintBaseBatch(address to, uint16 count) external returns (uint256[] memory);
/**
* @dev batch mint a token with no extension. Can only be called by an admin.
* Returns tokenId minted
*/
function mintBaseBatch(address to, string[] calldata uris) external returns (uint256[] memory);
/**
* @dev mint a token. Can only be called by a registered extension.
* Returns tokenId minted
*/
function mintExtension(address to) external returns (uint256);
/**
* @dev mint a token. Can only be called by a registered extension.
* Returns tokenId minted
*/
function mintExtension(address to, string calldata uri) external returns (uint256);
/**
* @dev mint a token. Can only be called by a registered extension.
* Returns tokenId minted
*/
function mintExtension(address to, uint80 data) external returns (uint256);
/**
* @dev batch mint a token. Can only be called by a registered extension.
* Returns tokenIds minted
*/
function mintExtensionBatch(address to, uint16 count) external returns (uint256[] memory);
/**
* @dev batch mint a token. Can only be called by a registered extension.
* Returns tokenId minted
*/
function mintExtensionBatch(address to, string[] calldata uris) external returns (uint256[] memory);
/**
* @dev batch mint a token. Can only be called by a registered extension.
* Returns tokenId minted
*/
function mintExtensionBatch(address to, uint80[] calldata data) external returns (uint256[] memory);
/**
* @dev burn a token. Can only be called by token owner or approved address.
* On burn, calls back to the registered extension's onBurn method
*/
function burn(uint256 tokenId) external;
/**
* @dev get token data
*/
function tokenData(uint256 tokenId) external view returns (uint80);
}
// 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) (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) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// 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 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: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
library TestsAccounts {
function getAccount(uint index) pure public returns (address) {
return address(0);
}
}
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;
library Assert {
event AssertionEvent(
bool passed,
string message,
string methodName
);
event AssertionEventUint(
bool passed,
string message,
string methodName,
uint256 returned,
uint256 expected
);
event AssertionEventInt(
bool passed,
string message,
string methodName,
int256 returned,
int256 expected
);
event AssertionEventBool(
bool passed,
string message,
string methodName,
bool returned,
bool expected
);
event AssertionEventAddress(
bool passed,
string message,
string methodName,
address returned,
address expected
);
event AssertionEventBytes32(
bool passed,
string message,
string methodName,
bytes32 returned,
bytes32 expected
);
event AssertionEventString(
bool passed,
string message,
string methodName,
string returned,
string expected
);
event AssertionEventUintInt(
bool passed,
string message,
string methodName,
uint256 returned,
int256 expected
);
event AssertionEventIntUint(
bool passed,
string message,
string methodName,
int256 returned,
uint256 expected
);
function ok(bool a, string memory message) public returns (bool result) {
result = a;
emit AssertionEvent(result, message, "ok");
}
function equal(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventUint(result, message, "equal", a, b);
}
function equal(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventInt(result, message, "equal", a, b);
}
function equal(bool a, bool b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventBool(result, message, "equal", a, b);
}
// TODO: only for certain versions of solc
//function equal(fixed a, fixed b, string message) public returns (bool result) {
// result = (a == b);
// emit AssertionEvent(result, message);
//}
// TODO: only for certain versions of solc
//function equal(ufixed a, ufixed b, string message) public returns (bool result) {
// result = (a == b);
// emit AssertionEvent(result, message);
//}
function equal(address a, address b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventAddress(result, message, "equal", a, b);
}
function equal(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
result = (a == b);
emit AssertionEventBytes32(result, message, "equal", a, b);
}
function equal(string memory a, string memory b, string memory message) public returns (bool result) {
result = (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)));
emit AssertionEventString(result, message, "equal", a, b);
}
function notEqual(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventUint(result, message, "notEqual", a, b);
}
function notEqual(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventInt(result, message, "notEqual", a, b);
}
function notEqual(bool a, bool b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventBool(result, message, "notEqual", a, b);
}
// TODO: only for certain versions of solc
//function notEqual(fixed a, fixed b, string message) public returns (bool result) {
// result = (a != b);
// emit AssertionEvent(result, message);
//}
// TODO: only for certain versions of solc
//function notEqual(ufixed a, ufixed b, string message) public returns (bool result) {
// result = (a != b);
// emit AssertionEvent(result, message);
//}
function notEqual(address a, address b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventAddress(result, message, "notEqual", a, b);
}
function notEqual(bytes32 a, bytes32 b, string memory message) public returns (bool result) {
result = (a != b);
emit AssertionEventBytes32(result, message, "notEqual", a, b);
}
function notEqual(string memory a, string memory b, string memory message) public returns (bool result) {
result = (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b)));
emit AssertionEventString(result, message, "notEqual", a, b);
}
/*----------------- Greater than --------------------*/
function greaterThan(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a > b);
emit AssertionEventUint(result, message, "greaterThan", a, b);
}
function greaterThan(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a > b);
emit AssertionEventInt(result, message, "greaterThan", a, b);
}
// TODO: safely compare between uint and int
function greaterThan(uint256 a, int256 b, string memory message) public returns (bool result) {
if(b < int(0)) {
// int is negative uint "a" always greater
result = true;
} else {
result = (a > uint(b));
}
emit AssertionEventUintInt(result, message, "greaterThan", a, b);
}
function greaterThan(int256 a, uint256 b, string memory message) public returns (bool result) {
if(a < int(0)) {
// int is negative uint "b" always greater
result = false;
} else {
result = (uint(a) > b);
}
emit AssertionEventIntUint(result, message, "greaterThan", a, b);
}
/*----------------- Lesser than --------------------*/
function lesserThan(uint256 a, uint256 b, string memory message) public returns (bool result) {
result = (a < b);
emit AssertionEventUint(result, message, "lesserThan", a, b);
}
function lesserThan(int256 a, int256 b, string memory message) public returns (bool result) {
result = (a < b);
emit AssertionEventInt(result, message, "lesserThan", a, b);
}
// TODO: safely compare between uint and int
function lesserThan(uint256 a, int256 b, string memory message) public returns (bool result) {
if(b < int(0)) {
// int is negative int "b" always lesser
result = false;
} else {
result = (a < uint(b));
}
emit AssertionEventUintInt(result, message, "lesserThan", a, b);
}
function lesserThan(int256 a, uint256 b, string memory message) public returns (bool result) {
if(a < int(0)) {
// int is negative int "a" always lesser
result = true;
} else {
result = (uint(a) < b);
}
emit AssertionEventIntUint(result, message, "lesserThan", a, b);
}
}
{
"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": {}
}
]
}
This file has been truncated, but you can view the full file.
{
"id": "ef00375924ac5952772f32123634f31e",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.18",
"solcLongVersion": "0.8.18+commit.87f61d96",
"input": {
"language": "Solidity",
"sources": {
"manifoldlazymint.sol": {
"content": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity ^0.8.0;\r\n\r\n/// @author: manifold.xyz\r\n\r\nimport \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\";\r\nimport \"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol\";\r\nimport \"@manifoldxyz/creator-core-solidity/contracts/extensions/ICreatorExtensionTokenURI.sol\";\r\n\r\nimport \"@openzeppelin/contracts/token/ERC721/IERC721.sol\";\r\nimport \"@openzeppelin/contracts/utils/Strings.sol\";\r\nimport \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\r\n\r\ncontract manifoldlazymint is AdminControl, ICreatorExtensionTokenURI {\r\n\r\n using Strings for uint256;\r\n\r\n address private _creator;\r\n string private _baseURI;\r\n\r\n constructor(address creator) {\r\n _creator = creator;\r\n }\r\n\r\n function supportsInterface(bytes4 interfaceId) public view virtual override(AdminControl, IERC165) returns (bool) {\r\n return interfaceId == type(ICreatorExtensionTokenURI).interfaceId || AdminControl.supportsInterface(interfaceId) || super.supportsInterface(interfaceId);\r\n }\r\n \r\n function mint() public {\r\n IERC721CreatorCore(_creator).mintExtension(msg.sender);\r\n }\r\n\r\n function setBaseURI(string memory baseURI) public adminRequired {\r\n _baseURI = baseURI;\r\n }\r\n\r\n function tokenURI(address creator, uint256 tokenId) external view override returns (string memory) {\r\n require(creator == _creator, \"Invalid token\");\r\n return string(abi.encodePacked(_baseURI, tokenId.toString()));\r\n }\r\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/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/token/ERC721/IERC721.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721 is IERC165 {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721\n * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must\n * understand this adds an external call which potentially creates a reentrancy vulnerability.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\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"
},
"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol": {
"content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.0;\n\n/// @author: manifold.xyz\n\nimport \"./ICreatorCore.sol\";\n\n/**\n * @dev Core ERC721 creator interface\n */\ninterface IERC721CreatorCore is ICreatorCore {\n\n /**\n * @dev mint a token with no extension. Can only be called by an admin.\n * Returns tokenId minted\n */\n function mintBase(address to) external returns (uint256);\n\n /**\n * @dev mint a token with no extension. Can only be called by an admin.\n * Returns tokenId minted\n */\n function mintBase(address to, string calldata uri) external returns (uint256);\n\n /**\n * @dev batch mint a token with no extension. Can only be called by an admin.\n * Returns tokenId minted\n */\n function mintBaseBatch(address to, uint16 count) external returns (uint256[] memory);\n\n /**\n * @dev batch mint a token with no extension. Can only be called by an admin.\n * Returns tokenId minted\n */\n function mintBaseBatch(address to, string[] calldata uris) external returns (uint256[] memory);\n\n /**\n * @dev mint a token. Can only be called by a registered extension.\n * Returns tokenId minted\n */\n function mintExtension(address to) external returns (uint256);\n\n /**\n * @dev mint a token. Can only be called by a registered extension.\n * Returns tokenId minted\n */\n function mintExtension(address to, string calldata uri) external returns (uint256);\n\n /**\n * @dev mint a token. Can only be called by a registered extension.\n * Returns tokenId minted\n */\n function mintExtension(address to, uint80 data) external returns (uint256);\n\n /**\n * @dev batch mint a token. Can only be called by a registered extension.\n * Returns tokenIds minted\n */\n function mintExtensionBatch(address to, uint16 count) external returns (uint256[] memory);\n\n /**\n * @dev batch mint a token. Can only be called by a registered extension.\n * Returns tokenId minted\n */\n function mintExtensionBatch(address to, string[] calldata uris) external returns (uint256[] memory);\n\n /**\n * @dev batch mint a token. Can only be called by a registered extension.\n * Returns tokenId minted\n */\n function mintExtensionBatch(address to, uint80[] calldata data) external returns (uint256[] memory);\n\n /**\n * @dev burn a token. 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(uint256 tokenId) external;\n\n /**\n * @dev get token data\n */\n function tokenData(uint256 tokenId) external view returns (uint80);\n\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}"
},
"@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"
},
"@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"
},
"@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"
},
"@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"
},
"@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"
}
},
"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/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/IERC721CreatorCore.sol": {
"IERC721CreatorCore": {
"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": "uint256",
"name": "tokenId",
"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"
}
],
"name": "mintBase",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "mintBase",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "mintBaseBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint16",
"name": "count",
"type": "uint16"
}
],
"name": "mintBaseBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "mintExtension",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint80",
"name": "data",
"type": "uint80"
}
],
"name": "mintExtension",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "mintExtension",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "string[]",
"name": "uris",
"type": "string[]"
}
],
"name": "mintExtensionBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint80[]",
"name": "data",
"type": "uint80[]"
}
],
"name": "mintExtensionBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint16",
"name": "count",
"type": "uint16"
}
],
"name": "mintExtensionBatch",
"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": "tokenData",
"outputs": [
{
"internalType": "uint80",
"name": "",
"type": "uint80"
}
],
"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 ERC721 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(uint256)": {
"details": "burn a token. 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"
},
"mintBase(address)": {
"details": "mint a token with no extension. Can only be called by an admin. Returns tokenId minted"
},
"mintBase(address,string)": {
"details": "mint a token with no extension. Can only be called by an admin. Returns tokenId minted"
},
"mintBaseBatch(address,string[])": {
"details": "batch mint a token with no extension. Can only be called by an admin. Returns tokenId minted"
},
"mintBaseBatch(address,uint16)": {
"details": "batch mint a token with no extension. Can only be called by an admin. Returns tokenId minted"
},
"mintExtension(address)": {
"details": "mint a token. Can only be called by a registered extension. Returns tokenId minted"
},
"mintExtension(address,string)": {
"details": "mint a token. Can only be called by a registered extension. Returns tokenId minted"
},
"mintExtension(address,uint80)": {
"details": "mint a token. Can only be called by a registered extension. Returns tokenId minted"
},
"mintExtensionBatch(address,string[])": {
"details": "batch mint a token. Can only be called by a registered extension. Returns tokenId minted"
},
"mintExtensionBatch(address,uint16)": {
"details": "batch mint a token. Can only be called by a registered extension. Returns tokenIds minted"
},
"mintExtensionBatch(address,uint80[])": {
"details": "batch mint a token. Can only be called by a registered extension. Returns tokenId 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."
},
"tokenData(uint256)": {
"details": "get token data"
},
"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",
"burn(uint256)": "42966c68",
"getApproveTransfer()": "22f374d0",
"getExtensions()": "83b7db63",
"getFeeBps(uint256)": "0ebd4c7f",
"getFeeRecipients(uint256)": "b9c4d9fb",
"getFees(uint256)": "d5a06d4c",
"getRoyalties(uint256)": "bb3bafd6",
"mintBase(address)": "72ff03d3",
"mintBase(address,string)": "7884af44",
"mintBaseBatch(address,string[])": "7aa15f16",
"mintBaseBatch(address,uint16)": "ad2d0ddd",
"mintExtension(address)": "2928ca58",
"mintExtension(address,string)": "fe2e1f58",
"mintExtension(address,uint80)": "d3973719",
"mintExtensionBatch(address,string[])": "38e52e78",
"mintExtensionBatch(address,uint16)": "e00aab4b",
"mintExtensionBatch(address,uint80[])": "4278330e",
"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",
"tokenData(uint256)": "b4b5b48f",
"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\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"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\"}],\"name\":\"mintBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"mintBase\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"mintBaseBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"count\",\"type\":\"uint16\"}],\"name\":\"mintBaseBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintExtension\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint80\",\"name\":\"data\",\"type\":\"uint80\"}],\"name\":\"mintExtension\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"mintExtension\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"uris\",\"type\":\"string[]\"}],\"name\":\"mintExtensionBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint80[]\",\"name\":\"data\",\"type\":\"uint80[]\"}],\"name\":\"mintExtensionBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint16\",\"name\":\"count\",\"type\":\"uint16\"}],\"name\":\"mintExtensionBatch\",\"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\":\"tokenData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"\",\"type\":\"uint80\"}],\"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 ERC721 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(uint256)\":{\"details\":\"burn a token. 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\"},\"mintBase(address)\":{\"details\":\"mint a token with no extension. Can only be called by an admin. Returns tokenId minted\"},\"mintBase(address,string)\":{\"details\":\"mint a token with no extension. Can only be called by an admin. Returns tokenId minted\"},\"mintBaseBatch(address,string[])\":{\"details\":\"batch mint a token with no extension. Can only be called by an admin. Returns tokenId minted\"},\"mintBaseBatch(address,uint16)\":{\"details\":\"batch mint a token with no extension. Can only be called by an admin. Returns tokenId minted\"},\"mintExtension(address)\":{\"details\":\"mint a token. Can only be called by a registered extension. Returns tokenId minted\"},\"mintExtension(address,string)\":{\"details\":\"mint a token. Can only be called by a registered extension. Returns tokenId minted\"},\"mintExtension(address,uint80)\":{\"details\":\"mint a token. Can only be called by a registered extension. Returns tokenId minted\"},\"mintExtensionBatch(address,string[])\":{\"details\":\"batch mint a token. Can only be called by a registered extension. Returns tokenId minted\"},\"mintExtensionBatch(address,uint16)\":{\"details\":\"batch mint a token. Can only be called by a registered extension. Returns tokenIds minted\"},\"mintExtensionBatch(address,uint80[])\":{\"details\":\"batch mint a token. Can only be called by a registered extension. Returns tokenId 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.\"},\"tokenData(uint256)\":{\"details\":\"get token data\"},\"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/IERC721CreatorCore.sol\":\"IERC721CreatorCore\"},\"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\"]},\"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.sol\":{\"keccak256\":\"0xb168262afd1960a48d9c2088b7c24df3c0e5e190d2e2451e8af38983cf713bad\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b8e621daf8a34967aa796482e02521390328f84a130f064e67aafc1b11748e5\",\"dweb:/ipfs/QmRC4suf2UXxkfy9NazSHwVAHLFeuzqAuQPmZrf1KQfX7f\"]},\"@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/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": 675,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_owner",
"offset": 0,
"slot": "0",
"type": "t_address"
},
{
"astId": 454,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_admins",
"offset": 0,
"slot": "1",
"type": "t_struct(AddressSet)2480_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)2480_storage": {
"encoding": "inplace",
"label": "struct EnumerableSet.AddressSet",
"members": [
{
"astId": 2479,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_inner",
"offset": 0,
"slot": "0",
"type": "t_struct(Set)2165_storage"
}
],
"numberOfBytes": "64"
},
"t_struct(Set)2165_storage": {
"encoding": "inplace",
"label": "struct EnumerableSet.Set",
"members": [
{
"astId": 2160,
"contract": "@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol:AdminControl",
"label": "_values",
"offset": 0,
"slot": "0",
"type": "t_array(t_bytes32)dyn_storage"
},
{
"astId": 2164,
"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/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": 675,
"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/token/ERC721/IERC721.sol": {
"IERC721": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Required interface of an ERC721 compliant contract.",
"events": {
"Approval(address,address,uint256)": {
"details": "Emitted when `owner` enables `approved` to manage the `tokenId` token."
},
"ApprovalForAll(address,address,bool)": {
"details": "Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets."
},
"Transfer(address,address,uint256)": {
"details": "Emitted when `tokenId` token is transferred from `from` to `to`."
}
},
"kind": "dev",
"methods": {
"approve(address,uint256)": {
"details": "Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event."
},
"balanceOf(address)": {
"details": "Returns the number of tokens in ``owner``'s account."
},
"getApproved(uint256)": {
"details": "Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist."
},
"isApprovedForAll(address,address)": {
"details": "Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}"
},
"ownerOf(uint256)": {
"details": "Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist."
},
"safeTransferFrom(address,address,uint256)": {
"details": "Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
},
"safeTransferFrom(address,address,uint256,bytes)": {
"details": "Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event."
},
"setApprovalForAll(address,bool)": {
"details": "Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event."
},
"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."
},
"transferFrom(address,address,uint256)": {
"details": "Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"approve(address,uint256)": "095ea7b3",
"balanceOf(address)": "70a08231",
"getApproved(uint256)": "081812fc",
"isApprovedForAll(address,address)": "e985e9c5",
"ownerOf(uint256)": "6352211e",
"safeTransferFrom(address,address,uint256)": "42842e0e",
"safeTransferFrom(address,address,uint256,bytes)": "b88d4fde",
"setApprovalForAll(address,bool)": "a22cb465",
"supportsInterface(bytes4)": "01ffc9a7",
"transferFrom(address,address,uint256)": "23b872dd"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Required interface of an ERC721 compliant contract.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when `owner` enables `approved` to manage the `tokenId` token.\"},\"ApprovalForAll(address,address,bool)\":{\"details\":\"Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `tokenId` token is transferred from `from` to `to`.\"}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"Gives permission to `to` to transfer `tokenId` token to another account. The approval is cleared when the token is transferred. Only a single account can be approved at a time, so approving the zero address clears previous approvals. Requirements: - The caller must own the token or be an approved operator. - `tokenId` must exist. Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the number of tokens in ``owner``'s account.\"},\"getApproved(uint256)\":{\"details\":\"Returns the account approved for `tokenId` token. Requirements: - `tokenId` must exist.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Returns if the `operator` is allowed to manage all of the assets of `owner`. See {setApprovalForAll}\"},\"ownerOf(uint256)\":{\"details\":\"Returns the owner of the `tokenId` token. Requirements: - `tokenId` must exist.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients are aware of the ERC721 protocol to prevent tokens from being forever locked. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"Safely transfers `tokenId` token from `from` to `to`. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must exist and be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. Emits a {Transfer} event.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Approve or remove `operator` as an operator for the caller. Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. Requirements: - The `operator` cannot be the caller. Emits an {ApprovalForAll} event.\"},\"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.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Transfers `tokenId` token from `from` to `to`. WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must understand this adds an external call which potentially creates a reentrancy vulnerability. Requirements: - `from` cannot be the zero address. - `to` cannot be the zero address. - `tokenId` token must be owned by `from`. - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":\"IERC721\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5bce51e11f7d194b79ea59fe00c9e8de9fa2c5530124960f29a24d4c740a3266\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7e66dfde185df46104c11bc89d08fa0760737aa59a2b8546a656473d810a8ea4\",\"dweb:/ipfs/QmXvyqtXPaPss2PD7eqPoSao5Szm2n6UMoiG8TZZDjmChR\"]},\"@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/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:8:-: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:8:-: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": 8,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH [$]",
"source": 8,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "B"
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "CODECOPY",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "DUP1",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "MLOAD",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "BYTE",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "73"
},
{
"begin": 220,
"end": 2779,
"name": "EQ",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH [tag]",
"source": 8,
"value": "1"
},
{
"begin": 220,
"end": 2779,
"name": "JUMPI",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "4"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "24"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "REVERT",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "tag",
"source": 8,
"value": "1"
},
{
"begin": 220,
"end": 2779,
"name": "JUMPDEST",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "ADDRESS",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "73"
},
{
"begin": 220,
"end": 2779,
"name": "DUP2",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE8",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "DUP3",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "DUP2",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "RETURN",
"source": 8
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220ab6a269a65f5803da06b288908b4f00629e38397f6d295ec471d84279be2e1d564736f6c63430008120033",
".code": [
{
"begin": 220,
"end": 2779,
"name": "PUSHDEPLOYADDRESS",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "ADDRESS",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "EQ",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "80"
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "40"
},
{
"begin": 220,
"end": 2779,
"name": "MSTORE",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "PUSH",
"source": 8,
"value": "0"
},
{
"begin": 220,
"end": 2779,
"name": "DUP1",
"source": 8
},
{
"begin": 220,
"end": 2779,
"name": "REVERT",
"source": 8
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.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/access/Ownable.sol",
"@openzeppelin/contracts/token/ERC721/IERC721.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.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",
"manifoldlazymint.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/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:11:-: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:11:-: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": 11,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH [$]",
"source": 11,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "B"
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "CODECOPY",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "DUP1",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "MLOAD",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "BYTE",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "73"
},
{
"begin": 202,
"end": 12784,
"name": "EQ",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH [tag]",
"source": 11,
"value": "1"
},
{
"begin": 202,
"end": 12784,
"name": "JUMPI",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "4"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "24"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "REVERT",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "tag",
"source": 11,
"value": "1"
},
{
"begin": 202,
"end": 12784,
"name": "JUMPDEST",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "ADDRESS",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "73"
},
{
"begin": 202,
"end": 12784,
"name": "DUP2",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE8",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "DUP3",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "DUP2",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "RETURN",
"source": 11
}
],
".data": {
"0": {
".auxdata": "a26469706673582212209150934ab0c91ee4f9e04d862390c6531c91524dc4cebd8ff4df5e5c5f78cf9a64736f6c63430008120033",
".code": [
{
"begin": 202,
"end": 12784,
"name": "PUSHDEPLOYADDRESS",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "ADDRESS",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "EQ",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "80"
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "40"
},
{
"begin": 202,
"end": 12784,
"name": "MSTORE",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "PUSH",
"source": 11,
"value": "0"
},
{
"begin": 202,
"end": 12784,
"name": "DUP1",
"source": 11
},
{
"begin": 202,
"end": 12784,
"name": "REVERT",
"source": 11
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.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/access/Ownable.sol",
"@openzeppelin/contracts/token/ERC721/IERC721.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.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",
"manifoldlazymint.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:12:-: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:12:-: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": 12,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH [$]",
"source": 12,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "B"
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "CODECOPY",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "DUP1",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "MLOAD",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "BYTE",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "73"
},
{
"begin": 215,
"end": 1262,
"name": "EQ",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH [tag]",
"source": 12,
"value": "1"
},
{
"begin": 215,
"end": 1262,
"name": "JUMPI",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "4"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "24"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "REVERT",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "tag",
"source": 12,
"value": "1"
},
{
"begin": 215,
"end": 1262,
"name": "JUMPDEST",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "ADDRESS",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "73"
},
{
"begin": 215,
"end": 1262,
"name": "DUP2",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE8",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "DUP3",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "DUP2",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "RETURN",
"source": 12
}
],
".data": {
"0": {
".auxdata": "a2646970667358221220d721ecf1dbea5e9bc0132744e6031bb93b88801904ab98161f4e012e5110763064736f6c63430008120033",
".code": [
{
"begin": 215,
"end": 1262,
"name": "PUSHDEPLOYADDRESS",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "ADDRESS",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "EQ",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "80"
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "40"
},
{
"begin": 215,
"end": 1262,
"name": "MSTORE",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "PUSH",
"source": 12,
"value": "0"
},
{
"begin": 215,
"end": 1262,
"name": "DUP1",
"source": 12
},
{
"begin": 215,
"end": 1262,
"name": "REVERT",
"source": 12
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.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/access/Ownable.sol",
"@openzeppelin/contracts/token/ERC721/IERC721.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.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",
"manifoldlazymint.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:13:-: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:13:-: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": 13,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH [$]",
"source": 13,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "B"
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "CODECOPY",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "DUP1",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "MLOAD",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "BYTE",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "73"
},
{
"begin": 1329,
"end": 12959,
"name": "EQ",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH [tag]",
"source": 13,
"value": "1"
},
{
"begin": 1329,
"end": 12959,
"name": "JUMPI",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "4"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "24"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "REVERT",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "tag",
"source": 13,
"value": "1"
},
{
"begin": 1329,
"end": 12959,
"name": "JUMPDEST",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "ADDRESS",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "73"
},
{
"begin": 1329,
"end": 12959,
"name": "DUP2",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE8",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "DUP3",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "DUP2",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "RETURN",
"source": 13
}
],
".data": {
"0": {
".auxdata": "a26469706673582212206728774bc3951bceaefc40b21aea722a3a50c2711b871663923cbc8fcbe3b39464736f6c63430008120033",
".code": [
{
"begin": 1329,
"end": 12959,
"name": "PUSHDEPLOYADDRESS",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "ADDRESS",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "EQ",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "80"
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "40"
},
{
"begin": 1329,
"end": 12959,
"name": "MSTORE",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "PUSH",
"source": 13,
"value": "0"
},
{
"begin": 1329,
"end": 12959,
"name": "DUP1",
"source": 13
},
{
"begin": 1329,
"end": 12959,
"name": "REVERT",
"source": 13
}
]
}
},
"sourceList": [
"@manifoldxyz/creator-core-solidity/contracts/core/ICreatorCore.sol",
"@manifoldxyz/creator-core-solidity/contracts/core/IERC721CreatorCore.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/access/Ownable.sol",
"@openzeppelin/contracts/token/ERC721/IERC721.sol",
"@openzeppelin/contracts/utils/Context.sol",
"@openzeppelin/contracts/utils/Strings.sol",
"@openzeppelin/contracts/utils/introspection/ERC165.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",
"manifoldlazymint.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
}
}
},
"manifoldlazymint.sol": {
"manifoldlazymint": {
"abi": [
{
"inputs": [
{
"internalType": "address",
"name": "creator",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"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": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"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": "string",
"name": "baseURI",
"type": "string"
}
],
"name": "setBaseURI",
"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": "creator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"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}."
},
"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": " /* \"manifoldlazymint.sol\":532:1525 contract manifoldlazymint is AdminControl, ICreatorExtensionTokenURI {... */\n mstore(0x40, 0x80)\n /* \"manifoldlazymint.sol\":707:773 constructor(address creator) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":936:968 _transferOwnership(_msgSender()) */\n tag_7\n /* \"@openzeppelin/contracts/access/Ownable.sol\":955:967 _msgSender() */\n tag_8\n /* \"@openzeppelin/contracts/access/Ownable.sol\":955:965 _msgSender */\n shl(0x20, tag_9)\n /* \"@openzeppelin/contracts/access/Ownable.sol\":955:967 _msgSender() */\n 0x20\n shr\n jump\t// in\ntag_8:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":936:954 _transferOwnership */\n shl(0x20, tag_10)\n /* \"@openzeppelin/contracts/access/Ownable.sol\":936:968 _transferOwnership(_msgSender()) */\n 0x20\n shr\n jump\t// in\ntag_7:\n /* \"manifoldlazymint.sol\":758:765 creator */\n dup1\n /* \"manifoldlazymint.sol\":747:755 _creator */\n 0x03\n 0x00\n /* \"manifoldlazymint.sol\":747:765 _creator = creator */\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 /* \"manifoldlazymint.sol\":707:773 constructor(address creator) {... */\n pop\n /* \"manifoldlazymint.sol\":532:1525 contract manifoldlazymint is AdminControl, ICreatorExtensionTokenURI {... */\n jump(tag_12)\n /* \"@openzeppelin/contracts/utils/Context.sol\":640:736 function _msgSender() internal view virtual returns (address) {... */\ntag_9:\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_10:\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 /* \"#utility.yul\":88:205 */\ntag_16:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:460 */\ntag_18:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":411:453 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":404:409 */\n dup3\n /* \"#utility.yul\":400:454 */\n and\n /* \"#utility.yul\":389:454 */\n swap1\n pop\n /* \"#utility.yul\":334:460 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":466:562 */\ntag_19:\n /* \"#utility.yul\":503:510 */\n 0x00\n /* \"#utility.yul\":532:556 */\n tag_28\n /* \"#utility.yul\":550:555 */\n dup3\n /* \"#utility.yul\":532:556 */\n tag_18\n jump\t// in\ntag_28:\n /* \"#utility.yul\":521:556 */\n swap1\n pop\n /* \"#utility.yul\":466:562 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":568:690 */\ntag_20:\n /* \"#utility.yul\":641:665 */\n tag_30\n /* \"#utility.yul\":659:664 */\n dup2\n /* \"#utility.yul\":641:665 */\n tag_19\n jump\t// in\ntag_30:\n /* \"#utility.yul\":634:639 */\n dup2\n /* \"#utility.yul\":631:666 */\n eq\n /* \"#utility.yul\":621:684 */\n tag_31\n jumpi\n /* \"#utility.yul\":680:681 */\n 0x00\n /* \"#utility.yul\":677:678 */\n dup1\n /* \"#utility.yul\":670:682 */\n revert\n /* \"#utility.yul\":621:684 */\ntag_31:\n /* \"#utility.yul\":568:690 */\n pop\n jump\t// out\n /* \"#utility.yul\":696:839 */\ntag_21:\n /* \"#utility.yul\":753:758 */\n 0x00\n /* \"#utility.yul\":784:790 */\n dup2\n /* \"#utility.yul\":778:791 */\n mload\n /* \"#utility.yul\":769:791 */\n swap1\n pop\n /* \"#utility.yul\":800:833 */\n tag_33\n /* \"#utility.yul\":827:832 */\n dup2\n /* \"#utility.yul\":800:833 */\n tag_20\n jump\t// in\ntag_33:\n /* \"#utility.yul\":696:839 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":845:1196 */\ntag_3:\n /* \"#utility.yul\":915:921 */\n 0x00\n /* \"#utility.yul\":964:966 */\n 0x20\n /* \"#utility.yul\":952:961 */\n dup3\n /* \"#utility.yul\":943:950 */\n dup5\n /* \"#utility.yul\":939:962 */\n sub\n /* \"#utility.yul\":935:967 */\n slt\n /* \"#utility.yul\":932:1051 */\n iszero\n tag_35\n jumpi\n /* \"#utility.yul\":970:1049 */\n tag_36\n tag_16\n jump\t// in\ntag_36:\n /* \"#utility.yul\":932:1051 */\ntag_35:\n /* \"#utility.yul\":1090:1091 */\n 0x00\n /* \"#utility.yul\":1115:1179 */\n tag_37\n /* \"#utility.yul\":1171:1178 */\n dup5\n /* \"#utility.yul\":1162:1168 */\n dup3\n /* \"#utility.yul\":1151:1160 */\n dup6\n /* \"#utility.yul\":1147:1169 */\n add\n /* \"#utility.yul\":1115:1179 */\n tag_21\n jump\t// in\ntag_37:\n /* \"#utility.yul\":1105:1179 */\n swap2\n pop\n /* \"#utility.yul\":1061:1189 */\n pop\n /* \"#utility.yul\":845:1196 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"manifoldlazymint.sol\":532:1525 contract manifoldlazymint is AdminControl, ICreatorExtensionTokenURI {... */\ntag_12:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"manifoldlazymint.sol\":532:1525 contract manifoldlazymint is AdminControl, ICreatorExtensionTokenURI {... */\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 0x55f804b3\n gt\n tag_14\n jumpi\n dup1\n 0x55f804b3\n eq\n tag_8\n jumpi\n dup1\n 0x6d73e669\n eq\n tag_9\n jumpi\n dup1\n 0x715018a6\n eq\n tag_10\n jumpi\n dup1\n 0x8da5cb5b\n eq\n tag_11\n jumpi\n dup1\n 0xe9dc6375\n eq\n tag_12\n jumpi\n dup1\n 0xf2fde38b\n eq\n tag_13\n jumpi\n jump(tag_2)\n tag_14:\n dup1\n 0x01ffc9a7\n eq\n tag_3\n jumpi\n dup1\n 0x1249c58b\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 /* \"manifoldlazymint.sol\":781:1066 function supportsInterface(bytes4 interfaceId) public view virtual override(AdminControl, IERC165) returns (bool) {... */\n tag_3:\n tag_15\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_16\n swap2\n swap1\n tag_17\n jump\t// in\n tag_16:\n tag_18\n jump\t// in\n tag_15:\n mload(0x40)\n tag_19\n swap2\n swap1\n tag_20\n jump\t// in\n tag_19:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"manifoldlazymint.sol\":1078:1172 function mint() public {... */\n tag_4:\n tag_21\n tag_22\n jump\t// in\n tag_21:\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_23\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_24\n swap2\n swap1\n tag_25\n jump\t// in\n tag_24:\n tag_26\n jump\t// in\n tag_23:\n mload(0x40)\n tag_27\n swap2\n swap1\n tag_20\n jump\t// in\n tag_27:\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_28\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_29\n swap2\n swap1\n tag_25\n jump\t// in\n tag_29:\n tag_30\n jump\t// in\n tag_28:\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_31\n tag_32\n jump\t// in\n tag_31:\n mload(0x40)\n tag_33\n swap2\n swap1\n tag_34\n jump\t// in\n tag_33:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"manifoldlazymint.sol\":1180:1279 function setBaseURI(string memory baseURI) public adminRequired {... */\n tag_8:\n tag_35\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_36\n swap2\n swap1\n tag_37\n jump\t// in\n tag_36:\n tag_38\n jump\t// in\n tag_35:\n stop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1440:1645 function approveAdmin(address admin) external override onlyOwner {... */\n tag_9:\n tag_39\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_40\n swap2\n swap1\n tag_25\n jump\t// in\n tag_40:\n tag_41\n jump\t// in\n tag_39:\n stop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1824:1925 function renounceOwnership() public virtual onlyOwner {... */\n tag_10:\n tag_42\n tag_43\n jump\t// in\n tag_42:\n stop\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1201:1286 function owner() public view virtual returns (address) {... */\n tag_11:\n tag_44\n tag_45\n jump\t// in\n tag_44:\n mload(0x40)\n tag_46\n swap2\n swap1\n tag_47\n jump\t// in\n tag_46:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"manifoldlazymint.sol\":1287:1522 function tokenURI(address creator, uint256 tokenId) external view override returns (string memory) {... */\n tag_12:\n tag_48\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_49\n swap2\n swap1\n tag_50\n jump\t// in\n tag_49:\n tag_51\n jump\t// in\n tag_48:\n mload(0x40)\n tag_52\n swap2\n swap1\n tag_53\n jump\t// in\n tag_52:\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_13:\n tag_54\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_55\n swap2\n swap1\n tag_25\n jump\t// in\n tag_55:\n tag_56\n jump\t// in\n tag_54:\n stop\n /* \"manifoldlazymint.sol\":781:1066 function supportsInterface(bytes4 interfaceId) public view virtual override(AdminControl, IERC165) returns (bool) {... */\n tag_18:\n /* \"manifoldlazymint.sol\":889:893 bool */\n 0x00\n /* \"manifoldlazymint.sol\":928:971 type(ICreatorExtensionTokenURI).interfaceId */\n 0xe9dc637500000000000000000000000000000000000000000000000000000000\n /* \"manifoldlazymint.sol\":913:971 interfaceId == type(ICreatorExtensionTokenURI).interfaceId */\n not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n /* \"manifoldlazymint.sol\":913:924 interfaceId */\n dup3\n /* \"manifoldlazymint.sol\":913:971 interfaceId == type(ICreatorExtensionTokenURI).interfaceId */\n not(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n and\n eq\n /* \"manifoldlazymint.sol\":913:1018 interfaceId == type(ICreatorExtensionTokenURI).interfaceId || AdminControl.supportsInterface(interfaceId) */\n dup1\n tag_58\n jumpi\n pop\n /* \"manifoldlazymint.sol\":975:1018 AdminControl.supportsInterface(interfaceId) */\n tag_59\n /* \"manifoldlazymint.sol\":1006:1017 interfaceId */\n dup3\n /* \"manifoldlazymint.sol\":975:1005 AdminControl.supportsInterface */\n tag_60\n /* \"manifoldlazymint.sol\":975:1018 AdminControl.supportsInterface(interfaceId) */\n jump\t// in\n tag_59:\n /* \"manifoldlazymint.sol\":913:1018 interfaceId == type(ICreatorExtensionTokenURI).interfaceId || AdminControl.supportsInterface(interfaceId) */\n tag_58:\n /* \"manifoldlazymint.sol\":913:1058 interfaceId == type(ICreatorExtensionTokenURI).interfaceId || AdminControl.supportsInterface(interfaceId) || super.supportsInterface(interfaceId) */\n dup1\n tag_61\n jumpi\n pop\n /* \"manifoldlazymint.sol\":1022:1058 super.supportsInterface(interfaceId) */\n tag_62\n /* \"manifoldlazymint.sol\":1046:1057 interfaceId */\n dup3\n /* \"manifoldlazymint.sol\":1022:1045 super.supportsInterface */\n tag_60\n /* \"manifoldlazymint.sol\":1022:1058 super.supportsInterface(interfaceId) */\n jump\t// in\n tag_62:\n /* \"manifoldlazymint.sol\":913:1058 interfaceId == type(ICreatorExtensionTokenURI).interfaceId || AdminControl.supportsInterface(interfaceId) || super.supportsInterface(interfaceId) */\n tag_61:\n /* \"manifoldlazymint.sol\":906:1058 return interfaceId == type(ICreatorExtensionTokenURI).interfaceId || AdminControl.supportsInterface(interfaceId) || super.supportsInterface(interfaceId) */\n swap1\n pop\n /* \"manifoldlazymint.sol\":781:1066 function supportsInterface(bytes4 interfaceId) public view virtual override(AdminControl, IERC165) returns (bool) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"manifoldlazymint.sol\":1078:1172 function mint() public {... */\n tag_22:\n /* \"manifoldlazymint.sol\":1129:1137 _creator */\n 0x03\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"manifoldlazymint.sol\":1110:1152 IERC721CreatorCore(_creator).mintExtension */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n 0x2928ca58\n /* \"manifoldlazymint.sol\":1153:1163 msg.sender */\n caller\n /* \"manifoldlazymint.sol\":1110:1164 IERC721CreatorCore(_creator).mintExtension(msg.sender) */\n mload(0x40)\n dup3\n 0xffffffff\n and\n 0xe0\n shl\n dup2\n mstore\n 0x04\n add\n tag_64\n swap2\n swap1\n tag_47\n jump\t// in\n tag_64:\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_66\n jumpi\n returndatasize\n 0x00\n dup1\n returndatacopy\n revert(0x00, returndatasize)\n tag_66:\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_67\n swap2\n swap1\n tag_68\n jump\t// in\n tag_67:\n pop\n /* \"manifoldlazymint.sol\":1078:1172 function mint() public {... */\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_26:\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_70\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2071 owner */\n tag_45\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2073 owner() */\n jump\t// in\n tag_70:\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_71\n jumpi\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2086:2109 _admins.contains(admin) */\n tag_72\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_73\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_72:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":2066:2109 owner() == admin || _admins.contains(admin) */\n tag_71:\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_30:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_75\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_76\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_75:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1790:1813 _admins.contains(admin) */\n tag_78\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_73\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_78:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1786:1911 if (_admins.contains(admin)) {... */\n iszero\n tag_79\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_80\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_81\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_80:\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1786:1911 if (_admins.contains(admin)) {... */\n tag_79:\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_32:\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_83\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_84\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1222:1238 _admins.length() */\n jump\t// in\n tag_83:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1208:1239 new address[](_admins.length()) */\n 0xffffffffffffffff\n dup2\n gt\n iszero\n tag_85\n jumpi\n tag_86\n tag_87\n jump\t// in\n tag_86:\n tag_85:\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_88\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_88:\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_89:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1270:1286 _admins.length() */\n tag_92\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_84\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1270:1286 _admins.length() */\n jump\t// in\n tag_92:\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_90\n jumpi\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1319:1332 _admins.at(i) */\n tag_93\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_94\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_93:\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_95\n jumpi\n tag_96\n tag_97\n jump\t// in\n tag_96:\n tag_95:\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_98\n swap1\n tag_99\n jump\t// in\n tag_98:\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_89)\n tag_90:\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 /* \"manifoldlazymint.sol\":1180:1279 function setBaseURI(string memory baseURI) public adminRequired {... */\n tag_38:\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_101\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:936 owner */\n tag_45\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:938 owner() */\n jump\t// in\n tag_101:\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_102\n jumpi\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":956:984 _admins.contains(msg.sender) */\n tag_103\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_73\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_103:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":931:984 owner() == msg.sender || _admins.contains(msg.sender) */\n tag_102:\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_104\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_105\n swap1\n tag_106\n jump\t// in\n tag_105:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_104:\n /* \"manifoldlazymint.sol\":1264:1271 baseURI */\n dup1\n /* \"manifoldlazymint.sol\":1253:1261 _baseURI */\n 0x04\n /* \"manifoldlazymint.sol\":1253:1271 _baseURI = baseURI */\n swap1\n dup2\n tag_108\n swap2\n swap1\n tag_109\n jump\t// in\n tag_108:\n pop\n /* \"manifoldlazymint.sol\":1180:1279 function setBaseURI(string memory baseURI) public adminRequired {... */\n pop\n jump\t// out\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1440:1645 function approveAdmin(address admin) external override onlyOwner {... */\n tag_41:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_111\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_76\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_111:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1520:1543 _admins.contains(admin) */\n tag_113\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_73\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_113:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1515:1639 if (!_admins.contains(admin)) {... */\n tag_114\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_115\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_116\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_115:\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":1515:1639 if (!_admins.contains(admin)) {... */\n tag_114:\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_43:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_118\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_76\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_118:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1888:1918 _transferOwnership(address(0)) */\n tag_120\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1915:1916 0 */\n 0x00\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1888:1906 _transferOwnership */\n tag_121\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1888:1918 _transferOwnership(address(0)) */\n jump\t// in\n tag_120:\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_45:\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 /* \"manifoldlazymint.sol\":1287:1522 function tokenURI(address creator, uint256 tokenId) external view override returns (string memory) {... */\n tag_51:\n /* \"manifoldlazymint.sol\":1371:1384 string memory */\n 0x60\n /* \"manifoldlazymint.sol\":1416:1424 _creator */\n 0x03\n 0x00\n swap1\n sload\n swap1\n 0x0100\n exp\n swap1\n div\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"manifoldlazymint.sol\":1405:1424 creator == _creator */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n /* \"manifoldlazymint.sol\":1405:1412 creator */\n dup4\n /* \"manifoldlazymint.sol\":1405:1424 creator == _creator */\n 0xffffffffffffffffffffffffffffffffffffffff\n and\n eq\n /* \"manifoldlazymint.sol\":1397:1442 require(creator == _creator, \"Invalid token\") */\n tag_124\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_125\n swap1\n tag_126\n jump\t// in\n tag_125:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_124:\n /* \"manifoldlazymint.sol\":1484:1492 _baseURI */\n 0x04\n /* \"manifoldlazymint.sol\":1494:1512 tokenId.toString() */\n tag_127\n /* \"manifoldlazymint.sol\":1494:1501 tokenId */\n dup4\n /* \"manifoldlazymint.sol\":1494:1510 tokenId.toString */\n tag_128\n /* \"manifoldlazymint.sol\":1494:1512 tokenId.toString() */\n jump\t// in\n tag_127:\n /* \"manifoldlazymint.sol\":1467:1513 abi.encodePacked(_baseURI, tokenId.toString()) */\n add(0x20, mload(0x40))\n tag_129\n swap3\n swap2\n swap1\n tag_130\n jump\t// in\n tag_129:\n mload(0x40)\n 0x20\n dup2\n dup4\n sub\n sub\n dup2\n mstore\n swap1\n 0x40\n mstore\n /* \"manifoldlazymint.sol\":1453:1514 return string(abi.encodePacked(_baseURI, tokenId.toString())) */\n swap1\n pop\n /* \"manifoldlazymint.sol\":1287:1522 function tokenURI(address creator, uint256 tokenId) external view override returns (string memory) {... */\n swap3\n swap2\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_56:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n tag_132\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1105 _checkOwner */\n tag_76\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1094:1107 _checkOwner() */\n jump\t// in\n tag_132:\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_134\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_135\n swap1\n tag_136\n jump\t// in\n tag_135:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_134:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2237:2265 _transferOwnership(newOwner) */\n tag_137\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2256:2264 newOwner */\n dup2\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2237:2255 _transferOwnership */\n tag_121\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2237:2265 _transferOwnership(newOwner) */\n jump\t// in\n tag_137:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":2074:2272 function transferOwnership(address newOwner) public virtual onlyOwner {... */\n pop\n jump\t// out\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":565:795 function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {... */\n tag_60:\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_139\n jumpi\n pop\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":752:788 super.supportsInterface(interfaceId) */\n tag_140\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_141\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":752:788 super.supportsInterface(interfaceId) */\n jump\t// in\n tag_140:\n /* \"@manifoldxyz/libraries-solidity/contracts/access/AdminControl.sol\":690:788 interfaceId == type(IAdminControl).interfaceId... */\n tag_139:\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 /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8860:9025 function contains(AddressSet storage set, address value) internal view returns (bool) {... */\n tag_73:\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_143\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_144\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8963:9018 _contains(set._inner, bytes32(uint256(uint160(value)))) */\n jump\t// in\n tag_143:\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_76:\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1433:1445 _msgSender() */\n tag_146\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1433:1443 _msgSender */\n tag_147\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1433:1445 _msgSender() */\n jump\t// in\n tag_146:\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_148\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1427 owner */\n tag_45\n /* \"@openzeppelin/contracts/access/Ownable.sol\":1422:1429 owner() */\n jump\t// in\n tag_148:\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_149\n jumpi\n mload(0x40)\n 0x08c379a000000000000000000000000000000000000000000000000000000000\n dup2\n mstore\n 0x04\n add\n tag_150\n swap1\n tag_151\n jump\t// in\n tag_150:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n revert\n tag_149:\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_81:\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_153\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_154\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8719:8772 _remove(set._inner, bytes32(uint256(uint160(value)))) */\n jump\t// in\n tag_153:\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_84:\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_156\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_157\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9195:9214 _length(set._inner) */\n jump\t// in\n tag_156:\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_94:\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_159\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_160\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":9687:9709 _at(set._inner, index) */\n jump\t// in\n tag_159:\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_116:\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_162\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_163\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":8398:8448 _add(set._inner, bytes32(uint256(uint160(value)))) */\n jump\t// in\n tag_162:\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_121:\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/Strings.sol\":447:1143 function toString(uint256 value) internal pure returns (string memory) {... */\n tag_128:\n /* \"@openzeppelin/contracts/utils/Strings.sol\":503:516 string memory */\n 0x60\n /* \"@openzeppelin/contracts/utils/Strings.sol\":552:566 uint256 length */\n 0x00\n /* \"@openzeppelin/contracts/utils/Strings.sol\":589:590 1 */\n 0x01\n /* \"@openzeppelin/contracts/utils/Strings.sol\":569:586 Math.log10(value) */\n tag_166\n /* \"@openzeppelin/contracts/utils/Strings.sol\":580:585 value */\n dup5\n /* \"@openzeppelin/contracts/utils/Strings.sol\":569:579 Math.log10 */\n tag_167\n /* \"@openzeppelin/contracts/utils/Strings.sol\":569:586 Math.log10(value) */\n jump\t// in\n tag_166:\n /* \"@openzeppelin/contracts/utils/Strings.sol\":569:590 Math.log10(value) + 1 */\n add\n /* \"@openzeppelin/contracts/utils/Strings.sol\":552:590 uint256 length = Math.log10(value) + 1 */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":604:624 string memory buffer */\n 0x00\n /* \"@openzeppelin/contracts/utils/Strings.sol\":638:644 length */\n dup2\n /* \"@openzeppelin/contracts/utils/Strings.sol\":627:645 new string(length) */\n 0xffffffffffffffff\n dup2\n gt\n iszero\n tag_168\n jumpi\n tag_169\n tag_87\n jump\t// in\n tag_169:\n tag_168:\n mload(0x40)\n swap1\n dup1\n dup3\n mstore\n dup1\n 0x1f\n add\n not(0x1f)\n and\n 0x20\n add\n dup3\n add\n 0x40\n mstore\n dup1\n iszero\n tag_170\n jumpi\n dup2\n 0x20\n add\n 0x01\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_170:\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":604:645 string memory buffer = new string(length) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":659:670 uint256 ptr */\n 0x00\n /* \"@openzeppelin/contracts/utils/Strings.sol\":785:791 length */\n dup3\n /* \"@openzeppelin/contracts/utils/Strings.sol\":781:783 32 */\n 0x20\n /* \"@openzeppelin/contracts/utils/Strings.sol\":777:792 add(32, length) */\n add\n /* \"@openzeppelin/contracts/utils/Strings.sol\":769:775 buffer */\n dup3\n /* \"@openzeppelin/contracts/utils/Strings.sol\":765:793 add(buffer, add(32, length)) */\n add\n /* \"@openzeppelin/contracts/utils/Strings.sol\":758:793 ptr := add(buffer, add(32, length)) */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":820:1100 while (true) {... */\n tag_171:\n /* \"@openzeppelin/contracts/utils/Strings.sol\":827:831 true */\n 0x01\n /* \"@openzeppelin/contracts/utils/Strings.sol\":820:1100 while (true) {... */\n iszero\n tag_172\n jumpi\n /* \"@openzeppelin/contracts/utils/Strings.sol\":851:856 ptr-- */\n dup1\n dup1\n 0x01\n swap1\n sub\n swap2\n pop\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":990:998 _SYMBOLS */\n 0x3031323334353637383961626364656600000000000000000000000000000000\n /* \"@openzeppelin/contracts/utils/Strings.sol\":985:987 10 */\n 0x0a\n /* \"@openzeppelin/contracts/utils/Strings.sol\":978:983 value */\n dup7\n /* \"@openzeppelin/contracts/utils/Strings.sol\":974:988 mod(value, 10) */\n mod\n /* \"@openzeppelin/contracts/utils/Strings.sol\":969:999 byte(mod(value, 10), _SYMBOLS) */\n byte\n /* \"@openzeppelin/contracts/utils/Strings.sol\":964:967 ptr */\n dup2\n /* \"@openzeppelin/contracts/utils/Strings.sol\":956:1000 mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) */\n mstore8\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1044:1046 10 */\n 0x0a\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1035:1046 value /= 10 */\n dup6\n dup2\n tag_173\n jumpi\n tag_174\n tag_175\n jump\t// in\n tag_174:\n tag_173:\n div\n swap5\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1077:1078 0 */\n 0x00\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1068:1073 value */\n dup6\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1068:1078 value == 0 */\n sub\n /* \"@openzeppelin/contracts/utils/Strings.sol\":820:1100 while (true) {... */\n tag_171\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1064:1085 if (value == 0) break */\n jumpi\n /* \"@openzeppelin/contracts/utils/Strings.sol\":820:1100 while (true) {... */\n tag_172:\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1120:1126 buffer */\n dup2\n /* \"@openzeppelin/contracts/utils/Strings.sol\":1113:1126 return buffer */\n swap4\n pop\n pop\n pop\n pop\n /* \"@openzeppelin/contracts/utils/Strings.sol\":447:1143 function toString(uint256 value) internal pure returns (string memory) {... */\n swap2\n swap1\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_141:\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\":4255:4382 function _contains(Set storage set, bytes32 value) private view returns (bool) {... */\n tag_144:\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_147:\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_154:\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_181\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_182\n swap2\n swap1\n tag_183\n jump\t// in\n tag_182:\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_184\n swap2\n swap1\n tag_183\n jump\t// in\n tag_184:\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_185\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_186\n jumpi\n tag_187\n tag_97\n jump\t// in\n tag_187:\n tag_186:\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_189\n jumpi\n tag_190\n tag_97\n jump\t// in\n tag_190:\n tag_189:\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_185:\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/EnumerableSet.sol\":3977:3994 set._values.pop() */\n dup1\n sload\n dup1\n tag_192\n jumpi\n tag_193\n tag_194\n jump\t// in\n tag_193:\n tag_192:\n 0x01\n swap1\n sub\n dup2\n dup2\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n 0x00\n swap1\n sstore\n swap1\n sstore\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4069:4072 set */\n dup6\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4069:4081 set._indexes */\n 0x01\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4069:4088 set._indexes[value] */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4082:4087 value */\n dup7\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4069:4088 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 /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4062:4088 delete set._indexes[value] */\n 0x00\n swap1\n sstore\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4110:4114 true */\n 0x01\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4103:4114 return true */\n swap4\n pop\n pop\n pop\n pop\n jump(tag_180)\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":3019:4168 if (valueIndex != 0) {... */\n tag_181:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4152:4157 false */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4145:4157 return false */\n swap2\n pop\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2786:4174 function _remove(Set storage set, bytes32 value) private returns (bool) {... */\n tag_180:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4463:4570 function _length(Set storage set) private view returns (uint256) {... */\n tag_157:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4519:4526 uint256 */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4545:4548 set */\n dup2\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4545:4556 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4545:4563 set._values.length */\n dup1\n sload\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4538:4563 return set._values.length */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4463:4570 function _length(Set storage set) private view returns (uint256) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4912:5030 function _at(Set storage set, uint256 index) private view returns (bytes32) {... */\n tag_160:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4979:4986 bytes32 */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":5005:5008 set */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":5005:5016 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":5017:5022 index */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":5005:5023 set._values[index] */\n dup2\n sload\n dup2\n lt\n tag_199\n jumpi\n tag_200\n tag_97\n jump\t// in\n tag_200:\n tag_199:\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n sload\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4998:5023 return set._values[index] */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":4912:5030 function _at(Set storage set, uint256 index) private view returns (bytes32) {... */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2214:2618 function _add(Set storage set, bytes32 value) private returns (bool) {... */\n tag_163:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2277:2281 bool */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2298:2319 _contains(set, value) */\n tag_203\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2308:2311 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2313:2318 value */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2298:2307 _contains */\n tag_144\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2298:2319 _contains(set, value) */\n jump\t// in\n tag_203:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2293:2612 if (!_contains(set, value)) {... */\n tag_204\n jumpi\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2335:2338 set */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2335:2346 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2352:2357 value */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2335:2358 set._values.push(value) */\n swap1\n dup1\n 0x01\n dup2\n sload\n add\n dup1\n dup3\n sstore\n dup1\n swap2\n pop\n pop\n 0x01\n swap1\n sub\n swap1\n 0x00\n mstore\n keccak256(0x00, 0x20)\n add\n 0x00\n swap1\n swap2\n swap1\n swap2\n swap1\n swap2\n pop\n sstore\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2515:2518 set */\n dup3\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2515:2526 set._values */\n 0x00\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2515:2533 set._values.length */\n dup1\n sload\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2493:2496 set */\n dup4\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2493:2505 set._indexes */\n 0x01\n add\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2493:2512 set._indexes[value] */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2506:2511 value */\n dup5\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2493:2512 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 /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2493:2533 set._indexes[value] = set._values.length */\n dup2\n swap1\n sstore\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2554:2558 true */\n 0x01\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2547:2558 return true */\n swap1\n pop\n jump(tag_202)\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2293:2612 if (!_contains(set, value)) {... */\n tag_204:\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2596:2601 false */\n 0x00\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2589:2601 return false */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":2214:2618 function _add(Set storage set, bytes32 value) private returns (bool) {... */\n tag_202:\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10139:11055 function log10(uint256 value) internal pure returns (uint256) {... */\n tag_167:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10192:10199 uint256 */\n 0x00\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10211:10225 uint256 result */\n dup1\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10228:10229 0 */\n 0x00\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10211:10229 uint256 result = 0 */\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10276:10284 10 ** 64 */\n 0x184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10267:10272 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10267:10284 value >= 10 ** 64 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10263:10366 if (value >= 10 ** 64) {... */\n tag_208\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10313:10321 10 ** 64 */\n 0x184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10304:10321 value /= 10 ** 64 */\n dup4\n dup2\n tag_209\n jumpi\n tag_210\n tag_175\n jump\t// in\n tag_210:\n tag_209:\n div\n swap3\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10349:10351 64 */\n 0x40\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10339:10351 result += 64 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10263:10366 if (value >= 10 ** 64) {... */\n tag_208:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10392:10400 10 ** 32 */\n 0x04ee2d6d415b85acef8100000000\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10383:10388 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10383:10400 value >= 10 ** 32 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10379:10482 if (value >= 10 ** 32) {... */\n tag_211\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10429:10437 10 ** 32 */\n 0x04ee2d6d415b85acef8100000000\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10420:10437 value /= 10 ** 32 */\n dup4\n dup2\n tag_212\n jumpi\n tag_213\n tag_175\n jump\t// in\n tag_213:\n tag_212:\n div\n swap3\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10465:10467 32 */\n 0x20\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10455:10467 result += 32 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10379:10482 if (value >= 10 ** 32) {... */\n tag_211:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10508:10516 10 ** 16 */\n 0x2386f26fc10000\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10499:10504 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10499:10516 value >= 10 ** 16 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10495:10598 if (value >= 10 ** 16) {... */\n tag_214\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10545:10553 10 ** 16 */\n 0x2386f26fc10000\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10536:10553 value /= 10 ** 16 */\n dup4\n dup2\n tag_215\n jumpi\n tag_216\n tag_175\n jump\t// in\n tag_216:\n tag_215:\n div\n swap3\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10581:10583 16 */\n 0x10\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10571:10583 result += 16 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10495:10598 if (value >= 10 ** 16) {... */\n tag_214:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10624:10631 10 ** 8 */\n 0x05f5e100\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10615:10620 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10615:10631 value >= 10 ** 8 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10611:10711 if (value >= 10 ** 8) {... */\n tag_217\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10660:10667 10 ** 8 */\n 0x05f5e100\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10651:10667 value /= 10 ** 8 */\n dup4\n dup2\n tag_218\n jumpi\n tag_219\n tag_175\n jump\t// in\n tag_219:\n tag_218:\n div\n swap3\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10695:10696 8 */\n 0x08\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10685:10696 result += 8 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10611:10711 if (value >= 10 ** 8) {... */\n tag_217:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10737:10744 10 ** 4 */\n 0x2710\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10728:10733 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10728:10744 value >= 10 ** 4 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10724:10824 if (value >= 10 ** 4) {... */\n tag_220\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10773:10780 10 ** 4 */\n 0x2710\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10764:10780 value /= 10 ** 4 */\n dup4\n dup2\n tag_221\n jumpi\n tag_222\n tag_175\n jump\t// in\n tag_222:\n tag_221:\n div\n swap3\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10808:10809 4 */\n 0x04\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10798:10809 result += 4 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10724:10824 if (value >= 10 ** 4) {... */\n tag_220:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10850:10857 10 ** 2 */\n 0x64\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10841:10846 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10841:10857 value >= 10 ** 2 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10837:10937 if (value >= 10 ** 2) {... */\n tag_223\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10886:10893 10 ** 2 */\n 0x64\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10877:10893 value /= 10 ** 2 */\n dup4\n dup2\n tag_224\n jumpi\n tag_225\n tag_175\n jump\t// in\n tag_225:\n tag_224:\n div\n swap3\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10921:10922 2 */\n 0x02\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10911:10922 result += 2 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10837:10937 if (value >= 10 ** 2) {... */\n tag_223:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10963:10970 10 ** 1 */\n 0x0a\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10954:10959 value */\n dup4\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10954:10970 value >= 10 ** 1 */\n lt\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10950:11016 if (value >= 10 ** 1) {... */\n tag_226\n jumpi\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":11000:11001 1 */\n 0x01\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10990:11001 result += 1 */\n dup2\n add\n swap1\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10950:11016 if (value >= 10 ** 1) {... */\n tag_226:\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":11042:11048 result */\n dup1\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":11035:11048 return result */\n swap2\n pop\n pop\n /* \"@openzeppelin/contracts/utils/math/Math.sol\":10139:11055 function log10(uint256 value) internal pure returns (uint256) {... */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7:82 */\n tag_227:\n /* \"#utility.yul\":40:46 */\n 0x00\n /* \"#utility.yul\":73:75 */\n 0x40\n /* \"#utility.yul\":67:76 */\n mload\n /* \"#utility.yul\":57:76 */\n swap1\n pop\n /* \"#utility.yul\":7:82 */\n swap1\n jump\t// out\n /* \"#utility.yul\":88:205 */\n tag_228:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":211:328 */\n tag_229:\n /* \"#utility.yul\":320:321 */\n 0x00\n /* \"#utility.yul\":317:318 */\n dup1\n /* \"#utility.yul\":310:322 */\n revert\n /* \"#utility.yul\":334:483 */\n tag_230:\n /* \"#utility.yul\":370:377 */\n 0x00\n /* \"#utility.yul\":410:476 */\n 0xffffffff00000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":403:408 */\n dup3\n /* \"#utility.yul\":399:477 */\n and\n /* \"#utility.yul\":388:477 */\n swap1\n pop\n /* \"#utility.yul\":334:483 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":489:609 */\n tag_231:\n /* \"#utility.yul\":561:584 */\n tag_299\n /* \"#utility.yul\":578:583 */\n dup2\n /* \"#utility.yul\":561:584 */\n tag_230\n jump\t// in\n tag_299:\n /* \"#utility.yul\":554:559 */\n dup2\n /* \"#utility.yul\":551:585 */\n eq\n /* \"#utility.yul\":541:603 */\n tag_300\n jumpi\n /* \"#utility.yul\":599:600 */\n 0x00\n /* \"#utility.yul\":596:597 */\n dup1\n /* \"#utility.yul\":589:601 */\n revert\n /* \"#utility.yul\":541:603 */\n tag_300:\n /* \"#utility.yul\":489:609 */\n pop\n jump\t// out\n /* \"#utility.yul\":615:752 */\n tag_232:\n /* \"#utility.yul\":660:665 */\n 0x00\n /* \"#utility.yul\":698:704 */\n dup2\n /* \"#utility.yul\":685:705 */\n calldataload\n /* \"#utility.yul\":676:705 */\n swap1\n pop\n /* \"#utility.yul\":714:746 */\n tag_302\n /* \"#utility.yul\":740:745 */\n dup2\n /* \"#utility.yul\":714:746 */\n tag_231\n jump\t// in\n tag_302:\n /* \"#utility.yul\":615:752 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":758:1085 */\n tag_17:\n /* \"#utility.yul\":816:822 */\n 0x00\n /* \"#utility.yul\":865:867 */\n 0x20\n /* \"#utility.yul\":853:862 */\n dup3\n /* \"#utility.yul\":844:851 */\n dup5\n /* \"#utility.yul\":840:863 */\n sub\n /* \"#utility.yul\":836:868 */\n slt\n /* \"#utility.yul\":833:952 */\n iszero\n tag_304\n jumpi\n /* \"#utility.yul\":871:950 */\n tag_305\n tag_228\n jump\t// in\n tag_305:\n /* \"#utility.yul\":833:952 */\n tag_304:\n /* \"#utility.yul\":991:992 */\n 0x00\n /* \"#utility.yul\":1016:1068 */\n tag_306\n /* \"#utility.yul\":1060:1067 */\n dup5\n /* \"#utility.yul\":1051:1057 */\n dup3\n /* \"#utility.yul\":1040:1049 */\n dup6\n /* \"#utility.yul\":1036:1058 */\n add\n /* \"#utility.yul\":1016:1068 */\n tag_232\n jump\t// in\n tag_306:\n /* \"#utility.yul\":1006:1068 */\n swap2\n pop\n /* \"#utility.yul\":962:1078 */\n pop\n /* \"#utility.yul\":758:1085 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1091:1181 */\n tag_233:\n /* \"#utility.yul\":1125:1132 */\n 0x00\n /* \"#utility.yul\":1168:1173 */\n dup2\n /* \"#utility.yul\":1161:1174 */\n iszero\n /* \"#utility.yul\":1154:1175 */\n iszero\n /* \"#utility.yul\":1143:1175 */\n swap1\n pop\n /* \"#utility.yul\":1091:1181 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1187:1296 */\n tag_234:\n /* \"#utility.yul\":1268:1289 */\n tag_309\n /* \"#utility.yul\":1283:1288 */\n dup2\n /* \"#utility.yul\":1268:1289 */\n tag_233\n jump\t// in\n tag_309:\n /* \"#utility.yul\":1263:1266 */\n dup3\n /* \"#utility.yul\":1256:1290 */\n mstore\n /* \"#utility.yul\":1187:1296 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1302:1512 */\n tag_20:\n /* \"#utility.yul\":1389:1393 */\n 0x00\n /* \"#utility.yul\":1427:1429 */\n 0x20\n /* \"#utility.yul\":1416:1425 */\n dup3\n /* \"#utility.yul\":1412:1430 */\n add\n /* \"#utility.yul\":1404:1430 */\n swap1\n pop\n /* \"#utility.yul\":1440:1505 */\n tag_311\n /* \"#utility.yul\":1502:1503 */\n 0x00\n /* \"#utility.yul\":1491:1500 */\n dup4\n /* \"#utility.yul\":1487:1504 */\n add\n /* \"#utility.yul\":1478:1484 */\n dup5\n /* \"#utility.yul\":1440:1505 */\n tag_234\n jump\t// in\n tag_311:\n /* \"#utility.yul\":1302:1512 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1518:1644 */\n tag_235:\n /* \"#utility.yul\":1555:1562 */\n 0x00\n /* \"#utility.yul\":1595:1637 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1588:1593 */\n dup3\n /* \"#utility.yul\":1584:1638 */\n and\n /* \"#utility.yul\":1573:1638 */\n swap1\n pop\n /* \"#utility.yul\":1518:1644 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1650:1746 */\n tag_236:\n /* \"#utility.yul\":1687:1694 */\n 0x00\n /* \"#utility.yul\":1716:1740 */\n tag_314\n /* \"#utility.yul\":1734:1739 */\n dup3\n /* \"#utility.yul\":1716:1740 */\n tag_235\n jump\t// in\n tag_314:\n /* \"#utility.yul\":1705:1740 */\n swap1\n pop\n /* \"#utility.yul\":1650:1746 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1752:1874 */\n tag_237:\n /* \"#utility.yul\":1825:1849 */\n tag_316\n /* \"#utility.yul\":1843:1848 */\n dup2\n /* \"#utility.yul\":1825:1849 */\n tag_236\n jump\t// in\n tag_316:\n /* \"#utility.yul\":1818:1823 */\n dup2\n /* \"#utility.yul\":1815:1850 */\n eq\n /* \"#utility.yul\":1805:1868 */\n tag_317\n jumpi\n /* \"#utility.yul\":1864:1865 */\n 0x00\n /* \"#utility.yul\":1861:1862 */\n dup1\n /* \"#utility.yul\":1854:1866 */\n revert\n /* \"#utility.yul\":1805:1868 */\n tag_317:\n /* \"#utility.yul\":1752:1874 */\n pop\n jump\t// out\n /* \"#utility.yul\":1880:2019 */\n tag_238:\n /* \"#utility.yul\":1926:1931 */\n 0x00\n /* \"#utility.yul\":1964:1970 */\n dup2\n /* \"#utility.yul\":1951:1971 */\n calldataload\n /* \"#utility.yul\":1942:1971 */\n swap1\n pop\n /* \"#utility.yul\":1980:2013 */\n tag_319\n /* \"#utility.yul\":2007:2012 */\n dup2\n /* \"#utility.yul\":1980:2013 */\n tag_237\n jump\t// in\n tag_319:\n /* \"#utility.yul\":1880:2019 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2025:2354 */\n tag_25:\n /* \"#utility.yul\":2084:2090 */\n 0x00\n /* \"#utility.yul\":2133:2135 */\n 0x20\n /* \"#utility.yul\":2121:2130 */\n dup3\n /* \"#utility.yul\":2112:2119 */\n dup5\n /* \"#utility.yul\":2108:2131 */\n sub\n /* \"#utility.yul\":2104:2136 */\n slt\n /* \"#utility.yul\":2101:2220 */\n iszero\n tag_321\n jumpi\n /* \"#utility.yul\":2139:2218 */\n tag_322\n tag_228\n jump\t// in\n tag_322:\n /* \"#utility.yul\":2101:2220 */\n tag_321:\n /* \"#utility.yul\":2259:2260 */\n 0x00\n /* \"#utility.yul\":2284:2337 */\n tag_323\n /* \"#utility.yul\":2329:2336 */\n dup5\n /* \"#utility.yul\":2320:2326 */\n dup3\n /* \"#utility.yul\":2309:2318 */\n dup6\n /* \"#utility.yul\":2305:2327 */\n add\n /* \"#utility.yul\":2284:2337 */\n tag_238\n jump\t// in\n tag_323:\n /* \"#utility.yul\":2274:2337 */\n swap2\n pop\n /* \"#utility.yul\":2230:2347 */\n pop\n /* \"#utility.yul\":2025:2354 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2360:2474 */\n tag_239:\n /* \"#utility.yul\":2427:2433 */\n 0x00\n /* \"#utility.yul\":2461:2466 */\n dup2\n /* \"#utility.yul\":2455:2467 */\n mload\n /* \"#utility.yul\":2445:2467 */\n swap1\n pop\n /* \"#utility.yul\":2360:2474 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2480:2664 */\n tag_240:\n /* \"#utility.yul\":2579:2590 */\n 0x00\n /* \"#utility.yul\":2613:2619 */\n dup3\n /* \"#utility.yul\":2608:2611 */\n dup3\n /* \"#utility.yul\":2601:2620 */\n mstore\n /* \"#utility.yul\":2653:2657 */\n 0x20\n /* \"#utility.yul\":2648:2651 */\n dup3\n /* \"#utility.yul\":2644:2658 */\n add\n /* \"#utility.yul\":2629:2658 */\n swap1\n pop\n /* \"#utility.yul\":2480:2664 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2670:2802 */\n tag_241:\n /* \"#utility.yul\":2737:2741 */\n 0x00\n /* \"#utility.yul\":2760:2763 */\n dup2\n /* \"#utility.yul\":2752:2763 */\n swap1\n pop\n /* \"#utility.yul\":2790:2794 */\n 0x20\n /* \"#utility.yul\":2785:2788 */\n dup3\n /* \"#utility.yul\":2781:2795 */\n add\n /* \"#utility.yul\":2773:2795 */\n swap1\n pop\n /* \"#utility.yul\":2670:2802 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":2808:2916 */\n tag_242:\n /* \"#utility.yul\":2885:2909 */\n tag_328\n /* \"#utility.yul\":2903:2908 */\n dup2\n /* \"#utility.yul\":2885:2909 */\n tag_236\n jump\t// in\n tag_328:\n /* \"#utility.yul\":2880:2883 */\n dup3\n /* \"#utility.yul\":2873:2910 */\n mstore\n /* \"#utility.yul\":2808:2916 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":2922:3101 */\n tag_243:\n /* \"#utility.yul\":2991:3001 */\n 0x00\n /* \"#utility.yul\":3012:3058 */\n tag_330\n /* \"#utility.yul\":3054:3057 */\n dup4\n /* \"#utility.yul\":3046:3052 */\n dup4\n /* \"#utility.yul\":3012:3058 */\n tag_242\n jump\t// in\n tag_330:\n /* \"#utility.yul\":3090:3094 */\n 0x20\n /* \"#utility.yul\":3085:3088 */\n dup4\n /* \"#utility.yul\":3081:3095 */\n add\n /* \"#utility.yul\":3067:3095 */\n swap1\n pop\n /* \"#utility.yul\":2922:3101 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3107:3220 */\n tag_244:\n /* \"#utility.yul\":3177:3181 */\n 0x00\n /* \"#utility.yul\":3209:3213 */\n 0x20\n /* \"#utility.yul\":3204:3207 */\n dup3\n /* \"#utility.yul\":3200:3214 */\n add\n /* \"#utility.yul\":3192:3214 */\n swap1\n pop\n /* \"#utility.yul\":3107:3220 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":3256:3988 */\n tag_245:\n /* \"#utility.yul\":3375:3378 */\n 0x00\n /* \"#utility.yul\":3404:3458 */\n tag_333\n /* \"#utility.yul\":3452:3457 */\n dup3\n /* \"#utility.yul\":3404:3458 */\n tag_239\n jump\t// in\n tag_333:\n /* \"#utility.yul\":3474:3560 */\n tag_334\n /* \"#utility.yul\":3553:3559 */\n dup2\n /* \"#utility.yul\":3548:3551 */\n dup6\n /* \"#utility.yul\":3474:3560 */\n tag_240\n jump\t// in\n tag_334:\n /* \"#utility.yul\":3467:3560 */\n swap4\n pop\n /* \"#utility.yul\":3584:3640 */\n tag_335\n /* \"#utility.yul\":3634:3639 */\n dup4\n /* \"#utility.yul\":3584:3640 */\n tag_241\n jump\t// in\n tag_335:\n /* \"#utility.yul\":3663:3670 */\n dup1\n /* \"#utility.yul\":3694:3695 */\n 0x00\n /* \"#utility.yul\":3679:3963 */\n tag_336:\n /* \"#utility.yul\":3704:3710 */\n dup4\n /* \"#utility.yul\":3701:3702 */\n dup2\n /* \"#utility.yul\":3698:3711 */\n lt\n /* \"#utility.yul\":3679:3963 */\n iszero\n tag_338\n jumpi\n /* \"#utility.yul\":3780:3786 */\n dup2\n /* \"#utility.yul\":3774:3787 */\n mload\n /* \"#utility.yul\":3807:3870 */\n tag_339\n /* \"#utility.yul\":3866:3869 */\n dup9\n /* \"#utility.yul\":3851:3864 */\n dup3\n /* \"#utility.yul\":3807:3870 */\n tag_243\n jump\t// in\n tag_339:\n /* \"#utility.yul\":3800:3870 */\n swap8\n pop\n /* \"#utility.yul\":3893:3953 */\n tag_340\n /* \"#utility.yul\":3946:3952 */\n dup4\n /* \"#utility.yul\":3893:3953 */\n tag_244\n jump\t// in\n tag_340:\n /* \"#utility.yul\":3883:3953 */\n swap3\n pop\n /* \"#utility.yul\":3739:3963 */\n pop\n /* \"#utility.yul\":3726:3727 */\n 0x01\n /* \"#utility.yul\":3723:3724 */\n dup2\n /* \"#utility.yul\":3719:3728 */\n add\n /* \"#utility.yul\":3714:3728 */\n swap1\n pop\n /* \"#utility.yul\":3679:3963 */\n jump(tag_336)\n tag_338:\n /* \"#utility.yul\":3683:3697 */\n pop\n /* \"#utility.yul\":3979:3982 */\n dup6\n /* \"#utility.yul\":3972:3982 */\n swap4\n pop\n /* \"#utility.yul\":3380:3988 */\n pop\n pop\n pop\n /* \"#utility.yul\":3256:3988 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":3994:4367 */\n tag_34:\n /* \"#utility.yul\":4137:4141 */\n 0x00\n /* \"#utility.yul\":4175:4177 */\n 0x20\n /* \"#utility.yul\":4164:4173 */\n dup3\n /* \"#utility.yul\":4160:4178 */\n add\n /* \"#utility.yul\":4152:4178 */\n swap1\n pop\n /* \"#utility.yul\":4224:4233 */\n dup2\n /* \"#utility.yul\":4218:4222 */\n dup2\n /* \"#utility.yul\":4214:4234 */\n sub\n /* \"#utility.yul\":4210:4211 */\n 0x00\n /* \"#utility.yul\":4199:4208 */\n dup4\n /* \"#utility.yul\":4195:4212 */\n add\n /* \"#utility.yul\":4188:4235 */\n mstore\n /* \"#utility.yul\":4252:4360 */\n tag_342\n /* \"#utility.yul\":4355:4359 */\n dup2\n /* \"#utility.yul\":4346:4352 */\n dup5\n /* \"#utility.yul\":4252:4360 */\n tag_245\n jump\t// in\n tag_342:\n /* \"#utility.yul\":4244:4360 */\n swap1\n pop\n /* \"#utility.yul\":3994:4367 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":4373:4490 */\n tag_246:\n /* \"#utility.yul\":4482:4483 */\n 0x00\n /* \"#utility.yul\":4479:4480 */\n dup1\n /* \"#utility.yul\":4472:4484 */\n revert\n /* \"#utility.yul\":4496:4613 */\n tag_247:\n /* \"#utility.yul\":4605:4606 */\n 0x00\n /* \"#utility.yul\":4602:4603 */\n dup1\n /* \"#utility.yul\":4595:4607 */\n revert\n /* \"#utility.yul\":4619:4721 */\n tag_248:\n /* \"#utility.yul\":4660:4666 */\n 0x00\n /* \"#utility.yul\":4711:4713 */\n 0x1f\n /* \"#utility.yul\":4707:4714 */\n not\n /* \"#utility.yul\":4702:4704 */\n 0x1f\n /* \"#utility.yul\":4695:4700 */\n dup4\n /* \"#utility.yul\":4691:4705 */\n add\n /* \"#utility.yul\":4687:4715 */\n and\n /* \"#utility.yul\":4677:4715 */\n swap1\n pop\n /* \"#utility.yul\":4619:4721 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":4727:4907 */\n tag_87:\n /* \"#utility.yul\":4775:4852 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":4772:4773 */\n 0x00\n /* \"#utility.yul\":4765:4853 */\n mstore\n /* \"#utility.yul\":4872:4876 */\n 0x41\n /* \"#utility.yul\":4869:4870 */\n 0x04\n /* \"#utility.yul\":4862:4877 */\n mstore\n /* \"#utility.yul\":4896:4900 */\n 0x24\n /* \"#utility.yul\":4893:4894 */\n 0x00\n /* \"#utility.yul\":4886:4901 */\n revert\n /* \"#utility.yul\":4913:5194 */\n tag_249:\n /* \"#utility.yul\":4996:5023 */\n tag_348\n /* \"#utility.yul\":5018:5022 */\n dup3\n /* \"#utility.yul\":4996:5023 */\n tag_248\n jump\t// in\n tag_348:\n /* \"#utility.yul\":4988:4994 */\n dup2\n /* \"#utility.yul\":4984:5024 */\n add\n /* \"#utility.yul\":5126:5132 */\n dup2\n /* \"#utility.yul\":5114:5124 */\n dup2\n /* \"#utility.yul\":5111:5133 */\n lt\n /* \"#utility.yul\":5090:5108 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5078:5088 */\n dup3\n /* \"#utility.yul\":5075:5109 */\n gt\n /* \"#utility.yul\":5072:5134 */\n or\n /* \"#utility.yul\":5069:5157 */\n iszero\n tag_349\n jumpi\n /* \"#utility.yul\":5137:5155 */\n tag_350\n tag_87\n jump\t// in\n tag_350:\n /* \"#utility.yul\":5069:5157 */\n tag_349:\n /* \"#utility.yul\":5177:5187 */\n dup1\n /* \"#utility.yul\":5173:5175 */\n 0x40\n /* \"#utility.yul\":5166:5188 */\n mstore\n /* \"#utility.yul\":4956:5194 */\n pop\n /* \"#utility.yul\":4913:5194 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5200:5329 */\n tag_250:\n /* \"#utility.yul\":5234:5240 */\n 0x00\n /* \"#utility.yul\":5261:5281 */\n tag_352\n tag_227\n jump\t// in\n tag_352:\n /* \"#utility.yul\":5251:5281 */\n swap1\n pop\n /* \"#utility.yul\":5290:5323 */\n tag_353\n /* \"#utility.yul\":5318:5322 */\n dup3\n /* \"#utility.yul\":5310:5316 */\n dup3\n /* \"#utility.yul\":5290:5323 */\n tag_249\n jump\t// in\n tag_353:\n /* \"#utility.yul\":5200:5329 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5335:5643 */\n tag_251:\n /* \"#utility.yul\":5397:5401 */\n 0x00\n /* \"#utility.yul\":5487:5505 */\n 0xffffffffffffffff\n /* \"#utility.yul\":5479:5485 */\n dup3\n /* \"#utility.yul\":5476:5506 */\n gt\n /* \"#utility.yul\":5473:5529 */\n iszero\n tag_355\n jumpi\n /* \"#utility.yul\":5509:5527 */\n tag_356\n tag_87\n jump\t// in\n tag_356:\n /* \"#utility.yul\":5473:5529 */\n tag_355:\n /* \"#utility.yul\":5547:5576 */\n tag_357\n /* \"#utility.yul\":5569:5575 */\n dup3\n /* \"#utility.yul\":5547:5576 */\n tag_248\n jump\t// in\n tag_357:\n /* \"#utility.yul\":5539:5576 */\n swap1\n pop\n /* \"#utility.yul\":5631:5635 */\n 0x20\n /* \"#utility.yul\":5625:5629 */\n dup2\n /* \"#utility.yul\":5621:5636 */\n add\n /* \"#utility.yul\":5613:5636 */\n swap1\n pop\n /* \"#utility.yul\":5335:5643 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":5649:5795 */\n tag_252:\n /* \"#utility.yul\":5746:5752 */\n dup3\n /* \"#utility.yul\":5741:5744 */\n dup2\n /* \"#utility.yul\":5736:5739 */\n dup4\n /* \"#utility.yul\":5723:5753 */\n calldatacopy\n /* \"#utility.yul\":5787:5788 */\n 0x00\n /* \"#utility.yul\":5778:5784 */\n dup4\n /* \"#utility.yul\":5773:5776 */\n dup4\n /* \"#utility.yul\":5769:5785 */\n add\n /* \"#utility.yul\":5762:5789 */\n mstore\n /* \"#utility.yul\":5649:5795 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":5801:6226 */\n tag_253:\n /* \"#utility.yul\":5879:5884 */\n 0x00\n /* \"#utility.yul\":5904:5970 */\n tag_360\n /* \"#utility.yul\":5920:5969 */\n tag_361\n /* \"#utility.yul\":5962:5968 */\n dup5\n /* \"#utility.yul\":5920:5969 */\n tag_251\n jump\t// in\n tag_361:\n /* \"#utility.yul\":5904:5970 */\n tag_250\n jump\t// in\n tag_360:\n /* \"#utility.yul\":5895:5970 */\n swap1\n pop\n /* \"#utility.yul\":5993:5999 */\n dup3\n /* \"#utility.yul\":5986:5991 */\n dup2\n /* \"#utility.yul\":5979:6000 */\n mstore\n /* \"#utility.yul\":6031:6035 */\n 0x20\n /* \"#utility.yul\":6024:6029 */\n dup2\n /* \"#utility.yul\":6020:6036 */\n add\n /* \"#utility.yul\":6069:6072 */\n dup5\n /* \"#utility.yul\":6060:6066 */\n dup5\n /* \"#utility.yul\":6055:6058 */\n dup5\n /* \"#utility.yul\":6051:6067 */\n add\n /* \"#utility.yul\":6048:6073 */\n gt\n /* \"#utility.yul\":6045:6157 */\n iszero\n tag_362\n jumpi\n /* \"#utility.yul\":6076:6155 */\n tag_363\n tag_247\n jump\t// in\n tag_363:\n /* \"#utility.yul\":6045:6157 */\n tag_362:\n /* \"#utility.yul\":6166:6220 */\n tag_364\n /* \"#utility.yul\":6213:6219 */\n dup5\n /* \"#utility.yul\":6208:6211 */\n dup3\n /* \"#utility.yul\":6203:6206 */\n dup6\n /* \"#utility.yul\":6166:6220 */\n tag_252\n jump\t// in\n tag_364:\n /* \"#utility.yul\":5885:6226 */\n pop\n /* \"#utility.yul\":5801:6226 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6246:6586 */\n tag_254:\n /* \"#utility.yul\":6302:6307 */\n 0x00\n /* \"#utility.yul\":6351:6354 */\n dup3\n /* \"#utility.yul\":6344:6348 */\n 0x1f\n /* \"#utility.yul\":6336:6342 */\n dup4\n /* \"#utility.yul\":6332:6349 */\n add\n /* \"#utility.yul\":6328:6355 */\n slt\n /* \"#utility.yul\":6318:6440 */\n tag_366\n jumpi\n /* \"#utility.yul\":6359:6438 */\n tag_367\n tag_246\n jump\t// in\n tag_367:\n /* \"#utility.yul\":6318:6440 */\n tag_366:\n /* \"#utility.yul\":6476:6482 */\n dup2\n /* \"#utility.yul\":6463:6483 */\n calldataload\n /* \"#utility.yul\":6501:6580 */\n tag_368\n /* \"#utility.yul\":6576:6579 */\n dup5\n /* \"#utility.yul\":6568:6574 */\n dup3\n /* \"#utility.yul\":6561:6565 */\n 0x20\n /* \"#utility.yul\":6553:6559 */\n dup7\n /* \"#utility.yul\":6549:6566 */\n add\n /* \"#utility.yul\":6501:6580 */\n tag_253\n jump\t// in\n tag_368:\n /* \"#utility.yul\":6492:6580 */\n swap2\n pop\n /* \"#utility.yul\":6308:6586 */\n pop\n /* \"#utility.yul\":6246:6586 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":6592:7101 */\n tag_37:\n /* \"#utility.yul\":6661:6667 */\n 0x00\n /* \"#utility.yul\":6710:6712 */\n 0x20\n /* \"#utility.yul\":6698:6707 */\n dup3\n /* \"#utility.yul\":6689:6696 */\n dup5\n /* \"#utility.yul\":6685:6708 */\n sub\n /* \"#utility.yul\":6681:6713 */\n slt\n /* \"#utility.yul\":6678:6797 */\n iszero\n tag_370\n jumpi\n /* \"#utility.yul\":6716:6795 */\n tag_371\n tag_228\n jump\t// in\n tag_371:\n /* \"#utility.yul\":6678:6797 */\n tag_370:\n /* \"#utility.yul\":6864:6865 */\n 0x00\n /* \"#utility.yul\":6853:6862 */\n dup3\n /* \"#utility.yul\":6849:6866 */\n add\n /* \"#utility.yul\":6836:6867 */\n calldataload\n /* \"#utility.yul\":6894:6912 */\n 0xffffffffffffffff\n /* \"#utility.yul\":6886:6892 */\n dup2\n /* \"#utility.yul\":6883:6913 */\n gt\n /* \"#utility.yul\":6880:6997 */\n iszero\n tag_372\n jumpi\n /* \"#utility.yul\":6916:6995 */\n tag_373\n tag_229\n jump\t// in\n tag_373:\n /* \"#utility.yul\":6880:6997 */\n tag_372:\n /* \"#utility.yul\":7021:7084 */\n tag_374\n /* \"#utility.yul\":7076:7083 */\n dup5\n /* \"#utility.yul\":7067:7073 */\n dup3\n /* \"#utility.yul\":7056:7065 */\n dup6\n /* \"#utility.yul\":7052:7074 */\n add\n /* \"#utility.yul\":7021:7084 */\n tag_254\n jump\t// in\n tag_374:\n /* \"#utility.yul\":7011:7084 */\n swap2\n pop\n /* \"#utility.yul\":6807:7094 */\n pop\n /* \"#utility.yul\":6592:7101 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7107:7225 */\n tag_255:\n /* \"#utility.yul\":7194:7218 */\n tag_376\n /* \"#utility.yul\":7212:7217 */\n dup2\n /* \"#utility.yul\":7194:7218 */\n tag_236\n jump\t// in\n tag_376:\n /* \"#utility.yul\":7189:7192 */\n dup3\n /* \"#utility.yul\":7182:7219 */\n mstore\n /* \"#utility.yul\":7107:7225 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7231:7453 */\n tag_47:\n /* \"#utility.yul\":7324:7328 */\n 0x00\n /* \"#utility.yul\":7362:7364 */\n 0x20\n /* \"#utility.yul\":7351:7360 */\n dup3\n /* \"#utility.yul\":7347:7365 */\n add\n /* \"#utility.yul\":7339:7365 */\n swap1\n pop\n /* \"#utility.yul\":7375:7446 */\n tag_378\n /* \"#utility.yul\":7443:7444 */\n 0x00\n /* \"#utility.yul\":7432:7441 */\n dup4\n /* \"#utility.yul\":7428:7445 */\n add\n /* \"#utility.yul\":7419:7425 */\n dup5\n /* \"#utility.yul\":7375:7446 */\n tag_255\n jump\t// in\n tag_378:\n /* \"#utility.yul\":7231:7453 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7459:7536 */\n tag_256:\n /* \"#utility.yul\":7496:7503 */\n 0x00\n /* \"#utility.yul\":7525:7530 */\n dup2\n /* \"#utility.yul\":7514:7530 */\n swap1\n pop\n /* \"#utility.yul\":7459:7536 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":7542:7664 */\n tag_257:\n /* \"#utility.yul\":7615:7639 */\n tag_381\n /* \"#utility.yul\":7633:7638 */\n dup2\n /* \"#utility.yul\":7615:7639 */\n tag_256\n jump\t// in\n tag_381:\n /* \"#utility.yul\":7608:7613 */\n dup2\n /* \"#utility.yul\":7605:7640 */\n eq\n /* \"#utility.yul\":7595:7658 */\n tag_382\n jumpi\n /* \"#utility.yul\":7654:7655 */\n 0x00\n /* \"#utility.yul\":7651:7652 */\n dup1\n /* \"#utility.yul\":7644:7656 */\n revert\n /* \"#utility.yul\":7595:7658 */\n tag_382:\n /* \"#utility.yul\":7542:7664 */\n pop\n jump\t// out\n /* \"#utility.yul\":7670:7809 */\n tag_258:\n /* \"#utility.yul\":7716:7721 */\n 0x00\n /* \"#utility.yul\":7754:7760 */\n dup2\n /* \"#utility.yul\":7741:7761 */\n calldataload\n /* \"#utility.yul\":7732:7761 */\n swap1\n pop\n /* \"#utility.yul\":7770:7803 */\n tag_384\n /* \"#utility.yul\":7797:7802 */\n dup2\n /* \"#utility.yul\":7770:7803 */\n tag_257\n jump\t// in\n tag_384:\n /* \"#utility.yul\":7670:7809 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":7815:8289 */\n tag_50:\n /* \"#utility.yul\":7883:7889 */\n 0x00\n /* \"#utility.yul\":7891:7897 */\n dup1\n /* \"#utility.yul\":7940:7942 */\n 0x40\n /* \"#utility.yul\":7928:7937 */\n dup4\n /* \"#utility.yul\":7919:7926 */\n dup6\n /* \"#utility.yul\":7915:7938 */\n sub\n /* \"#utility.yul\":7911:7943 */\n slt\n /* \"#utility.yul\":7908:8027 */\n iszero\n tag_386\n jumpi\n /* \"#utility.yul\":7946:8025 */\n tag_387\n tag_228\n jump\t// in\n tag_387:\n /* \"#utility.yul\":7908:8027 */\n tag_386:\n /* \"#utility.yul\":8066:8067 */\n 0x00\n /* \"#utility.yul\":8091:8144 */\n tag_388\n /* \"#utility.yul\":8136:8143 */\n dup6\n /* \"#utility.yul\":8127:8133 */\n dup3\n /* \"#utility.yul\":8116:8125 */\n dup7\n /* \"#utility.yul\":8112:8134 */\n add\n /* \"#utility.yul\":8091:8144 */\n tag_238\n jump\t// in\n tag_388:\n /* \"#utility.yul\":8081:8144 */\n swap3\n pop\n /* \"#utility.yul\":8037:8154 */\n pop\n /* \"#utility.yul\":8193:8195 */\n 0x20\n /* \"#utility.yul\":8219:8272 */\n tag_389\n /* \"#utility.yul\":8264:8271 */\n dup6\n /* \"#utility.yul\":8255:8261 */\n dup3\n /* \"#utility.yul\":8244:8253 */\n dup7\n /* \"#utility.yul\":8240:8262 */\n add\n /* \"#utility.yul\":8219:8272 */\n tag_258\n jump\t// in\n tag_389:\n /* \"#utility.yul\":8209:8272 */\n swap2\n pop\n /* \"#utility.yul\":8164:8282 */\n pop\n /* \"#utility.yul\":7815:8289 */\n swap3\n pop\n swap3\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8295:8394 */\n tag_259:\n /* \"#utility.yul\":8347:8353 */\n 0x00\n /* \"#utility.yul\":8381:8386 */\n dup2\n /* \"#utility.yul\":8375:8387 */\n mload\n /* \"#utility.yul\":8365:8387 */\n swap1\n pop\n /* \"#utility.yul\":8295:8394 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":8400:8569 */\n tag_260:\n /* \"#utility.yul\":8484:8495 */\n 0x00\n /* \"#utility.yul\":8518:8524 */\n dup3\n /* \"#utility.yul\":8513:8516 */\n dup3\n /* \"#utility.yul\":8506:8525 */\n mstore\n /* \"#utility.yul\":8558:8562 */\n 0x20\n /* \"#utility.yul\":8553:8556 */\n dup3\n /* \"#utility.yul\":8549:8563 */\n add\n /* \"#utility.yul\":8534:8563 */\n swap1\n pop\n /* \"#utility.yul\":8400:8569 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8575:8821 */\n tag_261:\n /* \"#utility.yul\":8656:8657 */\n 0x00\n /* \"#utility.yul\":8666:8779 */\n tag_393:\n /* \"#utility.yul\":8680:8686 */\n dup4\n /* \"#utility.yul\":8677:8678 */\n dup2\n /* \"#utility.yul\":8674:8687 */\n lt\n /* \"#utility.yul\":8666:8779 */\n iszero\n tag_395\n jumpi\n /* \"#utility.yul\":8765:8766 */\n dup1\n /* \"#utility.yul\":8760:8763 */\n dup3\n /* \"#utility.yul\":8756:8767 */\n add\n /* \"#utility.yul\":8750:8768 */\n mload\n /* \"#utility.yul\":8746:8747 */\n dup2\n /* \"#utility.yul\":8741:8744 */\n dup5\n /* \"#utility.yul\":8737:8748 */\n add\n /* \"#utility.yul\":8730:8769 */\n mstore\n /* \"#utility.yul\":8702:8704 */\n 0x20\n /* \"#utility.yul\":8699:8700 */\n dup2\n /* \"#utility.yul\":8695:8705 */\n add\n /* \"#utility.yul\":8690:8705 */\n swap1\n pop\n /* \"#utility.yul\":8666:8779 */\n jump(tag_393)\n tag_395:\n /* \"#utility.yul\":8813:8814 */\n 0x00\n /* \"#utility.yul\":8804:8810 */\n dup5\n /* \"#utility.yul\":8799:8802 */\n dup5\n /* \"#utility.yul\":8795:8811 */\n add\n /* \"#utility.yul\":8788:8815 */\n mstore\n /* \"#utility.yul\":8637:8821 */\n pop\n /* \"#utility.yul\":8575:8821 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":8827:9204 */\n tag_262:\n /* \"#utility.yul\":8915:8918 */\n 0x00\n /* \"#utility.yul\":8943:8982 */\n tag_397\n /* \"#utility.yul\":8976:8981 */\n dup3\n /* \"#utility.yul\":8943:8982 */\n tag_259\n jump\t// in\n tag_397:\n /* \"#utility.yul\":8998:9069 */\n tag_398\n /* \"#utility.yul\":9062:9068 */\n dup2\n /* \"#utility.yul\":9057:9060 */\n dup6\n /* \"#utility.yul\":8998:9069 */\n tag_260\n jump\t// in\n tag_398:\n /* \"#utility.yul\":8991:9069 */\n swap4\n pop\n /* \"#utility.yul\":9078:9143 */\n tag_399\n /* \"#utility.yul\":9136:9142 */\n dup2\n /* \"#utility.yul\":9131:9134 */\n dup6\n /* \"#utility.yul\":9124:9128 */\n 0x20\n /* \"#utility.yul\":9117:9122 */\n dup7\n /* \"#utility.yul\":9113:9129 */\n add\n /* \"#utility.yul\":9078:9143 */\n tag_261\n jump\t// in\n tag_399:\n /* \"#utility.yul\":9168:9197 */\n tag_400\n /* \"#utility.yul\":9190:9196 */\n dup2\n /* \"#utility.yul\":9168:9197 */\n tag_248\n jump\t// in\n tag_400:\n /* \"#utility.yul\":9163:9166 */\n dup5\n /* \"#utility.yul\":9159:9198 */\n add\n /* \"#utility.yul\":9152:9198 */\n swap2\n pop\n /* \"#utility.yul\":8919:9204 */\n pop\n /* \"#utility.yul\":8827:9204 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9210:9523 */\n tag_53:\n /* \"#utility.yul\":9323:9327 */\n 0x00\n /* \"#utility.yul\":9361:9363 */\n 0x20\n /* \"#utility.yul\":9350:9359 */\n dup3\n /* \"#utility.yul\":9346:9364 */\n add\n /* \"#utility.yul\":9338:9364 */\n swap1\n pop\n /* \"#utility.yul\":9410:9419 */\n dup2\n /* \"#utility.yul\":9404:9408 */\n dup2\n /* \"#utility.yul\":9400:9420 */\n sub\n /* \"#utility.yul\":9396:9397 */\n 0x00\n /* \"#utility.yul\":9385:9394 */\n dup4\n /* \"#utility.yul\":9381:9398 */\n add\n /* \"#utility.yul\":9374:9421 */\n mstore\n /* \"#utility.yul\":9438:9516 */\n tag_402\n /* \"#utility.yul\":9511:9515 */\n dup2\n /* \"#utility.yul\":9502:9508 */\n dup5\n /* \"#utility.yul\":9438:9516 */\n tag_262\n jump\t// in\n tag_402:\n /* \"#utility.yul\":9430:9516 */\n swap1\n pop\n /* \"#utility.yul\":9210:9523 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9529:9672 */\n tag_263:\n /* \"#utility.yul\":9586:9591 */\n 0x00\n /* \"#utility.yul\":9617:9623 */\n dup2\n /* \"#utility.yul\":9611:9624 */\n mload\n /* \"#utility.yul\":9602:9624 */\n swap1\n pop\n /* \"#utility.yul\":9633:9666 */\n tag_404\n /* \"#utility.yul\":9660:9665 */\n dup2\n /* \"#utility.yul\":9633:9666 */\n tag_257\n jump\t// in\n tag_404:\n /* \"#utility.yul\":9529:9672 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":9678:10029 */\n tag_68:\n /* \"#utility.yul\":9748:9754 */\n 0x00\n /* \"#utility.yul\":9797:9799 */\n 0x20\n /* \"#utility.yul\":9785:9794 */\n dup3\n /* \"#utility.yul\":9776:9783 */\n dup5\n /* \"#utility.yul\":9772:9795 */\n sub\n /* \"#utility.yul\":9768:9800 */\n slt\n /* \"#utility.yul\":9765:9884 */\n iszero\n tag_406\n jumpi\n /* \"#utility.yul\":9803:9882 */\n tag_407\n tag_228\n jump\t// in\n tag_407:\n /* \"#utility.yul\":9765:9884 */\n tag_406:\n /* \"#utility.yul\":9923:9924 */\n 0x00\n /* \"#utility.yul\":9948:10012 */\n tag_408\n /* \"#utility.yul\":10004:10011 */\n dup5\n /* \"#utility.yul\":9995:10001 */\n dup3\n /* \"#utility.yul\":9984:9993 */\n dup6\n /* \"#utility.yul\":9980:10002 */\n add\n /* \"#utility.yul\":9948:10012 */\n tag_263\n jump\t// in\n tag_408:\n /* \"#utility.yul\":9938:10012 */\n swap2\n pop\n /* \"#utility.yul\":9894:10022 */\n pop\n /* \"#utility.yul\":9678:10029 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":10035:10215 */\n tag_97:\n /* \"#utility.yul\":10083:10160 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":10080:10081 */\n 0x00\n /* \"#utility.yul\":10073:10161 */\n mstore\n /* \"#utility.yul\":10180:10184 */\n 0x32\n /* \"#utility.yul\":10177:10178 */\n 0x04\n /* \"#utility.yul\":10170:10185 */\n mstore\n /* \"#utility.yul\":10204:10208 */\n 0x24\n /* \"#utility.yul\":10201:10202 */\n 0x00\n /* \"#utility.yul\":10194:10209 */\n revert\n /* \"#utility.yul\":10221:10401 */\n tag_264:\n /* \"#utility.yul\":10269:10346 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":10266:10267 */\n 0x00\n /* \"#utility.yul\":10259:10347 */\n mstore\n /* \"#utility.yul\":10366:10370 */\n 0x11\n /* \"#utility.yul\":10363:10364 */\n 0x04\n /* \"#utility.yul\":10356:10371 */\n mstore\n /* \"#utility.yul\":10390:10394 */\n 0x24\n /* \"#utility.yul\":10387:10388 */\n 0x00\n /* \"#utility.yul\":10380:10395 */\n revert\n /* \"#utility.yul\":10407:10640 */\n tag_99:\n /* \"#utility.yul\":10446:10449 */\n 0x00\n /* \"#utility.yul\":10469:10493 */\n tag_412\n /* \"#utility.yul\":10487:10492 */\n dup3\n /* \"#utility.yul\":10469:10493 */\n tag_256\n jump\t// in\n tag_412:\n /* \"#utility.yul\":10460:10493 */\n swap2\n pop\n /* \"#utility.yul\":10515:10581 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":10508:10513 */\n dup3\n /* \"#utility.yul\":10505:10582 */\n sub\n /* \"#utility.yul\":10502:10605 */\n tag_413\n jumpi\n /* \"#utility.yul\":10585:10603 */\n tag_414\n tag_264\n jump\t// in\n tag_414:\n /* \"#utility.yul\":10502:10605 */\n tag_413:\n /* \"#utility.yul\":10632:10633 */\n 0x01\n /* \"#utility.yul\":10625:10630 */\n dup3\n /* \"#utility.yul\":10621:10634 */\n add\n /* \"#utility.yul\":10614:10634 */\n swap1\n pop\n /* \"#utility.yul\":10407:10640 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":10646:10869 */\n tag_265:\n /* \"#utility.yul\":10786:10820 */\n 0x41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f722061\n /* \"#utility.yul\":10782:10783 */\n 0x00\n /* \"#utility.yul\":10774:10780 */\n dup3\n /* \"#utility.yul\":10770:10784 */\n add\n /* \"#utility.yul\":10763:10821 */\n mstore\n /* \"#utility.yul\":10855:10861 */\n 0x646d696e00000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":10850:10852 */\n 0x20\n /* \"#utility.yul\":10842:10848 */\n dup3\n /* \"#utility.yul\":10838:10853 */\n add\n /* \"#utility.yul\":10831:10862 */\n mstore\n /* \"#utility.yul\":10646:10869 */\n pop\n jump\t// out\n /* \"#utility.yul\":10875:11241 */\n tag_266:\n /* \"#utility.yul\":11017:11020 */\n 0x00\n /* \"#utility.yul\":11038:11105 */\n tag_417\n /* \"#utility.yul\":11102:11104 */\n 0x24\n /* \"#utility.yul\":11097:11100 */\n dup4\n /* \"#utility.yul\":11038:11105 */\n tag_260\n jump\t// in\n tag_417:\n /* \"#utility.yul\":11031:11105 */\n swap2\n pop\n /* \"#utility.yul\":11114:11207 */\n tag_418\n /* \"#utility.yul\":11203:11206 */\n dup3\n /* \"#utility.yul\":11114:11207 */\n tag_265\n jump\t// in\n tag_418:\n /* \"#utility.yul\":11232:11234 */\n 0x40\n /* \"#utility.yul\":11227:11230 */\n dup3\n /* \"#utility.yul\":11223:11235 */\n add\n /* \"#utility.yul\":11216:11235 */\n swap1\n pop\n /* \"#utility.yul\":10875:11241 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":11247:11666 */\n tag_106:\n /* \"#utility.yul\":11413:11417 */\n 0x00\n /* \"#utility.yul\":11451:11453 */\n 0x20\n /* \"#utility.yul\":11440:11449 */\n dup3\n /* \"#utility.yul\":11436:11454 */\n add\n /* \"#utility.yul\":11428:11454 */\n swap1\n pop\n /* \"#utility.yul\":11500:11509 */\n dup2\n /* \"#utility.yul\":11494:11498 */\n dup2\n /* \"#utility.yul\":11490:11510 */\n sub\n /* \"#utility.yul\":11486:11487 */\n 0x00\n /* \"#utility.yul\":11475:11484 */\n dup4\n /* \"#utility.yul\":11471:11488 */\n add\n /* \"#utility.yul\":11464:11511 */\n mstore\n /* \"#utility.yul\":11528:11659 */\n tag_420\n /* \"#utility.yul\":11654:11658 */\n dup2\n /* \"#utility.yul\":11528:11659 */\n tag_266\n jump\t// in\n tag_420:\n /* \"#utility.yul\":11520:11659 */\n swap1\n pop\n /* \"#utility.yul\":11247:11666 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":11672:11852 */\n tag_267:\n /* \"#utility.yul\":11720:11797 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":11717:11718 */\n 0x00\n /* \"#utility.yul\":11710:11798 */\n mstore\n /* \"#utility.yul\":11817:11821 */\n 0x22\n /* \"#utility.yul\":11814:11815 */\n 0x04\n /* \"#utility.yul\":11807:11822 */\n mstore\n /* \"#utility.yul\":11841:11845 */\n 0x24\n /* \"#utility.yul\":11838:11839 */\n 0x00\n /* \"#utility.yul\":11831:11846 */\n revert\n /* \"#utility.yul\":11858:12178 */\n tag_268:\n /* \"#utility.yul\":11902:11908 */\n 0x00\n /* \"#utility.yul\":11939:11940 */\n 0x02\n /* \"#utility.yul\":11933:11937 */\n dup3\n /* \"#utility.yul\":11929:11941 */\n div\n /* \"#utility.yul\":11919:11941 */\n swap1\n pop\n /* \"#utility.yul\":11986:11987 */\n 0x01\n /* \"#utility.yul\":11980:11984 */\n dup3\n /* \"#utility.yul\":11976:11988 */\n and\n /* \"#utility.yul\":12007:12025 */\n dup1\n /* \"#utility.yul\":11997:12078 */\n tag_423\n jumpi\n /* \"#utility.yul\":12063:12067 */\n 0x7f\n /* \"#utility.yul\":12055:12061 */\n dup3\n /* \"#utility.yul\":12051:12068 */\n and\n /* \"#utility.yul\":12041:12068 */\n swap2\n pop\n /* \"#utility.yul\":11997:12078 */\n tag_423:\n /* \"#utility.yul\":12125:12127 */\n 0x20\n /* \"#utility.yul\":12117:12123 */\n dup3\n /* \"#utility.yul\":12114:12128 */\n lt\n /* \"#utility.yul\":12094:12112 */\n dup2\n /* \"#utility.yul\":12091:12129 */\n sub\n /* \"#utility.yul\":12088:12172 */\n tag_424\n jumpi\n /* \"#utility.yul\":12144:12162 */\n tag_425\n tag_267\n jump\t// in\n tag_425:\n /* \"#utility.yul\":12088:12172 */\n tag_424:\n /* \"#utility.yul\":11909:12178 */\n pop\n /* \"#utility.yul\":11858:12178 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12184:12325 */\n tag_269:\n /* \"#utility.yul\":12233:12237 */\n 0x00\n /* \"#utility.yul\":12256:12259 */\n dup2\n /* \"#utility.yul\":12248:12259 */\n swap1\n pop\n /* \"#utility.yul\":12279:12282 */\n dup2\n /* \"#utility.yul\":12276:12277 */\n 0x00\n /* \"#utility.yul\":12269:12283 */\n mstore\n /* \"#utility.yul\":12313:12317 */\n 0x20\n /* \"#utility.yul\":12310:12311 */\n 0x00\n /* \"#utility.yul\":12300:12318 */\n keccak256\n /* \"#utility.yul\":12292:12318 */\n swap1\n pop\n /* \"#utility.yul\":12184:12325 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12331:12424 */\n tag_270:\n /* \"#utility.yul\":12368:12374 */\n 0x00\n /* \"#utility.yul\":12415:12417 */\n 0x20\n /* \"#utility.yul\":12410:12412 */\n 0x1f\n /* \"#utility.yul\":12403:12408 */\n dup4\n /* \"#utility.yul\":12399:12413 */\n add\n /* \"#utility.yul\":12395:12418 */\n div\n /* \"#utility.yul\":12385:12418 */\n swap1\n pop\n /* \"#utility.yul\":12331:12424 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":12430:12537 */\n tag_271:\n /* \"#utility.yul\":12474:12482 */\n 0x00\n /* \"#utility.yul\":12524:12529 */\n dup3\n /* \"#utility.yul\":12518:12522 */\n dup3\n /* \"#utility.yul\":12514:12530 */\n shl\n /* \"#utility.yul\":12493:12530 */\n swap1\n pop\n /* \"#utility.yul\":12430:12537 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12543:12936 */\n tag_272:\n /* \"#utility.yul\":12612:12618 */\n 0x00\n /* \"#utility.yul\":12662:12663 */\n 0x08\n /* \"#utility.yul\":12650:12660 */\n dup4\n /* \"#utility.yul\":12646:12664 */\n mul\n /* \"#utility.yul\":12685:12782 */\n tag_430\n /* \"#utility.yul\":12715:12781 */\n 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":12704:12713 */\n dup3\n /* \"#utility.yul\":12685:12782 */\n tag_271\n jump\t// in\n tag_430:\n /* \"#utility.yul\":12803:12842 */\n tag_431\n /* \"#utility.yul\":12833:12841 */\n dup7\n /* \"#utility.yul\":12822:12831 */\n dup4\n /* \"#utility.yul\":12803:12842 */\n tag_271\n jump\t// in\n tag_431:\n /* \"#utility.yul\":12791:12842 */\n swap6\n pop\n /* \"#utility.yul\":12875:12879 */\n dup1\n /* \"#utility.yul\":12871:12880 */\n not\n /* \"#utility.yul\":12864:12869 */\n dup5\n /* \"#utility.yul\":12860:12881 */\n and\n /* \"#utility.yul\":12851:12881 */\n swap4\n pop\n /* \"#utility.yul\":12924:12928 */\n dup1\n /* \"#utility.yul\":12914:12922 */\n dup7\n /* \"#utility.yul\":12910:12929 */\n and\n /* \"#utility.yul\":12903:12908 */\n dup5\n /* \"#utility.yul\":12900:12930 */\n or\n /* \"#utility.yul\":12890:12930 */\n swap3\n pop\n /* \"#utility.yul\":12619:12936 */\n pop\n pop\n /* \"#utility.yul\":12543:12936 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":12942:13002 */\n tag_273:\n /* \"#utility.yul\":12970:12973 */\n 0x00\n /* \"#utility.yul\":12991:12996 */\n dup2\n /* \"#utility.yul\":12984:12996 */\n swap1\n pop\n /* \"#utility.yul\":12942:13002 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13008:13150 */\n tag_274:\n /* \"#utility.yul\":13058:13067 */\n 0x00\n /* \"#utility.yul\":13091:13144 */\n tag_434\n /* \"#utility.yul\":13109:13143 */\n tag_435\n /* \"#utility.yul\":13118:13142 */\n tag_436\n /* \"#utility.yul\":13136:13141 */\n dup5\n /* \"#utility.yul\":13118:13142 */\n tag_256\n jump\t// in\n tag_436:\n /* \"#utility.yul\":13109:13143 */\n tag_273\n jump\t// in\n tag_435:\n /* \"#utility.yul\":13091:13144 */\n tag_256\n jump\t// in\n tag_434:\n /* \"#utility.yul\":13078:13144 */\n swap1\n pop\n /* \"#utility.yul\":13008:13150 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13156:13231 */\n tag_275:\n /* \"#utility.yul\":13199:13202 */\n 0x00\n /* \"#utility.yul\":13220:13225 */\n dup2\n /* \"#utility.yul\":13213:13225 */\n swap1\n pop\n /* \"#utility.yul\":13156:13231 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":13237:13506 */\n tag_276:\n /* \"#utility.yul\":13347:13386 */\n tag_439\n /* \"#utility.yul\":13378:13385 */\n dup4\n /* \"#utility.yul\":13347:13386 */\n tag_274\n jump\t// in\n tag_439:\n /* \"#utility.yul\":13408:13499 */\n tag_440\n /* \"#utility.yul\":13457:13498 */\n tag_441\n /* \"#utility.yul\":13481:13497 */\n dup3\n /* \"#utility.yul\":13457:13498 */\n tag_275\n jump\t// in\n tag_441:\n /* \"#utility.yul\":13449:13455 */\n dup5\n /* \"#utility.yul\":13442:13446 */\n dup5\n /* \"#utility.yul\":13436:13447 */\n sload\n /* \"#utility.yul\":13408:13499 */\n tag_272\n jump\t// in\n tag_440:\n /* \"#utility.yul\":13402:13406 */\n dup3\n /* \"#utility.yul\":13395:13500 */\n sstore\n /* \"#utility.yul\":13313:13506 */\n pop\n /* \"#utility.yul\":13237:13506 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13512:13585 */\n tag_277:\n /* \"#utility.yul\":13557:13560 */\n 0x00\n /* \"#utility.yul\":13512:13585 */\n swap1\n jump\t// out\n /* \"#utility.yul\":13591:13780 */\n tag_278:\n /* \"#utility.yul\":13668:13700 */\n tag_444\n tag_277\n jump\t// in\n tag_444:\n /* \"#utility.yul\":13709:13774 */\n tag_445\n /* \"#utility.yul\":13767:13773 */\n dup2\n /* \"#utility.yul\":13759:13765 */\n dup5\n /* \"#utility.yul\":13753:13757 */\n dup5\n /* \"#utility.yul\":13709:13774 */\n tag_276\n jump\t// in\n tag_445:\n /* \"#utility.yul\":13644:13780 */\n pop\n /* \"#utility.yul\":13591:13780 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13786:13972 */\n tag_279:\n /* \"#utility.yul\":13846:13966 */\n tag_447:\n /* \"#utility.yul\":13863:13866 */\n dup2\n /* \"#utility.yul\":13856:13861 */\n dup2\n /* \"#utility.yul\":13853:13867 */\n lt\n /* \"#utility.yul\":13846:13966 */\n iszero\n tag_449\n jumpi\n /* \"#utility.yul\":13917:13956 */\n tag_450\n /* \"#utility.yul\":13954:13955 */\n 0x00\n /* \"#utility.yul\":13947:13952 */\n dup3\n /* \"#utility.yul\":13917:13956 */\n tag_278\n jump\t// in\n tag_450:\n /* \"#utility.yul\":13890:13891 */\n 0x01\n /* \"#utility.yul\":13883:13888 */\n dup2\n /* \"#utility.yul\":13879:13892 */\n add\n /* \"#utility.yul\":13870:13892 */\n swap1\n pop\n /* \"#utility.yul\":13846:13966 */\n jump(tag_447)\n tag_449:\n /* \"#utility.yul\":13786:13972 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":13978:14521 */\n tag_280:\n /* \"#utility.yul\":14079:14081 */\n 0x1f\n /* \"#utility.yul\":14074:14077 */\n dup3\n /* \"#utility.yul\":14071:14082 */\n gt\n /* \"#utility.yul\":14068:14514 */\n iszero\n tag_452\n jumpi\n /* \"#utility.yul\":14113:14151 */\n tag_453\n /* \"#utility.yul\":14145:14150 */\n dup2\n /* \"#utility.yul\":14113:14151 */\n tag_269\n jump\t// in\n tag_453:\n /* \"#utility.yul\":14197:14226 */\n tag_454\n /* \"#utility.yul\":14215:14225 */\n dup5\n /* \"#utility.yul\":14197:14226 */\n tag_270\n jump\t// in\n tag_454:\n /* \"#utility.yul\":14187:14195 */\n dup2\n /* \"#utility.yul\":14183:14227 */\n add\n /* \"#utility.yul\":14380:14382 */\n 0x20\n /* \"#utility.yul\":14368:14378 */\n dup6\n /* \"#utility.yul\":14365:14383 */\n lt\n /* \"#utility.yul\":14362:14411 */\n iszero\n tag_455\n jumpi\n /* \"#utility.yul\":14401:14409 */\n dup2\n /* \"#utility.yul\":14386:14409 */\n swap1\n pop\n /* \"#utility.yul\":14362:14411 */\n tag_455:\n /* \"#utility.yul\":14424:14504 */\n tag_456\n /* \"#utility.yul\":14480:14502 */\n tag_457\n /* \"#utility.yul\":14498:14501 */\n dup6\n /* \"#utility.yul\":14480:14502 */\n tag_270\n jump\t// in\n tag_457:\n /* \"#utility.yul\":14470:14478 */\n dup4\n /* \"#utility.yul\":14466:14503 */\n add\n /* \"#utility.yul\":14453:14464 */\n dup3\n /* \"#utility.yul\":14424:14504 */\n tag_279\n jump\t// in\n tag_456:\n /* \"#utility.yul\":14083:14514 */\n pop\n pop\n /* \"#utility.yul\":14068:14514 */\n tag_452:\n /* \"#utility.yul\":13978:14521 */\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14527:14644 */\n tag_281:\n /* \"#utility.yul\":14581:14589 */\n 0x00\n /* \"#utility.yul\":14631:14636 */\n dup3\n /* \"#utility.yul\":14625:14629 */\n dup3\n /* \"#utility.yul\":14621:14637 */\n shr\n /* \"#utility.yul\":14600:14637 */\n swap1\n pop\n /* \"#utility.yul\":14527:14644 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14650:14819 */\n tag_282:\n /* \"#utility.yul\":14694:14700 */\n 0x00\n /* \"#utility.yul\":14727:14778 */\n tag_460\n /* \"#utility.yul\":14775:14776 */\n 0x00\n /* \"#utility.yul\":14771:14777 */\n not\n /* \"#utility.yul\":14763:14768 */\n dup5\n /* \"#utility.yul\":14760:14761 */\n 0x08\n /* \"#utility.yul\":14756:14769 */\n mul\n /* \"#utility.yul\":14727:14778 */\n tag_281\n jump\t// in\n tag_460:\n /* \"#utility.yul\":14723:14779 */\n not\n /* \"#utility.yul\":14808:14812 */\n dup1\n /* \"#utility.yul\":14802:14806 */\n dup4\n /* \"#utility.yul\":14798:14813 */\n and\n /* \"#utility.yul\":14788:14813 */\n swap2\n pop\n /* \"#utility.yul\":14701:14819 */\n pop\n /* \"#utility.yul\":14650:14819 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":14824:15119 */\n tag_283:\n /* \"#utility.yul\":14900:14904 */\n 0x00\n /* \"#utility.yul\":15046:15075 */\n tag_462\n /* \"#utility.yul\":15071:15074 */\n dup4\n /* \"#utility.yul\":15065:15069 */\n dup4\n /* \"#utility.yul\":15046:15075 */\n tag_282\n jump\t// in\n tag_462:\n /* \"#utility.yul\":15038:15075 */\n swap2\n pop\n /* \"#utility.yul\":15108:15111 */\n dup3\n /* \"#utility.yul\":15105:15106 */\n 0x02\n /* \"#utility.yul\":15101:15112 */\n mul\n /* \"#utility.yul\":15095:15099 */\n dup3\n /* \"#utility.yul\":15092:15113 */\n or\n /* \"#utility.yul\":15084:15113 */\n swap1\n pop\n /* \"#utility.yul\":14824:15119 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":15124:16519 */\n tag_109:\n /* \"#utility.yul\":15241:15278 */\n tag_464\n /* \"#utility.yul\":15274:15277 */\n dup3\n /* \"#utility.yul\":15241:15278 */\n tag_259\n jump\t// in\n tag_464:\n /* \"#utility.yul\":15343:15361 */\n 0xffffffffffffffff\n /* \"#utility.yul\":15335:15341 */\n dup2\n /* \"#utility.yul\":15332:15362 */\n gt\n /* \"#utility.yul\":15329:15385 */\n iszero\n tag_465\n jumpi\n /* \"#utility.yul\":15365:15383 */\n tag_466\n tag_87\n jump\t// in\n tag_466:\n /* \"#utility.yul\":15329:15385 */\n tag_465:\n /* \"#utility.yul\":15409:15447 */\n tag_467\n /* \"#utility.yul\":15441:15445 */\n dup3\n /* \"#utility.yul\":15435:15446 */\n sload\n /* \"#utility.yul\":15409:15447 */\n tag_268\n jump\t// in\n tag_467:\n /* \"#utility.yul\":15494:15561 */\n tag_468\n /* \"#utility.yul\":15554:15560 */\n dup3\n /* \"#utility.yul\":15546:15552 */\n dup3\n /* \"#utility.yul\":15540:15544 */\n dup6\n /* \"#utility.yul\":15494:15561 */\n tag_280\n jump\t// in\n tag_468:\n /* \"#utility.yul\":15588:15589 */\n 0x00\n /* \"#utility.yul\":15612:15616 */\n 0x20\n /* \"#utility.yul\":15599:15616 */\n swap1\n pop\n /* \"#utility.yul\":15644:15646 */\n 0x1f\n /* \"#utility.yul\":15636:15642 */\n dup4\n /* \"#utility.yul\":15633:15647 */\n gt\n /* \"#utility.yul\":15661:15662 */\n 0x01\n /* \"#utility.yul\":15656:16274 */\n dup2\n eq\n tag_470\n jumpi\n /* \"#utility.yul\":16318:16319 */\n 0x00\n /* \"#utility.yul\":16335:16341 */\n dup5\n /* \"#utility.yul\":16332:16409 */\n iszero\n tag_471\n jumpi\n /* \"#utility.yul\":16384:16393 */\n dup3\n /* \"#utility.yul\":16379:16382 */\n dup8\n /* \"#utility.yul\":16375:16394 */\n add\n /* \"#utility.yul\":16369:16395 */\n mload\n /* \"#utility.yul\":16360:16395 */\n swap1\n pop\n /* \"#utility.yul\":16332:16409 */\n tag_471:\n /* \"#utility.yul\":16435:16502 */\n tag_472\n /* \"#utility.yul\":16495:16501 */\n dup6\n /* \"#utility.yul\":16488:16493 */\n dup3\n /* \"#utility.yul\":16435:16502 */\n tag_283\n jump\t// in\n tag_472:\n /* \"#utility.yul\":16429:16433 */\n dup7\n /* \"#utility.yul\":16422:16503 */\n sstore\n /* \"#utility.yul\":16291:16513 */\n pop\n /* \"#utility.yul\":15626:16513 */\n jump(tag_469)\n /* \"#utility.yul\":15656:16274 */\n tag_470:\n /* \"#utility.yul\":15708:15712 */\n 0x1f\n /* \"#utility.yul\":15704:15713 */\n not\n /* \"#utility.yul\":15696:15702 */\n dup5\n /* \"#utility.yul\":15692:15714 */\n and\n /* \"#utility.yul\":15742:15779 */\n tag_473\n /* \"#utility.yul\":15774:15778 */\n dup7\n /* \"#utility.yul\":15742:15779 */\n tag_269\n jump\t// in\n tag_473:\n /* \"#utility.yul\":15801:15802 */\n 0x00\n /* \"#utility.yul\":15815:16023 */\n tag_474:\n /* \"#utility.yul\":15829:15836 */\n dup3\n /* \"#utility.yul\":15826:15827 */\n dup2\n /* \"#utility.yul\":15823:15837 */\n lt\n /* \"#utility.yul\":15815:16023 */\n iszero\n tag_476\n jumpi\n /* \"#utility.yul\":15908:15917 */\n dup5\n /* \"#utility.yul\":15903:15906 */\n dup10\n /* \"#utility.yul\":15899:15918 */\n add\n /* \"#utility.yul\":15893:15919 */\n mload\n /* \"#utility.yul\":15885:15891 */\n dup3\n /* \"#utility.yul\":15878:15920 */\n sstore\n /* \"#utility.yul\":15959:15960 */\n 0x01\n /* \"#utility.yul\":15951:15957 */\n dup3\n /* \"#utility.yul\":15947:15961 */\n add\n /* \"#utility.yul\":15937:15961 */\n swap2\n pop\n /* \"#utility.yul\":16006:16008 */\n 0x20\n /* \"#utility.yul\":15995:16004 */\n dup6\n /* \"#utility.yul\":15991:16009 */\n add\n /* \"#utility.yul\":15978:16009 */\n swap5\n pop\n /* \"#utility.yul\":15852:15856 */\n 0x20\n /* \"#utility.yul\":15849:15850 */\n dup2\n /* \"#utility.yul\":15845:15857 */\n add\n /* \"#utility.yul\":15840:15857 */\n swap1\n pop\n /* \"#utility.yul\":15815:16023 */\n jump(tag_474)\n tag_476:\n /* \"#utility.yul\":16051:16057 */\n dup7\n /* \"#utility.yul\":16042:16049 */\n dup4\n /* \"#utility.yul\":16039:16058 */\n lt\n /* \"#utility.yul\":16036:16215 */\n iszero\n tag_477\n jumpi\n /* \"#utility.yul\":16109:16118 */\n dup5\n /* \"#utility.yul\":16104:16107 */\n dup10\n /* \"#utility.yul\":16100:16119 */\n add\n /* \"#utility.yul\":16094:16120 */\n mload\n /* \"#utility.yul\":16152:16200 */\n tag_478\n /* \"#utility.yul\":16194:16198 */\n 0x1f\n /* \"#utility.yul\":16186:16192 */\n dup10\n /* \"#utility.yul\":16182:16199 */\n and\n /* \"#utility.yul\":16171:16180 */\n dup3\n /* \"#utility.yul\":16152:16200 */\n tag_282\n jump\t// in\n tag_478:\n /* \"#utility.yul\":16144:16150 */\n dup4\n /* \"#utility.yul\":16137:16201 */\n sstore\n /* \"#utility.yul\":16059:16215 */\n pop\n /* \"#utility.yul\":16036:16215 */\n tag_477:\n /* \"#utility.yul\":16261:16262 */\n 0x01\n /* \"#utility.yul\":16257:16258 */\n 0x02\n /* \"#utility.yul\":16249:16255 */\n dup9\n /* \"#utility.yul\":16245:16259 */\n mul\n /* \"#utility.yul\":16241:16263 */\n add\n /* \"#utility.yul\":16235:16239 */\n dup9\n /* \"#utility.yul\":16228:16264 */\n sstore\n /* \"#utility.yul\":15663:16274 */\n pop\n pop\n pop\n /* \"#utility.yul\":15626:16513 */\n tag_469:\n pop\n /* \"#utility.yul\":15216:16519 */\n pop\n pop\n pop\n /* \"#utility.yul\":15124:16519 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":16525:16688 */\n tag_284:\n /* \"#utility.yul\":16665:16680 */\n 0x496e76616c696420746f6b656e00000000000000000000000000000000000000\n /* \"#utility.yul\":16661:16662 */\n 0x00\n /* \"#utility.yul\":16653:16659 */\n dup3\n /* \"#utility.yul\":16649:16663 */\n add\n /* \"#utility.yul\":16642:16681 */\n mstore\n /* \"#utility.yul\":16525:16688 */\n pop\n jump\t// out\n /* \"#utility.yul\":16694:17060 */\n tag_285:\n /* \"#utility.yul\":16836:16839 */\n 0x00\n /* \"#utility.yul\":16857:16924 */\n tag_481\n /* \"#utility.yul\":16921:16923 */\n 0x0d\n /* \"#utility.yul\":16916:16919 */\n dup4\n /* \"#utility.yul\":16857:16924 */\n tag_260\n jump\t// in\n tag_481:\n /* \"#utility.yul\":16850:16924 */\n swap2\n pop\n /* \"#utility.yul\":16933:17026 */\n tag_482\n /* \"#utility.yul\":17022:17025 */\n dup3\n /* \"#utility.yul\":16933:17026 */\n tag_284\n jump\t// in\n tag_482:\n /* \"#utility.yul\":17051:17053 */\n 0x20\n /* \"#utility.yul\":17046:17049 */\n dup3\n /* \"#utility.yul\":17042:17054 */\n add\n /* \"#utility.yul\":17035:17054 */\n swap1\n pop\n /* \"#utility.yul\":16694:17060 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":17066:17485 */\n tag_126:\n /* \"#utility.yul\":17232:17236 */\n 0x00\n /* \"#utility.yul\":17270:17272 */\n 0x20\n /* \"#utility.yul\":17259:17268 */\n dup3\n /* \"#utility.yul\":17255:17273 */\n add\n /* \"#utility.yul\":17247:17273 */\n swap1\n pop\n /* \"#utility.yul\":17319:17328 */\n dup2\n /* \"#utility.yul\":17313:17317 */\n dup2\n /* \"#utility.yul\":17309:17329 */\n sub\n /* \"#utility.yul\":17305:17306 */\n 0x00\n /* \"#utility.yul\":17294:17303 */\n dup4\n /* \"#utility.yul\":17290:17307 */\n add\n /* \"#utility.yul\":17283:17330 */\n mstore\n /* \"#utility.yul\":17347:17478 */\n tag_484\n /* \"#utility.yul\":17473:17477 */\n dup2\n /* \"#utility.yul\":17347:17478 */\n tag_285\n jump\t// in\n tag_484:\n /* \"#utility.yul\":17339:17478 */\n swap1\n pop\n /* \"#utility.yul\":17066:17485 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":17491:17639 */\n tag_286:\n /* \"#utility.yul\":17593:17604 */\n 0x00\n /* \"#utility.yul\":17630:17633 */\n dup2\n /* \"#utility.yul\":17615:17633 */\n swap1\n pop\n /* \"#utility.yul\":17491:17639 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":17669:18543 */\n tag_287:\n /* \"#utility.yul\":17772:17775 */\n 0x00\n /* \"#utility.yul\":17809:17814 */\n dup2\n /* \"#utility.yul\":17803:17815 */\n sload\n /* \"#utility.yul\":17838:17874 */\n tag_487\n /* \"#utility.yul\":17864:17873 */\n dup2\n /* \"#utility.yul\":17838:17874 */\n tag_268\n jump\t// in\n tag_487:\n /* \"#utility.yul\":17890:17979 */\n tag_488\n /* \"#utility.yul\":17972:17978 */\n dup2\n /* \"#utility.yul\":17967:17970 */\n dup7\n /* \"#utility.yul\":17890:17979 */\n tag_286\n jump\t// in\n tag_488:\n /* \"#utility.yul\":17883:17979 */\n swap5\n pop\n /* \"#utility.yul\":18010:18011 */\n 0x01\n /* \"#utility.yul\":17999:18008 */\n dup3\n /* \"#utility.yul\":17995:18012 */\n and\n /* \"#utility.yul\":18026:18027 */\n 0x00\n /* \"#utility.yul\":18021:18187 */\n dup2\n eq\n tag_490\n jumpi\n /* \"#utility.yul\":18201:18202 */\n 0x01\n /* \"#utility.yul\":18196:18537 */\n dup2\n eq\n tag_491\n jumpi\n /* \"#utility.yul\":17988:18537 */\n jump(tag_489)\n /* \"#utility.yul\":18021:18187 */\n tag_490:\n /* \"#utility.yul\":18105:18109 */\n 0xff\n /* \"#utility.yul\":18101:18110 */\n not\n /* \"#utility.yul\":18090:18099 */\n dup4\n /* \"#utility.yul\":18086:18111 */\n and\n /* \"#utility.yul\":18081:18084 */\n dup7\n /* \"#utility.yul\":18074:18112 */\n mstore\n /* \"#utility.yul\":18167:18173 */\n dup2\n /* \"#utility.yul\":18160:18174 */\n iszero\n /* \"#utility.yul\":18153:18175 */\n iszero\n /* \"#utility.yul\":18145:18151 */\n dup3\n /* \"#utility.yul\":18141:18176 */\n mul\n /* \"#utility.yul\":18136:18139 */\n dup7\n /* \"#utility.yul\":18132:18177 */\n add\n /* \"#utility.yul\":18125:18177 */\n swap4\n pop\n /* \"#utility.yul\":18021:18187 */\n jump(tag_489)\n /* \"#utility.yul\":18196:18537 */\n tag_491:\n /* \"#utility.yul\":18263:18301 */\n tag_492\n /* \"#utility.yul\":18295:18300 */\n dup6\n /* \"#utility.yul\":18263:18301 */\n tag_269\n jump\t// in\n tag_492:\n /* \"#utility.yul\":18323:18324 */\n 0x00\n /* \"#utility.yul\":18337:18491 */\n tag_493:\n /* \"#utility.yul\":18351:18357 */\n dup4\n /* \"#utility.yul\":18348:18349 */\n dup2\n /* \"#utility.yul\":18345:18358 */\n lt\n /* \"#utility.yul\":18337:18491 */\n iszero\n tag_495\n jumpi\n /* \"#utility.yul\":18425:18432 */\n dup2\n /* \"#utility.yul\":18419:18433 */\n sload\n /* \"#utility.yul\":18415:18416 */\n dup2\n /* \"#utility.yul\":18410:18413 */\n dup10\n /* \"#utility.yul\":18406:18417 */\n add\n /* \"#utility.yul\":18399:18434 */\n mstore\n /* \"#utility.yul\":18475:18476 */\n 0x01\n /* \"#utility.yul\":18466:18473 */\n dup3\n /* \"#utility.yul\":18462:18477 */\n add\n /* \"#utility.yul\":18451:18477 */\n swap2\n pop\n /* \"#utility.yul\":18373:18377 */\n 0x20\n /* \"#utility.yul\":18370:18371 */\n dup2\n /* \"#utility.yul\":18366:18378 */\n add\n /* \"#utility.yul\":18361:18378 */\n swap1\n pop\n /* \"#utility.yul\":18337:18491 */\n jump(tag_493)\n tag_495:\n /* \"#utility.yul\":18520:18526 */\n dup4\n /* \"#utility.yul\":18515:18518 */\n dup9\n /* \"#utility.yul\":18511:18527 */\n add\n /* \"#utility.yul\":18504:18527 */\n swap6\n pop\n /* \"#utility.yul\":18203:18537 */\n pop\n pop\n /* \"#utility.yul\":17988:18537 */\n tag_489:\n pop\n /* \"#utility.yul\":17776:18543 */\n pop\n pop\n /* \"#utility.yul\":17669:18543 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18549:18939 */\n tag_288:\n /* \"#utility.yul\":18655:18658 */\n 0x00\n /* \"#utility.yul\":18683:18722 */\n tag_497\n /* \"#utility.yul\":18716:18721 */\n dup3\n /* \"#utility.yul\":18683:18722 */\n tag_259\n jump\t// in\n tag_497:\n /* \"#utility.yul\":18738:18827 */\n tag_498\n /* \"#utility.yul\":18820:18826 */\n dup2\n /* \"#utility.yul\":18815:18818 */\n dup6\n /* \"#utility.yul\":18738:18827 */\n tag_286\n jump\t// in\n tag_498:\n /* \"#utility.yul\":18731:18827 */\n swap4\n pop\n /* \"#utility.yul\":18836:18901 */\n tag_499\n /* \"#utility.yul\":18894:18900 */\n dup2\n /* \"#utility.yul\":18889:18892 */\n dup6\n /* \"#utility.yul\":18882:18886 */\n 0x20\n /* \"#utility.yul\":18875:18880 */\n dup7\n /* \"#utility.yul\":18871:18887 */\n add\n /* \"#utility.yul\":18836:18901 */\n tag_261\n jump\t// in\n tag_499:\n /* \"#utility.yul\":18926:18932 */\n dup1\n /* \"#utility.yul\":18921:18924 */\n dup5\n /* \"#utility.yul\":18917:18933 */\n add\n /* \"#utility.yul\":18910:18933 */\n swap2\n pop\n /* \"#utility.yul\":18659:18939 */\n pop\n /* \"#utility.yul\":18549:18939 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":18945:19374 */\n tag_130:\n /* \"#utility.yul\":19122:19125 */\n 0x00\n /* \"#utility.yul\":19144:19236 */\n tag_501\n /* \"#utility.yul\":19232:19235 */\n dup3\n /* \"#utility.yul\":19223:19229 */\n dup6\n /* \"#utility.yul\":19144:19236 */\n tag_287\n jump\t// in\n tag_501:\n /* \"#utility.yul\":19137:19236 */\n swap2\n pop\n /* \"#utility.yul\":19253:19348 */\n tag_502\n /* \"#utility.yul\":19344:19347 */\n dup3\n /* \"#utility.yul\":19335:19341 */\n dup5\n /* \"#utility.yul\":19253:19348 */\n tag_288\n jump\t// in\n tag_502:\n /* \"#utility.yul\":19246:19348 */\n swap2\n pop\n /* \"#utility.yul\":19365:19368 */\n dup2\n /* \"#utility.yul\":19358:19368 */\n swap1\n pop\n /* \"#utility.yul\":18945:19374 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":19380:19605 */\n tag_289:\n /* \"#utility.yul\":19520:19554 */\n 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061\n /* \"#utility.yul\":19516:19517 */\n 0x00\n /* \"#utility.yul\":19508:19514 */\n dup3\n /* \"#utility.yul\":19504:19518 */\n add\n /* \"#utility.yul\":19497:19555 */\n mstore\n /* \"#utility.yul\":19589:19597 */\n 0x6464726573730000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":19584:19586 */\n 0x20\n /* \"#utility.yul\":19576:19582 */\n dup3\n /* \"#utility.yul\":19572:19587 */\n add\n /* \"#utility.yul\":19565:19598 */\n mstore\n /* \"#utility.yul\":19380:19605 */\n pop\n jump\t// out\n /* \"#utility.yul\":19611:19977 */\n tag_290:\n /* \"#utility.yul\":19753:19756 */\n 0x00\n /* \"#utility.yul\":19774:19841 */\n tag_505\n /* \"#utility.yul\":19838:19840 */\n 0x26\n /* \"#utility.yul\":19833:19836 */\n dup4\n /* \"#utility.yul\":19774:19841 */\n tag_260\n jump\t// in\n tag_505:\n /* \"#utility.yul\":19767:19841 */\n swap2\n pop\n /* \"#utility.yul\":19850:19943 */\n tag_506\n /* \"#utility.yul\":19939:19942 */\n dup3\n /* \"#utility.yul\":19850:19943 */\n tag_289\n jump\t// in\n tag_506:\n /* \"#utility.yul\":19968:19970 */\n 0x40\n /* \"#utility.yul\":19963:19966 */\n dup3\n /* \"#utility.yul\":19959:19971 */\n add\n /* \"#utility.yul\":19952:19971 */\n swap1\n pop\n /* \"#utility.yul\":19611:19977 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":19983:20402 */\n tag_136:\n /* \"#utility.yul\":20149:20153 */\n 0x00\n /* \"#utility.yul\":20187:20189 */\n 0x20\n /* \"#utility.yul\":20176:20185 */\n dup3\n /* \"#utility.yul\":20172:20190 */\n add\n /* \"#utility.yul\":20164:20190 */\n swap1\n pop\n /* \"#utility.yul\":20236:20245 */\n dup2\n /* \"#utility.yul\":20230:20234 */\n dup2\n /* \"#utility.yul\":20226:20246 */\n sub\n /* \"#utility.yul\":20222:20223 */\n 0x00\n /* \"#utility.yul\":20211:20220 */\n dup4\n /* \"#utility.yul\":20207:20224 */\n add\n /* \"#utility.yul\":20200:20247 */\n mstore\n /* \"#utility.yul\":20264:20395 */\n tag_508\n /* \"#utility.yul\":20390:20394 */\n dup2\n /* \"#utility.yul\":20264:20395 */\n tag_290\n jump\t// in\n tag_508:\n /* \"#utility.yul\":20256:20395 */\n swap1\n pop\n /* \"#utility.yul\":19983:20402 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":20408:20590 */\n tag_291:\n /* \"#utility.yul\":20548:20582 */\n 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572\n /* \"#utility.yul\":20544:20545 */\n 0x00\n /* \"#utility.yul\":20536:20542 */\n dup3\n /* \"#utility.yul\":20532:20546 */\n add\n /* \"#utility.yul\":20525:20583 */\n mstore\n /* \"#utility.yul\":20408:20590 */\n pop\n jump\t// out\n /* \"#utility.yul\":20596:20962 */\n tag_292:\n /* \"#utility.yul\":20738:20741 */\n 0x00\n /* \"#utility.yul\":20759:20826 */\n tag_511\n /* \"#utility.yul\":20823:20825 */\n 0x20\n /* \"#utility.yul\":20818:20821 */\n dup4\n /* \"#utility.yul\":20759:20826 */\n tag_260\n jump\t// in\n tag_511:\n /* \"#utility.yul\":20752:20826 */\n swap2\n pop\n /* \"#utility.yul\":20835:20928 */\n tag_512\n /* \"#utility.yul\":20924:20927 */\n dup3\n /* \"#utility.yul\":20835:20928 */\n tag_291\n jump\t// in\n tag_512:\n /* \"#utility.yul\":20953:20955 */\n 0x20\n /* \"#utility.yul\":20948:20951 */\n dup3\n /* \"#utility.yul\":20944:20956 */\n add\n /* \"#utility.yul\":20937:20956 */\n swap1\n pop\n /* \"#utility.yul\":20596:20962 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":20968:21387 */\n tag_151:\n /* \"#utility.yul\":21134:21138 */\n 0x00\n /* \"#utility.yul\":21172:21174 */\n 0x20\n /* \"#utility.yul\":21161:21170 */\n dup3\n /* \"#utility.yul\":21157:21175 */\n add\n /* \"#utility.yul\":21149:21175 */\n swap1\n pop\n /* \"#utility.yul\":21221:21230 */\n dup2\n /* \"#utility.yul\":21215:21219 */\n dup2\n /* \"#utility.yul\":21211:21231 */\n sub\n /* \"#utility.yul\":21207:21208 */\n 0x00\n /* \"#utility.yul\":21196:21205 */\n dup4\n /* \"#utility.yul\":21192:21209 */\n add\n /* \"#utility.yul\":21185:21232 */\n mstore\n /* \"#utility.yul\":21249:21380 */\n tag_514\n /* \"#utility.yul\":21375:21379 */\n dup2\n /* \"#utility.yul\":21249:21380 */\n tag_292\n jump\t// in\n tag_514:\n /* \"#utility.yul\":21241:21380 */\n swap1\n pop\n /* \"#utility.yul\":20968:21387 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":21393:21573 */\n tag_175:\n /* \"#utility.yul\":21441:21518 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":21438:21439 */\n 0x00\n /* \"#utility.yul\":21431:21519 */\n mstore\n /* \"#utility.yul\":21538:21542 */\n 0x12\n /* \"#utility.yul\":21535:21536 */\n 0x04\n /* \"#utility.yul\":21528:21543 */\n mstore\n /* \"#utility.yul\":21562:21566 */\n 0x24\n /* \"#utility.yul\":21559:21560 */\n 0x00\n /* \"#utility.yul\":21552:21567 */\n revert\n /* \"#utility.yul\":21579:21773 */\n tag_183:\n /* \"#utility.yul\":21619:21623 */\n 0x00\n /* \"#utility.yul\":21639:21659 */\n tag_517\n /* \"#utility.yul\":21657:21658 */\n dup3\n /* \"#utility.yul\":21639:21659 */\n tag_256\n jump\t// in\n tag_517:\n /* \"#utility.yul\":21634:21659 */\n swap2\n pop\n /* \"#utility.yul\":21673:21693 */\n tag_518\n /* \"#utility.yul\":21691:21692 */\n dup4\n /* \"#utility.yul\":21673:21693 */\n tag_256\n jump\t// in\n tag_518:\n /* \"#utility.yul\":21668:21693 */\n swap3\n pop\n /* \"#utility.yul\":21717:21718 */\n dup3\n /* \"#utility.yul\":21714:21715 */\n dup3\n /* \"#utility.yul\":21710:21719 */\n sub\n /* \"#utility.yul\":21702:21719 */\n swap1\n pop\n /* \"#utility.yul\":21741:21742 */\n dup2\n /* \"#utility.yul\":21735:21739 */\n dup2\n /* \"#utility.yul\":21732:21743 */\n gt\n /* \"#utility.yul\":21729:21766 */\n iszero\n tag_519\n jumpi\n /* \"#utility.yul\":21746:21764 */\n tag_520\n tag_264\n jump\t// in\n tag_520:\n /* \"#utility.yul\":21729:21766 */\n tag_519:\n /* \"#utility.yul\":21579:21773 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":21779:21959 */\n tag_194:\n /* \"#utility.yul\":21827:21904 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":21824:21825 */\n 0x00\n /* \"#utility.yul\":21817:21905 */\n mstore\n /* \"#utility.yul\":21924:21928 */\n 0x31\n /* \"#utility.yul\":21921:21922 */\n 0x04\n /* \"#utility.yul\":21914:21929 */\n mstore\n /* \"#utility.yul\":21948:21952 */\n 0x24\n /* \"#utility.yul\":21945:21946 */\n 0x00\n /* \"#utility.yul\":21938:21953 */\n revert\n\n auxdata: 0xa2646970667358221220ade077e5a020338b329a832eeb8e81fc4536bdb821d935448d94cb898fe931a664736f6c63430008120033\n}\n",
"bytecode": {
"functionDebugData": {
"@_2796": {
"entryPoint": null,
"id": 2796,
"parameterSlots": 1,
"returnSlots": 0
},
"@_691": {
"entryPoint": null,
"id": 691,
"parameterSlots": 0,
"returnSlots": 0
},
"@_msgSender_908": {
"entryPoint": 159,
"id": 908,
"parameterSlots": 0,
"returnSlots": 1
},
"@_transferOwnership_779": {
"entryPoint": 167,
"id": 779,
"parameterSlots": 1,
"returnSlots": 0
},
"abi_decode_t_address_fromMemory": {
"entryPoint": 446,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_address_fromMemory": {
"entryPoint": 469,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"cleanup_t_address": {
"entryPoint": 400,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 368,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": null,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 363,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"validator_revert_t_address": {
"entryPoint": 420,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
}
},
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:1199:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:15",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:15",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:15"
},
"nodeType": "YulFunctionCall",
"src": "67:9:15"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:15"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:15",
"type": ""
}
],
"src": "7:75:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:15"
},
"nodeType": "YulFunctionCall",
"src": "187:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:15"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:15"
},
"nodeType": "YulFunctionCall",
"src": "310:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:15"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "379:81:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "389:65:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "404:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "411:42:15",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "400:3:15"
},
"nodeType": "YulFunctionCall",
"src": "400:54:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "389:7:15"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "361:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "371:7:15",
"type": ""
}
],
"src": "334:126:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "511:51:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "521:35:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "550:5:15"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nodeType": "YulIdentifier",
"src": "532:17:15"
},
"nodeType": "YulFunctionCall",
"src": "532:24:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "521:7:15"
}
]
}
]
},
"name": "cleanup_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "493:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "503:7:15",
"type": ""
}
],
"src": "466:96:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "611:79:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "668:16:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "677:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "680:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "670:6:15"
},
"nodeType": "YulFunctionCall",
"src": "670:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "670:12:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "634:5:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "659:5:15"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "641:17:15"
},
"nodeType": "YulFunctionCall",
"src": "641:24:15"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "631:2:15"
},
"nodeType": "YulFunctionCall",
"src": "631:35:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "624:6:15"
},
"nodeType": "YulFunctionCall",
"src": "624:43:15"
},
"nodeType": "YulIf",
"src": "621:63:15"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "604:5:15",
"type": ""
}
],
"src": "568:122:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "759:80:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "769:22:15",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "784:6:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "778:5:15"
},
"nodeType": "YulFunctionCall",
"src": "778:13:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "769:5:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "827:5:15"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "800:26:15"
},
"nodeType": "YulFunctionCall",
"src": "800:33:15"
},
"nodeType": "YulExpressionStatement",
"src": "800:33:15"
}
]
},
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "737:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "745:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "753:5:15",
"type": ""
}
],
"src": "696:143:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "922:274:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "968:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "970:77:15"
},
"nodeType": "YulFunctionCall",
"src": "970:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "970:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "943:7:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "952:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "939:3:15"
},
"nodeType": "YulFunctionCall",
"src": "939:23:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "964:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "935:3:15"
},
"nodeType": "YulFunctionCall",
"src": "935:32:15"
},
"nodeType": "YulIf",
"src": "932:119:15"
},
{
"nodeType": "YulBlock",
"src": "1061:128:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1076:15:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1090:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1080:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1105:74:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1151:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1162:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1147:3:15"
},
"nodeType": "YulFunctionCall",
"src": "1147:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1171:7:15"
}
],
"functionName": {
"name": "abi_decode_t_address_fromMemory",
"nodeType": "YulIdentifier",
"src": "1115:31:15"
},
"nodeType": "YulFunctionCall",
"src": "1115:64:15"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1105:6:15"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "892:9:15",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "903:7:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "915:6:15",
"type": ""
}
],
"src": "845:351:15"
}
]
},
"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_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_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n\n function abi_decode_tuple_t_address_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_address_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n}\n",
"id": 15,
"language": "Yul",
"name": "#utility.yul"
}
],
"linkReferences": {},
"object": "60806040523480156200001157600080fd5b5060405162001d3338038062001d338339818101604052810190620000379190620001d5565b620000576200004b6200009f60201b60201c565b620000a760201b60201c565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000207565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200019d8262000170565b9050919050565b620001af8162000190565b8114620001bb57600080fd5b50565b600081519050620001cf81620001a4565b92915050565b600060208284031215620001ee57620001ed6200016b565b5b6000620001fe84828501620001be565b91505092915050565b611b1c80620002176000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806355f804b31161007157806355f804b3146101525780636d73e6691461016e578063715018a61461018a5780638da5cb5b14610194578063e9dc6375146101b2578063f2fde38b146101e2576100a9565b806301ffc9a7146100ae5780631249c58b146100de57806324d7806c146100e85780632d3456701461011857806331ae450b14610134575b600080fd5b6100c860048036038101906100c39190610f11565b6101fe565b6040516100d59190610f59565b60405180910390f35b6100e6610288565b005b61010260048036038101906100fd9190610fd2565b610329565b60405161010f9190610f59565b60405180910390f35b610132600480360381019061012d9190610fd2565b610383565b005b61013c610417565b60405161014991906110bd565b60405180910390f35b61016c60048036038101906101679190611225565b6104f9565b005b61018860048036038101906101839190610fd2565b61059c565b005b61019261062f565b005b61019c610643565b6040516101a9919061127d565b60405180910390f35b6101cc60048036038101906101c791906112ce565b61066c565b6040516101d9919061138d565b60405180910390f35b6101fc60048036038101906101f79190610fd2565b610731565b005b60007fe9dc6375000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806102715750610270826107b4565b5b806102815750610280826107b4565b5b9050919050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632928ca58336040518263ffffffff1660e01b81526004016102e3919061127d565b6020604051808303816000875af1158015610302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032691906113c4565b50565b60008173ffffffffffffffffffffffffffffffffffffffff1661034a610643565b73ffffffffffffffffffffffffffffffffffffffff16148061037c575061037b82600161082e90919063ffffffff16565b5b9050919050565b61038b61085e565b61039f81600161082e90919063ffffffff16565b15610414573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d560405160405180910390a36104128160016108dc90919063ffffffff16565b505b50565b6060610423600161090c565b67ffffffffffffffff81111561043c5761043b6110fa565b5b60405190808252806020026020018201604052801561046a5781602001602082028036833780820191505090505b50905060005b61047a600161090c565b8110156104f55761049581600161092190919063ffffffff16565b8282815181106104a8576104a76113f1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806104ed9061144f565b915050610470565b5090565b3373ffffffffffffffffffffffffffffffffffffffff16610518610643565b73ffffffffffffffffffffffffffffffffffffffff16148061054a575061054933600161082e90919063ffffffff16565b5b610589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058090611509565b60405180910390fd5b80600490816105989190611735565b5050565b6105a461085e565b6105b881600161082e90919063ffffffff16565b61062c573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb160405160405180910390a361062a81600161093b90919063ffffffff16565b505b50565b61063761085e565b610641600061096b565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f590611853565b60405180910390fd5b600461070983610a2f565b60405160200161071a929190611932565b604051602081830303815290604052905092915050565b61073961085e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079f906119c8565b60405180910390fd5b6107b18161096b565b50565b60007f553e757e000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610827575061082682610afd565b5b9050919050565b6000610856836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610b67565b905092915050565b610866610b8a565b73ffffffffffffffffffffffffffffffffffffffff16610884610643565b73ffffffffffffffffffffffffffffffffffffffff16146108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190611a34565b60405180910390fd5b565b6000610904836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610b92565b905092915050565b600061091a82600001610ca6565b9050919050565b60006109308360000183610cb7565b60001c905092915050565b6000610963836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610ce2565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060006001610a3e84610d52565b01905060008167ffffffffffffffff811115610a5d57610a5c6110fa565b5b6040519080825280601f01601f191660200182016040528015610a8f5781602001600182028036833780820191505090505b509050600082602001820190505b600115610af2578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610ae657610ae5611a54565b5b04945060008503610a9d575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080836001016000848152602001908152602001600020541415905092915050565b600033905090565b60008083600101600084815260200190815260200160002054905060008114610c9a576000600182610bc49190611a83565b9050600060018660000180549050610bdc9190611a83565b9050818114610c4b576000866000018281548110610bfd57610bfc6113f1565b5b9060005260206000200154905080876000018481548110610c2157610c206113f1565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480610c5f57610c5e611ab7565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610ca0565b60009150505b92915050565b600081600001805490509050919050565b6000826000018281548110610ccf57610cce6113f1565b5b9060005260206000200154905092915050565b6000610cee8383610b67565b610d47578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050610d4c565b600090505b92915050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610db0577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381610da657610da5611a54565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310610ded576d04ee2d6d415b85acef81000000008381610de357610de2611a54565b5b0492506020810190505b662386f26fc100008310610e1c57662386f26fc100008381610e1257610e11611a54565b5b0492506010810190505b6305f5e1008310610e45576305f5e1008381610e3b57610e3a611a54565b5b0492506008810190505b6127108310610e6a576127108381610e6057610e5f611a54565b5b0492506004810190505b60648310610e8d5760648381610e8357610e82611a54565b5b0492506002810190505b600a8310610e9c576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610eee81610eb9565b8114610ef957600080fd5b50565b600081359050610f0b81610ee5565b92915050565b600060208284031215610f2757610f26610eaf565b5b6000610f3584828501610efc565b91505092915050565b60008115159050919050565b610f5381610f3e565b82525050565b6000602082019050610f6e6000830184610f4a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f9f82610f74565b9050919050565b610faf81610f94565b8114610fba57600080fd5b50565b600081359050610fcc81610fa6565b92915050565b600060208284031215610fe857610fe7610eaf565b5b6000610ff684828501610fbd565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61103481610f94565b82525050565b6000611046838361102b565b60208301905092915050565b6000602082019050919050565b600061106a82610fff565b611074818561100a565b935061107f8361101b565b8060005b838110156110b0578151611097888261103a565b97506110a283611052565b925050600181019050611083565b5085935050505092915050565b600060208201905081810360008301526110d7818461105f565b905092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611132826110e9565b810181811067ffffffffffffffff82111715611151576111506110fa565b5b80604052505050565b6000611164610ea5565b90506111708282611129565b919050565b600067ffffffffffffffff8211156111905761118f6110fa565b5b611199826110e9565b9050602081019050919050565b82818337600083830152505050565b60006111c86111c384611175565b61115a565b9050828152602081018484840111156111e4576111e36110e4565b5b6111ef8482856111a6565b509392505050565b600082601f83011261120c5761120b6110df565b5b813561121c8482602086016111b5565b91505092915050565b60006020828403121561123b5761123a610eaf565b5b600082013567ffffffffffffffff81111561125957611258610eb4565b5b611265848285016111f7565b91505092915050565b61127781610f94565b82525050565b6000602082019050611292600083018461126e565b92915050565b6000819050919050565b6112ab81611298565b81146112b657600080fd5b50565b6000813590506112c8816112a2565b92915050565b600080604083850312156112e5576112e4610eaf565b5b60006112f385828601610fbd565b9250506020611304858286016112b9565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561134857808201518184015260208101905061132d565b60008484015250505050565b600061135f8261130e565b6113698185611319565b935061137981856020860161132a565b611382816110e9565b840191505092915050565b600060208201905081810360008301526113a78184611354565b905092915050565b6000815190506113be816112a2565b92915050565b6000602082840312156113da576113d9610eaf565b5b60006113e8848285016113af565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061145a82611298565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361148c5761148b611420565b5b600182019050919050565b7f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f72206160008201527f646d696e00000000000000000000000000000000000000000000000000000000602082015250565b60006114f3602483611319565b91506114fe82611497565b604082019050919050565b60006020820190508181036000830152611522816114e6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061157057607f821691505b60208210810361158357611582611529565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026115eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826115ae565b6115f586836115ae565b95508019841693508086168417925050509392505050565b6000819050919050565b600061163261162d61162884611298565b61160d565b611298565b9050919050565b6000819050919050565b61164c83611617565b61166061165882611639565b8484546115bb565b825550505050565b600090565b611675611668565b611680818484611643565b505050565b5b818110156116a45761169960008261166d565b600181019050611686565b5050565b601f8211156116e9576116ba81611589565b6116c38461159e565b810160208510156116d2578190505b6116e66116de8561159e565b830182611685565b50505b505050565b600082821c905092915050565b600061170c600019846008026116ee565b1980831691505092915050565b600061172583836116fb565b9150826002028217905092915050565b61173e8261130e565b67ffffffffffffffff811115611757576117566110fa565b5b6117618254611558565b61176c8282856116a8565b600060209050601f83116001811461179f576000841561178d578287015190505b6117978582611719565b8655506117ff565b601f1984166117ad86611589565b60005b828110156117d5578489015182556001820191506020850194506020810190506117b0565b868310156117f257848901516117ee601f8916826116fb565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b600061183d600d83611319565b915061184882611807565b602082019050919050565b6000602082019050818103600083015261186c81611830565b9050919050565b600081905092915050565b6000815461188b81611558565b6118958186611873565b945060018216600081146118b057600181146118c5576118f8565b60ff19831686528115158202860193506118f8565b6118ce85611589565b60005b838110156118f0578154818901526001820191506020810190506118d1565b838801955050505b50505092915050565b600061190c8261130e565b6119168185611873565b935061192681856020860161132a565b80840191505092915050565b600061193e828561187e565b915061194a8284611901565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006119b2602683611319565b91506119bd82611956565b604082019050919050565b600060208201905081810360008301526119e1816119a5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611a1e602083611319565b9150611a29826119e8565b602082019050919050565b60006020820190508181036000830152611a4d81611a11565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a8e82611298565b9150611a9983611298565b9250828203905081811115611ab157611ab0611420565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220ade077e5a020338b329a832eeb8e81fc4536bdb821d935448d94cb898fe931a664736f6c63430008120033",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x1D33 CODESIZE SUB DUP1 PUSH3 0x1D33 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH3 0x37 SWAP2 SWAP1 PUSH3 0x1D5 JUMP JUMPDEST PUSH3 0x57 PUSH3 0x4B PUSH3 0x9F PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST PUSH3 0xA7 PUSH1 0x20 SHL PUSH1 0x20 SHR JUMP JUMPDEST DUP1 PUSH1 0x3 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP PUSH3 0x207 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 PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x19D DUP3 PUSH3 0x170 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0x1AF DUP2 PUSH3 0x190 JUMP JUMPDEST DUP2 EQ PUSH3 0x1BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH3 0x1CF DUP2 PUSH3 0x1A4 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH3 0x1EE JUMPI PUSH3 0x1ED PUSH3 0x16B JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH3 0x1FE DUP5 DUP3 DUP6 ADD PUSH3 0x1BE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1B1C DUP1 PUSH3 0x217 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 0xA9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x55F804B3 GT PUSH2 0x71 JUMPI DUP1 PUSH4 0x55F804B3 EQ PUSH2 0x152 JUMPI DUP1 PUSH4 0x6D73E669 EQ PUSH2 0x16E JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x18A JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x194 JUMPI DUP1 PUSH4 0xE9DC6375 EQ PUSH2 0x1B2 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x1E2 JUMPI PUSH2 0xA9 JUMP JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xAE JUMPI DUP1 PUSH4 0x1249C58B EQ PUSH2 0xDE JUMPI DUP1 PUSH4 0x24D7806C EQ PUSH2 0xE8 JUMPI DUP1 PUSH4 0x2D345670 EQ PUSH2 0x118 JUMPI DUP1 PUSH4 0x31AE450B EQ PUSH2 0x134 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC8 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xC3 SWAP2 SWAP1 PUSH2 0xF11 JUMP JUMPDEST PUSH2 0x1FE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP2 SWAP1 PUSH2 0xF59 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE6 PUSH2 0x288 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x102 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0xFD SWAP2 SWAP1 PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x329 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x10F SWAP2 SWAP1 PUSH2 0xF59 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x132 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x12D SWAP2 SWAP1 PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x383 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x13C PUSH2 0x417 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x149 SWAP2 SWAP1 PUSH2 0x10BD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x16C PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x167 SWAP2 SWAP1 PUSH2 0x1225 JUMP JUMPDEST PUSH2 0x4F9 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x188 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x183 SWAP2 SWAP1 PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x59C JUMP JUMPDEST STOP JUMPDEST PUSH2 0x192 PUSH2 0x62F JUMP JUMPDEST STOP JUMPDEST PUSH2 0x19C PUSH2 0x643 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1A9 SWAP2 SWAP1 PUSH2 0x127D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1CC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1C7 SWAP2 SWAP1 PUSH2 0x12CE JUMP JUMPDEST PUSH2 0x66C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1D9 SWAP2 SWAP1 PUSH2 0x138D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1FC PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x1F7 SWAP2 SWAP1 PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0x731 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x0 PUSH32 0xE9DC637500000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x271 JUMPI POP PUSH2 0x270 DUP3 PUSH2 0x7B4 JUMP JUMPDEST JUMPDEST DUP1 PUSH2 0x281 JUMPI POP PUSH2 0x280 DUP3 PUSH2 0x7B4 JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x2928CA58 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x2E3 SWAP2 SWAP1 PUSH2 0x127D JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x302 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 0x326 SWAP2 SWAP1 PUSH2 0x13C4 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x34A PUSH2 0x643 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x37C JUMPI POP PUSH2 0x37B DUP3 PUSH1 0x1 PUSH2 0x82E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x38B PUSH2 0x85E JUMP JUMPDEST PUSH2 0x39F DUP2 PUSH1 0x1 PUSH2 0x82E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST ISZERO PUSH2 0x414 JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7C0C3C84C67C85FCAC635147348BFE374C24A1A93D0366D1CFE9D8853CBF89D5 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x412 DUP2 PUSH1 0x1 PUSH2 0x8DC SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x423 PUSH1 0x1 PUSH2 0x90C JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x43C JUMPI PUSH2 0x43B PUSH2 0x10FA 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 0x46A 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 0x47A PUSH1 0x1 PUSH2 0x90C JUMP JUMPDEST DUP2 LT ISZERO PUSH2 0x4F5 JUMPI PUSH2 0x495 DUP2 PUSH1 0x1 PUSH2 0x921 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x4A8 JUMPI PUSH2 0x4A7 PUSH2 0x13F1 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 0x4ED SWAP1 PUSH2 0x144F JUMP JUMPDEST SWAP2 POP POP PUSH2 0x470 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x518 PUSH2 0x643 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ DUP1 PUSH2 0x54A JUMPI POP PUSH2 0x549 CALLER PUSH1 0x1 PUSH2 0x82E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST JUMPDEST PUSH2 0x589 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x580 SWAP1 PUSH2 0x1509 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 SWAP1 DUP2 PUSH2 0x598 SWAP2 SWAP1 PUSH2 0x1735 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x5A4 PUSH2 0x85E JUMP JUMPDEST PUSH2 0x5B8 DUP2 PUSH1 0x1 PUSH2 0x82E SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x62C JUMPI CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x7E1A1A08D52E4BA0E21554733D66165FD5151F99460116223D9E3A608EEC5CB1 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH2 0x62A DUP2 PUSH1 0x1 PUSH2 0x93B SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST POP JUMPDEST POP JUMP JUMPDEST PUSH2 0x637 PUSH2 0x85E JUMP JUMPDEST PUSH2 0x641 PUSH1 0x0 PUSH2 0x96B 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 0x60 PUSH1 0x3 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x6FE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x6F5 SWAP1 PUSH2 0x1853 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x4 PUSH2 0x709 DUP4 PUSH2 0xA2F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x71A SWAP3 SWAP2 SWAP1 PUSH2 0x1932 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x739 PUSH2 0x85E JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SUB PUSH2 0x7A8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x79F SWAP1 PUSH2 0x19C8 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x7B1 DUP2 PUSH2 0x96B JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 PUSH32 0x553E757E00000000000000000000000000000000000000000000000000000000 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND DUP3 PUSH28 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND EQ DUP1 PUSH2 0x827 JUMPI POP PUSH2 0x826 DUP3 PUSH2 0xAFD JUMP JUMPDEST JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x856 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0xB67 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x866 PUSH2 0xB8A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x884 PUSH2 0x643 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x8DA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0x8D1 SWAP1 PUSH2 0x1A34 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST JUMP JUMPDEST PUSH1 0x0 PUSH2 0x904 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0xB92 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x91A DUP3 PUSH1 0x0 ADD PUSH2 0xCA6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x930 DUP4 PUSH1 0x0 ADD DUP4 PUSH2 0xCB7 JUMP JUMPDEST PUSH1 0x0 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x963 DUP4 PUSH1 0x0 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 SHL PUSH2 0xCE2 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 0x60 PUSH1 0x0 PUSH1 0x1 PUSH2 0xA3E DUP5 PUSH2 0xD52 JUMP JUMPDEST ADD SWAP1 POP PUSH1 0x0 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xA5D JUMPI PUSH2 0xA5C PUSH2 0x10FA JUMP JUMPDEST JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0xA8F JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x1 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY DUP1 DUP3 ADD SWAP2 POP POP SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP3 PUSH1 0x20 ADD DUP3 ADD SWAP1 POP JUMPDEST PUSH1 0x1 ISZERO PUSH2 0xAF2 JUMPI DUP1 DUP1 PUSH1 0x1 SWAP1 SUB SWAP2 POP POP PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 PUSH1 0xA DUP7 MOD BYTE DUP2 MSTORE8 PUSH1 0xA DUP6 DUP2 PUSH2 0xAE6 JUMPI PUSH2 0xAE5 PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP5 POP PUSH1 0x0 DUP6 SUB PUSH2 0xA9D JUMPI JUMPDEST DUP2 SWAP4 POP POP POP POP SWAP2 SWAP1 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 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 0xC9A JUMPI PUSH1 0x0 PUSH1 0x1 DUP3 PUSH2 0xBC4 SWAP2 SWAP1 PUSH2 0x1A83 JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP7 PUSH1 0x0 ADD DUP1 SLOAD SWAP1 POP PUSH2 0xBDC SWAP2 SWAP1 PUSH2 0x1A83 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 EQ PUSH2 0xC4B JUMPI PUSH1 0x0 DUP7 PUSH1 0x0 ADD DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xBFD JUMPI PUSH2 0xBFC PUSH2 0x13F1 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 0xC21 JUMPI PUSH2 0xC20 PUSH2 0x13F1 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 0xC5F JUMPI PUSH2 0xC5E PUSH2 0x1AB7 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 0xCA0 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 0xCCF JUMPI PUSH2 0xCCE PUSH2 0x13F1 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 0xCEE DUP4 DUP4 PUSH2 0xB67 JUMP JUMPDEST PUSH2 0xD47 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 0xD4C JUMP JUMPDEST PUSH1 0x0 SWAP1 POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 POP PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP4 LT PUSH2 0xDB0 JUMPI PUSH27 0x184F03E93FF9F4DAA797ED6E38ED64BF6A1F010000000000000000 DUP4 DUP2 PUSH2 0xDA6 JUMPI PUSH2 0xDA5 PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x40 DUP2 ADD SWAP1 POP JUMPDEST PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 LT PUSH2 0xDED JUMPI PUSH14 0x4EE2D6D415B85ACEF8100000000 DUP4 DUP2 PUSH2 0xDE3 JUMPI PUSH2 0xDE2 PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x20 DUP2 ADD SWAP1 POP JUMPDEST PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0xE1C JUMPI PUSH7 0x2386F26FC10000 DUP4 DUP2 PUSH2 0xE12 JUMPI PUSH2 0xE11 PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x10 DUP2 ADD SWAP1 POP JUMPDEST PUSH4 0x5F5E100 DUP4 LT PUSH2 0xE45 JUMPI PUSH4 0x5F5E100 DUP4 DUP2 PUSH2 0xE3B JUMPI PUSH2 0xE3A PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x8 DUP2 ADD SWAP1 POP JUMPDEST PUSH2 0x2710 DUP4 LT PUSH2 0xE6A JUMPI PUSH2 0x2710 DUP4 DUP2 PUSH2 0xE60 JUMPI PUSH2 0xE5F PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x4 DUP2 ADD SWAP1 POP JUMPDEST PUSH1 0x64 DUP4 LT PUSH2 0xE8D JUMPI PUSH1 0x64 DUP4 DUP2 PUSH2 0xE83 JUMPI PUSH2 0xE82 PUSH2 0x1A54 JUMP JUMPDEST JUMPDEST DIV SWAP3 POP PUSH1 0x2 DUP2 ADD SWAP1 POP JUMPDEST PUSH1 0xA DUP4 LT PUSH2 0xE9C JUMPI PUSH1 0x1 DUP2 ADD SWAP1 POP JUMPDEST DUP1 SWAP2 POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 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 0xEEE DUP2 PUSH2 0xEB9 JUMP JUMPDEST DUP2 EQ PUSH2 0xEF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xF0B DUP2 PUSH2 0xEE5 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xF27 JUMPI PUSH2 0xF26 PUSH2 0xEAF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xF35 DUP5 DUP3 DUP6 ADD PUSH2 0xEFC JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 ISZERO ISZERO SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xF53 DUP2 PUSH2 0xF3E JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xF6E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xF4A JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF9F DUP3 PUSH2 0xF74 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xFAF DUP2 PUSH2 0xF94 JUMP JUMPDEST DUP2 EQ PUSH2 0xFBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0xFCC DUP2 PUSH2 0xFA6 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xFE8 JUMPI PUSH2 0xFE7 PUSH2 0xEAF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xFF6 DUP5 DUP3 DUP6 ADD PUSH2 0xFBD 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 0x1034 DUP2 PUSH2 0xF94 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1046 DUP4 DUP4 PUSH2 0x102B 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 0x106A DUP3 PUSH2 0xFFF JUMP JUMPDEST PUSH2 0x1074 DUP2 DUP6 PUSH2 0x100A JUMP JUMPDEST SWAP4 POP PUSH2 0x107F DUP4 PUSH2 0x101B JUMP JUMPDEST DUP1 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x10B0 JUMPI DUP2 MLOAD PUSH2 0x1097 DUP9 DUP3 PUSH2 0x103A JUMP JUMPDEST SWAP8 POP PUSH2 0x10A2 DUP4 PUSH2 0x1052 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1083 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 0x10D7 DUP2 DUP5 PUSH2 0x105F JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x1132 DUP3 PUSH2 0x10E9 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x1151 JUMPI PUSH2 0x1150 PUSH2 0x10FA JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1164 PUSH2 0xEA5 JUMP JUMPDEST SWAP1 POP PUSH2 0x1170 DUP3 DUP3 PUSH2 0x1129 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x1190 JUMPI PUSH2 0x118F PUSH2 0x10FA JUMP JUMPDEST JUMPDEST PUSH2 0x1199 DUP3 PUSH2 0x10E9 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST DUP3 DUP2 DUP4 CALLDATACOPY PUSH1 0x0 DUP4 DUP4 ADD MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x11C8 PUSH2 0x11C3 DUP5 PUSH2 0x1175 JUMP JUMPDEST PUSH2 0x115A JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x11E4 JUMPI PUSH2 0x11E3 PUSH2 0x10E4 JUMP JUMPDEST JUMPDEST PUSH2 0x11EF DUP5 DUP3 DUP6 PUSH2 0x11A6 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x120C JUMPI PUSH2 0x120B PUSH2 0x10DF JUMP JUMPDEST JUMPDEST DUP2 CALLDATALOAD PUSH2 0x121C DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x11B5 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x123B JUMPI PUSH2 0x123A PUSH2 0xEAF JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1259 JUMPI PUSH2 0x1258 PUSH2 0xEB4 JUMP JUMPDEST JUMPDEST PUSH2 0x1265 DUP5 DUP3 DUP6 ADD PUSH2 0x11F7 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x1277 DUP2 PUSH2 0xF94 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x1292 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x126E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x12AB DUP2 PUSH2 0x1298 JUMP JUMPDEST DUP2 EQ PUSH2 0x12B6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x12C8 DUP2 PUSH2 0x12A2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x12E5 JUMPI PUSH2 0x12E4 PUSH2 0xEAF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x12F3 DUP6 DUP3 DUP7 ADD PUSH2 0xFBD JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x1304 DUP6 DUP3 DUP7 ADD PUSH2 0x12B9 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 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 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1348 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x132D JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x135F DUP3 PUSH2 0x130E JUMP JUMPDEST PUSH2 0x1369 DUP2 DUP6 PUSH2 0x1319 JUMP JUMPDEST SWAP4 POP PUSH2 0x1379 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x132A JUMP JUMPDEST PUSH2 0x1382 DUP2 PUSH2 0x10E9 JUMP JUMPDEST DUP5 ADD SWAP2 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 0x13A7 DUP2 DUP5 PUSH2 0x1354 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x13BE DUP2 PUSH2 0x12A2 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x13DA JUMPI PUSH2 0x13D9 PUSH2 0xEAF JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x13E8 DUP5 DUP3 DUP6 ADD PUSH2 0x13AF JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP 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 PUSH2 0x145A DUP3 PUSH2 0x1298 JUMP JUMPDEST SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SUB PUSH2 0x148C JUMPI PUSH2 0x148B PUSH2 0x1420 JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x41646D696E436F6E74726F6C3A204D757374206265206F776E6572206F722061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x646D696E00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x14F3 PUSH1 0x24 DUP4 PUSH2 0x1319 JUMP JUMPDEST SWAP2 POP PUSH2 0x14FE DUP3 PUSH2 0x1497 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 0x1522 DUP2 PUSH2 0x14E6 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x1570 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x1583 JUMPI PUSH2 0x1582 PUSH2 0x1529 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 PUSH1 0x1F DUP4 ADD DIV SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP4 MUL PUSH2 0x15EB PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH2 0x15AE JUMP JUMPDEST PUSH2 0x15F5 DUP7 DUP4 PUSH2 0x15AE JUMP JUMPDEST SWAP6 POP DUP1 NOT DUP5 AND SWAP4 POP DUP1 DUP7 AND DUP5 OR SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1632 PUSH2 0x162D PUSH2 0x1628 DUP5 PUSH2 0x1298 JUMP JUMPDEST PUSH2 0x160D JUMP JUMPDEST PUSH2 0x1298 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x164C DUP4 PUSH2 0x1617 JUMP JUMPDEST PUSH2 0x1660 PUSH2 0x1658 DUP3 PUSH2 0x1639 JUMP JUMPDEST DUP5 DUP5 SLOAD PUSH2 0x15BB JUMP JUMPDEST DUP3 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1675 PUSH2 0x1668 JUMP JUMPDEST PUSH2 0x1680 DUP2 DUP5 DUP5 PUSH2 0x1643 JUMP JUMPDEST POP POP POP JUMP JUMPDEST JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x16A4 JUMPI PUSH2 0x1699 PUSH1 0x0 DUP3 PUSH2 0x166D JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1686 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x16E9 JUMPI PUSH2 0x16BA DUP2 PUSH2 0x1589 JUMP JUMPDEST PUSH2 0x16C3 DUP5 PUSH2 0x159E JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x16D2 JUMPI DUP2 SWAP1 POP JUMPDEST PUSH2 0x16E6 PUSH2 0x16DE DUP6 PUSH2 0x159E JUMP JUMPDEST DUP4 ADD DUP3 PUSH2 0x1685 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x170C PUSH1 0x0 NOT DUP5 PUSH1 0x8 MUL PUSH2 0x16EE JUMP JUMPDEST NOT DUP1 DUP4 AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1725 DUP4 DUP4 PUSH2 0x16FB JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0x2 MUL DUP3 OR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x173E DUP3 PUSH2 0x130E JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x1757 JUMPI PUSH2 0x1756 PUSH2 0x10FA JUMP JUMPDEST JUMPDEST PUSH2 0x1761 DUP3 SLOAD PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x176C DUP3 DUP3 DUP6 PUSH2 0x16A8 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 SWAP1 POP PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x179F JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x178D JUMPI DUP3 DUP8 ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x1797 DUP6 DUP3 PUSH2 0x1719 JUMP JUMPDEST DUP7 SSTORE POP PUSH2 0x17FF JUMP JUMPDEST PUSH1 0x1F NOT DUP5 AND PUSH2 0x17AD DUP7 PUSH2 0x1589 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x17D5 JUMPI DUP5 DUP10 ADD MLOAD DUP3 SSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP6 ADD SWAP5 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x17B0 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x17F2 JUMPI DUP5 DUP10 ADD MLOAD PUSH2 0x17EE PUSH1 0x1F DUP10 AND DUP3 PUSH2 0x16FB JUMP JUMPDEST DUP4 SSTORE POP JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x496E76616C696420746F6B656E00000000000000000000000000000000000000 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x183D PUSH1 0xD DUP4 PUSH2 0x1319 JUMP JUMPDEST SWAP2 POP PUSH2 0x1848 DUP3 PUSH2 0x1807 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 0x186C DUP2 PUSH2 0x1830 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SLOAD PUSH2 0x188B DUP2 PUSH2 0x1558 JUMP JUMPDEST PUSH2 0x1895 DUP2 DUP7 PUSH2 0x1873 JUMP JUMPDEST SWAP5 POP PUSH1 0x1 DUP3 AND PUSH1 0x0 DUP2 EQ PUSH2 0x18B0 JUMPI PUSH1 0x1 DUP2 EQ PUSH2 0x18C5 JUMPI PUSH2 0x18F8 JUMP JUMPDEST PUSH1 0xFF NOT DUP4 AND DUP7 MSTORE DUP2 ISZERO ISZERO DUP3 MUL DUP7 ADD SWAP4 POP PUSH2 0x18F8 JUMP JUMPDEST PUSH2 0x18CE DUP6 PUSH2 0x1589 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x18F0 JUMPI DUP2 SLOAD DUP2 DUP10 ADD MSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x18D1 JUMP JUMPDEST DUP4 DUP9 ADD SWAP6 POP POP POP JUMPDEST POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x190C DUP3 PUSH2 0x130E JUMP JUMPDEST PUSH2 0x1916 DUP2 DUP6 PUSH2 0x1873 JUMP JUMPDEST SWAP4 POP PUSH2 0x1926 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x132A JUMP JUMPDEST DUP1 DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x193E DUP3 DUP6 PUSH2 0x187E JUMP JUMPDEST SWAP2 POP PUSH2 0x194A DUP3 DUP5 PUSH2 0x1901 JUMP JUMPDEST SWAP2 POP DUP2 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A206E6577206F776E657220697320746865207A65726F2061 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x6464726573730000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x19B2 PUSH1 0x26 DUP4 PUSH2 0x1319 JUMP JUMPDEST SWAP2 POP PUSH2 0x19BD DUP3 PUSH2 0x1956 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 0x19E1 DUP2 PUSH2 0x19A5 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x0 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A1E PUSH1 0x20 DUP4 PUSH2 0x1319 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A29 DUP3 PUSH2 0x19E8 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 0x1A4D DUP2 PUSH2 0x1A11 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1A8E DUP3 PUSH2 0x1298 JUMP JUMPDEST SWAP2 POP PUSH2 0x1A99 DUP4 PUSH2 0x1298 JUMP JUMPDEST SWAP3 POP DUP3 DUP3 SUB SWAP1 POP DUP2 DUP2 GT ISZERO PUSH2 0x1AB1 JUMPI PUSH2 0x1AB0 PUSH2 0x1420 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 0xAD 0xE0 PUSH24 0xE5A020338B329A832EEB8E81FC4536BDB821D935448D94CB DUP10 DUP16 0xE9 BALANCE 0xA6 PUSH5 0x736F6C6343 STOP ADDMOD SLT STOP CALLER ",
"sourceMap": "532:993:14:-:0;;;707:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:5;955:12;:10;;;:12;;:::i;:::-;936:18;;;:32;;:::i;:::-;758:7:14;747:8;;:18;;;;;;;;;;;;;;;;;;707:66;532:993;;640:96:7;693:7;719:10;712:17;;640:96;:::o;2426:187:5:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;88:117:15:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;532:993:14:-;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {
"@_add_2207": {
"entryPoint": 3298,
"id": 2207,
"parameterSlots": 2,
"returnSlots": 1
},
"@_at_2341": {
"entryPoint": 3255,
"id": 2341,
"parameterSlots": 2,
"returnSlots": 1
},
"@_checkOwner_722": {
"entryPoint": 2142,
"id": 722,
"parameterSlots": 0,
"returnSlots": 0
},
"@_contains_2310": {
"entryPoint": 2919,
"id": 2310,
"parameterSlots": 2,
"returnSlots": 1
},
"@_length_2324": {
"entryPoint": 3238,
"id": 2324,
"parameterSlots": 1,
"returnSlots": 1
},
"@_msgSender_908": {
"entryPoint": 2954,
"id": 908,
"parameterSlots": 0,
"returnSlots": 1
},
"@_remove_2291": {
"entryPoint": 2962,
"id": 2291,
"parameterSlots": 2,
"returnSlots": 1
},
"@_transferOwnership_779": {
"entryPoint": 2411,
"id": 779,
"parameterSlots": 1,
"returnSlots": 0
},
"@add_2507": {
"entryPoint": 2363,
"id": 2507,
"parameterSlots": 2,
"returnSlots": 1
},
"@approveAdmin_571": {
"entryPoint": 1436,
"id": 571,
"parameterSlots": 1,
"returnSlots": 0
},
"@at_2603": {
"entryPoint": 2337,
"id": 2603,
"parameterSlots": 2,
"returnSlots": 1
},
"@contains_2561": {
"entryPoint": 2094,
"id": 2561,
"parameterSlots": 2,
"returnSlots": 1
},
"@getAdmins_542": {
"entryPoint": 1047,
"id": 542,
"parameterSlots": 0,
"returnSlots": 1
},
"@isAdmin_620": {
"entryPoint": 809,
"id": 620,
"parameterSlots": 1,
"returnSlots": 1
},
"@length_2576": {
"entryPoint": 2316,
"id": 2576,
"parameterSlots": 1,
"returnSlots": 1
},
"@log10_1886": {
"entryPoint": 3410,
"id": 1886,
"parameterSlots": 1,
"returnSlots": 1
},
"@mint_2836": {
"entryPoint": 648,
"id": 2836,
"parameterSlots": 0,
"returnSlots": 0
},
"@owner_708": {
"entryPoint": 1603,
"id": 708,
"parameterSlots": 0,
"returnSlots": 1
},
"@remove_2534": {
"entryPoint": 2268,
"id": 2534,
"parameterSlots": 2,
"returnSlots": 1
},
"@renounceOwnership_736": {
"entryPoint": 1583,
"id": 736,
"parameterSlots": 0,
"returnSlots": 0
},
"@revokeAdmin_599": {
"entryPoint": 899,
"id": 599,
"parameterSlots": 1,
"returnSlots": 0
},
"@setBaseURI_2848": {
"entryPoint": 1273,
"id": 2848,
"parameterSlots": 1,
"returnSlots": 0
},
"@supportsInterface_1170": {
"entryPoint": 2813,
"id": 1170,
"parameterSlots": 1,
"returnSlots": 1
},
"@supportsInterface_2824": {
"entryPoint": 510,
"id": 2824,
"parameterSlots": 1,
"returnSlots": 1
},
"@supportsInterface_478": {
"entryPoint": 1972,
"id": 478,
"parameterSlots": 1,
"returnSlots": 1
},
"@toString_977": {
"entryPoint": 2607,
"id": 977,
"parameterSlots": 1,
"returnSlots": 1
},
"@tokenURI_2877": {
"entryPoint": 1644,
"id": 2877,
"parameterSlots": 2,
"returnSlots": 1
},
"@transferOwnership_759": {
"entryPoint": 1841,
"id": 759,
"parameterSlots": 1,
"returnSlots": 0
},
"abi_decode_available_length_t_string_memory_ptr": {
"entryPoint": 4533,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_decode_t_address": {
"entryPoint": 4029,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_bytes4": {
"entryPoint": 3836,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_string_memory_ptr": {
"entryPoint": 4599,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256": {
"entryPoint": 4793,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_t_uint256_fromMemory": {
"entryPoint": 5039,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_address": {
"entryPoint": 4050,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_addresst_uint256": {
"entryPoint": 4814,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"abi_decode_tuple_t_bytes4": {
"entryPoint": 3857,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_string_memory_ptr": {
"entryPoint": 4645,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_uint256_fromMemory": {
"entryPoint": 5060,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encodeUpdatedPos_t_address_to_t_address": {
"entryPoint": 4154,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_address_to_t_address": {
"entryPoint": 4139,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_address_to_t_address_fromStack": {
"entryPoint": 4718,
"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": 4191,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_bool_to_t_bool_fromStack": {
"entryPoint": 3914,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack": {
"entryPoint": 4948,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 6401,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_string_storage_to_t_string_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 6270,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack": {
"entryPoint": 6565,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6_to_t_string_memory_ptr_fromStack": {
"entryPoint": 6192,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe_to_t_string_memory_ptr_fromStack": {
"entryPoint": 6673,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack": {
"entryPoint": 5350,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_packed_t_string_storage_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed": {
"entryPoint": 6450,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
"entryPoint": 4733,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_array$_t_address_$dyn_memory_ptr__to_t_array$_t_address_$dyn_memory_ptr__fromStack_reversed": {
"entryPoint": 4285,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed": {
"entryPoint": 3929,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 5005,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 6600,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 6227,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 6708,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"abi_encode_tuple_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687__to_t_string_memory_ptr__fromStack_reversed": {
"entryPoint": 5385,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"allocate_memory": {
"entryPoint": 4442,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": 3749,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"array_allocation_size_t_string_memory_ptr": {
"entryPoint": 4469,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_dataslot_t_array$_t_address_$dyn_memory_ptr": {
"entryPoint": 4123,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_dataslot_t_string_storage": {
"entryPoint": 5513,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_length_t_array$_t_address_$dyn_memory_ptr": {
"entryPoint": 4095,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_length_t_string_memory_ptr": {
"entryPoint": 4878,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_nextElement_t_array$_t_address_$dyn_memory_ptr": {
"entryPoint": 4178,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack": {
"entryPoint": 4106,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_string_memory_ptr_fromStack": {
"entryPoint": 4889,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack": {
"entryPoint": 6259,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"checked_sub_t_uint256": {
"entryPoint": 6787,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"clean_up_bytearray_end_slots_t_string_storage": {
"entryPoint": 5800,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"cleanup_t_address": {
"entryPoint": 3988,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bool": {
"entryPoint": 3902,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_bytes4": {
"entryPoint": 3769,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint160": {
"entryPoint": 3956,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"cleanup_t_uint256": {
"entryPoint": 4760,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"clear_storage_range_t_bytes1": {
"entryPoint": 5765,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"convert_t_uint256_to_t_uint256": {
"entryPoint": 5655,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": {
"entryPoint": 5941,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"copy_calldata_to_memory_with_cleanup": {
"entryPoint": 4518,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"copy_memory_to_memory_with_cleanup": {
"entryPoint": 4906,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"divide_by_32_ceil": {
"entryPoint": 5534,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"extract_byte_array_length": {
"entryPoint": 5464,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"extract_used_part_and_set_length_of_short_byte_array": {
"entryPoint": 5913,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"finalize_allocation": {
"entryPoint": 4393,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"identity": {
"entryPoint": 5645,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"increment_t_uint256": {
"entryPoint": 5199,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"mask_bytes_dynamic": {
"entryPoint": 5883,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"panic_error_0x11": {
"entryPoint": 5152,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x12": {
"entryPoint": 6740,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x22": {
"entryPoint": 5417,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x31": {
"entryPoint": 6839,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x32": {
"entryPoint": 5105,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x41": {
"entryPoint": 4346,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"prepare_store_t_uint256": {
"entryPoint": 5689,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": {
"entryPoint": 4319,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae": {
"entryPoint": 4324,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": 3764,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 3759,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"round_up_to_mul_of_32": {
"entryPoint": 4329,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"shift_left_dynamic": {
"entryPoint": 5550,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"shift_right_unsigned_dynamic": {
"entryPoint": 5870,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"storage_set_to_zero_t_uint256": {
"entryPoint": 5741,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe": {
"entryPoint": 6486,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"store_literal_in_memory_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6": {
"entryPoint": 6151,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe": {
"entryPoint": 6632,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687": {
"entryPoint": 5271,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"update_byte_slice_dynamic32": {
"entryPoint": 5563,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"update_storage_value_t_uint256_to_t_uint256": {
"entryPoint": 5699,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"validator_revert_t_address": {
"entryPoint": 4006,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_bytes4": {
"entryPoint": 3813,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"validator_revert_t_uint256": {
"entryPoint": 4770,
"id": null,
"parameterSlots": 1,
"returnSlots": 0
},
"zero_value_for_split_t_uint256": {
"entryPoint": 5736,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
}
},
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:21962:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:15",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:15",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:15"
},
"nodeType": "YulFunctionCall",
"src": "67:9:15"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:15"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:15",
"type": ""
}
],
"src": "7:75:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:15"
},
"nodeType": "YulFunctionCall",
"src": "187:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:15"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:15"
},
"nodeType": "YulFunctionCall",
"src": "310:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:15"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "378:105:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "388:89:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "403:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "410:66:15",
"type": "",
"value": "0xffffffff00000000000000000000000000000000000000000000000000000000"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "399:3:15"
},
"nodeType": "YulFunctionCall",
"src": "399:78:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "388:7:15"
}
]
}
]
},
"name": "cleanup_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "360:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "370:7:15",
"type": ""
}
],
"src": "334:149:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "531:78:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "587:16:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "596:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "599:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "589:6:15"
},
"nodeType": "YulFunctionCall",
"src": "589:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "589:12:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "554:5:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "578:5:15"
}
],
"functionName": {
"name": "cleanup_t_bytes4",
"nodeType": "YulIdentifier",
"src": "561:16:15"
},
"nodeType": "YulFunctionCall",
"src": "561:23:15"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "551:2:15"
},
"nodeType": "YulFunctionCall",
"src": "551:34:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "544:6:15"
},
"nodeType": "YulFunctionCall",
"src": "544:42:15"
},
"nodeType": "YulIf",
"src": "541:62:15"
}
]
},
"name": "validator_revert_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "524:5:15",
"type": ""
}
],
"src": "489:120:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "666:86:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "676:29:15",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "698:6:15"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "685:12:15"
},
"nodeType": "YulFunctionCall",
"src": "685:20:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "676:5:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "740:5:15"
}
],
"functionName": {
"name": "validator_revert_t_bytes4",
"nodeType": "YulIdentifier",
"src": "714:25:15"
},
"nodeType": "YulFunctionCall",
"src": "714:32:15"
},
"nodeType": "YulExpressionStatement",
"src": "714:32:15"
}
]
},
"name": "abi_decode_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "644:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "652:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "660:5:15",
"type": ""
}
],
"src": "615:137:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "823:262:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "869:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "871:77:15"
},
"nodeType": "YulFunctionCall",
"src": "871:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "871:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "844:7:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "853:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "840:3:15"
},
"nodeType": "YulFunctionCall",
"src": "840:23:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "865:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "836:3:15"
},
"nodeType": "YulFunctionCall",
"src": "836:32:15"
},
"nodeType": "YulIf",
"src": "833:119:15"
},
{
"nodeType": "YulBlock",
"src": "962:116:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "977:15:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "991:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "981:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "1006:62:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1040:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1051:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1036:3:15"
},
"nodeType": "YulFunctionCall",
"src": "1036:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "1060:7:15"
}
],
"functionName": {
"name": "abi_decode_t_bytes4",
"nodeType": "YulIdentifier",
"src": "1016:19:15"
},
"nodeType": "YulFunctionCall",
"src": "1016:52:15"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1006:6:15"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_bytes4",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "793:9:15",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "804:7:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "816:6:15",
"type": ""
}
],
"src": "758:327:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1133:48:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1143:32:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1168:5:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1161:6:15"
},
"nodeType": "YulFunctionCall",
"src": "1161:13:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1154:6:15"
},
"nodeType": "YulFunctionCall",
"src": "1154:21:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1143:7:15"
}
]
}
]
},
"name": "cleanup_t_bool",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1115:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1125:7:15",
"type": ""
}
],
"src": "1091:90:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1246:50:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "1263:3:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1283:5:15"
}
],
"functionName": {
"name": "cleanup_t_bool",
"nodeType": "YulIdentifier",
"src": "1268:14:15"
},
"nodeType": "YulFunctionCall",
"src": "1268:21:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1256:6:15"
},
"nodeType": "YulFunctionCall",
"src": "1256:34:15"
},
"nodeType": "YulExpressionStatement",
"src": "1256:34:15"
}
]
},
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1234:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "1241:3:15",
"type": ""
}
],
"src": "1187:109:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1394:118:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1404:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1416:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1427:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1412:3:15"
},
"nodeType": "YulFunctionCall",
"src": "1412:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "1404:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "1478:6:15"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "1491:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1502:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1487:3:15"
},
"nodeType": "YulFunctionCall",
"src": "1487:17:15"
}
],
"functionName": {
"name": "abi_encode_t_bool_to_t_bool_fromStack",
"nodeType": "YulIdentifier",
"src": "1440:37:15"
},
"nodeType": "YulFunctionCall",
"src": "1440:65:15"
},
"nodeType": "YulExpressionStatement",
"src": "1440:65:15"
}
]
},
"name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "1366:9:15",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "1378:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "1389:4:15",
"type": ""
}
],
"src": "1302:210:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1563:81:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1573:65:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1588:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1595:42:15",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "1584:3:15"
},
"nodeType": "YulFunctionCall",
"src": "1584:54:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1573:7:15"
}
]
}
]
},
"name": "cleanup_t_uint160",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1545:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1555:7:15",
"type": ""
}
],
"src": "1518:126:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1695:51:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1705:35:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1734:5:15"
}
],
"functionName": {
"name": "cleanup_t_uint160",
"nodeType": "YulIdentifier",
"src": "1716:17:15"
},
"nodeType": "YulFunctionCall",
"src": "1716:24:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "1705:7:15"
}
]
}
]
},
"name": "cleanup_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1677:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "1687:7:15",
"type": ""
}
],
"src": "1650:96:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1795:79:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1852:16:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1861:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1864:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "1854:6:15"
},
"nodeType": "YulFunctionCall",
"src": "1854:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "1854:12:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1818:5:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1843:5:15"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "1825:17:15"
},
"nodeType": "YulFunctionCall",
"src": "1825:24:15"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "1815:2:15"
},
"nodeType": "YulFunctionCall",
"src": "1815:35:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "1808:6:15"
},
"nodeType": "YulFunctionCall",
"src": "1808:43:15"
},
"nodeType": "YulIf",
"src": "1805:63:15"
}
]
},
"name": "validator_revert_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1788:5:15",
"type": ""
}
],
"src": "1752:122:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1932:87:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1942:29:15",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "1964:6:15"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "1951:12:15"
},
"nodeType": "YulFunctionCall",
"src": "1951:20:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "1942:5:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2007:5:15"
}
],
"functionName": {
"name": "validator_revert_t_address",
"nodeType": "YulIdentifier",
"src": "1980:26:15"
},
"nodeType": "YulFunctionCall",
"src": "1980:33:15"
},
"nodeType": "YulExpressionStatement",
"src": "1980:33:15"
}
]
},
"name": "abi_decode_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "1910:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "1918:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "1926:5:15",
"type": ""
}
],
"src": "1880:139:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2091:263:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2137:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "2139:77:15"
},
"nodeType": "YulFunctionCall",
"src": "2139:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "2139:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2112:7:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2121:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2108:3:15"
},
"nodeType": "YulFunctionCall",
"src": "2108:23:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2133:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2104:3:15"
},
"nodeType": "YulFunctionCall",
"src": "2104:32:15"
},
"nodeType": "YulIf",
"src": "2101:119:15"
},
{
"nodeType": "YulBlock",
"src": "2230:117:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2245:15:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "2259:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2249:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2274:63:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2309:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2320:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2305:3:15"
},
"nodeType": "YulFunctionCall",
"src": "2305:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2329:7:15"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "2284:20:15"
},
"nodeType": "YulFunctionCall",
"src": "2284:53:15"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "2274:6:15"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2061:9:15",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2072:7:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2084:6:15",
"type": ""
}
],
"src": "2025:329:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2434:40:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2445:22:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2461:5:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2455:5:15"
},
"nodeType": "YulFunctionCall",
"src": "2455:12:15"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2445:6:15"
}
]
}
]
},
"name": "array_length_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2417:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "2427:6:15",
"type": ""
}
],
"src": "2360:114:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2591:73:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "2608:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2613:6:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2601:6:15"
},
"nodeType": "YulFunctionCall",
"src": "2601:19:15"
},
"nodeType": "YulExpressionStatement",
"src": "2601:19:15"
},
{
"nodeType": "YulAssignment",
"src": "2629:29:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "2648:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2653:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2644:3:15"
},
"nodeType": "YulFunctionCall",
"src": "2644:14:15"
},
"variableNames": [
{
"name": "updated_pos",
"nodeType": "YulIdentifier",
"src": "2629:11:15"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "2563:3:15",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "2568:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nodeType": "YulTypedName",
"src": "2579:11:15",
"type": ""
}
],
"src": "2480:184:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2742:60:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "2752:11:15",
"value": {
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "2760:3:15"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "2752:4:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2773:22:15",
"value": {
"arguments": [
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "2785:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2790:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2781:3:15"
},
"nodeType": "YulFunctionCall",
"src": "2781:14:15"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "2773:4:15"
}
]
}
]
},
"name": "array_dataslot_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "2729:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "2737:4:15",
"type": ""
}
],
"src": "2670:132:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2863:53:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "2880:3:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "2903:5:15"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "2885:17:15"
},
"nodeType": "YulFunctionCall",
"src": "2885:24:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2873:6:15"
},
"nodeType": "YulFunctionCall",
"src": "2873:37:15"
},
"nodeType": "YulExpressionStatement",
"src": "2873:37:15"
}
]
},
"name": "abi_encode_t_address_to_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "2851:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "2858:3:15",
"type": ""
}
],
"src": "2808:108:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3002:99:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3046:6:15"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3054:3:15"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address",
"nodeType": "YulIdentifier",
"src": "3012:33:15"
},
"nodeType": "YulFunctionCall",
"src": "3012:46:15"
},
"nodeType": "YulExpressionStatement",
"src": "3012:46:15"
},
{
"nodeType": "YulAssignment",
"src": "3067:28:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3085:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3090:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3081:3:15"
},
"nodeType": "YulFunctionCall",
"src": "3081:14:15"
},
"variableNames": [
{
"name": "updatedPos",
"nodeType": "YulIdentifier",
"src": "3067:10:15"
}
]
}
]
},
"name": "abi_encodeUpdatedPos_t_address_to_t_address",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2975:6:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "2983:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "updatedPos",
"nodeType": "YulTypedName",
"src": "2991:10:15",
"type": ""
}
],
"src": "2922:179:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3182:38:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3192:22:15",
"value": {
"arguments": [
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "3204:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3209:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3200:3:15"
},
"nodeType": "YulFunctionCall",
"src": "3200:14:15"
},
"variableNames": [
{
"name": "next",
"nodeType": "YulIdentifier",
"src": "3192:4:15"
}
]
}
]
},
"name": "array_nextElement_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "3169:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "next",
"nodeType": "YulTypedName",
"src": "3177:4:15",
"type": ""
}
],
"src": "3107:113:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3380:608:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3390:68:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3452:5:15"
}
],
"functionName": {
"name": "array_length_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulIdentifier",
"src": "3404:47:15"
},
"nodeType": "YulFunctionCall",
"src": "3404:54:15"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3394:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "3467:93:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3548:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3553:6:15"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "3474:73:15"
},
"nodeType": "YulFunctionCall",
"src": "3474:86:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3467:3:15"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "3569:71:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3634:5:15"
}
],
"functionName": {
"name": "array_dataslot_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulIdentifier",
"src": "3584:49:15"
},
"nodeType": "YulFunctionCall",
"src": "3584:56:15"
},
"variables": [
{
"name": "baseRef",
"nodeType": "YulTypedName",
"src": "3573:7:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "3649:21:15",
"value": {
"name": "baseRef",
"nodeType": "YulIdentifier",
"src": "3663:7:15"
},
"variables": [
{
"name": "srcPtr",
"nodeType": "YulTypedName",
"src": "3653:6:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3739:224:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3753:34:15",
"value": {
"arguments": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "3780:6:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3774:5:15"
},
"nodeType": "YulFunctionCall",
"src": "3774:13:15"
},
"variables": [
{
"name": "elementValue0",
"nodeType": "YulTypedName",
"src": "3757:13:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "3800:70:15",
"value": {
"arguments": [
{
"name": "elementValue0",
"nodeType": "YulIdentifier",
"src": "3851:13:15"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3866:3:15"
}
],
"functionName": {
"name": "abi_encodeUpdatedPos_t_address_to_t_address",
"nodeType": "YulIdentifier",
"src": "3807:43:15"
},
"nodeType": "YulFunctionCall",
"src": "3807:63:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3800:3:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3883:70:15",
"value": {
"arguments": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "3946:6:15"
}
],
"functionName": {
"name": "array_nextElement_t_array$_t_address_$dyn_memory_ptr",
"nodeType": "YulIdentifier",
"src": "3893:52:15"
},
"nodeType": "YulFunctionCall",
"src": "3893:60:15"
},
"variableNames": [
{
"name": "srcPtr",
"nodeType": "YulIdentifier",
"src": "3883:6:15"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "3701:1:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3704:6:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "3698:2:15"
},
"nodeType": "YulFunctionCall",
"src": "3698:13:15"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "3712:18:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3714:14:15",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "3723:1:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3726:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3719:3:15"
},
"nodeType": "YulFunctionCall",
"src": "3719:9:15"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "3714:1:15"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "3683:14:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3685:10:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "3694:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "3689:1:15",
"type": ""
}
]
}
]
},
"src": "3679:284:15"
},
{
"nodeType": "YulAssignment",
"src": "3972:10:15",
"value": {
"name": "pos",
"nodeType": "YulIdentifier",
"src": "3979:3:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "3972:3:15"
}
]
}
]
},
"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": "3359:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "3366:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "3375:3:15",
"type": ""
}
],
"src": "3256:732:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4142:225:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4152:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4164:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4175:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4160:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4160:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4152:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4199:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4210:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4195:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4195:17:15"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4218:4:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "4224:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4214:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4214:20:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4188:6:15"
},
"nodeType": "YulFunctionCall",
"src": "4188:47:15"
},
"nodeType": "YulExpressionStatement",
"src": "4188:47:15"
},
{
"nodeType": "YulAssignment",
"src": "4244:116:15",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "4346:6:15"
},
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4355:4:15"
}
],
"functionName": {
"name": "abi_encode_t_array$_t_address_$dyn_memory_ptr_to_t_array$_t_address_$dyn_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "4252:93:15"
},
"nodeType": "YulFunctionCall",
"src": "4252:108:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "4244:4:15"
}
]
}
]
},
"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": "4114:9:15",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "4126:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "4137:4:15",
"type": ""
}
],
"src": "3994:373:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4462:28:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4479:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4482:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4472:6:15"
},
"nodeType": "YulFunctionCall",
"src": "4472:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "4472:12:15"
}
]
},
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nodeType": "YulFunctionDefinition",
"src": "4373:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4585:28:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4602:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4605:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4595:6:15"
},
"nodeType": "YulFunctionCall",
"src": "4595:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "4595:12:15"
}
]
},
"name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
"nodeType": "YulFunctionDefinition",
"src": "4496:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4667:54:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4677:38:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4695:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4702:2:15",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4691:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4691:14:15"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4711:2:15",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "4707:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4707:7:15"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4687:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4687:28:15"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "4677:6:15"
}
]
}
]
},
"name": "round_up_to_mul_of_32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4650:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "4660:6:15",
"type": ""
}
],
"src": "4619:102:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4755:152:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4772:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4775:77:15",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4765:6:15"
},
"nodeType": "YulFunctionCall",
"src": "4765:88:15"
},
"nodeType": "YulExpressionStatement",
"src": "4765:88:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4869:1:15",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4872:4:15",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4862:6:15"
},
"nodeType": "YulFunctionCall",
"src": "4862:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "4862:15:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4893:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4896:4:15",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "4886:6:15"
},
"nodeType": "YulFunctionCall",
"src": "4886:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "4886:15:15"
}
]
},
"name": "panic_error_0x41",
"nodeType": "YulFunctionDefinition",
"src": "4727:180:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4956:238:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4966:58:15",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "4988:6:15"
},
{
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5018:4:15"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "4996:21:15"
},
"nodeType": "YulFunctionCall",
"src": "4996:27:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4984:3:15"
},
"nodeType": "YulFunctionCall",
"src": "4984:40:15"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "4970:10:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "5135:22:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "5137:16:15"
},
"nodeType": "YulFunctionCall",
"src": "5137:18:15"
},
"nodeType": "YulExpressionStatement",
"src": "5137:18:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5078:10:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5090:18:15",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5075:2:15"
},
"nodeType": "YulFunctionCall",
"src": "5075:34:15"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5114:10:15"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5126:6:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "5111:2:15"
},
"nodeType": "YulFunctionCall",
"src": "5111:22:15"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "5072:2:15"
},
"nodeType": "YulFunctionCall",
"src": "5072:62:15"
},
"nodeType": "YulIf",
"src": "5069:88:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5173:2:15",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "5177:10:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5166:6:15"
},
"nodeType": "YulFunctionCall",
"src": "5166:22:15"
},
"nodeType": "YulExpressionStatement",
"src": "5166:22:15"
}
]
},
"name": "finalize_allocation",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "4942:6:15",
"type": ""
},
{
"name": "size",
"nodeType": "YulTypedName",
"src": "4950:4:15",
"type": ""
}
],
"src": "4913:281:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5241:88:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5251:30:15",
"value": {
"arguments": [],
"functionName": {
"name": "allocate_unbounded",
"nodeType": "YulIdentifier",
"src": "5261:18:15"
},
"nodeType": "YulFunctionCall",
"src": "5261:20:15"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5251:6:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "5310:6:15"
},
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5318:4:15"
}
],
"functionName": {
"name": "finalize_allocation",
"nodeType": "YulIdentifier",
"src": "5290:19:15"
},
"nodeType": "YulFunctionCall",
"src": "5290:33:15"
},
"nodeType": "YulExpressionStatement",
"src": "5290:33:15"
}
]
},
"name": "allocate_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "5225:4:15",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "5234:6:15",
"type": ""
}
],
"src": "5200:129:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5402:241:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "5507:22:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "5509:16:15"
},
"nodeType": "YulFunctionCall",
"src": "5509:18:15"
},
"nodeType": "YulExpressionStatement",
"src": "5509:18:15"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5479:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5487:18:15",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "5476:2:15"
},
"nodeType": "YulFunctionCall",
"src": "5476:30:15"
},
"nodeType": "YulIf",
"src": "5473:56:15"
},
{
"nodeType": "YulAssignment",
"src": "5539:37:15",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5569:6:15"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "5547:21:15"
},
"nodeType": "YulFunctionCall",
"src": "5547:29:15"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5539:4:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "5613:23:15",
"value": {
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5625:4:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5631:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5621:3:15"
},
"nodeType": "YulFunctionCall",
"src": "5621:15:15"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "5613:4:15"
}
]
}
]
},
"name": "array_allocation_size_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "5386:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "5397:4:15",
"type": ""
}
],
"src": "5335:308:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5713:82:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "5736:3:15"
},
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "5741:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5746:6:15"
}
],
"functionName": {
"name": "calldatacopy",
"nodeType": "YulIdentifier",
"src": "5723:12:15"
},
"nodeType": "YulFunctionCall",
"src": "5723:30:15"
},
"nodeType": "YulExpressionStatement",
"src": "5723:30:15"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "5773:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5778:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5769:3:15"
},
"nodeType": "YulFunctionCall",
"src": "5769:16:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5787:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5762:6:15"
},
"nodeType": "YulFunctionCall",
"src": "5762:27:15"
},
"nodeType": "YulExpressionStatement",
"src": "5762:27:15"
}
]
},
"name": "copy_calldata_to_memory_with_cleanup",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "5695:3:15",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "5700:3:15",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "5705:6:15",
"type": ""
}
],
"src": "5649:146:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5885:341:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5895:75:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5962:6:15"
}
],
"functionName": {
"name": "array_allocation_size_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "5920:41:15"
},
"nodeType": "YulFunctionCall",
"src": "5920:49:15"
}
],
"functionName": {
"name": "allocate_memory",
"nodeType": "YulIdentifier",
"src": "5904:15:15"
},
"nodeType": "YulFunctionCall",
"src": "5904:66:15"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "5895:5:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "5986:5:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "5993:6:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "5979:6:15"
},
"nodeType": "YulFunctionCall",
"src": "5979:21:15"
},
"nodeType": "YulExpressionStatement",
"src": "5979:21:15"
},
{
"nodeType": "YulVariableDeclaration",
"src": "6009:27:15",
"value": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "6024:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6031:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6020:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6020:16:15"
},
"variables": [
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "6013:3:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6074:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
"nodeType": "YulIdentifier",
"src": "6076:77:15"
},
"nodeType": "YulFunctionCall",
"src": "6076:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "6076:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "6055:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6060:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6051:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6051:16:15"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6069:3:15"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6048:2:15"
},
"nodeType": "YulFunctionCall",
"src": "6048:25:15"
},
"nodeType": "YulIf",
"src": "6045:112:15"
},
{
"expression": {
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "6203:3:15"
},
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "6208:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6213:6:15"
}
],
"functionName": {
"name": "copy_calldata_to_memory_with_cleanup",
"nodeType": "YulIdentifier",
"src": "6166:36:15"
},
"nodeType": "YulFunctionCall",
"src": "6166:54:15"
},
"nodeType": "YulExpressionStatement",
"src": "6166:54:15"
}
]
},
"name": "abi_decode_available_length_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "5858:3:15",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "5863:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "5871:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "5879:5:15",
"type": ""
}
],
"src": "5801:425:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6308:278:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6357:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nodeType": "YulIdentifier",
"src": "6359:77:15"
},
"nodeType": "YulFunctionCall",
"src": "6359:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "6359:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6336:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6344:4:15",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6332:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6332:17:15"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6351:3:15"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "6328:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6328:27:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "6321:6:15"
},
"nodeType": "YulFunctionCall",
"src": "6321:35:15"
},
"nodeType": "YulIf",
"src": "6318:122:15"
},
{
"nodeType": "YulVariableDeclaration",
"src": "6449:34:15",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6476:6:15"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "6463:12:15"
},
"nodeType": "YulFunctionCall",
"src": "6463:20:15"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "6453:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "6492:88:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6553:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6561:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6549:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6549:17:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "6568:6:15"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "6576:3:15"
}
],
"functionName": {
"name": "abi_decode_available_length_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "6501:47:15"
},
"nodeType": "YulFunctionCall",
"src": "6501:79:15"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "6492:5:15"
}
]
}
]
},
"name": "abi_decode_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "6286:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "6294:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "6302:5:15",
"type": ""
}
],
"src": "6246:340:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6668:433:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6714:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "6716:77:15"
},
"nodeType": "YulFunctionCall",
"src": "6716:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "6716:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "6689:7:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6698:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "6685:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6685:23:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6710:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "6681:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6681:32:15"
},
"nodeType": "YulIf",
"src": "6678:119:15"
},
{
"nodeType": "YulBlock",
"src": "6807:287:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6822:45:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "6853:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6864:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6849:3:15"
},
"nodeType": "YulFunctionCall",
"src": "6849:17:15"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "6836:12:15"
},
"nodeType": "YulFunctionCall",
"src": "6836:31:15"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "6826:6:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6914:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulIdentifier",
"src": "6916:77:15"
},
"nodeType": "YulFunctionCall",
"src": "6916:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "6916:79:15"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "6886:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6894:18:15",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6883:2:15"
},
"nodeType": "YulFunctionCall",
"src": "6883:30:15"
},
"nodeType": "YulIf",
"src": "6880:117:15"
},
{
"nodeType": "YulAssignment",
"src": "7011:73:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7056:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7067:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7052:3:15"
},
"nodeType": "YulFunctionCall",
"src": "7052:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "7076:7:15"
}
],
"functionName": {
"name": "abi_decode_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "7021:30:15"
},
"nodeType": "YulFunctionCall",
"src": "7021:63:15"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "7011:6:15"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "6638:9:15",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "6649:7:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "6661:6:15",
"type": ""
}
],
"src": "6592:509:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7172:53:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "7189:3:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "7212:5:15"
}
],
"functionName": {
"name": "cleanup_t_address",
"nodeType": "YulIdentifier",
"src": "7194:17:15"
},
"nodeType": "YulFunctionCall",
"src": "7194:24:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "7182:6:15"
},
"nodeType": "YulFunctionCall",
"src": "7182:37:15"
},
"nodeType": "YulExpressionStatement",
"src": "7182:37:15"
}
]
},
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "7160:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "7167:3:15",
"type": ""
}
],
"src": "7107:118:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7329:124:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "7339:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7351:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7362:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7347:3:15"
},
"nodeType": "YulFunctionCall",
"src": "7347:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "7339:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "7419:6:15"
},
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7432:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7443:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "7428:3:15"
},
"nodeType": "YulFunctionCall",
"src": "7428:17:15"
}
],
"functionName": {
"name": "abi_encode_t_address_to_t_address_fromStack",
"nodeType": "YulIdentifier",
"src": "7375:43:15"
},
"nodeType": "YulFunctionCall",
"src": "7375:71:15"
},
"nodeType": "YulExpressionStatement",
"src": "7375:71:15"
}
]
},
"name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "7301:9:15",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "7313:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "7324:4:15",
"type": ""
}
],
"src": "7231:222:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7504:32:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "7514:16:15",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "7525:5:15"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "7514:7:15"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "7486:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "7496:7:15",
"type": ""
}
],
"src": "7459:77:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7585:79:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "7642:16:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7651:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7654:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "7644:6:15"
},
"nodeType": "YulFunctionCall",
"src": "7644:12:15"
},
"nodeType": "YulExpressionStatement",
"src": "7644:12:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "7608:5:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "7633:5:15"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "7615:17:15"
},
"nodeType": "YulFunctionCall",
"src": "7615:24:15"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "7605:2:15"
},
"nodeType": "YulFunctionCall",
"src": "7605:35:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "7598:6:15"
},
"nodeType": "YulFunctionCall",
"src": "7598:43:15"
},
"nodeType": "YulIf",
"src": "7595:63:15"
}
]
},
"name": "validator_revert_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "7578:5:15",
"type": ""
}
],
"src": "7542:122:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7722:87:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "7732:29:15",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "7754:6:15"
}
],
"functionName": {
"name": "calldataload",
"nodeType": "YulIdentifier",
"src": "7741:12:15"
},
"nodeType": "YulFunctionCall",
"src": "7741:20:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "7732:5:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "7797:5:15"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "7770:26:15"
},
"nodeType": "YulFunctionCall",
"src": "7770:33:15"
},
"nodeType": "YulExpressionStatement",
"src": "7770:33:15"
}
]
},
"name": "abi_decode_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "7700:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "7708:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "7716:5:15",
"type": ""
}
],
"src": "7670:139:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7898:391:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "7944:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "7946:77:15"
},
"nodeType": "YulFunctionCall",
"src": "7946:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "7946:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "7919:7:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "7928:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "7915:3:15"
},
"nodeType": "YulFunctionCall",
"src": "7915:23:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7940:2:15",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "7911:3:15"
},
"nodeType": "YulFunctionCall",
"src": "7911:32:15"
},
"nodeType": "YulIf",
"src": "7908:119:15"
},
{
"nodeType": "YulBlock",
"src": "8037:117:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "8052:15:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "8066:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "8056:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "8081:63:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8116:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "8127:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8112:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8112:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "8136:7:15"
}
],
"functionName": {
"name": "abi_decode_t_address",
"nodeType": "YulIdentifier",
"src": "8091:20:15"
},
"nodeType": "YulFunctionCall",
"src": "8091:53:15"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "8081:6:15"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "8164:118:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "8179:16:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "8193:2:15",
"type": "",
"value": "32"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "8183:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "8209:63:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "8244:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "8255:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8240:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8240:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "8264:7:15"
}
],
"functionName": {
"name": "abi_decode_t_uint256",
"nodeType": "YulIdentifier",
"src": "8219:20:15"
},
"nodeType": "YulFunctionCall",
"src": "8219:53:15"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "8209:6:15"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_addresst_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "7860:9:15",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "7871:7:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "7883:6:15",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "7891:6:15",
"type": ""
}
],
"src": "7815:474:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8354:40:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "8365:22:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "8381:5:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "8375:5:15"
},
"nodeType": "YulFunctionCall",
"src": "8375:12:15"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "8365:6:15"
}
]
}
]
},
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "8337:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "8347:6:15",
"type": ""
}
],
"src": "8295:99:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8496:73:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8513:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "8518:6:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8506:6:15"
},
"nodeType": "YulFunctionCall",
"src": "8506:19:15"
},
"nodeType": "YulExpressionStatement",
"src": "8506:19:15"
},
{
"nodeType": "YulAssignment",
"src": "8534:29:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8553:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8558:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8549:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8549:14:15"
},
"variableNames": [
{
"name": "updated_pos",
"nodeType": "YulIdentifier",
"src": "8534:11:15"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "8468:3:15",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "8473:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nodeType": "YulTypedName",
"src": "8484:11:15",
"type": ""
}
],
"src": "8400:169:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8637:184:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "8647:10:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "8656:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "8651:1:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "8716:63:15",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "8741:3:15"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8746:1:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8737:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8737:11:15"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "8760:3:15"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8765:1:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8756:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8756:11:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "8750:5:15"
},
"nodeType": "YulFunctionCall",
"src": "8750:18:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8730:6:15"
},
"nodeType": "YulFunctionCall",
"src": "8730:39:15"
},
"nodeType": "YulExpressionStatement",
"src": "8730:39:15"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8677:1:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "8680:6:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "8674:2:15"
},
"nodeType": "YulFunctionCall",
"src": "8674:13:15"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "8688:19:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "8690:15:15",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8699:1:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8702:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8695:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8695:10:15"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "8690:1:15"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "8670:3:15",
"statements": []
},
"src": "8666:113:15"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "8799:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "8804:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "8795:3:15"
},
"nodeType": "YulFunctionCall",
"src": "8795:16:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "8813:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "8788:6:15"
},
"nodeType": "YulFunctionCall",
"src": "8788:27:15"
},
"nodeType": "YulExpressionStatement",
"src": "8788:27:15"
}
]
},
"name": "copy_memory_to_memory_with_cleanup",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "8619:3:15",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "8624:3:15",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "8629:6:15",
"type": ""
}
],
"src": "8575:246:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "8919:285:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "8929:53:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "8976:5:15"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "8943:32:15"
},
"nodeType": "YulFunctionCall",
"src": "8943:39:15"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "8933:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "8991:78:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "9057:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "9062:6:15"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "8998:58:15"
},
"nodeType": "YulFunctionCall",
"src": "8998:71:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "8991:3:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9117:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9124:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9113:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9113:16:15"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "9131:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "9136:6:15"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nodeType": "YulIdentifier",
"src": "9078:34:15"
},
"nodeType": "YulFunctionCall",
"src": "9078:65:15"
},
"nodeType": "YulExpressionStatement",
"src": "9078:65:15"
},
{
"nodeType": "YulAssignment",
"src": "9152:46:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "9163:3:15"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "9190:6:15"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "9168:21:15"
},
"nodeType": "YulFunctionCall",
"src": "9168:29:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9159:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9159:39:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "9152:3:15"
}
]
}
]
},
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "8900:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "8907:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "8915:3:15",
"type": ""
}
],
"src": "8827:377:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9328:195:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9338:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9350:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9361:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9346:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9346:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9338:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9385:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9396:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9381:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9381:17:15"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9404:4:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9410:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "9400:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9400:20:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "9374:6:15"
},
"nodeType": "YulFunctionCall",
"src": "9374:47:15"
},
"nodeType": "YulExpressionStatement",
"src": "9374:47:15"
},
{
"nodeType": "YulAssignment",
"src": "9430:86:15",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9502:6:15"
},
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9511:4:15"
}
],
"functionName": {
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "9438:63:15"
},
"nodeType": "YulFunctionCall",
"src": "9438:78:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "9430:4:15"
}
]
}
]
},
"name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9300:9:15",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9312:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "9323:4:15",
"type": ""
}
],
"src": "9210:313:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9592:80:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "9602:22:15",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "9617:6:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "9611:5:15"
},
"nodeType": "YulFunctionCall",
"src": "9611:13:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9602:5:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "9660:5:15"
}
],
"functionName": {
"name": "validator_revert_t_uint256",
"nodeType": "YulIdentifier",
"src": "9633:26:15"
},
"nodeType": "YulFunctionCall",
"src": "9633:33:15"
},
"nodeType": "YulExpressionStatement",
"src": "9633:33:15"
}
]
},
"name": "abi_decode_t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "9570:6:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "9578:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "9586:5:15",
"type": ""
}
],
"src": "9529:143:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "9755:274:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "9801:83:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "9803:77:15"
},
"nodeType": "YulFunctionCall",
"src": "9803:79:15"
},
"nodeType": "YulExpressionStatement",
"src": "9803:79:15"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "9776:7:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9785:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "9772:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9772:23:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "9797:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "9768:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9768:32:15"
},
"nodeType": "YulIf",
"src": "9765:119:15"
},
{
"nodeType": "YulBlock",
"src": "9894:128:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "9909:15:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "9923:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "9913:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "9938:74:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "9984:9:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "9995:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "9980:3:15"
},
"nodeType": "YulFunctionCall",
"src": "9980:22:15"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "10004:7:15"
}
],
"functionName": {
"name": "abi_decode_t_uint256_fromMemory",
"nodeType": "YulIdentifier",
"src": "9948:31:15"
},
"nodeType": "YulFunctionCall",
"src": "9948:64:15"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "9938:6:15"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_uint256_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "9725:9:15",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "9736:7:15",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "9748:6:15",
"type": ""
}
],
"src": "9678:351:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10063:152:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10080:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10083:77:15",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10073:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10073:88:15"
},
"nodeType": "YulExpressionStatement",
"src": "10073:88:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10177:1:15",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10180:4:15",
"type": "",
"value": "0x32"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10170:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10170:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "10170:15:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10201:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10204:4:15",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "10194:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10194:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "10194:15:15"
}
]
},
"name": "panic_error_0x32",
"nodeType": "YulFunctionDefinition",
"src": "10035:180:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10249:152:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10266:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10269:77:15",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10259:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10259:88:15"
},
"nodeType": "YulExpressionStatement",
"src": "10259:88:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10363:1:15",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10366:4:15",
"type": "",
"value": "0x11"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10356:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10356:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "10356:15:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10387:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10390:4:15",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "10380:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10380:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "10380:15:15"
}
]
},
"name": "panic_error_0x11",
"nodeType": "YulFunctionDefinition",
"src": "10221:180:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10450:190:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "10460:33:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "10487:5:15"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "10469:17:15"
},
"nodeType": "YulFunctionCall",
"src": "10469:24:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "10460:5:15"
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "10583:22:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x11",
"nodeType": "YulIdentifier",
"src": "10585:16:15"
},
"nodeType": "YulFunctionCall",
"src": "10585:18:15"
},
"nodeType": "YulExpressionStatement",
"src": "10585:18:15"
}
]
},
"condition": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "10508:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10515:66:15",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "10505:2:15"
},
"nodeType": "YulFunctionCall",
"src": "10505:77:15"
},
"nodeType": "YulIf",
"src": "10502:103:15"
},
{
"nodeType": "YulAssignment",
"src": "10614:20:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "10625:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10632:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10621:3:15"
},
"nodeType": "YulFunctionCall",
"src": "10621:13:15"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "10614:3:15"
}
]
}
]
},
"name": "increment_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "10436:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "10446:3:15",
"type": ""
}
],
"src": "10407:233:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "10752:117:15",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "10774:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10782:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10770:3:15"
},
"nodeType": "YulFunctionCall",
"src": "10770:14:15"
},
{
"hexValue": "41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f722061",
"kind": "string",
"nodeType": "YulLiteral",
"src": "10786:34:15",
"type": "",
"value": "AdminControl: Must be owner or a"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10763:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10763:58:15"
},
"nodeType": "YulExpressionStatement",
"src": "10763:58:15"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "10842:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "10850:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "10838:3:15"
},
"nodeType": "YulFunctionCall",
"src": "10838:15:15"
},
{
"hexValue": "646d696e",
"kind": "string",
"nodeType": "YulLiteral",
"src": "10855:6:15",
"type": "",
"value": "dmin"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "10831:6:15"
},
"nodeType": "YulFunctionCall",
"src": "10831:31:15"
},
"nodeType": "YulExpressionStatement",
"src": "10831:31:15"
}
]
},
"name": "store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "10744:6:15",
"type": ""
}
],
"src": "10646:223:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11021:220:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11031:74:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11097:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11102:2:15",
"type": "",
"value": "36"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "11038:58:15"
},
"nodeType": "YulFunctionCall",
"src": "11038:67:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11031:3:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11203:3:15"
}
],
"functionName": {
"name": "store_literal_in_memory_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687",
"nodeType": "YulIdentifier",
"src": "11114:88:15"
},
"nodeType": "YulFunctionCall",
"src": "11114:93:15"
},
"nodeType": "YulExpressionStatement",
"src": "11114:93:15"
},
{
"nodeType": "YulAssignment",
"src": "11216:19:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "11227:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11232:2:15",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11223:3:15"
},
"nodeType": "YulFunctionCall",
"src": "11223:12:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "11216:3:15"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "11009:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "11017:3:15",
"type": ""
}
],
"src": "10875:366:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11418:248:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11428:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11440:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11451:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11436:3:15"
},
"nodeType": "YulFunctionCall",
"src": "11436:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11428:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11475:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11486:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "11471:3:15"
},
"nodeType": "YulFunctionCall",
"src": "11471:17:15"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11494:4:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "11500:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "11490:3:15"
},
"nodeType": "YulFunctionCall",
"src": "11490:20:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11464:6:15"
},
"nodeType": "YulFunctionCall",
"src": "11464:47:15"
},
"nodeType": "YulExpressionStatement",
"src": "11464:47:15"
},
{
"nodeType": "YulAssignment",
"src": "11520:139:15",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11654:4:15"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "11528:124:15"
},
"nodeType": "YulFunctionCall",
"src": "11528:131:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "11520:4:15"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_ca6fc84f9a44d1110756284e5c56ff72cff80e2de6c9cfbe8379a88afa111687__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "11398:9:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "11413:4:15",
"type": ""
}
],
"src": "11247:419:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11700:152:15",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11717:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11720:77:15",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11710:6:15"
},
"nodeType": "YulFunctionCall",
"src": "11710:88:15"
},
"nodeType": "YulExpressionStatement",
"src": "11710:88:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11814:1:15",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11817:4:15",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "11807:6:15"
},
"nodeType": "YulFunctionCall",
"src": "11807:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "11807:15:15"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11838:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11841:4:15",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "11831:6:15"
},
"nodeType": "YulFunctionCall",
"src": "11831:15:15"
},
"nodeType": "YulExpressionStatement",
"src": "11831:15:15"
}
]
},
"name": "panic_error_0x22",
"nodeType": "YulFunctionDefinition",
"src": "11672:180:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "11909:269:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "11919:22:15",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "11933:4:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11939:1:15",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "11929:3:15"
},
"nodeType": "YulFunctionCall",
"src": "11929:12:15"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "11919:6:15"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "11950:38:15",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "11980:4:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "11986:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "11976:3:15"
},
"nodeType": "YulFunctionCall",
"src": "11976:12:15"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "11954:18:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "12027:51:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12041:27:15",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "12055:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12063:4:15",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "12051:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12051:17:15"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "12041:6:15"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "12007:18:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "12000:6:15"
},
"nodeType": "YulFunctionCall",
"src": "12000:26:15"
},
"nodeType": "YulIf",
"src": "11997:81:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12130:42:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x22",
"nodeType": "YulIdentifier",
"src": "12144:16:15"
},
"nodeType": "YulFunctionCall",
"src": "12144:18:15"
},
"nodeType": "YulExpressionStatement",
"src": "12144:18:15"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "12094:18:15"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "12117:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12125:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "12114:2:15"
},
"nodeType": "YulFunctionCall",
"src": "12114:14:15"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "12091:2:15"
},
"nodeType": "YulFunctionCall",
"src": "12091:38:15"
},
"nodeType": "YulIf",
"src": "12088:84:15"
}
]
},
"name": "extract_byte_array_length",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "11893:4:15",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "11902:6:15",
"type": ""
}
],
"src": "11858:320:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12238:87:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12248:11:15",
"value": {
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "12256:3:15"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "12248:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12276:1:15",
"type": "",
"value": "0"
},
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "12279:3:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "12269:6:15"
},
"nodeType": "YulFunctionCall",
"src": "12269:14:15"
},
"nodeType": "YulExpressionStatement",
"src": "12269:14:15"
},
{
"nodeType": "YulAssignment",
"src": "12292:26:15",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12310:1:15",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12313:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "keccak256",
"nodeType": "YulIdentifier",
"src": "12300:9:15"
},
"nodeType": "YulFunctionCall",
"src": "12300:18:15"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "12292:4:15"
}
]
}
]
},
"name": "array_dataslot_t_string_storage",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "12225:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "12233:4:15",
"type": ""
}
],
"src": "12184:141:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12375:49:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12385:33:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12403:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12410:2:15",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "12399:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12399:14:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12415:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "12395:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12395:23:15"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "12385:6:15"
}
]
}
]
},
"name": "divide_by_32_ceil",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12358:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "12368:6:15",
"type": ""
}
],
"src": "12331:93:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12483:54:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12493:37:15",
"value": {
"arguments": [
{
"name": "bits",
"nodeType": "YulIdentifier",
"src": "12518:4:15"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12524:5:15"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "12514:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12514:16:15"
},
"variableNames": [
{
"name": "newValue",
"nodeType": "YulIdentifier",
"src": "12493:8:15"
}
]
}
]
},
"name": "shift_left_dynamic",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "bits",
"nodeType": "YulTypedName",
"src": "12458:4:15",
"type": ""
},
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12464:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "newValue",
"nodeType": "YulTypedName",
"src": "12474:8:15",
"type": ""
}
],
"src": "12430:107:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12619:317:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "12629:35:15",
"value": {
"arguments": [
{
"name": "shiftBytes",
"nodeType": "YulIdentifier",
"src": "12650:10:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12662:1:15",
"type": "",
"value": "8"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "12646:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12646:18:15"
},
"variables": [
{
"name": "shiftBits",
"nodeType": "YulTypedName",
"src": "12633:9:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "12673:109:15",
"value": {
"arguments": [
{
"name": "shiftBits",
"nodeType": "YulIdentifier",
"src": "12704:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "12715:66:15",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "shift_left_dynamic",
"nodeType": "YulIdentifier",
"src": "12685:18:15"
},
"nodeType": "YulFunctionCall",
"src": "12685:97:15"
},
"variables": [
{
"name": "mask",
"nodeType": "YulTypedName",
"src": "12677:4:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "12791:51:15",
"value": {
"arguments": [
{
"name": "shiftBits",
"nodeType": "YulIdentifier",
"src": "12822:9:15"
},
{
"name": "toInsert",
"nodeType": "YulIdentifier",
"src": "12833:8:15"
}
],
"functionName": {
"name": "shift_left_dynamic",
"nodeType": "YulIdentifier",
"src": "12803:18:15"
},
"nodeType": "YulFunctionCall",
"src": "12803:39:15"
},
"variableNames": [
{
"name": "toInsert",
"nodeType": "YulIdentifier",
"src": "12791:8:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "12851:30:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12864:5:15"
},
{
"arguments": [
{
"name": "mask",
"nodeType": "YulIdentifier",
"src": "12875:4:15"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "12871:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12871:9:15"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "12860:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12860:21:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12851:5:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "12890:40:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "12903:5:15"
},
{
"arguments": [
{
"name": "toInsert",
"nodeType": "YulIdentifier",
"src": "12914:8:15"
},
{
"name": "mask",
"nodeType": "YulIdentifier",
"src": "12924:4:15"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "12910:3:15"
},
"nodeType": "YulFunctionCall",
"src": "12910:19:15"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "12900:2:15"
},
"nodeType": "YulFunctionCall",
"src": "12900:30:15"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "12890:6:15"
}
]
}
]
},
"name": "update_byte_slice_dynamic32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12580:5:15",
"type": ""
},
{
"name": "shiftBytes",
"nodeType": "YulTypedName",
"src": "12587:10:15",
"type": ""
},
{
"name": "toInsert",
"nodeType": "YulTypedName",
"src": "12599:8:15",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "12612:6:15",
"type": ""
}
],
"src": "12543:393:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "12974:28:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "12984:12:15",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "12991:5:15"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "12984:3:15"
}
]
}
]
},
"name": "identity",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "12960:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "12970:3:15",
"type": ""
}
],
"src": "12942:60:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13068:82:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "13078:66:15",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "13136:5:15"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "13118:17:15"
},
"nodeType": "YulFunctionCall",
"src": "13118:24:15"
}
],
"functionName": {
"name": "identity",
"nodeType": "YulIdentifier",
"src": "13109:8:15"
},
"nodeType": "YulFunctionCall",
"src": "13109:34:15"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "13091:17:15"
},
"nodeType": "YulFunctionCall",
"src": "13091:53:15"
},
"variableNames": [
{
"name": "converted",
"nodeType": "YulIdentifier",
"src": "13078:9:15"
}
]
}
]
},
"name": "convert_t_uint256_to_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "13048:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nodeType": "YulTypedName",
"src": "13058:9:15",
"type": ""
}
],
"src": "13008:142:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13203:28:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "13213:12:15",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "13220:5:15"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "13213:3:15"
}
]
}
]
},
"name": "prepare_store_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "13189:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "13199:3:15",
"type": ""
}
],
"src": "13156:75:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13313:193:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "13323:63:15",
"value": {
"arguments": [
{
"name": "value_0",
"nodeType": "YulIdentifier",
"src": "13378:7:15"
}
],
"functionName": {
"name": "convert_t_uint256_to_t_uint256",
"nodeType": "YulIdentifier",
"src": "13347:30:15"
},
"nodeType": "YulFunctionCall",
"src": "13347:39:15"
},
"variables": [
{
"name": "convertedValue_0",
"nodeType": "YulTypedName",
"src": "13327:16:15",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "13402:4:15"
},
{
"arguments": [
{
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "13442:4:15"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "13436:5:15"
},
"nodeType": "YulFunctionCall",
"src": "13436:11:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "13449:6:15"
},
{
"arguments": [
{
"name": "convertedValue_0",
"nodeType": "YulIdentifier",
"src": "13481:16:15"
}
],
"functionName": {
"name": "prepare_store_t_uint256",
"nodeType": "YulIdentifier",
"src": "13457:23:15"
},
"nodeType": "YulFunctionCall",
"src": "13457:41:15"
}
],
"functionName": {
"name": "update_byte_slice_dynamic32",
"nodeType": "YulIdentifier",
"src": "13408:27:15"
},
"nodeType": "YulFunctionCall",
"src": "13408:91:15"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "13395:6:15"
},
"nodeType": "YulFunctionCall",
"src": "13395:105:15"
},
"nodeType": "YulExpressionStatement",
"src": "13395:105:15"
}
]
},
"name": "update_storage_value_t_uint256_to_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nodeType": "YulTypedName",
"src": "13290:4:15",
"type": ""
},
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "13296:6:15",
"type": ""
},
{
"name": "value_0",
"nodeType": "YulTypedName",
"src": "13304:7:15",
"type": ""
}
],
"src": "13237:269:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13561:24:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "13571:8:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "13578:1:15",
"type": "",
"value": "0"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "13571:3:15"
}
]
}
]
},
"name": "zero_value_for_split_t_uint256",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "13557:3:15",
"type": ""
}
],
"src": "13512:73:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13644:136:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "13654:46:15",
"value": {
"arguments": [],
"functionName": {
"name": "zero_value_for_split_t_uint256",
"nodeType": "YulIdentifier",
"src": "13668:30:15"
},
"nodeType": "YulFunctionCall",
"src": "13668:32:15"
},
"variables": [
{
"name": "zero_0",
"nodeType": "YulTypedName",
"src": "13658:6:15",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "13753:4:15"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "13759:6:15"
},
{
"name": "zero_0",
"nodeType": "YulIdentifier",
"src": "13767:6:15"
}
],
"functionName": {
"name": "update_storage_value_t_uint256_to_t_uint256",
"nodeType": "YulIdentifier",
"src": "13709:43:15"
},
"nodeType": "YulFunctionCall",
"src": "13709:65:15"
},
"nodeType": "YulExpressionStatement",
"src": "13709:65:15"
}
]
},
"name": "storage_set_to_zero_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nodeType": "YulTypedName",
"src": "13630:4:15",
"type": ""
},
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "13636:6:15",
"type": ""
}
],
"src": "13591:189:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "13836:136:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "13903:63:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "13947:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13954:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "storage_set_to_zero_t_uint256",
"nodeType": "YulIdentifier",
"src": "13917:29:15"
},
"nodeType": "YulFunctionCall",
"src": "13917:39:15"
},
"nodeType": "YulExpressionStatement",
"src": "13917:39:15"
}
]
},
"condition": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "13856:5:15"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "13863:3:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "13853:2:15"
},
"nodeType": "YulFunctionCall",
"src": "13853:14:15"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "13868:26:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "13870:22:15",
"value": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "13883:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "13890:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "13879:3:15"
},
"nodeType": "YulFunctionCall",
"src": "13879:13:15"
},
"variableNames": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "13870:5:15"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "13850:2:15",
"statements": []
},
"src": "13846:120:15"
}
]
},
"name": "clear_storage_range_t_bytes1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "start",
"nodeType": "YulTypedName",
"src": "13824:5:15",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "13831:3:15",
"type": ""
}
],
"src": "13786:186:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14057:464:15",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "14083:431:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "14097:54:15",
"value": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "14145:5:15"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nodeType": "YulIdentifier",
"src": "14113:31:15"
},
"nodeType": "YulFunctionCall",
"src": "14113:38:15"
},
"variables": [
{
"name": "dataArea",
"nodeType": "YulTypedName",
"src": "14101:8:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "14164:63:15",
"value": {
"arguments": [
{
"name": "dataArea",
"nodeType": "YulIdentifier",
"src": "14187:8:15"
},
{
"arguments": [
{
"name": "startIndex",
"nodeType": "YulIdentifier",
"src": "14215:10:15"
}
],
"functionName": {
"name": "divide_by_32_ceil",
"nodeType": "YulIdentifier",
"src": "14197:17:15"
},
"nodeType": "YulFunctionCall",
"src": "14197:29:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14183:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14183:44:15"
},
"variables": [
{
"name": "deleteStart",
"nodeType": "YulTypedName",
"src": "14168:11:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "14384:27:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "14386:23:15",
"value": {
"name": "dataArea",
"nodeType": "YulIdentifier",
"src": "14401:8:15"
},
"variableNames": [
{
"name": "deleteStart",
"nodeType": "YulIdentifier",
"src": "14386:11:15"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "startIndex",
"nodeType": "YulIdentifier",
"src": "14368:10:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14380:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "14365:2:15"
},
"nodeType": "YulFunctionCall",
"src": "14365:18:15"
},
"nodeType": "YulIf",
"src": "14362:49:15"
},
{
"expression": {
"arguments": [
{
"name": "deleteStart",
"nodeType": "YulIdentifier",
"src": "14453:11:15"
},
{
"arguments": [
{
"name": "dataArea",
"nodeType": "YulIdentifier",
"src": "14470:8:15"
},
{
"arguments": [
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "14498:3:15"
}
],
"functionName": {
"name": "divide_by_32_ceil",
"nodeType": "YulIdentifier",
"src": "14480:17:15"
},
"nodeType": "YulFunctionCall",
"src": "14480:22:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "14466:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14466:37:15"
}
],
"functionName": {
"name": "clear_storage_range_t_bytes1",
"nodeType": "YulIdentifier",
"src": "14424:28:15"
},
"nodeType": "YulFunctionCall",
"src": "14424:80:15"
},
"nodeType": "YulExpressionStatement",
"src": "14424:80:15"
}
]
},
"condition": {
"arguments": [
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "14074:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14079:2:15",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "14071:2:15"
},
"nodeType": "YulFunctionCall",
"src": "14071:11:15"
},
"nodeType": "YulIf",
"src": "14068:446:15"
}
]
},
"name": "clean_up_bytearray_end_slots_t_string_storage",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "14033:5:15",
"type": ""
},
{
"name": "len",
"nodeType": "YulTypedName",
"src": "14040:3:15",
"type": ""
},
{
"name": "startIndex",
"nodeType": "YulTypedName",
"src": "14045:10:15",
"type": ""
}
],
"src": "13978:543:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14590:54:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "14600:37:15",
"value": {
"arguments": [
{
"name": "bits",
"nodeType": "YulIdentifier",
"src": "14625:4:15"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "14631:5:15"
}
],
"functionName": {
"name": "shr",
"nodeType": "YulIdentifier",
"src": "14621:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14621:16:15"
},
"variableNames": [
{
"name": "newValue",
"nodeType": "YulIdentifier",
"src": "14600:8:15"
}
]
}
]
},
"name": "shift_right_unsigned_dynamic",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "bits",
"nodeType": "YulTypedName",
"src": "14565:4:15",
"type": ""
},
{
"name": "value",
"nodeType": "YulTypedName",
"src": "14571:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "newValue",
"nodeType": "YulTypedName",
"src": "14581:8:15",
"type": ""
}
],
"src": "14527:117:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14701:118:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "14711:68:15",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14760:1:15",
"type": "",
"value": "8"
},
{
"name": "bytes",
"nodeType": "YulIdentifier",
"src": "14763:5:15"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "14756:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14756:13:15"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "14775:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "14771:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14771:6:15"
}
],
"functionName": {
"name": "shift_right_unsigned_dynamic",
"nodeType": "YulIdentifier",
"src": "14727:28:15"
},
"nodeType": "YulFunctionCall",
"src": "14727:51:15"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "14723:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14723:56:15"
},
"variables": [
{
"name": "mask",
"nodeType": "YulTypedName",
"src": "14715:4:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "14788:25:15",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "14802:4:15"
},
{
"name": "mask",
"nodeType": "YulIdentifier",
"src": "14808:4:15"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "14798:3:15"
},
"nodeType": "YulFunctionCall",
"src": "14798:15:15"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "14788:6:15"
}
]
}
]
},
"name": "mask_bytes_dynamic",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "14678:4:15",
"type": ""
},
{
"name": "bytes",
"nodeType": "YulTypedName",
"src": "14684:5:15",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "14694:6:15",
"type": ""
}
],
"src": "14650:169:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "14905:214:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "15038:37:15",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "15065:4:15"
},
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "15071:3:15"
}
],
"functionName": {
"name": "mask_bytes_dynamic",
"nodeType": "YulIdentifier",
"src": "15046:18:15"
},
"nodeType": "YulFunctionCall",
"src": "15046:29:15"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "15038:4:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "15084:29:15",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "15095:4:15"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15105:1:15",
"type": "",
"value": "2"
},
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "15108:3:15"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "15101:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15101:11:15"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "15092:2:15"
},
"nodeType": "YulFunctionCall",
"src": "15092:21:15"
},
"variableNames": [
{
"name": "used",
"nodeType": "YulIdentifier",
"src": "15084:4:15"
}
]
}
]
},
"name": "extract_used_part_and_set_length_of_short_byte_array",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "14886:4:15",
"type": ""
},
{
"name": "len",
"nodeType": "YulTypedName",
"src": "14892:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "used",
"nodeType": "YulTypedName",
"src": "14900:4:15",
"type": ""
}
],
"src": "14824:295:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "15216:1303:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "15227:51:15",
"value": {
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "15274:3:15"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "15241:32:15"
},
"nodeType": "YulFunctionCall",
"src": "15241:37:15"
},
"variables": [
{
"name": "newLen",
"nodeType": "YulTypedName",
"src": "15231:6:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "15363:22:15",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "15365:16:15"
},
"nodeType": "YulFunctionCall",
"src": "15365:18:15"
},
"nodeType": "YulExpressionStatement",
"src": "15365:18:15"
}
]
},
"condition": {
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "15335:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15343:18:15",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "15332:2:15"
},
"nodeType": "YulFunctionCall",
"src": "15332:30:15"
},
"nodeType": "YulIf",
"src": "15329:56:15"
},
{
"nodeType": "YulVariableDeclaration",
"src": "15395:52:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "15441:4:15"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "15435:5:15"
},
"nodeType": "YulFunctionCall",
"src": "15435:11:15"
}
],
"functionName": {
"name": "extract_byte_array_length",
"nodeType": "YulIdentifier",
"src": "15409:25:15"
},
"nodeType": "YulFunctionCall",
"src": "15409:38:15"
},
"variables": [
{
"name": "oldLen",
"nodeType": "YulTypedName",
"src": "15399:6:15",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "15540:4:15"
},
{
"name": "oldLen",
"nodeType": "YulIdentifier",
"src": "15546:6:15"
},
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "15554:6:15"
}
],
"functionName": {
"name": "clean_up_bytearray_end_slots_t_string_storage",
"nodeType": "YulIdentifier",
"src": "15494:45:15"
},
"nodeType": "YulFunctionCall",
"src": "15494:67:15"
},
"nodeType": "YulExpressionStatement",
"src": "15494:67:15"
},
{
"nodeType": "YulVariableDeclaration",
"src": "15571:18:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "15588:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "srcOffset",
"nodeType": "YulTypedName",
"src": "15575:9:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "15599:17:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "15612:4:15",
"type": "",
"value": "0x20"
},
"variableNames": [
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "15599:9:15"
}
]
},
{
"cases": [
{
"body": {
"nodeType": "YulBlock",
"src": "15663:611:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "15677:37:15",
"value": {
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "15696:6:15"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15708:4:15",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "15704:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15704:9:15"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "15692:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15692:22:15"
},
"variables": [
{
"name": "loopEnd",
"nodeType": "YulTypedName",
"src": "15681:7:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "15728:51:15",
"value": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "15774:4:15"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nodeType": "YulIdentifier",
"src": "15742:31:15"
},
"nodeType": "YulFunctionCall",
"src": "15742:37:15"
},
"variables": [
{
"name": "dstPtr",
"nodeType": "YulTypedName",
"src": "15732:6:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "15792:10:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "15801:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "15796:1:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "15860:163:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "dstPtr",
"nodeType": "YulIdentifier",
"src": "15885:6:15"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "15903:3:15"
},
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "15908:9:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15899:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15899:19:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "15893:5:15"
},
"nodeType": "YulFunctionCall",
"src": "15893:26:15"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "15878:6:15"
},
"nodeType": "YulFunctionCall",
"src": "15878:42:15"
},
"nodeType": "YulExpressionStatement",
"src": "15878:42:15"
},
{
"nodeType": "YulAssignment",
"src": "15937:24:15",
"value": {
"arguments": [
{
"name": "dstPtr",
"nodeType": "YulIdentifier",
"src": "15951:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15959:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15947:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15947:14:15"
},
"variableNames": [
{
"name": "dstPtr",
"nodeType": "YulIdentifier",
"src": "15937:6:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "15978:31:15",
"value": {
"arguments": [
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "15995:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16006:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15991:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15991:18:15"
},
"variableNames": [
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "15978:9:15"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "15826:1:15"
},
{
"name": "loopEnd",
"nodeType": "YulIdentifier",
"src": "15829:7:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "15823:2:15"
},
"nodeType": "YulFunctionCall",
"src": "15823:14:15"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "15838:21:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "15840:17:15",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "15849:1:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15852:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "15845:3:15"
},
"nodeType": "YulFunctionCall",
"src": "15845:12:15"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "15840:1:15"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "15819:3:15",
"statements": []
},
"src": "15815:208:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "16059:156:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "16077:43:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "16104:3:15"
},
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "16109:9:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16100:3:15"
},
"nodeType": "YulFunctionCall",
"src": "16100:19:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "16094:5:15"
},
"nodeType": "YulFunctionCall",
"src": "16094:26:15"
},
"variables": [
{
"name": "lastValue",
"nodeType": "YulTypedName",
"src": "16081:9:15",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "dstPtr",
"nodeType": "YulIdentifier",
"src": "16144:6:15"
},
{
"arguments": [
{
"name": "lastValue",
"nodeType": "YulIdentifier",
"src": "16171:9:15"
},
{
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "16186:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16194:4:15",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "16182:3:15"
},
"nodeType": "YulFunctionCall",
"src": "16182:17:15"
}
],
"functionName": {
"name": "mask_bytes_dynamic",
"nodeType": "YulIdentifier",
"src": "16152:18:15"
},
"nodeType": "YulFunctionCall",
"src": "16152:48:15"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "16137:6:15"
},
"nodeType": "YulFunctionCall",
"src": "16137:64:15"
},
"nodeType": "YulExpressionStatement",
"src": "16137:64:15"
}
]
},
"condition": {
"arguments": [
{
"name": "loopEnd",
"nodeType": "YulIdentifier",
"src": "16042:7:15"
},
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "16051:6:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "16039:2:15"
},
"nodeType": "YulFunctionCall",
"src": "16039:19:15"
},
"nodeType": "YulIf",
"src": "16036:179:15"
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "16235:4:15"
},
{
"arguments": [
{
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "16249:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16257:1:15",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "16245:3:15"
},
"nodeType": "YulFunctionCall",
"src": "16245:14:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16261:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16241:3:15"
},
"nodeType": "YulFunctionCall",
"src": "16241:22:15"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "16228:6:15"
},
"nodeType": "YulFunctionCall",
"src": "16228:36:15"
},
"nodeType": "YulExpressionStatement",
"src": "16228:36:15"
}
]
},
"nodeType": "YulCase",
"src": "15656:618:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "15661:1:15",
"type": "",
"value": "1"
}
},
{
"body": {
"nodeType": "YulBlock",
"src": "16291:222:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "16305:14:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "16318:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "16309:5:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "16342:67:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "16360:35:15",
"value": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "16379:3:15"
},
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "16384:9:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16375:3:15"
},
"nodeType": "YulFunctionCall",
"src": "16375:19:15"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "16369:5:15"
},
"nodeType": "YulFunctionCall",
"src": "16369:26:15"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "16360:5:15"
}
]
}
]
},
"condition": {
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "16335:6:15"
},
"nodeType": "YulIf",
"src": "16332:77:15"
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "16429:4:15"
},
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "16488:5:15"
},
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "16495:6:15"
}
],
"functionName": {
"name": "extract_used_part_and_set_length_of_short_byte_array",
"nodeType": "YulIdentifier",
"src": "16435:52:15"
},
"nodeType": "YulFunctionCall",
"src": "16435:67:15"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "16422:6:15"
},
"nodeType": "YulFunctionCall",
"src": "16422:81:15"
},
"nodeType": "YulExpressionStatement",
"src": "16422:81:15"
}
]
},
"nodeType": "YulCase",
"src": "16283:230:15",
"value": "default"
}
],
"expression": {
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "15636:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "15644:2:15",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "15633:2:15"
},
"nodeType": "YulFunctionCall",
"src": "15633:14:15"
},
"nodeType": "YulSwitch",
"src": "15626:887:15"
}
]
},
"name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nodeType": "YulTypedName",
"src": "15205:4:15",
"type": ""
},
{
"name": "src",
"nodeType": "YulTypedName",
"src": "15211:3:15",
"type": ""
}
],
"src": "15124:1395:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "16631:57:15",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "16653:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16661:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "16649:3:15"
},
"nodeType": "YulFunctionCall",
"src": "16649:14:15"
},
{
"hexValue": "496e76616c696420746f6b656e",
"kind": "string",
"nodeType": "YulLiteral",
"src": "16665:15:15",
"type": "",
"value": "Invalid token"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "16642:6:15"
},
"nodeType": "YulFunctionCall",
"src": "16642:39:15"
},
"nodeType": "YulExpressionStatement",
"src": "16642:39:15"
}
]
},
"name": "store_literal_in_memory_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "16623:6:15",
"type": ""
}
],
"src": "16525:163:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "16840:220:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "16850:74:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "16916:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "16921:2:15",
"type": "",
"value": "13"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "16857:58:15"
},
"nodeType": "YulFunctionCall",
"src": "16857:67:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "16850:3:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "17022:3:15"
}
],
"functionName": {
"name": "store_literal_in_memory_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6",
"nodeType": "YulIdentifier",
"src": "16933:88:15"
},
"nodeType": "YulFunctionCall",
"src": "16933:93:15"
},
"nodeType": "YulExpressionStatement",
"src": "16933:93:15"
},
{
"nodeType": "YulAssignment",
"src": "17035:19:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "17046:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17051:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17042:3:15"
},
"nodeType": "YulFunctionCall",
"src": "17042:12:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "17035:3:15"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "16828:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "16836:3:15",
"type": ""
}
],
"src": "16694:366:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "17237:248:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "17247:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17259:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17270:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17255:3:15"
},
"nodeType": "YulFunctionCall",
"src": "17255:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17247:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17294:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "17305:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "17290:3:15"
},
"nodeType": "YulFunctionCall",
"src": "17290:17:15"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17313:4:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "17319:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "17309:3:15"
},
"nodeType": "YulFunctionCall",
"src": "17309:20:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "17283:6:15"
},
"nodeType": "YulFunctionCall",
"src": "17283:47:15"
},
"nodeType": "YulExpressionStatement",
"src": "17283:47:15"
},
{
"nodeType": "YulAssignment",
"src": "17339:139:15",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17473:4:15"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "17347:124:15"
},
"nodeType": "YulFunctionCall",
"src": "17347:131:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "17339:4:15"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_5e70ebd1d4072d337a7fabaa7bda70fa2633d6e3f89d5cb725a16b10d07e54c6__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "17217:9:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "17232:4:15",
"type": ""
}
],
"src": "17066:419:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "17605:34:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "17615:18:15",
"value": {
"name": "pos",
"nodeType": "YulIdentifier",
"src": "17630:3:15"
},
"variableNames": [
{
"name": "updated_pos",
"nodeType": "YulIdentifier",
"src": "17615:11:15"
}
]
}
]
},
"name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "17577:3:15",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "17582:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "updated_pos",
"nodeType": "YulTypedName",
"src": "17593:11:15",
"type": ""
}
],
"src": "17491:148:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "17776:767:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "17786:29:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "17809:5:15"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "17803:5:15"
},
"nodeType": "YulFunctionCall",
"src": "17803:12:15"
},
"variables": [
{
"name": "slotValue",
"nodeType": "YulTypedName",
"src": "17790:9:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "17824:50:15",
"value": {
"arguments": [
{
"name": "slotValue",
"nodeType": "YulIdentifier",
"src": "17864:9:15"
}
],
"functionName": {
"name": "extract_byte_array_length",
"nodeType": "YulIdentifier",
"src": "17838:25:15"
},
"nodeType": "YulFunctionCall",
"src": "17838:36:15"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "17828:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "17883:96:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "17967:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "17972:6:15"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulIdentifier",
"src": "17890:76:15"
},
"nodeType": "YulFunctionCall",
"src": "17890:89:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "17883:3:15"
}
]
},
{
"cases": [
{
"body": {
"nodeType": "YulBlock",
"src": "18028:159:15",
"statements": [
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18081:3:15"
},
{
"arguments": [
{
"name": "slotValue",
"nodeType": "YulIdentifier",
"src": "18090:9:15"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18105:4:15",
"type": "",
"value": "0xff"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "18101:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18101:9:15"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "18086:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18086:25:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18074:6:15"
},
"nodeType": "YulFunctionCall",
"src": "18074:38:15"
},
"nodeType": "YulExpressionStatement",
"src": "18074:38:15"
},
{
"nodeType": "YulAssignment",
"src": "18125:52:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18136:3:15"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18145:6:15"
},
{
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18167:6:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "18160:6:15"
},
"nodeType": "YulFunctionCall",
"src": "18160:14:15"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "18153:6:15"
},
"nodeType": "YulFunctionCall",
"src": "18153:22:15"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "18141:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18141:35:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18132:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18132:45:15"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "18125:3:15"
}
]
}
]
},
"nodeType": "YulCase",
"src": "18021:166:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "18026:1:15",
"type": "",
"value": "0"
}
},
{
"body": {
"nodeType": "YulBlock",
"src": "18203:334:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "18248:53:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "18295:5:15"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nodeType": "YulIdentifier",
"src": "18263:31:15"
},
"nodeType": "YulFunctionCall",
"src": "18263:38:15"
},
"variables": [
{
"name": "dataPos",
"nodeType": "YulTypedName",
"src": "18252:7:15",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "18314:10:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "18323:1:15",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "18318:1:15",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "18381:110:15",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18410:3:15"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "18415:1:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18406:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18406:11:15"
},
{
"arguments": [
{
"name": "dataPos",
"nodeType": "YulIdentifier",
"src": "18425:7:15"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "18419:5:15"
},
"nodeType": "YulFunctionCall",
"src": "18419:14:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "18399:6:15"
},
"nodeType": "YulFunctionCall",
"src": "18399:35:15"
},
"nodeType": "YulExpressionStatement",
"src": "18399:35:15"
},
{
"nodeType": "YulAssignment",
"src": "18451:26:15",
"value": {
"arguments": [
{
"name": "dataPos",
"nodeType": "YulIdentifier",
"src": "18466:7:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18475:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18462:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18462:15:15"
},
"variableNames": [
{
"name": "dataPos",
"nodeType": "YulIdentifier",
"src": "18451:7:15"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "18348:1:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18351:6:15"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "18345:2:15"
},
"nodeType": "YulFunctionCall",
"src": "18345:13:15"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "18359:21:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "18361:17:15",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "18370:1:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18373:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18366:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18366:12:15"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "18361:1:15"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "18341:3:15",
"statements": []
},
"src": "18337:154:15"
},
{
"nodeType": "YulAssignment",
"src": "18504:23:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18515:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18520:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18511:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18511:16:15"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "18504:3:15"
}
]
}
]
},
"nodeType": "YulCase",
"src": "18196:341:15",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "18201:1:15",
"type": "",
"value": "1"
}
}
],
"expression": {
"arguments": [
{
"name": "slotValue",
"nodeType": "YulIdentifier",
"src": "17999:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18010:1:15",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "17995:3:15"
},
"nodeType": "YulFunctionCall",
"src": "17995:17:15"
},
"nodeType": "YulSwitch",
"src": "17988:549:15"
}
]
},
"name": "abi_encode_t_string_storage_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "17757:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "17764:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "17772:3:15",
"type": ""
}
],
"src": "17669:874:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "18659:280:15",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "18669:53:15",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "18716:5:15"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "18683:32:15"
},
"nodeType": "YulFunctionCall",
"src": "18683:39:15"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "18673:6:15",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "18731:96:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18815:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18820:6:15"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulIdentifier",
"src": "18738:76:15"
},
"nodeType": "YulFunctionCall",
"src": "18738:89:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18731:3:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "18875:5:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "18882:4:15",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18871:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18871:16:15"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18889:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18894:6:15"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nodeType": "YulIdentifier",
"src": "18836:34:15"
},
"nodeType": "YulFunctionCall",
"src": "18836:65:15"
},
"nodeType": "YulExpressionStatement",
"src": "18836:65:15"
},
{
"nodeType": "YulAssignment",
"src": "18910:23:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "18921:3:15"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "18926:6:15"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "18917:3:15"
},
"nodeType": "YulFunctionCall",
"src": "18917:16:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "18910:3:15"
}
]
}
]
},
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "18640:5:15",
"type": ""
},
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "18647:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "18655:3:15",
"type": ""
}
],
"src": "18549:390:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "19126:248:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "19137:99:15",
"value": {
"arguments": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "19223:6:15"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19232:3:15"
}
],
"functionName": {
"name": "abi_encode_t_string_storage_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulIdentifier",
"src": "19144:78:15"
},
"nodeType": "YulFunctionCall",
"src": "19144:92:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19137:3:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "19246:102:15",
"value": {
"arguments": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "19335:6:15"
},
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19344:3:15"
}
],
"functionName": {
"name": "abi_encode_t_string_memory_ptr_to_t_string_memory_ptr_nonPadded_inplace_fromStack",
"nodeType": "YulIdentifier",
"src": "19253:81:15"
},
"nodeType": "YulFunctionCall",
"src": "19253:95:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19246:3:15"
}
]
},
{
"nodeType": "YulAssignment",
"src": "19358:10:15",
"value": {
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19365:3:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "19358:3:15"
}
]
}
]
},
"name": "abi_encode_tuple_packed_t_string_storage_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "19097:3:15",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "19103:6:15",
"type": ""
},
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "19111:6:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "19122:3:15",
"type": ""
}
],
"src": "18945:429:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "19486:119:15",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "19508:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19516:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19504:3:15"
},
"nodeType": "YulFunctionCall",
"src": "19504:14:15"
},
{
"hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
"kind": "string",
"nodeType": "YulLiteral",
"src": "19520:34:15",
"type": "",
"value": "Ownable: new owner is the zero a"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19497:6:15"
},
"nodeType": "YulFunctionCall",
"src": "19497:58:15"
},
"nodeType": "YulExpressionStatement",
"src": "19497:58:15"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "19576:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19584:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19572:3:15"
},
"nodeType": "YulFunctionCall",
"src": "19572:15:15"
},
{
"hexValue": "646472657373",
"kind": "string",
"nodeType": "YulLiteral",
"src": "19589:8:15",
"type": "",
"value": "ddress"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "19565:6:15"
},
"nodeType": "YulFunctionCall",
"src": "19565:33:15"
},
"nodeType": "YulExpressionStatement",
"src": "19565:33:15"
}
]
},
"name": "store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "19478:6:15",
"type": ""
}
],
"src": "19380:225:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "19757:220:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "19767:74:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19833:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19838:2:15",
"type": "",
"value": "38"
}
],
"functionName": {
"name": "array_storeLengthForEncoding_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "19774:58:15"
},
"nodeType": "YulFunctionCall",
"src": "19774:67:15"
},
"variableNames": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19767:3:15"
}
]
},
{
"expression": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19939:3:15"
}
],
"functionName": {
"name": "store_literal_in_memory_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe",
"nodeType": "YulIdentifier",
"src": "19850:88:15"
},
"nodeType": "YulFunctionCall",
"src": "19850:93:15"
},
"nodeType": "YulExpressionStatement",
"src": "19850:93:15"
},
{
"nodeType": "YulAssignment",
"src": "19952:19:15",
"value": {
"arguments": [
{
"name": "pos",
"nodeType": "YulIdentifier",
"src": "19963:3:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "19968:2:15",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "19959:3:15"
},
"nodeType": "YulFunctionCall",
"src": "19959:12:15"
},
"variableNames": [
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "19952:3:15"
}
]
}
]
},
"name": "abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "pos",
"nodeType": "YulTypedName",
"src": "19745:3:15",
"type": ""
}
],
"returnVariables": [
{
"name": "end",
"nodeType": "YulTypedName",
"src": "19753:3:15",
"type": ""
}
],
"src": "19611:366:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "20154:248:15",
"statements": [
{
"nodeType": "YulAssignment",
"src": "20164:26:15",
"value": {
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20176:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20187:2:15",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20172:3:15"
},
"nodeType": "YulFunctionCall",
"src": "20172:18:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20164:4:15"
}
]
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20211:9:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20222:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20207:3:15"
},
"nodeType": "YulFunctionCall",
"src": "20207:17:15"
},
{
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20230:4:15"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "20236:9:15"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "20226:3:15"
},
"nodeType": "YulFunctionCall",
"src": "20226:20:15"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20200:6:15"
},
"nodeType": "YulFunctionCall",
"src": "20200:47:15"
},
"nodeType": "YulExpressionStatement",
"src": "20200:47:15"
},
{
"nodeType": "YulAssignment",
"src": "20256:139:15",
"value": {
"arguments": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20390:4:15"
}
],
"functionName": {
"name": "abi_encode_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe_to_t_string_memory_ptr_fromStack",
"nodeType": "YulIdentifier",
"src": "20264:124:15"
},
"nodeType": "YulFunctionCall",
"src": "20264:131:15"
},
"variableNames": [
{
"name": "tail",
"nodeType": "YulIdentifier",
"src": "20256:4:15"
}
]
}
]
},
"name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "20134:9:15",
"type": ""
}
],
"returnVariables": [
{
"name": "tail",
"nodeType": "YulTypedName",
"src": "20149:4:15",
"type": ""
}
],
"src": "19983:419:15"
},
{
"body": {
"nodeType": "YulBlock",
"src": "20514:76:15",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "20536:6:15"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "20544:1:15",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "20532:3:15"
},
"nodeType": "YulFunctionCall",
"src": "20532:14:15"
},
{
"hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
"kind": "string",
"nodeType": "YulLiteral",
"src": "20548:34:15",
"type": "",
"value": "Ownable: caller is not the owner"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "20525:6:15"
},
"nodeType": "YulFunctionCall",
"src": "20525:58:15"
},
"nodeType": "YulExpressionStatement",
"src": "20525:58:15"
}
]
},
"name": "store_literal_in_memory_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "205
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