Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 68 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 20190375 | 196 days ago | IN | 0 ETH | 0.00028812 | ||||
Safe Transfer Fr... | 15875512 | 801 days ago | IN | 0 ETH | 0.00070742 | ||||
Safe Transfer Fr... | 15776778 | 815 days ago | IN | 0 ETH | 0.00106647 | ||||
Safe Transfer Fr... | 15775435 | 815 days ago | IN | 0 ETH | 0.00085942 | ||||
Safe Transfer Fr... | 15770993 | 816 days ago | IN | 0 ETH | 0.00151649 | ||||
Safe Transfer Fr... | 15729168 | 822 days ago | IN | 0 ETH | 0.00167947 | ||||
Toggle Token Act... | 15711805 | 824 days ago | IN | 0 ETH | 0.00063485 | ||||
Toggle Token Act... | 15670726 | 830 days ago | IN | 0 ETH | 0.00091028 | ||||
Toggle Token Act... | 15661686 | 831 days ago | IN | 0 ETH | 0.00019524 | ||||
Withdraw | 15661684 | 831 days ago | IN | 0 ETH | 0.00022267 | ||||
Mint | 15643628 | 833 days ago | IN | 0.04 ETH | 0.00104265 | ||||
Safe Transfer Fr... | 15640941 | 834 days ago | IN | 0 ETH | 0.00078794 | ||||
Withdraw | 15620586 | 837 days ago | IN | 0 ETH | 0.00035853 | ||||
Mint | 15540769 | 848 days ago | IN | 0.04 ETH | 0.00165001 | ||||
Withdraw | 15527338 | 850 days ago | IN | 0 ETH | 0.00134728 | ||||
Mint | 15524699 | 850 days ago | IN | 0.12 ETH | 0.00049221 | ||||
Withdraw | 15484940 | 857 days ago | IN | 0 ETH | 0.00063014 | ||||
Safe Transfer Fr... | 15474962 | 859 days ago | IN | 0 ETH | 0.0005865 | ||||
Mint | 15474954 | 859 days ago | IN | 0.04 ETH | 0.00111608 | ||||
Safe Transfer Fr... | 15365416 | 876 days ago | IN | 0 ETH | 0.00103507 | ||||
Mint | 15365410 | 876 days ago | IN | 0.04 ETH | 0.00091918 | ||||
Safe Transfer Fr... | 15175167 | 906 days ago | IN | 0 ETH | 0.00065527 | ||||
Set Approval For... | 15122242 | 914 days ago | IN | 0 ETH | 0.00118429 | ||||
Safe Transfer Fr... | 15087090 | 919 days ago | IN | 0 ETH | 0.00087947 | ||||
Safe Transfer Fr... | 15048390 | 925 days ago | IN | 0 ETH | 0.00204526 |
Latest 11 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15661684 | 831 days ago | 0.04 ETH | ||||
15620586 | 837 days ago | 0.04 ETH | ||||
15527338 | 850 days ago | 0.12 ETH | ||||
15484940 | 857 days ago | 0.12 ETH | ||||
14917928 | 949 days ago | 0.08 ETH | ||||
14887607 | 954 days ago | 0.16 ETH | ||||
14861953 | 958 days ago | 0.16 ETH | ||||
14840406 | 961 days ago | 0.16 ETH | ||||
14837332 | 962 days ago | 0.04 ETH | ||||
14826858 | 964 days ago | 0.185 ETH | ||||
14819725 | 965 days ago | 0.48 ETH |
Loading...
Loading
Contract Name:
ChubbyBunniesFounderPass
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-21 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @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; } } /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _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); } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev 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; } } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } contract ChubbyBunniesFounderPass is ERC1155, Ownable { using Strings for uint256; using SafeMath for uint256; using Counters for Counters.Counter; string private name_; string private symbol_; Counters.Counter private tokenCounter; struct Token { bool isActive; uint256 price; uint256 maxSupply; uint256 numMinted; uint256 maxMintPerTxn; string baseURI; uint256 createdAt; } mapping(uint256 => Token) public Tokens; mapping(address => bool) public burnerAddresses; function isContract(address _addr) internal view returns (bool) { uint32 _size; assembly { _size:= extcodesize(_addr) } return (_size > 0); } constructor() ERC1155("ipfs://") { name_ = "Chubby Bunnies Founder Pass"; symbol_ = "CBFP"; burnerAddresses[msg.sender] = true; // add owner to burner addresses addToken(0.04 ether, 150, 1, "QmRESBtHXyqyJWaUWfBHtrrvEWsu6hufYysdtUdvqBJjfC/"); } function addToken( uint256 _price, uint256 _maxSupply, uint256 _maxMintPerTxn, string memory _baseUri ) public onlyOwner { Token storage mp = Tokens[tokenCounter.current()]; mp.isActive = false; mp.price = _price; mp.maxSupply = _maxSupply; mp.maxMintPerTxn = _maxMintPerTxn; mp.numMinted = 0; mp.baseURI = _baseUri; mp.createdAt = block.timestamp; tokenCounter.increment(); } function editToken( bool _isActive, uint256 _mintPrice, uint256 _maxSupply, uint256 _maxMintPerTxn, string memory _baseUri, uint256 _index ) public onlyOwner { Tokens[_index].price = _mintPrice; Tokens[_index].maxSupply = _maxSupply; Tokens[_index].baseURI = _baseUri; Tokens[_index].isActive = _isActive; Tokens[_index].maxMintPerTxn = _maxMintPerTxn; } function mint(uint256 _id, uint256 _amount) external payable { Token memory _token = Tokens[_id]; require(_token.createdAt != 0, "Token does not exist"); require(!isContract(msg.sender), "Caller cannot be contract!"); require(_amount > 0 && _amount <= _token.maxMintPerTxn, "Invalid mint amount!"); require(_token.numMinted + _amount <= _token.maxSupply, "Purchase would exceed max supply!"); require(msg.value == _amount * _token.price, "Send proper amount!"); Tokens[_id].numMinted = _token.numMinted.add(_amount); _mint(msg.sender, _id, _amount, ""); } function mintBatch(address _to, uint256[] memory _id, uint256[] memory _amount) external onlyOwner { _mintBatch(_to, _id, _amount, ""); } function burn(address from, uint256 id, uint256 amount) external { require(burnerAddresses[msg.sender], "Address does not have permission to burn"); _burn(from, id, amount); } function setBurnerAddresses(address _address, bool _access) public onlyOwner { burnerAddresses[_address] = _access; } function editMaxMintPerTxn(uint256 _maxMintPerTxn, uint256 _index) external onlyOwner { require(Tokens[_index].createdAt != 0, "Token does not exist"); Tokens[_index].maxMintPerTxn = _maxMintPerTxn; } function editTokenUri(string memory _newUri, uint256 _index) external onlyOwner { require(Tokens[_index].createdAt != 0, "Token does not exist"); Tokens[_index].baseURI = _newUri; } function editTokenMaxSupply(uint256 _maxSupply, uint256 _index) external onlyOwner { require(Tokens[_index].createdAt != 0, "Token does not exist"); Tokens[_index].maxSupply = _maxSupply; } function editTokenMintPrice(uint256 _mintPrice, uint256 _index) external onlyOwner { require(Tokens[_index].createdAt != 0, "Token does not exist"); Tokens[_index].price = _mintPrice; } function toggleTokenActive(uint256 _index) external onlyOwner { require(Tokens[_index].createdAt != 0, "Token does not exist"); Tokens[_index].isActive = !Tokens[_index].isActive; } function name() public view returns (string memory) { return name_; } function symbol() public view returns (string memory) { return symbol_; } function uri(uint256 id) public view override returns (string memory) { require(Tokens[id].numMinted > 0, "URI: nonexistent token"); return string(abi.encodePacked(super.uri(id), Tokens[id].baseURI)); } function withdraw() external onlyOwner { require(address(this).balance > 0, "No amount to withdraw"); uint256 balance = address(this).balance; (bool owner, ) = payable(msg.sender).call{value: balance}(""); require(owner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Tokens","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"numMinted","type":"uint256"},{"internalType":"uint256","name":"maxMintPerTxn","type":"uint256"},{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"uint256","name":"createdAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxMintPerTxn","type":"uint256"},{"internalType":"string","name":"_baseUri","type":"string"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"burnerAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerTxn","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"editMaxMintPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"},{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_maxMintPerTxn","type":"uint256"},{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"editToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"editTokenMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"editTokenMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newUri","type":"string"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"editTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_access","type":"bool"}],"name":"setBurnerAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"toggleTokenActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604080518082019091526007815266697066733a2f2f60c81b60208201526200003b8162000112565b5062000047336200012b565b60408051808201909152601b8082527f4368756262792042756e6e69657320466f756e6465722050617373000000000060209092019182526200008d916004916200027f565b50604080518082019091526004808252630434246560e41b6020909201918252620000bb916005916200027f565b5033600090815260086020908152604091829020805460ff19166001908117909155825160608101909352602f8084526200010c93668e1bc9bf04000093609693929062002e79908301396200017d565b62000362565b8051620001279060029060208401906200027f565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6003546001600160a01b03163314620001dc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b600060076000620001f960066200027260201b6200137e1760201c565b81526020808201929092526040016000908120805460ff19168155600181018890556002810187905560048101869055600381019190915583519092506200024a916005840191908501906200027f565b504281600601819055506200026b60066200027660201b620013821760201c565b5050505050565b5490565b80546001019055565b8280546200028d9062000325565b90600052602060002090601f016020900481019282620002b15760008555620002fc565b82601f10620002cc57805160ff1916838001178555620002fc565b82800160010185558215620002fc579182015b82811115620002fc578251825591602001919060010190620002df565b506200030a9291506200030e565b5090565b5b808211156200030a57600081556001016200030f565b600181811c908216806200033a57607f821691505b602082108114156200035c57634e487b7160e01b600052602260045260246000fd5b50919050565b612b0780620003726000396000f3fe60806040526004361061019b5760003560e01c806375efad6a116100ec578063cec8a33a1161008a578063e985e9c511610064578063e985e9c5146104b1578063f242432a146104fa578063f2fde38b1461051a578063f5298aca1461053a57600080fd5b8063cec8a33a14610441578063d17d003014610461578063d81d0a151461049157600080fd5b806395d89b41116100c657806395d89b41146103cc578063a22cb465146103e1578063b39d751014610401578063bb8d3d0e1461042157600080fd5b806375efad6a146103515780638da5cb5b14610371578063953c81331461039957600080fd5b80631b2ef1ca116101595780634d389177116101335780634d389177146102cf5780634e1273f4146102ef5780634e8c215b1461031c578063715018a61461033c57600080fd5b80631b2ef1ca146102875780632eb2c2d61461029a5780633ccfd60b146102ba57600080fd5b8062fdd58e146101a057806301ffc9a7146101d357806306fdde03146102035780630ac491df146102255780630e89341c1461024757806314758d4e14610267575b600080fd5b3480156101ac57600080fd5b506101c06101bb3660046121f7565b61055a565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee366004612398565b6105f1565b60405190151581526020016101ca565b34801561020f57600080fd5b50610218610643565b6040516101ca91906126ef565b34801561023157600080fd5b506102456102403660046123d2565b6106d5565b005b34801561025357600080fd5b50610218610262366004612417565b610757565b34801561027357600080fd5b50610245610282366004612417565b6107f3565b610245610295366004612430565b61086b565b3480156102a657600080fd5b506102456102b536600461204a565b610b31565b3480156102c657600080fd5b50610245610bc8565b3480156102db57600080fd5b506102456102ea366004612325565b610c95565b3480156102fb57600080fd5b5061030f61030a366004612254565b610d1e565b6040516101ca9190612667565b34801561032857600080fd5b506102456103373660046121cd565b610e48565b34801561034857600080fd5b50610245610e9d565b34801561035d57600080fd5b5061024561036c366004612430565b610ed3565b34801561037d57600080fd5b506003546040516001600160a01b0390911681526020016101ca565b3480156103a557600080fd5b506103b96103b4366004612417565b610f3f565b6040516101ca97969594939291906126a8565b3480156103d857600080fd5b5061021861100a565b3480156103ed57600080fd5b506102456103fc3660046121cd565b611019565b34801561040d57600080fd5b5061024561041c366004612430565b611024565b34801561042d57600080fd5b5061024561043c366004612452565b611090565b34801561044d57600080fd5b5061024561045c366004612430565b611130565b34801561046d57600080fd5b506101f361047c366004611ffc565b60086020526000908152604090205460ff1681565b34801561049d57600080fd5b506102456104ac366004612159565b61119c565b3480156104bd57600080fd5b506101f36104cc366004612017565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561050657600080fd5b506102456105153660046120f4565b6111e1565b34801561052657600080fd5b50610245610535366004611ffc565b611268565b34801561054657600080fd5b50610245610555366004612221565b611303565b60006001600160a01b0383166105cb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061062257506001600160e01b031982166303a24d0760e21b145b8061063d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606004805461065290612950565b80601f016020809104026020016040519081016040528092919081815260200182805461067e90612950565b80156106cb5780601f106106a0576101008083540402835291602001916106cb565b820191906000526020600020905b8154815290600101906020018083116106ae57829003601f168201915b5050505050905090565b6003546001600160a01b031633146106ff5760405162461bcd60e51b81526004016105c290612807565b60008181526007602052604090206006015461072d5760405162461bcd60e51b81526004016105c29061274a565b6000818152600760209081526040909120835161075292600590920191850190611e4c565b505050565b6000818152600760205260409020600301546060906107b15760405162461bcd60e51b81526020600482015260166024820152752aa9249d103737b732bc34b9ba32b73a103a37b5b2b760511b60448201526064016105c2565b6107ba8261138b565b60008381526007602090815260409182902091516107dd93926005019101612513565b6040516020818303038152906040529050919050565b6003546001600160a01b0316331461081d5760405162461bcd60e51b81526004016105c290612807565b60008181526007602052604090206006015461084b5760405162461bcd60e51b81526004016105c29061274a565b6000908152600760205260409020805460ff19811660ff90911615179055565b6000828152600760209081526040808320815160e081018352815460ff1615158152600182015493810193909352600281015491830191909152600381015460608301526004810154608083015260058101805460a0840191906108ce90612950565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90612950565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b5050505050815260200160068201548152505090508060c00151600014156109815760405162461bcd60e51b81526004016105c29061274a565b333b63ffffffff16156109d65760405162461bcd60e51b815260206004820152601a60248201527f43616c6c65722063616e6e6f7420626520636f6e74726163742100000000000060448201526064016105c2565b6000821180156109ea575080608001518211155b610a2d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016105c2565b8060400151828260600151610a4291906128e9565b1115610a9a5760405162461bcd60e51b815260206004820152602160248201527f507572636861736520776f756c6420657863656564206d617820737570706c796044820152602160f81b60648201526084016105c2565b6020810151610aa99083612901565b3414610aed5760405162461bcd60e51b815260206004820152601360248201527253656e642070726f70657220616d6f756e742160681b60448201526064016105c2565b6060810151610afc908361141f565b600760008581526020019081526020016000206003018190555061075233848460405180602001604052806000815250611432565b6001600160a01b038516331480610b4d5750610b4d85336104cc565b610bb45760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105c2565b610bc1858585858561150c565b5050505050565b6003546001600160a01b03163314610bf25760405162461bcd60e51b81526004016105c290612807565b60004711610c3a5760405162461bcd60e51b81526020600482015260156024820152744e6f20616d6f756e7420746f20776974686472617760581b60448201526064016105c2565b6040514790600090339083908381818185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5050905080610c9157600080fd5b5050565b6003546001600160a01b03163314610cbf5760405162461bcd60e51b81526004016105c290612807565b600081815260076020908152604090912060018101879055600281018690558351610cf292600590920191850190611e4c565b506000908152600760205260409020805460ff1916951515959095178555506004909301929092555050565b60608151835114610d835760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105c2565b6000835167ffffffffffffffff811115610d9f57610d9f6129ff565b604051908082528060200260200182016040528015610dc8578160200160208202803683370190505b50905060005b8451811015610e4057610e13858281518110610dec57610dec6129e9565b6020026020010151858381518110610e0657610e066129e9565b602002602001015161055a565b828281518110610e2557610e256129e9565b6020908102919091010152610e39816129b8565b9050610dce565b509392505050565b6003546001600160a01b03163314610e725760405162461bcd60e51b81526004016105c290612807565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6003546001600160a01b03163314610ec75760405162461bcd60e51b81526004016105c290612807565b610ed160006116a8565b565b6003546001600160a01b03163314610efd5760405162461bcd60e51b81526004016105c290612807565b600081815260076020526040902060060154610f2b5760405162461bcd60e51b81526004016105c29061274a565b600090815260076020526040902060010155565b60076020526000908152604090208054600182015460028301546003840154600485015460058601805460ff90961696949593949293919291610f8190612950565b80601f0160208091040260200160405190810160405280929190818152602001828054610fad90612950565b8015610ffa5780601f10610fcf57610100808354040283529160200191610ffa565b820191906000526020600020905b815481529060010190602001808311610fdd57829003601f168201915b5050505050908060060154905087565b60606005805461065290612950565b610c913383836116fa565b6003546001600160a01b0316331461104e5760405162461bcd60e51b81526004016105c290612807565b60008181526007602052604090206006015461107c5760405162461bcd60e51b81526004016105c29061274a565b600090815260076020526040902060040155565b6003546001600160a01b031633146110ba5760405162461bcd60e51b81526004016105c290612807565b6000600760006110c960065490565b81526020808201929092526040016000908120805460ff191681556001810188905560028101879055600481018690556003810191909155835190925061111891600584019190850190611e4c565b50428160060181905550610bc1600680546001019055565b6003546001600160a01b0316331461115a5760405162461bcd60e51b81526004016105c290612807565b6000818152600760205260409020600601546111885760405162461bcd60e51b81526004016105c29061274a565b600090815260076020526040902060020155565b6003546001600160a01b031633146111c65760405162461bcd60e51b81526004016105c290612807565b610752838383604051806020016040528060008152506117db565b6001600160a01b0385163314806111fd57506111fd85336104cc565b61125b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105c2565b610bc18585858585611926565b6003546001600160a01b031633146112925760405162461bcd60e51b81526004016105c290612807565b6001600160a01b0381166112f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c2565b611300816116a8565b50565b3360009081526008602052604090205460ff166113735760405162461bcd60e51b815260206004820152602860248201527f4164647265737320646f6573206e6f742068617665207065726d697373696f6e604482015267103a3790313ab93760c11b60648201526084016105c2565b610752838383611a50565b5490565b80546001019055565b60606002805461139a90612950565b80601f01602080910402602001604051908101604052809291908181526020018280546113c690612950565b80156114135780601f106113e857610100808354040283529160200191611413565b820191906000526020600020905b8154815290600101906020018083116113f657829003601f168201915b50505050509050919050565b600061142b82846128e9565b9392505050565b6001600160a01b0384166114585760405162461bcd60e51b81526004016105c290612884565b33600061146485611bcc565b9050600061147185611bcc565b90506000868152602081815260408083206001600160a01b038b168452909152812080548792906114a39084906128e9565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461150383600089898989611c17565b50505050505050565b815183511461152d5760405162461bcd60e51b81526004016105c29061283c565b6001600160a01b0384166115535760405162461bcd60e51b81526004016105c290612778565b3360005b845181101561163a576000858281518110611574576115746129e9565b602002602001015190506000858381518110611592576115926129e9565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156115e25760405162461bcd60e51b81526004016105c2906127bd565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061161f9084906128e9565b9250508190555050505080611633906129b8565b9050611557565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161168a92919061267a565b60405180910390a46116a0818787878787611d82565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561176e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105c2565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118015760405162461bcd60e51b81526004016105c290612884565b81518351146118225760405162461bcd60e51b81526004016105c29061283c565b3360005b84518110156118be57838181518110611841576118416129e9565b602002602001015160008087848151811061185e5761185e6129e9565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546118a691906128e9565b909155508190506118b6816129b8565b915050611826565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161190f92919061267a565b60405180910390a4610bc181600087878787611d82565b6001600160a01b03841661194c5760405162461bcd60e51b81526004016105c290612778565b33600061195885611bcc565b9050600061196585611bcc565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156119a85760405162461bcd60e51b81526004016105c2906127bd565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906119e59084906128e9565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a45848a8a8a8a8a611c17565b505050505050505050565b6001600160a01b038316611ab25760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016105c2565b336000611abe84611bcc565b90506000611acb84611bcc565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015611b545760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016105c2565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611503565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c0657611c066129e9565b602090810291909101015292915050565b6001600160a01b0384163b156116a05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c5b9089908990889088908890600401612622565b602060405180830381600087803b158015611c7557600080fd5b505af1925050508015611ca5575060408051601f3d908101601f19168201909252611ca2918101906123b5565b60015b611d5257611cb1612a15565b806308c379a01415611ceb5750611cc6612a31565b80611cd15750611ced565b8060405162461bcd60e51b81526004016105c291906126ef565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105c2565b6001600160e01b0319811663f23a6e6160e01b146115035760405162461bcd60e51b81526004016105c290612702565b6001600160a01b0384163b156116a05760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611dc690899089908890889088906004016125c4565b602060405180830381600087803b158015611de057600080fd5b505af1925050508015611e10575060408051601f3d908101601f19168201909252611e0d918101906123b5565b60015b611e1c57611cb1612a15565b6001600160e01b0319811663bc197c8160e01b146115035760405162461bcd60e51b81526004016105c290612702565b828054611e5890612950565b90600052602060002090601f016020900481019282611e7a5760008555611ec0565b82601f10611e9357805160ff1916838001178555611ec0565b82800160010185558215611ec0579182015b82811115611ec0578251825591602001919060010190611ea5565b50611ecc929150611ed0565b5090565b5b80821115611ecc5760008155600101611ed1565b80356001600160a01b0381168114611efc57600080fd5b919050565b600082601f830112611f1257600080fd5b81356020611f1f826128c5565b604051611f2c828261298b565b8381528281019150858301600585901b87018401881015611f4c57600080fd5b60005b85811015611f6b57813584529284019290840190600101611f4f565b5090979650505050505050565b80358015158114611efc57600080fd5b600082601f830112611f9957600080fd5b813567ffffffffffffffff811115611fb357611fb36129ff565b604051611fca601f8301601f19166020018261298b565b818152846020838601011115611fdf57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561200e57600080fd5b61142b82611ee5565b6000806040838503121561202a57600080fd5b61203383611ee5565b915061204160208401611ee5565b90509250929050565b600080600080600060a0868803121561206257600080fd5b61206b86611ee5565b945061207960208701611ee5565b9350604086013567ffffffffffffffff8082111561209657600080fd5b6120a289838a01611f01565b945060608801359150808211156120b857600080fd5b6120c489838a01611f01565b935060808801359150808211156120da57600080fd5b506120e788828901611f88565b9150509295509295909350565b600080600080600060a0868803121561210c57600080fd5b61211586611ee5565b945061212360208701611ee5565b93506040860135925060608601359150608086013567ffffffffffffffff81111561214d57600080fd5b6120e788828901611f88565b60008060006060848603121561216e57600080fd5b61217784611ee5565b9250602084013567ffffffffffffffff8082111561219457600080fd5b6121a087838801611f01565b935060408601359150808211156121b657600080fd5b506121c386828701611f01565b9150509250925092565b600080604083850312156121e057600080fd5b6121e983611ee5565b915061204160208401611f78565b6000806040838503121561220a57600080fd5b61221383611ee5565b946020939093013593505050565b60008060006060848603121561223657600080fd5b61223f84611ee5565b95602085013595506040909401359392505050565b6000806040838503121561226757600080fd5b823567ffffffffffffffff8082111561227f57600080fd5b818501915085601f83011261229357600080fd5b813560206122a0826128c5565b6040516122ad828261298b565b8381528281019150858301600585901b870184018b10156122cd57600080fd5b600096505b848710156122f7576122e381611ee5565b8352600196909601959183019183016122d2565b509650508601359250508082111561230e57600080fd5b5061231b85828601611f01565b9150509250929050565b60008060008060008060c0878903121561233e57600080fd5b61234787611f78565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561237857600080fd5b61238489828a01611f88565b92505060a087013590509295509295509295565b6000602082840312156123aa57600080fd5b813561142b81612abb565b6000602082840312156123c757600080fd5b815161142b81612abb565b600080604083850312156123e557600080fd5b823567ffffffffffffffff8111156123fc57600080fd5b61240885828601611f88565b95602094909401359450505050565b60006020828403121561242957600080fd5b5035919050565b6000806040838503121561244357600080fd5b50508035926020909101359150565b6000806000806080858703121561246857600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561249457600080fd5b6124a087828801611f88565b91505092959194509250565b600081518084526020808501945080840160005b838110156124dc578151875295820195908201906001016124c0565b509495945050505050565b600081518084526124ff816020860160208601612920565b601f01601f19169290920160200192915050565b6000835160206125268285838901612920565b845491840191600090600181811c908083168061254457607f831692505b85831081141561256257634e487b7160e01b85526022600452602485fd5b8080156125765760018114612587576125b4565b60ff198516885283880195506125b4565b60008b81526020902060005b858110156125ac5781548a820152908401908801612593565b505083880195505b50939a9950505050505050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906125f0908301866124ac565b828103606084015261260281866124ac565b9050828103608084015261261681856124e7565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061265c908301846124e7565b979650505050505050565b60208152600061142b60208301846124ac565b60408152600061268d60408301856124ac565b828103602084015261269f81856124ac565b95945050505050565b871515815286602082015285604082015284606082015283608082015260e060a082015260006126db60e08301856124e7565b90508260c083015298975050505050505050565b60208152600061142b60208301846124e7565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff8211156128df576128df6129ff565b5060051b60200190565b600082198211156128fc576128fc6129d3565b500190565b600081600019048311821515161561291b5761291b6129d3565b500290565b60005b8381101561293b578181015183820152602001612923565b8381111561294a576000848401525b50505050565b600181811c9082168061296457607f821691505b6020821081141561298557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156129b1576129b16129ff565b6040525050565b60006000198214156129cc576129cc6129d3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612a2e5760046000803e5060005160e01c5b90565b600060443d1015612a3f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612a6f57505050505090565b8285019150815181811115612a875750505050505090565b843d8701016020828501011115612aa15750505050505090565b612ab06020828601018761298b565b509095945050505050565b6001600160e01b03198116811461130057600080fdfea2646970667358221220d1bcfdf1c8a90d5fdf2fa4a2d2e4ff139c050608a74d10589cbebdd9ec00569b64736f6c63430008070033516d524553427448587971794a57615557664248747272764557737536687566597973647455647671424a6a66432f
Deployed Bytecode
0x60806040526004361061019b5760003560e01c806375efad6a116100ec578063cec8a33a1161008a578063e985e9c511610064578063e985e9c5146104b1578063f242432a146104fa578063f2fde38b1461051a578063f5298aca1461053a57600080fd5b8063cec8a33a14610441578063d17d003014610461578063d81d0a151461049157600080fd5b806395d89b41116100c657806395d89b41146103cc578063a22cb465146103e1578063b39d751014610401578063bb8d3d0e1461042157600080fd5b806375efad6a146103515780638da5cb5b14610371578063953c81331461039957600080fd5b80631b2ef1ca116101595780634d389177116101335780634d389177146102cf5780634e1273f4146102ef5780634e8c215b1461031c578063715018a61461033c57600080fd5b80631b2ef1ca146102875780632eb2c2d61461029a5780633ccfd60b146102ba57600080fd5b8062fdd58e146101a057806301ffc9a7146101d357806306fdde03146102035780630ac491df146102255780630e89341c1461024757806314758d4e14610267575b600080fd5b3480156101ac57600080fd5b506101c06101bb3660046121f7565b61055a565b6040519081526020015b60405180910390f35b3480156101df57600080fd5b506101f36101ee366004612398565b6105f1565b60405190151581526020016101ca565b34801561020f57600080fd5b50610218610643565b6040516101ca91906126ef565b34801561023157600080fd5b506102456102403660046123d2565b6106d5565b005b34801561025357600080fd5b50610218610262366004612417565b610757565b34801561027357600080fd5b50610245610282366004612417565b6107f3565b610245610295366004612430565b61086b565b3480156102a657600080fd5b506102456102b536600461204a565b610b31565b3480156102c657600080fd5b50610245610bc8565b3480156102db57600080fd5b506102456102ea366004612325565b610c95565b3480156102fb57600080fd5b5061030f61030a366004612254565b610d1e565b6040516101ca9190612667565b34801561032857600080fd5b506102456103373660046121cd565b610e48565b34801561034857600080fd5b50610245610e9d565b34801561035d57600080fd5b5061024561036c366004612430565b610ed3565b34801561037d57600080fd5b506003546040516001600160a01b0390911681526020016101ca565b3480156103a557600080fd5b506103b96103b4366004612417565b610f3f565b6040516101ca97969594939291906126a8565b3480156103d857600080fd5b5061021861100a565b3480156103ed57600080fd5b506102456103fc3660046121cd565b611019565b34801561040d57600080fd5b5061024561041c366004612430565b611024565b34801561042d57600080fd5b5061024561043c366004612452565b611090565b34801561044d57600080fd5b5061024561045c366004612430565b611130565b34801561046d57600080fd5b506101f361047c366004611ffc565b60086020526000908152604090205460ff1681565b34801561049d57600080fd5b506102456104ac366004612159565b61119c565b3480156104bd57600080fd5b506101f36104cc366004612017565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561050657600080fd5b506102456105153660046120f4565b6111e1565b34801561052657600080fd5b50610245610535366004611ffc565b611268565b34801561054657600080fd5b50610245610555366004612221565b611303565b60006001600160a01b0383166105cb5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061062257506001600160e01b031982166303a24d0760e21b145b8061063d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606004805461065290612950565b80601f016020809104026020016040519081016040528092919081815260200182805461067e90612950565b80156106cb5780601f106106a0576101008083540402835291602001916106cb565b820191906000526020600020905b8154815290600101906020018083116106ae57829003601f168201915b5050505050905090565b6003546001600160a01b031633146106ff5760405162461bcd60e51b81526004016105c290612807565b60008181526007602052604090206006015461072d5760405162461bcd60e51b81526004016105c29061274a565b6000818152600760209081526040909120835161075292600590920191850190611e4c565b505050565b6000818152600760205260409020600301546060906107b15760405162461bcd60e51b81526020600482015260166024820152752aa9249d103737b732bc34b9ba32b73a103a37b5b2b760511b60448201526064016105c2565b6107ba8261138b565b60008381526007602090815260409182902091516107dd93926005019101612513565b6040516020818303038152906040529050919050565b6003546001600160a01b0316331461081d5760405162461bcd60e51b81526004016105c290612807565b60008181526007602052604090206006015461084b5760405162461bcd60e51b81526004016105c29061274a565b6000908152600760205260409020805460ff19811660ff90911615179055565b6000828152600760209081526040808320815160e081018352815460ff1615158152600182015493810193909352600281015491830191909152600381015460608301526004810154608083015260058101805460a0840191906108ce90612950565b80601f01602080910402602001604051908101604052809291908181526020018280546108fa90612950565b80156109475780601f1061091c57610100808354040283529160200191610947565b820191906000526020600020905b81548152906001019060200180831161092a57829003601f168201915b5050505050815260200160068201548152505090508060c00151600014156109815760405162461bcd60e51b81526004016105c29061274a565b333b63ffffffff16156109d65760405162461bcd60e51b815260206004820152601a60248201527f43616c6c65722063616e6e6f7420626520636f6e74726163742100000000000060448201526064016105c2565b6000821180156109ea575080608001518211155b610a2d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016105c2565b8060400151828260600151610a4291906128e9565b1115610a9a5760405162461bcd60e51b815260206004820152602160248201527f507572636861736520776f756c6420657863656564206d617820737570706c796044820152602160f81b60648201526084016105c2565b6020810151610aa99083612901565b3414610aed5760405162461bcd60e51b815260206004820152601360248201527253656e642070726f70657220616d6f756e742160681b60448201526064016105c2565b6060810151610afc908361141f565b600760008581526020019081526020016000206003018190555061075233848460405180602001604052806000815250611432565b6001600160a01b038516331480610b4d5750610b4d85336104cc565b610bb45760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105c2565b610bc1858585858561150c565b5050505050565b6003546001600160a01b03163314610bf25760405162461bcd60e51b81526004016105c290612807565b60004711610c3a5760405162461bcd60e51b81526020600482015260156024820152744e6f20616d6f756e7420746f20776974686472617760581b60448201526064016105c2565b6040514790600090339083908381818185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5050905080610c9157600080fd5b5050565b6003546001600160a01b03163314610cbf5760405162461bcd60e51b81526004016105c290612807565b600081815260076020908152604090912060018101879055600281018690558351610cf292600590920191850190611e4c565b506000908152600760205260409020805460ff1916951515959095178555506004909301929092555050565b60608151835114610d835760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105c2565b6000835167ffffffffffffffff811115610d9f57610d9f6129ff565b604051908082528060200260200182016040528015610dc8578160200160208202803683370190505b50905060005b8451811015610e4057610e13858281518110610dec57610dec6129e9565b6020026020010151858381518110610e0657610e066129e9565b602002602001015161055a565b828281518110610e2557610e256129e9565b6020908102919091010152610e39816129b8565b9050610dce565b509392505050565b6003546001600160a01b03163314610e725760405162461bcd60e51b81526004016105c290612807565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6003546001600160a01b03163314610ec75760405162461bcd60e51b81526004016105c290612807565b610ed160006116a8565b565b6003546001600160a01b03163314610efd5760405162461bcd60e51b81526004016105c290612807565b600081815260076020526040902060060154610f2b5760405162461bcd60e51b81526004016105c29061274a565b600090815260076020526040902060010155565b60076020526000908152604090208054600182015460028301546003840154600485015460058601805460ff90961696949593949293919291610f8190612950565b80601f0160208091040260200160405190810160405280929190818152602001828054610fad90612950565b8015610ffa5780601f10610fcf57610100808354040283529160200191610ffa565b820191906000526020600020905b815481529060010190602001808311610fdd57829003601f168201915b5050505050908060060154905087565b60606005805461065290612950565b610c913383836116fa565b6003546001600160a01b0316331461104e5760405162461bcd60e51b81526004016105c290612807565b60008181526007602052604090206006015461107c5760405162461bcd60e51b81526004016105c29061274a565b600090815260076020526040902060040155565b6003546001600160a01b031633146110ba5760405162461bcd60e51b81526004016105c290612807565b6000600760006110c960065490565b81526020808201929092526040016000908120805460ff191681556001810188905560028101879055600481018690556003810191909155835190925061111891600584019190850190611e4c565b50428160060181905550610bc1600680546001019055565b6003546001600160a01b0316331461115a5760405162461bcd60e51b81526004016105c290612807565b6000818152600760205260409020600601546111885760405162461bcd60e51b81526004016105c29061274a565b600090815260076020526040902060020155565b6003546001600160a01b031633146111c65760405162461bcd60e51b81526004016105c290612807565b610752838383604051806020016040528060008152506117db565b6001600160a01b0385163314806111fd57506111fd85336104cc565b61125b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105c2565b610bc18585858585611926565b6003546001600160a01b031633146112925760405162461bcd60e51b81526004016105c290612807565b6001600160a01b0381166112f75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105c2565b611300816116a8565b50565b3360009081526008602052604090205460ff166113735760405162461bcd60e51b815260206004820152602860248201527f4164647265737320646f6573206e6f742068617665207065726d697373696f6e604482015267103a3790313ab93760c11b60648201526084016105c2565b610752838383611a50565b5490565b80546001019055565b60606002805461139a90612950565b80601f01602080910402602001604051908101604052809291908181526020018280546113c690612950565b80156114135780601f106113e857610100808354040283529160200191611413565b820191906000526020600020905b8154815290600101906020018083116113f657829003601f168201915b50505050509050919050565b600061142b82846128e9565b9392505050565b6001600160a01b0384166114585760405162461bcd60e51b81526004016105c290612884565b33600061146485611bcc565b9050600061147185611bcc565b90506000868152602081815260408083206001600160a01b038b168452909152812080548792906114a39084906128e9565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461150383600089898989611c17565b50505050505050565b815183511461152d5760405162461bcd60e51b81526004016105c29061283c565b6001600160a01b0384166115535760405162461bcd60e51b81526004016105c290612778565b3360005b845181101561163a576000858281518110611574576115746129e9565b602002602001015190506000858381518110611592576115926129e9565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156115e25760405162461bcd60e51b81526004016105c2906127bd565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061161f9084906128e9565b9250508190555050505080611633906129b8565b9050611557565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161168a92919061267a565b60405180910390a46116a0818787878787611d82565b505050505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561176e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105c2565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166118015760405162461bcd60e51b81526004016105c290612884565b81518351146118225760405162461bcd60e51b81526004016105c29061283c565b3360005b84518110156118be57838181518110611841576118416129e9565b602002602001015160008087848151811061185e5761185e6129e9565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546118a691906128e9565b909155508190506118b6816129b8565b915050611826565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161190f92919061267a565b60405180910390a4610bc181600087878787611d82565b6001600160a01b03841661194c5760405162461bcd60e51b81526004016105c290612778565b33600061195885611bcc565b9050600061196585611bcc565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156119a85760405162461bcd60e51b81526004016105c2906127bd565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906119e59084906128e9565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a45848a8a8a8a8a611c17565b505050505050505050565b6001600160a01b038316611ab25760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016105c2565b336000611abe84611bcc565b90506000611acb84611bcc565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015611b545760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016105c2565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611503565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611c0657611c066129e9565b602090810291909101015292915050565b6001600160a01b0384163b156116a05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611c5b9089908990889088908890600401612622565b602060405180830381600087803b158015611c7557600080fd5b505af1925050508015611ca5575060408051601f3d908101601f19168201909252611ca2918101906123b5565b60015b611d5257611cb1612a15565b806308c379a01415611ceb5750611cc6612a31565b80611cd15750611ced565b8060405162461bcd60e51b81526004016105c291906126ef565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105c2565b6001600160e01b0319811663f23a6e6160e01b146115035760405162461bcd60e51b81526004016105c290612702565b6001600160a01b0384163b156116a05760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611dc690899089908890889088906004016125c4565b602060405180830381600087803b158015611de057600080fd5b505af1925050508015611e10575060408051601f3d908101601f19168201909252611e0d918101906123b5565b60015b611e1c57611cb1612a15565b6001600160e01b0319811663bc197c8160e01b146115035760405162461bcd60e51b81526004016105c290612702565b828054611e5890612950565b90600052602060002090601f016020900481019282611e7a5760008555611ec0565b82601f10611e9357805160ff1916838001178555611ec0565b82800160010185558215611ec0579182015b82811115611ec0578251825591602001919060010190611ea5565b50611ecc929150611ed0565b5090565b5b80821115611ecc5760008155600101611ed1565b80356001600160a01b0381168114611efc57600080fd5b919050565b600082601f830112611f1257600080fd5b81356020611f1f826128c5565b604051611f2c828261298b565b8381528281019150858301600585901b87018401881015611f4c57600080fd5b60005b85811015611f6b57813584529284019290840190600101611f4f565b5090979650505050505050565b80358015158114611efc57600080fd5b600082601f830112611f9957600080fd5b813567ffffffffffffffff811115611fb357611fb36129ff565b604051611fca601f8301601f19166020018261298b565b818152846020838601011115611fdf57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561200e57600080fd5b61142b82611ee5565b6000806040838503121561202a57600080fd5b61203383611ee5565b915061204160208401611ee5565b90509250929050565b600080600080600060a0868803121561206257600080fd5b61206b86611ee5565b945061207960208701611ee5565b9350604086013567ffffffffffffffff8082111561209657600080fd5b6120a289838a01611f01565b945060608801359150808211156120b857600080fd5b6120c489838a01611f01565b935060808801359150808211156120da57600080fd5b506120e788828901611f88565b9150509295509295909350565b600080600080600060a0868803121561210c57600080fd5b61211586611ee5565b945061212360208701611ee5565b93506040860135925060608601359150608086013567ffffffffffffffff81111561214d57600080fd5b6120e788828901611f88565b60008060006060848603121561216e57600080fd5b61217784611ee5565b9250602084013567ffffffffffffffff8082111561219457600080fd5b6121a087838801611f01565b935060408601359150808211156121b657600080fd5b506121c386828701611f01565b9150509250925092565b600080604083850312156121e057600080fd5b6121e983611ee5565b915061204160208401611f78565b6000806040838503121561220a57600080fd5b61221383611ee5565b946020939093013593505050565b60008060006060848603121561223657600080fd5b61223f84611ee5565b95602085013595506040909401359392505050565b6000806040838503121561226757600080fd5b823567ffffffffffffffff8082111561227f57600080fd5b818501915085601f83011261229357600080fd5b813560206122a0826128c5565b6040516122ad828261298b565b8381528281019150858301600585901b870184018b10156122cd57600080fd5b600096505b848710156122f7576122e381611ee5565b8352600196909601959183019183016122d2565b509650508601359250508082111561230e57600080fd5b5061231b85828601611f01565b9150509250929050565b60008060008060008060c0878903121561233e57600080fd5b61234787611f78565b9550602087013594506040870135935060608701359250608087013567ffffffffffffffff81111561237857600080fd5b61238489828a01611f88565b92505060a087013590509295509295509295565b6000602082840312156123aa57600080fd5b813561142b81612abb565b6000602082840312156123c757600080fd5b815161142b81612abb565b600080604083850312156123e557600080fd5b823567ffffffffffffffff8111156123fc57600080fd5b61240885828601611f88565b95602094909401359450505050565b60006020828403121561242957600080fd5b5035919050565b6000806040838503121561244357600080fd5b50508035926020909101359150565b6000806000806080858703121561246857600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff81111561249457600080fd5b6124a087828801611f88565b91505092959194509250565b600081518084526020808501945080840160005b838110156124dc578151875295820195908201906001016124c0565b509495945050505050565b600081518084526124ff816020860160208601612920565b601f01601f19169290920160200192915050565b6000835160206125268285838901612920565b845491840191600090600181811c908083168061254457607f831692505b85831081141561256257634e487b7160e01b85526022600452602485fd5b8080156125765760018114612587576125b4565b60ff198516885283880195506125b4565b60008b81526020902060005b858110156125ac5781548a820152908401908801612593565b505083880195505b50939a9950505050505050505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906125f0908301866124ac565b828103606084015261260281866124ac565b9050828103608084015261261681856124e7565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061265c908301846124e7565b979650505050505050565b60208152600061142b60208301846124ac565b60408152600061268d60408301856124ac565b828103602084015261269f81856124ac565b95945050505050565b871515815286602082015285604082015284606082015283608082015260e060a082015260006126db60e08301856124e7565b90508260c083015298975050505050505050565b60208152600061142b60208301846124e7565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b602080825260149082015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b600067ffffffffffffffff8211156128df576128df6129ff565b5060051b60200190565b600082198211156128fc576128fc6129d3565b500190565b600081600019048311821515161561291b5761291b6129d3565b500290565b60005b8381101561293b578181015183820152602001612923565b8381111561294a576000848401525b50505050565b600181811c9082168061296457607f821691505b6020821081141561298557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff811182821017156129b1576129b16129ff565b6040525050565b60006000198214156129cc576129cc6129d3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115612a2e5760046000803e5060005160e01c5b90565b600060443d1015612a3f5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715612a6f57505050505090565b8285019150815181811115612a875750505050505090565b843d8701016020828501011115612aa15750505050505090565b612ab06020828601018761298b565b509095945050505050565b6001600160e01b03198116811461130057600080fdfea2646970667358221220d1bcfdf1c8a90d5fdf2fa4a2d2e4ff139c050608a74d10589cbebdd9ec00569b64736f6c63430008070033
Deployed Bytecode Sourcemap
47513:4984:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32133:231;;;;;;;;;;-1:-1:-1;32133:231:0;;;;;:::i;:::-;;:::i;:::-;;;23779:25:1;;;23767:2;23752:18;32133:231:0;;;;;;;;31156:310;;;;;;;;;;-1:-1:-1;31156:310:0;;;;;:::i;:::-;;:::i;:::-;;;13708:14:1;;13701:22;13683:41;;13671:2;13656:18;31156:310:0;13543:187:1;51811:83:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;50943:204::-;;;;;;;;;;-1:-1:-1;50943:204:0;;;;;:::i;:::-;;:::i;:::-;;51997:225;;;;;;;;;;-1:-1:-1;51997:225:0;;;;;:::i;:::-;;:::i;51594:204::-;;;;;;;;;;-1:-1:-1;51594:204:0;;;;;:::i;:::-;;:::i;49569:630::-;;;;;;:::i;:::-;;:::i;34072:442::-;;;;;;;;;;-1:-1:-1;34072:442:0;;;;;:::i;:::-;;:::i;52230:264::-;;;;;;;;;;;;;:::i;49091:465::-;;;;;;;;;;-1:-1:-1;49091:465:0;;;;;:::i;:::-;;:::i;32530:524::-;;;;;;;;;;-1:-1:-1;32530:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50572:131::-;;;;;;;;;;-1:-1:-1;50572:131:0;;;;;:::i;:::-;;:::i;12569:103::-;;;;;;;;;;;;;:::i;51377:208::-;;;;;;;;;;-1:-1:-1;51377:208:0;;;;;:::i;:::-;;:::i;11918:87::-;;;;;;;;;;-1:-1:-1;11991:6:0;;11918:87;;-1:-1:-1;;;;;11991:6:0;;;11349:51:1;;11337:2;11322:18;11918:87:0;11203:203:1;48010:39:0;;;;;;;;;;-1:-1:-1;48010:39:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;51902:87::-;;;;;;;;;;;;;:::i;33127:155::-;;;;;;;;;;-1:-1:-1;33127:155:0;;;;;:::i;:::-;;:::i;50711:223::-;;;;;;;;;;-1:-1:-1;50711:223:0;;;;;:::i;:::-;;:::i;48579:504::-;;;;;;;;;;-1:-1:-1;48579:504:0;;;;;:::i;:::-;;:::i;51156:212::-;;;;;;;;;;-1:-1:-1;51156:212:0;;;;;:::i;:::-;;:::i;48056:47::-;;;;;;;;;;-1:-1:-1;48056:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;50207:151;;;;;;;;;;-1:-1:-1;50207:151:0;;;;;:::i;:::-;;:::i;33354:168::-;;;;;;;;;;-1:-1:-1;33354:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;33477:27:0;;;33453:4;33477:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;33354:168;33594:401;;;;;;;;;;-1:-1:-1;33594:401:0;;;;;:::i;:::-;;:::i;12827:201::-;;;;;;;;;;-1:-1:-1;12827:201:0;;;;;:::i;:::-;;:::i;50366:198::-;;;;;;;;;;-1:-1:-1;50366:198:0;;;;;:::i;:::-;;:::i;32133:231::-;32219:7;-1:-1:-1;;;;;32247:21:0;;32239:77;;;;-1:-1:-1;;;32239:77:0;;16006:2:1;32239:77:0;;;15988:21:1;16045:2;16025:18;;;16018:30;16084:34;16064:18;;;16057:62;-1:-1:-1;;;16135:18:1;;;16128:41;16186:19;;32239:77:0;;;;;;;;;-1:-1:-1;32334:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;32334:22:0;;;;;;;;;;;;32133:231::o;31156:310::-;31258:4;-1:-1:-1;;;;;;31295:41:0;;-1:-1:-1;;;31295:41:0;;:110;;-1:-1:-1;;;;;;;31353:52:0;;-1:-1:-1;;;31353:52:0;31295:110;:163;;;-1:-1:-1;;;;;;;;;;23292:40:0;;;31422:36;31275:183;31156:310;-1:-1:-1;;31156:310:0:o;51811:83::-;51848:13;51881:5;51874:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51811:83;:::o;50943:204::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;51042:14:::1;::::0;;;:6:::1;:14;::::0;;;;:24:::1;;::::0;51034:62:::1;;;;-1:-1:-1::0;;;51034:62:0::1;;;;;;;:::i;:::-;51107:14;::::0;;;:6:::1;:14;::::0;;;;;;;:32;;::::1;::::0;:22:::1;::::0;;::::1;::::0;:32;::::1;::::0;::::1;:::i;:::-;;50943:204:::0;;:::o;51997:225::-;52109:1;52086:10;;;:6;:10;;;;;:20;;;52052:13;;52078:59;;;;-1:-1:-1;;;52078:59:0;;20748:2:1;52078:59:0;;;20730:21:1;20787:2;20767:18;;;20760:30;-1:-1:-1;;;20806:18:1;;;20799:52;20868:18;;52078:59:0;20546:346:1;52078:59:0;52179:13;52189:2;52179:9;:13::i;:::-;52194:10;;;;:6;:10;;;;;;;;;52162:51;;;;;52194:18;;;52162:51;;:::i;:::-;;;;;;;;;;;;;52148:66;;51997:225;;;:::o;51594:204::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;51675:14:::1;::::0;;;:6:::1;:14;::::0;;;;:24:::1;;::::0;51667:62:::1;;;;-1:-1:-1::0;;;51667:62:0::1;;;;;;;:::i;:::-;51767:14;::::0;;;:6:::1;:14;::::0;;;;:23;;-1:-1:-1;;51740:50:0;::::1;51767:23;::::0;;::::1;51766:24;51740:50;::::0;;51594:204::o;49569:630::-;49641:19;49663:11;;;:6;:11;;;;;;;;49641:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49695:6;:16;;;49715:1;49695:21;;49687:54;;;;-1:-1:-1;;;49687:54:0;;;;;;;:::i;:::-;49766:10;48221:18;48256:9;;;49746:62;;;;-1:-1:-1;;;49746:62:0;;21447:2:1;49746:62:0;;;21429:21:1;21486:2;21466:18;;;21459:30;21525:28;21505:18;;;21498:56;21571:18;;49746:62:0;21245:350:1;49746:62:0;49837:1;49827:7;:11;:46;;;;;49853:6;:20;;;49842:7;:31;;49827:46;49819:79;;;;-1:-1:-1;;;49819:79:0;;17639:2:1;49819:79:0;;;17621:21:1;17678:2;17658:18;;;17651:30;-1:-1:-1;;;17697:18:1;;;17690:50;17757:18;;49819:79:0;17437:344:1;49819:79:0;49947:6;:16;;;49936:7;49917:6;:16;;;:26;;;;:::i;:::-;:46;;49909:92;;;;-1:-1:-1;;;49909:92:0;;23433:2:1;49909:92:0;;;23415:21:1;23472:2;23452:18;;;23445:30;23511:34;23491:18;;;23484:62;-1:-1:-1;;;23562:18:1;;;23555:31;23603:19;;49909:92:0;23231:397:1;49909:92:0;50043:12;;;;50033:22;;:7;:22;:::i;:::-;50020:9;:35;50012:67;;;;-1:-1:-1;;;50012:67:0;;21099:2:1;50012:67:0;;;21081:21:1;21138:2;21118:18;;;21111:30;-1:-1:-1;;;21157:18:1;;;21150:49;21216:18;;50012:67:0;20897:343:1;50012:67:0;50116:16;;;;:29;;50137:7;50116:20;:29::i;:::-;50092:6;:11;50099:3;50092:11;;;;;;;;;;;:21;;:53;;;;50156:35;50162:10;50174:3;50179:7;50156:35;;;;;;;;;;;;:5;:35::i;34072:442::-;-1:-1:-1;;;;;34305:20:0;;10865:10;34305:20;;:60;;-1:-1:-1;34329:36:0;34346:4;10865:10;33354:168;:::i;34329:36::-;34283:160;;;;-1:-1:-1;;;34283:160:0;;19153:2:1;34283:160:0;;;19135:21:1;19192:2;19172:18;;;19165:30;19231:34;19211:18;;;19204:62;-1:-1:-1;;;19282:18:1;;;19275:48;19340:19;;34283:160:0;18951:414:1;34283:160:0;34454:52;34477:4;34483:2;34487:3;34492:7;34501:4;34454:22;:52::i;:::-;34072:442;;;;;:::o;52230:264::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;52312:1:::1;52288:21;:25;52280:59;;;::::0;-1:-1:-1;;;52280:59:0;;15247:2:1;52280:59:0::1;::::0;::::1;15229:21:1::0;15286:2;15266:18;;;15259:30;-1:-1:-1;;;15305:18:1;;;15298:51;15366:18;;52280:59:0::1;15045:345:1::0;52280:59:0::1;52417:44;::::0;52368:21:::1;::::0;52350:15:::1;::::0;52425:10:::1;::::0;52368:21;;52350:15;52417:44;52350:15;52417:44;52368:21;52425:10;52417:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52400:61;;;52480:5;52472:14;;;::::0;::::1;;52269:225;;52230:264::o:0;49091:465::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;49320:14:::1;::::0;;;:6:::1;:14;::::0;;;;;;;:20:::1;::::0;::::1;:33:::0;;;49364:24:::1;::::0;::::1;:37:::0;;;49413:33;;::::1;::::0;:22:::1;::::0;;::::1;::::0;:33;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;49457:14:0::1;::::0;;;:6:::1;:14;::::0;;;;:35;;-1:-1:-1;;49457:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;49503:28:0::1;::::0;;::::1;:45:::0;;;;-1:-1:-1;;49091:465:0:o;32530:524::-;32686:16;32747:3;:10;32728:8;:15;:29;32720:83;;;;-1:-1:-1;;;32720:83:0;;22212:2:1;32720:83:0;;;22194:21:1;22251:2;22231:18;;;22224:30;22290:34;22270:18;;;22263:62;-1:-1:-1;;;22341:18:1;;;22334:39;22390:19;;32720:83:0;22010:405:1;32720:83:0;32816:30;32863:8;:15;32849:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32849:30:0;;32816:63;;32897:9;32892:122;32916:8;:15;32912:1;:19;32892:122;;;32972:30;32982:8;32991:1;32982:11;;;;;;;;:::i;:::-;;;;;;;32995:3;32999:1;32995:6;;;;;;;;:::i;:::-;;;;;;;32972:9;:30::i;:::-;32953:13;32967:1;32953:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;32933:3;;;:::i;:::-;;;32892:122;;;-1:-1:-1;33033:13:0;32530:524;-1:-1:-1;;;32530:524:0:o;50572:131::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50660:25:0;;;::::1;;::::0;;;:15:::1;:25;::::0;;;;:35;;-1:-1:-1;;50660:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50572:131::o;12569:103::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;12634:30:::1;12661:1;12634:18;:30::i;:::-;12569:103::o:0;51377:208::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;51479:14:::1;::::0;;;:6:::1;:14;::::0;;;;:24:::1;;::::0;51471:62:::1;;;;-1:-1:-1::0;;;51471:62:0::1;;;;;;;:::i;:::-;51544:14;::::0;;;:6:::1;:14;::::0;;;;:20:::1;;:33:::0;51377:208::o;48010:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51902:87::-;51941:13;51974:7;51967:14;;;;;:::i;33127:155::-;33222:52;10865:10;33255:8;33265;33222:18;:52::i;50711:223::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;50816:14:::1;::::0;;;:6:::1;:14;::::0;;;;:24:::1;;::::0;50808:62:::1;;;;-1:-1:-1::0;;;50808:62:0::1;;;;;;;:::i;:::-;50881:14;::::0;;;:6:::1;:14;::::0;;;;:28:::1;;:45:::0;50711:223::o;48579:504::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;48753:16:::1;48772:6;:30;48779:22;:12;7759:14:::0;;7667:114;48779:22:::1;48772:30:::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;48772:30:0;;;48813:19;;-1:-1:-1;;48813:19:0::1;::::0;;;48843:8;::::1;:17:::0;;;48871:12:::1;::::0;::::1;:25:::0;;;48907:16:::1;::::0;::::1;:33:::0;;;48951:12:::1;::::0;::::1;:16:::0;;;;48978:21;;48772:30;;-1:-1:-1;48978:21:0::1;::::0;:10:::1;::::0;::::1;::::0;:21;;::::1;::::0;::::1;:::i;:::-;;49025:15;49010:2;:12;;:30;;;;49051:24;:12;7878:19:::0;;7896:1;7878:19;;;7789:127;51156:212;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;51258:14:::1;::::0;;;:6:::1;:14;::::0;;;;:24:::1;;::::0;51250:62:::1;;;;-1:-1:-1::0;;;51250:62:0::1;;;;;;;:::i;:::-;51323:14;::::0;;;:6:::1;:14;::::0;;;;:24:::1;;:37:::0;51156:212::o;50207:151::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;50317:33:::1;50328:3;50333;50338:7;50317:33;;;;;;;;;;;::::0;:10:::1;:33::i;33594:401::-:0;-1:-1:-1;;;;;33802:20:0;;10865:10;33802:20;;:60;;-1:-1:-1;33826:36:0;33843:4;10865:10;33354:168;:::i;33826:36::-;33780:151;;;;-1:-1:-1;;;33780:151:0;;17988:2:1;33780:151:0;;;17970:21:1;18027:2;18007:18;;;18000:30;18066:34;18046:18;;;18039:62;-1:-1:-1;;;18117:18:1;;;18110:39;18166:19;;33780:151:0;17786:405:1;33780:151:0;33942:45;33960:4;33966:2;33970;33974:6;33982:4;33942:17;:45::i;12827:201::-;11991:6;;-1:-1:-1;;;;;11991:6:0;10865:10;12138:23;12130:68;;;;-1:-1:-1;;;12130:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12916:22:0;::::1;12908:73;;;::::0;-1:-1:-1;;;12908:73:0;;16418:2:1;12908:73:0::1;::::0;::::1;16400:21:1::0;16457:2;16437:18;;;16430:30;16496:34;16476:18;;;16469:62;-1:-1:-1;;;16547:18:1;;;16540:36;16593:19;;12908:73:0::1;16216:402:1::0;12908:73:0::1;12992:28;13011:8;12992:18;:28::i;:::-;12827:201:::0;:::o;50366:198::-;50466:10;50450:27;;;;:15;:27;;;;;;;;50442:80;;;;-1:-1:-1;;;50442:80:0;;17230:2:1;50442:80:0;;;17212:21:1;17269:2;17249:18;;;17242:30;17308:34;17288:18;;;17281:62;-1:-1:-1;;;17359:18:1;;;17352:38;17407:19;;50442:80:0;17028:404:1;50442:80:0;50533:23;50539:4;50545:2;50549:6;50533:5;:23::i;7667:114::-;7759:14;;7667:114::o;7789:127::-;7878:19;;7896:1;7878:19;;;7789:127::o;31877:105::-;31937:13;31970:4;31963:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31877:105;;;:::o;2771:98::-;2829:7;2856:5;2860:1;2856;:5;:::i;:::-;2849:12;2771:98;-1:-1:-1;;;2771:98:0:o;38774:729::-;-1:-1:-1;;;;;38927:16:0;;38919:62;;;;-1:-1:-1;;;38919:62:0;;;;;;;:::i;:::-;10865:10;38994:16;39059:21;39077:2;39059:17;:21::i;:::-;39036:44;;39091:24;39118:25;39136:6;39118:17;:25::i;:::-;39091:52;;39235:9;:13;;;;;;;;;;;-1:-1:-1;;;;;39235:17:0;;;;;;;;;:27;;39256:6;;39235:9;:27;;39256:6;;39235:27;:::i;:::-;;;;-1:-1:-1;;39278:52:0;;;23989:25:1;;;24045:2;24030:18;;24023:34;;;-1:-1:-1;;;;;39278:52:0;;;;39311:1;;39278:52;;;;;;23962:18:1;39278:52:0;;;;;;;39421:74;39452:8;39470:1;39474:2;39478;39482:6;39490:4;39421:30;:74::i;:::-;38908:595;;;38774:729;;;;:::o;36310:1146::-;36537:7;:14;36523:3;:10;:28;36515:81;;;;-1:-1:-1;;;36515:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36615:16:0;;36607:66;;;;-1:-1:-1;;;36607:66:0;;;;;;;:::i;:::-;10865:10;36686:16;36803:421;36827:3;:10;36823:1;:14;36803:421;;;36859:10;36872:3;36876:1;36872:6;;;;;;;;:::i;:::-;;;;;;;36859:19;;36893:14;36910:7;36918:1;36910:10;;;;;;;;:::i;:::-;;;;;;;;;;;;36937:19;36959:13;;;;;;;;;;-1:-1:-1;;;;;36959:19:0;;;;;;;;;;;;36910:10;;-1:-1:-1;37001:21:0;;;;36993:76;;;;-1:-1:-1;;;36993:76:0;;;;;;;:::i;:::-;37113:9;:13;;;;;;;;;;;-1:-1:-1;;;;;37113:19:0;;;;;;;;;;37135:20;;;37113:42;;37185:17;;;;;;;:27;;37135:20;;37113:9;37185:27;;37135:20;;37185:27;:::i;:::-;;;;;;;;36844:380;;;36839:3;;;;:::i;:::-;;;36803:421;;;;37271:2;-1:-1:-1;;;;;37241:47:0;37265:4;-1:-1:-1;;;;;37241:47:0;37255:8;-1:-1:-1;;;;;37241:47:0;;37275:3;37280:7;37241:47;;;;;;;:::i;:::-;;;;;;;;37373:75;37409:8;37419:4;37425:2;37429:3;37434:7;37443:4;37373:35;:75::i;:::-;36504:952;36310:1146;;;;;:::o;13188:191::-;13281:6;;;-1:-1:-1;;;;;13298:17:0;;;-1:-1:-1;;;;;;13298:17:0;;;;;;;13331:40;;13281:6;;;13298:17;13281:6;;13331:40;;13262:16;;13331:40;13251:128;13188:191;:::o;43044:331::-;43199:8;-1:-1:-1;;;;;43190:17:0;:5;-1:-1:-1;;;;;43190:17:0;;;43182:71;;;;-1:-1:-1;;;43182:71:0;;21802:2:1;43182:71:0;;;21784:21:1;21841:2;21821:18;;;21814:30;21880:34;21860:18;;;21853:62;-1:-1:-1;;;21931:18:1;;;21924:39;21980:19;;43182:71:0;21600:405:1;43182:71:0;-1:-1:-1;;;;;43264:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;43264:46:0;;;;;;;;;;43326:41;;13683::1;;;43326::0;;13656:18:1;43326:41:0;;;;;;;43044:331;;;:::o;39859:813::-;-1:-1:-1;;;;;40037:16:0;;40029:62;;;;-1:-1:-1;;;40029:62:0;;;;;;;:::i;:::-;40124:7;:14;40110:3;:10;:28;40102:81;;;;-1:-1:-1;;;40102:81:0;;;;;;;:::i;:::-;10865:10;40196:16;40319:103;40343:3;:10;40339:1;:14;40319:103;;;40400:7;40408:1;40400:10;;;;;;;;:::i;:::-;;;;;;;40375:9;:17;40385:3;40389:1;40385:6;;;;;;;;:::i;:::-;;;;;;;40375:17;;;;;;;;;;;:21;40393:2;-1:-1:-1;;;;;40375:21:0;-1:-1:-1;;;;;40375:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;40355:3:0;;-1:-1:-1;40355:3:0;;;:::i;:::-;;;;40319:103;;;;40475:2;-1:-1:-1;;;;;40439:53:0;40471:1;-1:-1:-1;;;;;40439:53:0;40453:8;-1:-1:-1;;;;;40439:53:0;;40479:3;40484:7;40439:53;;;;;;;:::i;:::-;;;;;;;;40583:81;40619:8;40637:1;40641:2;40645:3;40650:7;40659:4;40583:35;:81::i;34978:974::-;-1:-1:-1;;;;;35166:16:0;;35158:66;;;;-1:-1:-1;;;35158:66:0;;;;;;;:::i;:::-;10865:10;35237:16;35302:21;35320:2;35302:17;:21::i;:::-;35279:44;;35334:24;35361:25;35379:6;35361:17;:25::i;:::-;35334:52;;35472:19;35494:13;;;;;;;;;;;-1:-1:-1;;;;;35494:19:0;;;;;;;;;;35532:21;;;;35524:76;;;;-1:-1:-1;;;35524:76:0;;;;;;;:::i;:::-;35636:9;:13;;;;;;;;;;;-1:-1:-1;;;;;35636:19:0;;;;;;;;;;35658:20;;;35636:42;;35700:17;;;;;;;:27;;35658:20;;35636:9;35700:27;;35658:20;;35700:27;:::i;:::-;;;;-1:-1:-1;;35745:46:0;;;23989:25:1;;;24045:2;24030:18;;24023:34;;;-1:-1:-1;;;;;35745:46:0;;;;;;;;;;;;;;23962:18:1;35745:46:0;;;;;;;35876:68;35907:8;35917:4;35923:2;35927;35931:6;35939:4;35876:30;:68::i;:::-;35147:805;;;;34978:974;;;;;:::o;40922:808::-;-1:-1:-1;;;;;41049:18:0;;41041:66;;;;-1:-1:-1;;;41041:66:0;;19572:2:1;41041:66:0;;;19554:21:1;19611:2;19591:18;;;19584:30;19650:34;19630:18;;;19623:62;-1:-1:-1;;;19701:18:1;;;19694:33;19744:19;;41041:66:0;19370:399:1;41041:66:0;10865:10;41120:16;41185:21;41203:2;41185:17;:21::i;:::-;41162:44;;41217:24;41244:25;41262:6;41244:17;:25::i;:::-;41282:66;;;;;;;;;-1:-1:-1;41282:66:0;;;;41383:13;;;;;;;;;-1:-1:-1;;;;;41383:19:0;;;;;;;;41217:52;;-1:-1:-1;41421:21:0;;;;41413:70;;;;-1:-1:-1;;;41413:70:0;;16825:2:1;41413:70:0;;;16807:21:1;16864:2;16844:18;;;16837:30;16903:34;16883:18;;;16876:62;-1:-1:-1;;;16954:18:1;;;16947:34;16998:19;;41413:70:0;16623:400:1;41413:70:0;41519:9;:13;;;;;;;;;;;-1:-1:-1;;;;;41519:19:0;;;;;;;;;;;;41541:20;;;41519:42;;41590:54;;23989:25:1;;;24030:18;;;24023:34;;;41519:19:0;;41590:54;;;;;;23962:18:1;41590:54:0;;;;;;;41657:65;;;;;;;;;41701:1;41657:65;;;36310:1146;47308:198;47428:16;;;47442:1;47428:16;;;;;;;;;47374;;47403:22;;47428:16;;;;;;;;;;;;-1:-1:-1;47428:16:0;47403:41;;47466:7;47455:5;47461:1;47455:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;47493:5;47308:198;-1:-1:-1;;47308:198:0:o;45735:744::-;-1:-1:-1;;;;;45950:13:0;;14760:19;:23;45946:526;;45986:72;;-1:-1:-1;;;45986:72:0;;-1:-1:-1;;;;;45986:38:0;;;;;:72;;46025:8;;46035:4;;46041:2;;46045:6;;46053:4;;45986:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45986:72:0;;;;;;;;-1:-1:-1;;45986:72:0;;;;;;;;;;;;:::i;:::-;;;45982:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;46334:6;46327:14;;-1:-1:-1;;;46327:14:0;;;;;;;;:::i;45982:479::-;;;46383:62;;-1:-1:-1;;;46383:62:0;;14826:2:1;46383:62:0;;;14808:21:1;14865:2;14845:18;;;14838:30;14904:34;14884:18;;;14877:62;-1:-1:-1;;;14955:18:1;;;14948:50;15015:19;;46383:62:0;14624:416:1;45982:479:0;-1:-1:-1;;;;;;46108:55:0;;-1:-1:-1;;;46108:55:0;46104:154;;46188:50;;-1:-1:-1;;;46188:50:0;;;;;;;:::i;46487:813::-;-1:-1:-1;;;;;46727:13:0;;14760:19;:23;46723:570;;46763:79;;-1:-1:-1;;;46763:79:0;;-1:-1:-1;;;;;46763:43:0;;;;;:79;;46807:8;;46817:4;;46823:3;;46828:7;;46837:4;;46763:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46763:79:0;;;;;;;;-1:-1:-1;;46763:79:0;;;;;;;;;;;;:::i;:::-;;;46759:523;;;;:::i;:::-;-1:-1:-1;;;;;;46924:60:0;;-1:-1:-1;;;46924:60:0;46920:159;;47009:50;;-1:-1:-1;;;47009:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:735::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;402:43;442:2;402:43;:::i;:::-;474:2;468:9;486:31;514:2;506:6;486:31;:::i;:::-;552:18;;;586:15;;;;-1:-1:-1;621:15:1;;;671:1;667:10;;;655:23;;651:32;;648:41;-1:-1:-1;645:61:1;;;702:1;699;692:12;645:61;724:1;734:163;748:2;745:1;742:9;734:163;;;805:17;;793:30;;843:12;;;;875;;;;766:1;759:9;734:163;;;-1:-1:-1;915:6:1;;192:735;-1:-1:-1;;;;;;;192:735:1:o;932:160::-;997:20;;1053:13;;1046:21;1036:32;;1026:60;;1082:1;1079;1072:12;1097:555;1139:5;1192:3;1185:4;1177:6;1173:17;1169:27;1159:55;;1210:1;1207;1200:12;1159:55;1246:6;1233:20;1272:18;1268:2;1265:26;1262:52;;;1294:18;;:::i;:::-;1343:2;1337:9;1355:67;1410:2;1391:13;;-1:-1:-1;;1387:27:1;1416:4;1383:38;1337:9;1355:67;:::i;:::-;1446:2;1438:6;1431:18;1492:3;1485:4;1480:2;1472:6;1468:15;1464:26;1461:35;1458:55;;;1509:1;1506;1499:12;1458:55;1573:2;1566:4;1558:6;1554:17;1547:4;1539:6;1535:17;1522:54;1620:1;1596:15;;;1613:4;1592:26;1585:37;;;;1600:6;1097:555;-1:-1:-1;;;1097:555:1:o;1657:186::-;1716:6;1769:2;1757:9;1748:7;1744:23;1740:32;1737:52;;;1785:1;1782;1775:12;1737:52;1808:29;1827:9;1808:29;:::i;1848:260::-;1916:6;1924;1977:2;1965:9;1956:7;1952:23;1948:32;1945:52;;;1993:1;1990;1983:12;1945:52;2016:29;2035:9;2016:29;:::i;:::-;2006:39;;2064:38;2098:2;2087:9;2083:18;2064:38;:::i;:::-;2054:48;;1848:260;;;;;:::o;2113:943::-;2267:6;2275;2283;2291;2299;2352:3;2340:9;2331:7;2327:23;2323:33;2320:53;;;2369:1;2366;2359:12;2320:53;2392:29;2411:9;2392:29;:::i;:::-;2382:39;;2440:38;2474:2;2463:9;2459:18;2440:38;:::i;:::-;2430:48;;2529:2;2518:9;2514:18;2501:32;2552:18;2593:2;2585:6;2582:14;2579:34;;;2609:1;2606;2599:12;2579:34;2632:61;2685:7;2676:6;2665:9;2661:22;2632:61;:::i;:::-;2622:71;;2746:2;2735:9;2731:18;2718:32;2702:48;;2775:2;2765:8;2762:16;2759:36;;;2791:1;2788;2781:12;2759:36;2814:63;2869:7;2858:8;2847:9;2843:24;2814:63;:::i;:::-;2804:73;;2930:3;2919:9;2915:19;2902:33;2886:49;;2960:2;2950:8;2947:16;2944:36;;;2976:1;2973;2966:12;2944:36;;2999:51;3042:7;3031:8;3020:9;3016:24;2999:51;:::i;:::-;2989:61;;;2113:943;;;;;;;;:::o;3061:606::-;3165:6;3173;3181;3189;3197;3250:3;3238:9;3229:7;3225:23;3221:33;3218:53;;;3267:1;3264;3257:12;3218:53;3290:29;3309:9;3290:29;:::i;:::-;3280:39;;3338:38;3372:2;3361:9;3357:18;3338:38;:::i;:::-;3328:48;;3423:2;3412:9;3408:18;3395:32;3385:42;;3474:2;3463:9;3459:18;3446:32;3436:42;;3529:3;3518:9;3514:19;3501:33;3557:18;3549:6;3546:30;3543:50;;;3589:1;3586;3579:12;3543:50;3612:49;3653:7;3644:6;3633:9;3629:22;3612:49;:::i;3672:669::-;3799:6;3807;3815;3868:2;3856:9;3847:7;3843:23;3839:32;3836:52;;;3884:1;3881;3874:12;3836:52;3907:29;3926:9;3907:29;:::i;:::-;3897:39;;3987:2;3976:9;3972:18;3959:32;4010:18;4051:2;4043:6;4040:14;4037:34;;;4067:1;4064;4057:12;4037:34;4090:61;4143:7;4134:6;4123:9;4119:22;4090:61;:::i;:::-;4080:71;;4204:2;4193:9;4189:18;4176:32;4160:48;;4233:2;4223:8;4220:16;4217:36;;;4249:1;4246;4239:12;4217:36;;4272:63;4327:7;4316:8;4305:9;4301:24;4272:63;:::i;:::-;4262:73;;;3672:669;;;;;:::o;4346:254::-;4411:6;4419;4472:2;4460:9;4451:7;4447:23;4443:32;4440:52;;;4488:1;4485;4478:12;4440:52;4511:29;4530:9;4511:29;:::i;:::-;4501:39;;4559:35;4590:2;4579:9;4575:18;4559:35;:::i;4605:254::-;4673:6;4681;4734:2;4722:9;4713:7;4709:23;4705:32;4702:52;;;4750:1;4747;4740:12;4702:52;4773:29;4792:9;4773:29;:::i;:::-;4763:39;4849:2;4834:18;;;;4821:32;;-1:-1:-1;;;4605:254:1:o;4864:322::-;4941:6;4949;4957;5010:2;4998:9;4989:7;4985:23;4981:32;4978:52;;;5026:1;5023;5016:12;4978:52;5049:29;5068:9;5049:29;:::i;:::-;5039:39;5125:2;5110:18;;5097:32;;-1:-1:-1;5176:2:1;5161:18;;;5148:32;;4864:322;-1:-1:-1;;;4864:322:1:o;5191:1219::-;5309:6;5317;5370:2;5358:9;5349:7;5345:23;5341:32;5338:52;;;5386:1;5383;5376:12;5338:52;5426:9;5413:23;5455:18;5496:2;5488:6;5485:14;5482:34;;;5512:1;5509;5502:12;5482:34;5550:6;5539:9;5535:22;5525:32;;5595:7;5588:4;5584:2;5580:13;5576:27;5566:55;;5617:1;5614;5607:12;5566:55;5653:2;5640:16;5675:4;5698:43;5738:2;5698:43;:::i;:::-;5770:2;5764:9;5782:31;5810:2;5802:6;5782:31;:::i;:::-;5848:18;;;5882:15;;;;-1:-1:-1;5917:11:1;;;5959:1;5955:10;;;5947:19;;5943:28;;5940:41;-1:-1:-1;5937:61:1;;;5994:1;5991;5984:12;5937:61;6016:1;6007:10;;6026:169;6040:2;6037:1;6034:9;6026:169;;;6097:23;6116:3;6097:23;:::i;:::-;6085:36;;6058:1;6051:9;;;;;6141:12;;;;6173;;6026:169;;;-1:-1:-1;6214:6:1;-1:-1:-1;;6258:18:1;;6245:32;;-1:-1:-1;;6289:16:1;;;6286:36;;;6318:1;6315;6308:12;6286:36;;6341:63;6396:7;6385:8;6374:9;6370:24;6341:63;:::i;:::-;6331:73;;;5191:1219;;;;;:::o;6415:664::-;6526:6;6534;6542;6550;6558;6566;6619:3;6607:9;6598:7;6594:23;6590:33;6587:53;;;6636:1;6633;6626:12;6587:53;6659:26;6675:9;6659:26;:::i;:::-;6649:36;;6732:2;6721:9;6717:18;6704:32;6694:42;;6783:2;6772:9;6768:18;6755:32;6745:42;;6834:2;6823:9;6819:18;6806:32;6796:42;;6889:3;6878:9;6874:19;6861:33;6917:18;6909:6;6906:30;6903:50;;;6949:1;6946;6939:12;6903:50;6972:49;7013:7;7004:6;6993:9;6989:22;6972:49;:::i;:::-;6962:59;;;7068:3;7057:9;7053:19;7040:33;7030:43;;6415:664;;;;;;;;:::o;7084:245::-;7142:6;7195:2;7183:9;7174:7;7170:23;7166:32;7163:52;;;7211:1;7208;7201:12;7163:52;7250:9;7237:23;7269:30;7293:5;7269:30;:::i;7334:249::-;7403:6;7456:2;7444:9;7435:7;7431:23;7427:32;7424:52;;;7472:1;7469;7462:12;7424:52;7504:9;7498:16;7523:30;7547:5;7523:30;:::i;7588:389::-;7666:6;7674;7727:2;7715:9;7706:7;7702:23;7698:32;7695:52;;;7743:1;7740;7733:12;7695:52;7783:9;7770:23;7816:18;7808:6;7805:30;7802:50;;;7848:1;7845;7838:12;7802:50;7871:49;7912:7;7903:6;7892:9;7888:22;7871:49;:::i;:::-;7861:59;7967:2;7952:18;;;;7939:32;;-1:-1:-1;;;;7588:389:1:o;7982:180::-;8041:6;8094:2;8082:9;8073:7;8069:23;8065:32;8062:52;;;8110:1;8107;8100:12;8062:52;-1:-1:-1;8133:23:1;;7982:180;-1:-1:-1;7982:180:1:o;8167:248::-;8235:6;8243;8296:2;8284:9;8275:7;8271:23;8267:32;8264:52;;;8312:1;8309;8302:12;8264:52;-1:-1:-1;;8335:23:1;;;8405:2;8390:18;;;8377:32;;-1:-1:-1;8167:248:1:o;8420:526::-;8516:6;8524;8532;8540;8593:3;8581:9;8572:7;8568:23;8564:33;8561:53;;;8610:1;8607;8600:12;8561:53;8646:9;8633:23;8623:33;;8703:2;8692:9;8688:18;8675:32;8665:42;;8754:2;8743:9;8739:18;8726:32;8716:42;;8809:2;8798:9;8794:18;8781:32;8836:18;8828:6;8825:30;8822:50;;;8868:1;8865;8858:12;8822:50;8891:49;8932:7;8923:6;8912:9;8908:22;8891:49;:::i;:::-;8881:59;;;8420:526;;;;;;;:::o;8951:435::-;9004:3;9042:5;9036:12;9069:6;9064:3;9057:19;9095:4;9124:2;9119:3;9115:12;9108:19;;9161:2;9154:5;9150:14;9182:1;9192:169;9206:6;9203:1;9200:13;9192:169;;;9267:13;;9255:26;;9301:12;;;;9336:15;;;;9228:1;9221:9;9192:169;;;-1:-1:-1;9377:3:1;;8951:435;-1:-1:-1;;;;;8951:435:1:o;9391:257::-;9432:3;9470:5;9464:12;9497:6;9492:3;9485:19;9513:63;9569:6;9562:4;9557:3;9553:14;9546:4;9539:5;9535:16;9513:63;:::i;:::-;9630:2;9609:15;-1:-1:-1;;9605:29:1;9596:39;;;;9637:4;9592:50;;9391:257;-1:-1:-1;;9391:257:1:o;9653:1335::-;9829:3;9867:6;9861:13;9893:4;9906:51;9950:6;9945:3;9940:2;9932:6;9928:15;9906:51;:::i;:::-;10042:13;;9979:16;;;;10015:1;;10102;10124:18;;;;10177;;;;10204:93;;10282:4;10272:8;10268:19;10256:31;;10204:93;10345:2;10335:8;10332:16;10312:18;10309:40;10306:167;;;-1:-1:-1;;;10372:33:1;;10428:4;10425:1;10418:15;10458:4;10379:3;10446:17;10306:167;10489:18;10516:110;;;;10640:1;10635:328;;;;10482:481;;10516:110;-1:-1:-1;;10551:24:1;;10537:39;;10596:20;;;;-1:-1:-1;10516:110:1;;10635:328;24329:1;24322:14;;;24366:4;24353:18;;10730:1;10744:169;10758:8;10755:1;10752:15;10744:169;;;10840:14;;10825:13;;;10818:37;10883:16;;;;10775:10;;10744:169;;;10748:3;;10944:8;10937:5;10933:20;10926:27;;10482:481;-1:-1:-1;10979:3:1;;9653:1335;-1:-1:-1;;;;;;;;;;9653:1335:1:o;11411:826::-;-1:-1:-1;;;;;11808:15:1;;;11790:34;;11860:15;;11855:2;11840:18;;11833:43;11770:3;11907:2;11892:18;;11885:31;;;11733:4;;11939:57;;11976:19;;11968:6;11939:57;:::i;:::-;12044:9;12036:6;12032:22;12027:2;12016:9;12012:18;12005:50;12078:44;12115:6;12107;12078:44;:::i;:::-;12064:58;;12171:9;12163:6;12159:22;12153:3;12142:9;12138:19;12131:51;12199:32;12224:6;12216;12199:32;:::i;:::-;12191:40;11411:826;-1:-1:-1;;;;;;;;11411:826:1:o;12242:560::-;-1:-1:-1;;;;;12539:15:1;;;12521:34;;12591:15;;12586:2;12571:18;;12564:43;12638:2;12623:18;;12616:34;;;12681:2;12666:18;;12659:34;;;12501:3;12724;12709:19;;12702:32;;;12464:4;;12751:45;;12776:19;;12768:6;12751:45;:::i;:::-;12743:53;12242:560;-1:-1:-1;;;;;;;12242:560:1:o;12807:261::-;12986:2;12975:9;12968:21;12949:4;13006:56;13058:2;13047:9;13043:18;13035:6;13006:56;:::i;13073:465::-;13330:2;13319:9;13312:21;13293:4;13356:56;13408:2;13397:9;13393:18;13385:6;13356:56;:::i;:::-;13460:9;13452:6;13448:22;13443:2;13432:9;13428:18;13421:50;13488:44;13525:6;13517;13488:44;:::i;:::-;13480:52;13073:465;-1:-1:-1;;;;;13073:465:1:o;13735:660::-;14060:6;14053:14;14046:22;14035:9;14028:41;14105:6;14100:2;14089:9;14085:18;14078:34;14148:6;14143:2;14132:9;14128:18;14121:34;14191:6;14186:2;14175:9;14171:18;14164:34;14235:6;14229:3;14218:9;14214:19;14207:35;14279:3;14273;14262:9;14258:19;14251:32;14009:4;14300:45;14340:3;14329:9;14325:19;14317:6;14300:45;:::i;:::-;14292:53;;14382:6;14376:3;14365:9;14361:19;14354:35;13735:660;;;;;;;;;;:::o;14400:219::-;14549:2;14538:9;14531:21;14512:4;14569:44;14609:2;14598:9;14594:18;14586:6;14569:44;:::i;15395:404::-;15597:2;15579:21;;;15636:2;15616:18;;;15609:30;15675:34;15670:2;15655:18;;15648:62;-1:-1:-1;;;15741:2:1;15726:18;;15719:38;15789:3;15774:19;;15395:404::o;18196:344::-;18398:2;18380:21;;;18437:2;18417:18;;;18410:30;-1:-1:-1;;;18471:2:1;18456:18;;18449:50;18531:2;18516:18;;18196:344::o;18545:401::-;18747:2;18729:21;;;18786:2;18766:18;;;18759:30;18825:34;18820:2;18805:18;;18798:62;-1:-1:-1;;;18891:2:1;18876:18;;18869:35;18936:3;18921:19;;18545:401::o;19774:406::-;19976:2;19958:21;;;20015:2;19995:18;;;19988:30;20054:34;20049:2;20034:18;;20027:62;-1:-1:-1;;;20120:2:1;20105:18;;20098:40;20170:3;20155:19;;19774:406::o;20185:356::-;20387:2;20369:21;;;20406:18;;;20399:30;20465:34;20460:2;20445:18;;20438:62;20532:2;20517:18;;20185:356::o;22420:404::-;22622:2;22604:21;;;22661:2;22641:18;;;22634:30;22700:34;22695:2;22680:18;;22673:62;-1:-1:-1;;;22766:2:1;22751:18;;22744:38;22814:3;22799:19;;22420:404::o;22829:397::-;23031:2;23013:21;;;23070:2;23050:18;;;23043:30;23109:34;23104:2;23089:18;;23082:62;-1:-1:-1;;;23175:2:1;23160:18;;23153:31;23216:3;23201:19;;22829:397::o;24068:183::-;24128:4;24161:18;24153:6;24150:30;24147:56;;;24183:18;;:::i;:::-;-1:-1:-1;24228:1:1;24224:14;24240:4;24220:25;;24068:183::o;24382:128::-;24422:3;24453:1;24449:6;24446:1;24443:13;24440:39;;;24459:18;;:::i;:::-;-1:-1:-1;24495:9:1;;24382:128::o;24515:168::-;24555:7;24621:1;24617;24613:6;24609:14;24606:1;24603:21;24598:1;24591:9;24584:17;24580:45;24577:71;;;24628:18;;:::i;:::-;-1:-1:-1;24668:9:1;;24515:168::o;24688:258::-;24760:1;24770:113;24784:6;24781:1;24778:13;24770:113;;;24860:11;;;24854:18;24841:11;;;24834:39;24806:2;24799:10;24770:113;;;24901:6;24898:1;24895:13;24892:48;;;24936:1;24927:6;24922:3;24918:16;24911:27;24892:48;;24688:258;;;:::o;24951:380::-;25030:1;25026:12;;;;25073;;;25094:61;;25148:4;25140:6;25136:17;25126:27;;25094:61;25201:2;25193:6;25190:14;25170:18;25167:38;25164:161;;;25247:10;25242:3;25238:20;25235:1;25228:31;25282:4;25279:1;25272:15;25310:4;25307:1;25300:15;25164:161;;24951:380;;;:::o;25336:249::-;25446:2;25427:13;;-1:-1:-1;;25423:27:1;25411:40;;25481:18;25466:34;;25502:22;;;25463:62;25460:88;;;25528:18;;:::i;:::-;25564:2;25557:22;-1:-1:-1;;25336:249:1:o;25590:135::-;25629:3;-1:-1:-1;;25650:17:1;;25647:43;;;25670:18;;:::i;:::-;-1:-1:-1;25717:1:1;25706:13;;25590:135::o;25730:127::-;25791:10;25786:3;25782:20;25779:1;25772:31;25822:4;25819:1;25812:15;25846:4;25843:1;25836:15;25862:127;25923:10;25918:3;25914:20;25911:1;25904:31;25954:4;25951:1;25944:15;25978:4;25975:1;25968:15;25994:127;26055:10;26050:3;26046:20;26043:1;26036:31;26086:4;26083:1;26076:15;26110:4;26107:1;26100:15;26126:179;26161:3;26203:1;26185:16;26182:23;26179:120;;;26249:1;26246;26243;26228:23;-1:-1:-1;26286:1:1;26280:8;26275:3;26271:18;26179:120;26126:179;:::o;26310:671::-;26349:3;26391:4;26373:16;26370:26;26367:39;;;26310:671;:::o;26367:39::-;26433:2;26427:9;-1:-1:-1;;26498:16:1;26494:25;;26491:1;26427:9;26470:50;26549:4;26543:11;26573:16;26608:18;26679:2;26672:4;26664:6;26660:17;26657:25;26652:2;26644:6;26641:14;26638:45;26635:58;;;26686:5;;;;;26310:671;:::o;26635:58::-;26723:6;26717:4;26713:17;26702:28;;26759:3;26753:10;26786:2;26778:6;26775:14;26772:27;;;26792:5;;;;;;26310:671;:::o;26772:27::-;26876:2;26857:16;26851:4;26847:27;26843:36;26836:4;26827:6;26822:3;26818:16;26814:27;26811:69;26808:82;;;26883:5;;;;;;26310:671;:::o;26808:82::-;26899:57;26950:4;26941:6;26933;26929:19;26925:30;26919:4;26899:57;:::i;:::-;-1:-1:-1;26972:3:1;;26310:671;-1:-1:-1;;;;;26310:671:1:o;26986:131::-;-1:-1:-1;;;;;;27060:32:1;;27050:43;;27040:71;;27107:1;27104;27097:12
Swarm Source
ipfs://d1bcfdf1c8a90d5fdf2fa4a2d2e4ff139c050608a74d10589cbebdd9ec00569b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.