false
true

Contract Address Details

0x633b7472E1641D59334886a7692107D6332B1ff0

Token
DBKGenesis (DBKGenesis)
Creator
0x15f064–312efc at 0x0a9291–2f9e96
Balance
0
Tokens
Fetching tokens...
Transactions
4,808,556 Transactions
Transfers
0 Transfers
Gas Used
286,043,592,264
Last Balance Update
17975750
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
DBKGenesis




Optimization enabled
false
Compiler version
v0.8.20+commit.a1b79de6




EVM Version
paris




Verified at
2024-07-10T08:18:38.721162Z

contracts/DBKGenesis.sol

Sol2uml
new
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract DBKGenesis is ERC721, Ownable {
uint256 public tokenIdCounter;
bool public mintingEnabled;
string private _baseTokenURI;
constructor() ERC721("DBKGenesis", "DBKGenesis") Ownable(msg.sender) {
mintingEnabled = false;
}
function toggleMinting() external onlyOwner {
mintingEnabled = !mintingEnabled;
}
function setBaseURI(string memory baseURI) external onlyOwner {
_baseTokenURI = baseURI;
}
function mint() external {
require(mintingEnabled, "Minting is not enabled");
require(isEOA(msg.sender), "Minting is only allowed for EOA addresses");
tokenIdCounter++;
_safeMint(msg.sender, tokenIdCounter);
}
function isEOA(address account) internal view returns (bool) {
return account == tx.origin;
}
function _baseURI() internal view override returns (string memory) {
return _baseTokenURI;
}
function tokenURI(uint256 ) public view virtual override returns (string memory) {
return _baseURI();
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/access/Ownable.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/interfaces/draft-IERC6093.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC721/ERC721.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.20;
import {IERC721} from "./IERC721.sol";
import {IERC721Receiver} from "./IERC721Receiver.sol";
import {IERC721Metadata} from "./extensions/IERC721Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {Strings} from "../../utils/Strings.sol";
import {IERC165, ERC165} from "../../utils/introspection/ERC165.sol";
import {IERC721Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
mapping(uint256 tokenId => address) private _owners;
mapping(address owner => uint256) private _balances;
mapping(uint256 tokenId => address) private _tokenApprovals;
mapping(address owner => mapping(address operator => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC721/IERC721.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.20;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be
* reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.20;
import {IERC721} from "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/Context.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/Strings.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)
pragma solidity ^0.8.20;
import {Math} from "./math/Math.sol";
import {SignedMath} from "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant HEX_DIGITS = "0123456789abcdef";
uint8 private constant ADDRESS_LENGTH = 20;
/**
* @dev The `value` string doesn't fit in the specified `length`.
*/
error StringsInsufficientHexLength(uint256 value, uint256 length);
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
}
value /= 10;
if (value == 0) break;
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/introspection/ERC165.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/introspection/IERC165.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @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);
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/math/Math.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
/**
* @dev Muldiv operation overflow.
*/
error MathOverflowedMulDiv();
enum Rounding {
Floor, // Toward negative infinity
Ceil, // Toward positive infinity
Trunc, // Toward zero
Expand // Away from zero
}
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*/
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 subtraction of two unsigned integers, with an overflow flag.
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/math/SignedMath.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Compiler Settings

{"outputSelection":{"*":{"*":["*"],"":["*"]}},"optimizer":{"runs":200,"enabled":false},"libraries":{},"evmVersion":"paris"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"error","name":"ERC721IncorrectOwner","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"ERC721InsufficientApproval","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"error","name":"ERC721InvalidApprover","inputs":[{"type":"address","name":"approver","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOperator","inputs":[{"type":"address","name":"operator","internalType":"address"}]},{"type":"error","name":"ERC721InvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"ERC721InvalidReceiver","inputs":[{"type":"address","name":"receiver","internalType":"address"}]},{"type":"error","name":"ERC721InvalidSender","inputs":[{"type":"address","name":"sender","internalType":"address"}]},{"type":"error","name":"ERC721NonexistentToken","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"approved","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"bool","name":"approved","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approve","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getApproved","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"operator","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mintingEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerOf","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"operator","internalType":"address"},{"type":"bool","name":"approved","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBaseURI","inputs":[{"type":"string","name":"baseURI","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"toggleMinting","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenIdCounter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"tokenURI","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b50336040518060400160405280600a81526020017f44424b47656e65736973000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f44424b47656e657369730000000000000000000000000000000000000000000081525081600090816200009091906200048d565b508060019081620000a291906200048d565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011a5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620001119190620005b9565b60405180910390fd5b6200012b816200014d60201b60201c565b506000600860006101000a81548160ff021916908315150217905550620005d6565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029557607f821691505b602082108103620002ab57620002aa6200024d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620002d6565b620003218683620002d6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200036e62000368620003628462000339565b62000343565b62000339565b9050919050565b6000819050919050565b6200038a836200034d565b620003a2620003998262000375565b848454620002e3565b825550505050565b600090565b620003b9620003aa565b620003c68184846200037f565b505050565b5b81811015620003ee57620003e2600082620003af565b600181019050620003cc565b5050565b601f8211156200043d576200040781620002b1565b6200041284620002c6565b8101602085101562000422578190505b6200043a6200043185620002c6565b830182620003cb565b50505b505050565b600082821c905092915050565b6000620004626000198460080262000442565b1980831691505092915050565b60006200047d83836200044f565b9150826002028217905092915050565b620004988262000213565b67ffffffffffffffff811115620004b457620004b36200021e565b5b620004c082546200027c565b620004cd828285620003f2565b600060209050601f831160018114620005055760008415620004f0578287015190505b620004fc85826200046f565b8655506200056c565b601f1984166200051586620002b1565b60005b828110156200053f5784890151825560018201915060208501945060208101905062000518565b868310156200055f57848901516200055b601f8916826200044f565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005a18262000574565b9050919050565b620005b38162000594565b82525050565b6000602082019050620005d06000830184620005a8565b92915050565b61248580620005e66000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b85780639fd6db121161007c5780639fd6db1214610302578063a22cb46514610320578063b88d4fde1461033c578063c87b56dd14610358578063e985e9c514610388578063f2fde38b146103b857610137565b8063715018a6146102945780637d55094d1461029e5780638da5cb5b146102a857806395d89b41146102c657806398bdf6f5146102e457610137565b806323b872dd116100ff57806323b872dd146101e057806342842e0e146101fc57806355f804b3146102185780636352211e1461023457806370a082311461026457610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780631249c58b146101d6575b600080fd5b61015660048036038101906101519190611881565b6103d4565b60405161016391906118c9565b60405180910390f35b6101746104b6565b6040516101819190611974565b60405180910390f35b6101a4600480360381019061019f91906119cc565b610548565b6040516101b19190611a3a565b60405180910390f35b6101d460048036038101906101cf9190611a81565b610564565b005b6101de61057a565b005b6101fa60048036038101906101f59190611ac1565b610637565b005b61021660048036038101906102119190611ac1565b610739565b005b610232600480360381019061022d9190611c49565b610759565b005b61024e600480360381019061024991906119cc565b610774565b60405161025b9190611a3a565b60405180910390f35b61027e60048036038101906102799190611c92565b610786565b60405161028b9190611cce565b60405180910390f35b61029c610840565b005b6102a6610854565b005b6102b0610888565b6040516102bd9190611a3a565b60405180910390f35b6102ce6108b2565b6040516102db9190611974565b60405180910390f35b6102ec610944565b6040516102f99190611cce565b60405180910390f35b61030a61094a565b60405161031791906118c9565b60405180910390f35b61033a60048036038101906103359190611d15565b61095d565b005b61035660048036038101906103519190611df6565b610973565b005b610372600480360381019061036d91906119cc565b610990565b60405161037f9190611974565b60405180910390f35b6103a2600480360381019061039d9190611e79565b6109a1565b6040516103af91906118c9565b60405180910390f35b6103d260048036038101906103cd9190611c92565b610a35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104af57506104ae82610abb565b5b9050919050565b6060600080546104c590611ee8565b80601f01602080910402602001604051908101604052809291908181526020018280546104f190611ee8565b801561053e5780601f106105135761010080835404028352916020019161053e565b820191906000526020600020905b81548152906001019060200180831161052157829003601f168201915b5050505050905090565b600061055382610b25565b5061055d82610bad565b9050919050565b6105768282610571610bea565b610bf2565b5050565b600860009054906101000a900460ff166105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090611f65565b60405180910390fd5b6105d233610c04565b610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890611ff7565b60405180910390fd5b6007600081548092919061062490612046565b919050555061063533600754610c3c565b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106a95760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106a09190611a3a565b60405180910390fd5b60006106bd83836106b8610bea565b610c5a565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610733578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161072a9392919061208e565b60405180910390fd5b50505050565b61075483838360405180602001604052806000815250610973565b505050565b610761610e74565b80600990816107709190612271565b5050565b600061077f82610b25565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107f95760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107f09190611a3a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610848610e74565b6108526000610efb565b565b61085c610e74565b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546108c190611ee8565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed90611ee8565b801561093a5780601f1061090f5761010080835404028352916020019161093a565b820191906000526020600020905b81548152906001019060200180831161091d57829003601f168201915b5050505050905090565b60075481565b600860009054906101000a900460ff1681565b61096f610968610bea565b8383610fc1565b5050565b61097e848484610637565b61098a84848484611130565b50505050565b606061099a6112e7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a3d610e74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aaf5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610aa69190611a3a565b60405180910390fd5b610ab881610efb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610b3183611379565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ba457826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b9b9190611cce565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610bff83838360016113b6565b505050565b60003273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b610c5682826040518060200160405280600081525061157b565b5050565b600080610c6684611379565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ca857610ca7818486611597565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d3957610cea6000856000806113b6565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610dbc576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610e7c610bea565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610888565b73ffffffffffffffffffffffffffffffffffffffff1614610ef957610ebd610bea565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ef09190611a3a565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361103257816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016110299190611a3a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161112391906118c9565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156112e1578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611174610bea565b8685856040518563ffffffff1660e01b81526004016111969493929190612398565b6020604051808303816000875af19250505080156111d257506040513d601f19601f820116820180604052508101906111cf91906123f9565b60015b611256573d8060008114611202576040519150601f19603f3d011682016040523d82523d6000602084013e611207565b606091505b50600081510361124e57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112459190611a3a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146112df57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112d69190611a3a565b60405180910390fd5b505b50505050565b6060600980546112f690611ee8565b80601f016020809104026020016040519081016040528092919081815260200182805461132290611ee8565b801561136f5780601f106113445761010080835404028352916020019161136f565b820191906000526020600020905b81548152906001019060200180831161135257829003601f168201915b5050505050905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806113ef5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115235760006113ff84610b25565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561146a57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561147d575061147b81846109a1565b155b156114bf57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016114b69190611a3a565b60405180910390fd5b811561152157838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611585838361165b565b6115926000848484611130565b505050565b6115a2838383611754565b61165657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361161757806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161160e9190611cce565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161164d929190612426565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116cd5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116c49190611a3a565b60405180910390fd5b60006116db83836000610c5a565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461174f5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016117469190611a3a565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561180c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117cd57506117cc84846109a1565b5b8061180b57508273ffffffffffffffffffffffffffffffffffffffff166117f383610bad565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61185e81611829565b811461186957600080fd5b50565b60008135905061187b81611855565b92915050565b6000602082840312156118975761189661181f565b5b60006118a58482850161186c565b91505092915050565b60008115159050919050565b6118c3816118ae565b82525050565b60006020820190506118de60008301846118ba565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561191e578082015181840152602081019050611903565b60008484015250505050565b6000601f19601f8301169050919050565b6000611946826118e4565b61195081856118ef565b9350611960818560208601611900565b6119698161192a565b840191505092915050565b6000602082019050818103600083015261198e818461193b565b905092915050565b6000819050919050565b6119a981611996565b81146119b457600080fd5b50565b6000813590506119c6816119a0565b92915050565b6000602082840312156119e2576119e161181f565b5b60006119f0848285016119b7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a24826119f9565b9050919050565b611a3481611a19565b82525050565b6000602082019050611a4f6000830184611a2b565b92915050565b611a5e81611a19565b8114611a6957600080fd5b50565b600081359050611a7b81611a55565b92915050565b60008060408385031215611a9857611a9761181f565b5b6000611aa685828601611a6c565b9250506020611ab7858286016119b7565b9150509250929050565b600080600060608486031215611ada57611ad961181f565b5b6000611ae886828701611a6c565b9350506020611af986828701611a6c565b9250506040611b0a868287016119b7565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b568261192a565b810181811067ffffffffffffffff82111715611b7557611b74611b1e565b5b80604052505050565b6000611b88611815565b9050611b948282611b4d565b919050565b600067ffffffffffffffff821115611bb457611bb3611b1e565b5b611bbd8261192a565b9050602081019050919050565b82818337600083830152505050565b6000611bec611be784611b99565b611b7e565b905082815260208101848484011115611c0857611c07611b19565b5b611c13848285611bca565b509392505050565b600082601f830112611c3057611c2f611b14565b5b8135611c40848260208601611bd9565b91505092915050565b600060208284031215611c5f57611c5e61181f565b5b600082013567ffffffffffffffff811115611c7d57611c7c611824565b5b611c8984828501611c1b565b91505092915050565b600060208284031215611ca857611ca761181f565b5b6000611cb684828501611a6c565b91505092915050565b611cc881611996565b82525050565b6000602082019050611ce36000830184611cbf565b92915050565b611cf2816118ae565b8114611cfd57600080fd5b50565b600081359050611d0f81611ce9565b92915050565b60008060408385031215611d2c57611d2b61181f565b5b6000611d3a85828601611a6c565b9250506020611d4b85828601611d00565b9150509250929050565b600067ffffffffffffffff821115611d7057611d6f611b1e565b5b611d798261192a565b9050602081019050919050565b6000611d99611d9484611d55565b611b7e565b905082815260208101848484011115611db557611db4611b19565b5b611dc0848285611bca565b509392505050565b600082601f830112611ddd57611ddc611b14565b5b8135611ded848260208601611d86565b91505092915050565b60008060008060808587031215611e1057611e0f61181f565b5b6000611e1e87828801611a6c565b9450506020611e2f87828801611a6c565b9350506040611e40878288016119b7565b925050606085013567ffffffffffffffff811115611e6157611e60611824565b5b611e6d87828801611dc8565b91505092959194509250565b60008060408385031215611e9057611e8f61181f565b5b6000611e9e85828601611a6c565b9250506020611eaf85828601611a6c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f0057607f821691505b602082108103611f1357611f12611eb9565b5b50919050565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000611f4f6016836118ef565b9150611f5a82611f19565b602082019050919050565b60006020820190508181036000830152611f7e81611f42565b9050919050565b7f4d696e74696e67206973206f6e6c7920616c6c6f77656420666f7220454f412060008201527f6164647265737365730000000000000000000000000000000000000000000000602082015250565b6000611fe16029836118ef565b9150611fec82611f85565b604082019050919050565b6000602082019050818103600083015261201081611fd4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061205182611996565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361208357612082612017565b5b600182019050919050565b60006060820190506120a36000830186611a2b565b6120b06020830185611cbf565b6120bd6040830184611a2b565b949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120ea565b61213186836120ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061216e61216961216484611996565b612149565b611996565b9050919050565b6000819050919050565b61218883612153565b61219c61219482612175565b8484546120f7565b825550505050565b600090565b6121b16121a4565b6121bc81848461217f565b505050565b5b818110156121e0576121d56000826121a9565b6001810190506121c2565b5050565b601f821115612225576121f6816120c5565b6121ff846120da565b8101602085101561220e578190505b61222261221a856120da565b8301826121c1565b50505b505050565b600082821c905092915050565b60006122486000198460080261222a565b1980831691505092915050565b60006122618383612237565b9150826002028217905092915050565b61227a826118e4565b67ffffffffffffffff81111561229357612292611b1e565b5b61229d8254611ee8565b6122a88282856121e4565b600060209050601f8311600181146122db57600084156122c9578287015190505b6122d38582612255565b86555061233b565b601f1984166122e9866120c5565b60005b82811015612311578489015182556001820191506020850194506020810190506122ec565b8683101561232e578489015161232a601f891682612237565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061236a82612343565b612374818561234e565b9350612384818560208601611900565b61238d8161192a565b840191505092915050565b60006080820190506123ad6000830187611a2b565b6123ba6020830186611a2b565b6123c76040830185611cbf565b81810360608301526123d9818461235f565b905095945050505050565b6000815190506123f381611855565b92915050565b60006020828403121561240f5761240e61181f565b5b600061241d848285016123e4565b91505092915050565b600060408201905061243b6000830185611a2b565b6124486020830184611cbf565b939250505056fea2646970667358221220474f03c8baa2d6788b9d6d2def9afe81adbb63ae2594f14ac37c005c7def23a564736f6c63430008140033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b85780639fd6db121161007c5780639fd6db1214610302578063a22cb46514610320578063b88d4fde1461033c578063c87b56dd14610358578063e985e9c514610388578063f2fde38b146103b857610137565b8063715018a6146102945780637d55094d1461029e5780638da5cb5b146102a857806395d89b41146102c657806398bdf6f5146102e457610137565b806323b872dd116100ff57806323b872dd146101e057806342842e0e146101fc57806355f804b3146102185780636352211e1461023457806370a082311461026457610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780631249c58b146101d6575b600080fd5b61015660048036038101906101519190611881565b6103d4565b60405161016391906118c9565b60405180910390f35b6101746104b6565b6040516101819190611974565b60405180910390f35b6101a4600480360381019061019f91906119cc565b610548565b6040516101b19190611a3a565b60405180910390f35b6101d460048036038101906101cf9190611a81565b610564565b005b6101de61057a565b005b6101fa60048036038101906101f59190611ac1565b610637565b005b61021660048036038101906102119190611ac1565b610739565b005b610232600480360381019061022d9190611c49565b610759565b005b61024e600480360381019061024991906119cc565b610774565b60405161025b9190611a3a565b60405180910390f35b61027e60048036038101906102799190611c92565b610786565b60405161028b9190611cce565b60405180910390f35b61029c610840565b005b6102a6610854565b005b6102b0610888565b6040516102bd9190611a3a565b60405180910390f35b6102ce6108b2565b6040516102db9190611974565b60405180910390f35b6102ec610944565b6040516102f99190611cce565b60405180910390f35b61030a61094a565b60405161031791906118c9565b60405180910390f35b61033a60048036038101906103359190611d15565b61095d565b005b61035660048036038101906103519190611df6565b610973565b005b610372600480360381019061036d91906119cc565b610990565b60405161037f9190611974565b60405180910390f35b6103a2600480360381019061039d9190611e79565b6109a1565b6040516103af91906118c9565b60405180910390f35b6103d260048036038101906103cd9190611c92565b610a35565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104af57506104ae82610abb565b5b9050919050565b6060600080546104c590611ee8565b80601f01602080910402602001604051908101604052809291908181526020018280546104f190611ee8565b801561053e5780601f106105135761010080835404028352916020019161053e565b820191906000526020600020905b81548152906001019060200180831161052157829003601f168201915b5050505050905090565b600061055382610b25565b5061055d82610bad565b9050919050565b6105768282610571610bea565b610bf2565b5050565b600860009054906101000a900460ff166105c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c090611f65565b60405180910390fd5b6105d233610c04565b610611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060890611ff7565b60405180910390fd5b6007600081548092919061062490612046565b919050555061063533600754610c3c565b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106a95760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016106a09190611a3a565b60405180910390fd5b60006106bd83836106b8610bea565b610c5a565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610733578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161072a9392919061208e565b60405180910390fd5b50505050565b61075483838360405180602001604052806000815250610973565b505050565b610761610e74565b80600990816107709190612271565b5050565b600061077f82610b25565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107f95760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016107f09190611a3a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610848610e74565b6108526000610efb565b565b61085c610e74565b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546108c190611ee8565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed90611ee8565b801561093a5780601f1061090f5761010080835404028352916020019161093a565b820191906000526020600020905b81548152906001019060200180831161091d57829003601f168201915b5050505050905090565b60075481565b600860009054906101000a900460ff1681565b61096f610968610bea565b8383610fc1565b5050565b61097e848484610637565b61098a84848484611130565b50505050565b606061099a6112e7565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a3d610e74565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610aaf5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610aa69190611a3a565b60405180910390fd5b610ab881610efb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080610b3183611379565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ba457826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b9b9190611cce565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610bff83838360016113b6565b505050565b60003273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b610c5682826040518060200160405280600081525061157b565b5050565b600080610c6684611379565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ca857610ca7818486611597565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d3957610cea6000856000806113b6565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610dbc576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610e7c610bea565b73ffffffffffffffffffffffffffffffffffffffff16610e9a610888565b73ffffffffffffffffffffffffffffffffffffffff1614610ef957610ebd610bea565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ef09190611a3a565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361103257816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016110299190611a3a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161112391906118c9565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156112e1578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611174610bea565b8685856040518563ffffffff1660e01b81526004016111969493929190612398565b6020604051808303816000875af19250505080156111d257506040513d601f19601f820116820180604052508101906111cf91906123f9565b60015b611256573d8060008114611202576040519150601f19603f3d011682016040523d82523d6000602084013e611207565b606091505b50600081510361124e57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112459190611a3a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146112df57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112d69190611a3a565b60405180910390fd5b505b50505050565b6060600980546112f690611ee8565b80601f016020809104026020016040519081016040528092919081815260200182805461132290611ee8565b801561136f5780601f106113445761010080835404028352916020019161136f565b820191906000526020600020905b81548152906001019060200180831161135257829003601f168201915b5050505050905090565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806113ef5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115235760006113ff84610b25565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561146a57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561147d575061147b81846109a1565b155b156114bf57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016114b69190611a3a565b60405180910390fd5b811561152157838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611585838361165b565b6115926000848484611130565b505050565b6115a2838383611754565b61165657600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361161757806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161160e9190611cce565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161164d929190612426565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116cd5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016116c49190611a3a565b60405180910390fd5b60006116db83836000610c5a565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461174f5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016117469190611a3a565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561180c57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117cd57506117cc84846109a1565b5b8061180b57508273ffffffffffffffffffffffffffffffffffffffff166117f383610bad565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61185e81611829565b811461186957600080fd5b50565b60008135905061187b81611855565b92915050565b6000602082840312156118975761189661181f565b5b60006118a58482850161186c565b91505092915050565b60008115159050919050565b6118c3816118ae565b82525050565b60006020820190506118de60008301846118ba565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561191e578082015181840152602081019050611903565b60008484015250505050565b6000601f19601f8301169050919050565b6000611946826118e4565b61195081856118ef565b9350611960818560208601611900565b6119698161192a565b840191505092915050565b6000602082019050818103600083015261198e818461193b565b905092915050565b6000819050919050565b6119a981611996565b81146119b457600080fd5b50565b6000813590506119c6816119a0565b92915050565b6000602082840312156119e2576119e161181f565b5b60006119f0848285016119b7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a24826119f9565b9050919050565b611a3481611a19565b82525050565b6000602082019050611a4f6000830184611a2b565b92915050565b611a5e81611a19565b8114611a6957600080fd5b50565b600081359050611a7b81611a55565b92915050565b60008060408385031215611a9857611a9761181f565b5b6000611aa685828601611a6c565b9250506020611ab7858286016119b7565b9150509250929050565b600080600060608486031215611ada57611ad961181f565b5b6000611ae886828701611a6c565b9350506020611af986828701611a6c565b9250506040611b0a868287016119b7565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611b568261192a565b810181811067ffffffffffffffff82111715611b7557611b74611b1e565b5b80604052505050565b6000611b88611815565b9050611b948282611b4d565b919050565b600067ffffffffffffffff821115611bb457611bb3611b1e565b5b611bbd8261192a565b9050602081019050919050565b82818337600083830152505050565b6000611bec611be784611b99565b611b7e565b905082815260208101848484011115611c0857611c07611b19565b5b611c13848285611bca565b509392505050565b600082601f830112611c3057611c2f611b14565b5b8135611c40848260208601611bd9565b91505092915050565b600060208284031215611c5f57611c5e61181f565b5b600082013567ffffffffffffffff811115611c7d57611c7c611824565b5b611c8984828501611c1b565b91505092915050565b600060208284031215611ca857611ca761181f565b5b6000611cb684828501611a6c565b91505092915050565b611cc881611996565b82525050565b6000602082019050611ce36000830184611cbf565b92915050565b611cf2816118ae565b8114611cfd57600080fd5b50565b600081359050611d0f81611ce9565b92915050565b60008060408385031215611d2c57611d2b61181f565b5b6000611d3a85828601611a6c565b9250506020611d4b85828601611d00565b9150509250929050565b600067ffffffffffffffff821115611d7057611d6f611b1e565b5b611d798261192a565b9050602081019050919050565b6000611d99611d9484611d55565b611b7e565b905082815260208101848484011115611db557611db4611b19565b5b611dc0848285611bca565b509392505050565b600082601f830112611ddd57611ddc611b14565b5b8135611ded848260208601611d86565b91505092915050565b60008060008060808587031215611e1057611e0f61181f565b5b6000611e1e87828801611a6c565b9450506020611e2f87828801611a6c565b9350506040611e40878288016119b7565b925050606085013567ffffffffffffffff811115611e6157611e60611824565b5b611e6d87828801611dc8565b91505092959194509250565b60008060408385031215611e9057611e8f61181f565b5b6000611e9e85828601611a6c565b9250506020611eaf85828601611a6c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f0057607f821691505b602082108103611f1357611f12611eb9565b5b50919050565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b6000611f4f6016836118ef565b9150611f5a82611f19565b602082019050919050565b60006020820190508181036000830152611f7e81611f42565b9050919050565b7f4d696e74696e67206973206f6e6c7920616c6c6f77656420666f7220454f412060008201527f6164647265737365730000000000000000000000000000000000000000000000602082015250565b6000611fe16029836118ef565b9150611fec82611f85565b604082019050919050565b6000602082019050818103600083015261201081611fd4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061205182611996565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361208357612082612017565b5b600182019050919050565b60006060820190506120a36000830186611a2b565b6120b06020830185611cbf565b6120bd6040830184611a2b565b949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120ea565b61213186836120ea565b95508019841693508086168417925050509392505050565b6000819050919050565b600061216e61216961216484611996565b612149565b611996565b9050919050565b6000819050919050565b61218883612153565b61219c61219482612175565b8484546120f7565b825550505050565b600090565b6121b16121a4565b6121bc81848461217f565b505050565b5b818110156121e0576121d56000826121a9565b6001810190506121c2565b5050565b601f821115612225576121f6816120c5565b6121ff846120da565b8101602085101561220e578190505b61222261221a856120da565b8301826121c1565b50505b505050565b600082821c905092915050565b60006122486000198460080261222a565b1980831691505092915050565b60006122618383612237565b9150826002028217905092915050565b61227a826118e4565b67ffffffffffffffff81111561229357612292611b1e565b5b61229d8254611ee8565b6122a88282856121e4565b600060209050601f8311600181146122db57600084156122c9578287015190505b6122d38582612255565b86555061233b565b601f1984166122e9866120c5565b60005b82811015612311578489015182556001820191506020850194506020810190506122ec565b8683101561232e578489015161232a601f891682612237565b8355505b6001600288020188555050505b505050505050565b600081519050919050565b600082825260208201905092915050565b600061236a82612343565b612374818561234e565b9350612384818560208601611900565b61238d8161192a565b840191505092915050565b60006080820190506123ad6000830187611a2b565b6123ba6020830186611a2b565b6123c76040830185611cbf565b81810360608301526123d9818461235f565b905095945050505050565b6000815190506123f381611855565b92915050565b60006020828403121561240f5761240e61181f565b5b600061241d848285016123e4565b91505092915050565b600060408201905061243b6000830185611a2b565b6124486020830184611cbf565b939250505056fea2646970667358221220474f03c8baa2d6788b9d6d2def9afe81adbb63ae2594f14ac37c005c7def23a564736f6c63430008140033