ERC-721
Source Code
Overview
Max Total Supply
2 WOOF
Holders
1
Transfers
-
0
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
WolfGang_official
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-07-11
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
library MerkleProof {
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
computedHash = _efficientHash(computedHash, proofElement);
} else {
computedHash = _efficientHash(proofElement, computedHash);
}
}
return computedHash;
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
function toString(uint256 value) internal pure returns (string memory) {
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);
}
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);
}
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);
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IERC721A {
/**
* The caller must own the token or be an approved operator.
*/
error ApprovalCallerNotOwnerNorApproved();
/**
* The token does not exist.
*/
error ApprovalQueryForNonexistentToken();
/**
* The caller cannot approve to their own address.
*/
error ApproveToCaller();
/**
* Cannot query the balance for the zero address.
*/
error BalanceQueryForZeroAddress();
/**
* Cannot mint to the zero address.
*/
error MintToZeroAddress();
/**
* The quantity of tokens minted must be more than zero.
*/
error MintZeroQuantity();
/**
* The token does not exist.
*/
error OwnerQueryForNonexistentToken();
/**
* The caller must own the token or be an approved operator.
*/
error TransferCallerNotOwnerNorApproved();
/**
* The token must be owned by `from`.
*/
error TransferFromIncorrectOwner();
/**
* Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
*/
error TransferToNonERC721ReceiverImplementer();
/**
* Cannot transfer to the zero address.
*/
error TransferToZeroAddress();
/**
* The token does not exist.
*/
error URIQueryForNonexistentToken();
/**
* The `quantity` minted with ERC2309 exceeds the safety limit.
*/
error MintERC2309QuantityExceedsLimit();
/**
* The `extraData` cannot be set on an unintialized ownership slot.
*/
error OwnershipNotInitializedForExtraData();
struct TokenOwnership {
// The address of the owner.
address addr;
// Keeps track of the start time of ownership with minimal overhead for tokenomics.
uint64 startTimestamp;
// Whether the token has been burned.
bool burned;
// Arbitrary data similar to `startTimestamp` that can be set through `_extraData`.
uint24 extraData;
}
/**
* @dev Returns the total amount of tokens stored by the contract.
*
* Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
*/
function totalSupply() external view returns (uint256);
// ==============================
// 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);
// ==============================
// IERC721
// ==============================
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
// ==============================
// IERC721Metadata
// ==============================
/**
* @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);
// ==============================
// IERC2309
// ==============================
/**
* @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`,
* as defined in the ERC2309 standard. See `_mintERC2309` for more details.
*/
event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}
interface ERC721A__IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
contract ERC721A is IERC721A {
// Mask of an entry in packed address data.
uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;
// The bit position of `numberMinted` in packed address data.
uint256 private constant BITPOS_NUMBER_MINTED = 64;
// The bit position of `numberBurned` in packed address data.
uint256 private constant BITPOS_NUMBER_BURNED = 128;
// The bit position of `aux` in packed address data.
uint256 private constant BITPOS_AUX = 192;
// Mask of all 256 bits in packed address data except the 64 bits for `aux`.
uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;
// The bit position of `startTimestamp` in packed ownership.
uint256 private constant BITPOS_START_TIMESTAMP = 160;
// The bit mask of the `burned` bit in packed ownership.
uint256 private constant BITMASK_BURNED = 1 << 224;
// The bit position of the `nextInitialized` bit in packed ownership.
uint256 private constant BITPOS_NEXT_INITIALIZED = 225;
// The bit mask of the `nextInitialized` bit in packed ownership.
uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;
// The bit position of `extraData` in packed ownership.
uint256 private constant BITPOS_EXTRA_DATA = 232;
// Mask of all 256 bits in a packed ownership except the 24 bits for `extraData`.
uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;
// The mask of the lower 160 bits for addresses.
uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1;
// The maximum `quantity` that can be minted with `_mintERC2309`.
// This limit is to prevent overflows on the address data entries.
// For a limit of 5000, a total of 3.689e15 calls to `_mintERC2309`
// is required to cause an overflow, which is unrealistic.
uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;
// The tokenId of the next token to be minted.
uint256 private _currentIndex;
// The number of tokens burned.
uint256 private _burnCounter;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned.
// See `_packedOwnershipOf` implementation for details.
//
// Bits Layout:
// - [0..159] `addr`
// - [160..223] `startTimestamp`
// - [224] `burned`
// - [225] `nextInitialized`
// - [232..255] `extraData`
mapping(uint256 => uint256) private _packedOwnerships;
// Mapping owner address to address data.
//
// Bits Layout:
// - [0..63] `balance`
// - [64..127] `numberMinted`
// - [128..191] `numberBurned`
// - [192..255] `aux`
mapping(address => uint256) private _packedAddressData;
// Mapping from token ID to approved address.
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
_currentIndex = _startTokenId();
}
/**
* @dev Returns the starting token ID.
* To change the starting token ID, please override this function.
*/
function _startTokenId() internal view virtual returns (uint256) {
return 0;
}
/**
* @dev Returns the next token ID to be minted.
*/
function _nextTokenId() internal view returns (uint256) {
return _currentIndex;
}
/**
* @dev Returns the total number of tokens in existence.
* Burned tokens will reduce the count.
* To get the total number of tokens minted, please see `_totalMinted`.
*/
function totalSupply() public view override returns (uint256) {
// Counter underflow is impossible as _burnCounter cannot be incremented
// more than `_currentIndex - _startTokenId()` times.
unchecked {
return _currentIndex - _burnCounter - _startTokenId();
}
}
/**
* @dev Returns the total amount of tokens minted in the contract.
*/
function _totalMinted() internal view returns (uint256) {
// Counter underflow is impossible as _currentIndex does not decrement,
// and it is initialized to `_startTokenId()`
unchecked {
return _currentIndex - _startTokenId();
}
}
/**
* @dev Returns the total number of tokens burned.
*/
function _totalBurned() internal view returns (uint256) {
return _burnCounter;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
// The interface IDs are constants representing the first 4 bytes of the XOR of
// all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
// e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
return
interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
if (owner == address(0)) revert BalanceQueryForZeroAddress();
return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
}
/**
* Returns the number of tokens minted by `owner`.
*/
function _numberMinted(address owner) internal view returns (uint256) {
return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
}
/**
* Returns the number of tokens burned by or on behalf of `owner`.
*/
function _numberBurned(address owner) internal view returns (uint256) {
return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
}
/**
* Returns the auxiliary data for `owner`. (e.g. number of whitelist mint slots used).
*/
function _getAux(address owner) internal view returns (uint64) {
return uint64(_packedAddressData[owner] >> BITPOS_AUX);
}
/**
* Sets the auxiliary data for `owner`. (e.g. number of whitelist mint slots used).
* If there are multiple variables, please pack them into a uint64.
*/
function _setAux(address owner, uint64 aux) internal {
uint256 packed = _packedAddressData[owner];
uint256 auxCasted;
// Cast `aux` with assembly to avoid redundant masking.
assembly {
auxCasted := aux
}
packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
_packedAddressData[owner] = packed;
}
/**
* Returns the packed ownership data of `tokenId`.
*/
function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
uint256 curr = tokenId;
unchecked {
if (_startTokenId() <= curr)
if (curr < _currentIndex) {
uint256 packed = _packedOwnerships[curr];
// If not burned.
if (packed & BITMASK_BURNED == 0) {
// Invariant:
// There will always be an ownership that has an address and is not burned
// before an ownership that does not have an address and is not burned.
// Hence, curr will not underflow.
//
// We can directly compare the packed value.
// If the address is zero, packed is zero.
while (packed == 0) {
packed = _packedOwnerships[--curr];
}
return packed;
}
}
}
revert OwnerQueryForNonexistentToken();
}
/**
* Returns the unpacked `TokenOwnership` struct from `packed`.
*/
function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
ownership.addr = address(uint160(packed));
ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
ownership.burned = packed & BITMASK_BURNED != 0;
ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA);
}
/**
* Returns the unpacked `TokenOwnership` struct at `index`.
*/
function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
return _unpackedOwnership(_packedOwnerships[index]);
}
/**
* @dev Initializes the ownership slot minted at `index` for efficiency purposes.
*/
function _initializeOwnershipAt(uint256 index) internal {
if (_packedOwnerships[index] == 0) {
_packedOwnerships[index] = _packedOwnershipOf(index);
}
}
/**
* Gas spent here starts off proportional to the maximum mint batch size.
* It gradually moves to O(1) as tokens get transferred around in the collection over time.
*/
function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
return _unpackedOwnership(_packedOwnershipOf(tokenId));
}
/**
* @dev Packs ownership data into a single uint256.
*/
function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
assembly {
// Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
owner := and(owner, BITMASK_ADDRESS)
// `owner | (block.timestamp << BITPOS_START_TIMESTAMP) | flags`.
result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
}
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return address(uint160(_packedOwnershipOf(tokenId)));
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
if (!_exists(tokenId)) revert URIQueryForNonexistentToken();
string memory baseURI = _baseURI();
return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, it can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return '';
}
/**
* @dev Returns the `nextInitialized` flag set if `quantity` equals 1.
*/
function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
// For branchless setting of the `nextInitialized` flag.
assembly {
// `(quantity == 1) << BITPOS_NEXT_INITIALIZED`.
result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
}
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = ownerOf(tokenId);
if (_msgSenderERC721A() != owner)
if (!isApprovedForAll(owner, _msgSenderERC721A())) {
revert ApprovalCallerNotOwnerNorApproved();
}
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
if (operator == _msgSenderERC721A()) revert ApproveToCaller();
_operatorApprovals[_msgSenderERC721A()][operator] = approved;
emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, '');
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
transferFrom(from, to, tokenId);
if (to.code.length != 0)
if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return
_startTokenId() <= tokenId &&
tokenId < _currentIndex && // If within bounds,
_packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
}
/**
* @dev Equivalent to `_safeMint(to, quantity, '')`.
*/
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, '');
}
/**
* @dev Safely mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement
* {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
* - `quantity` must be greater than 0.
*
* See {_mint}.
*
* Emits a {Transfer} event for each mint.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
_mint(to, quantity);
unchecked {
if (to.code.length != 0) {
uint256 end = _currentIndex;
uint256 index = end - quantity;
do {
if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
revert TransferToNonERC721ReceiverImplementer();
}
} while (index < end);
// Reentrancy protection.
if (_currentIndex != end) revert();
}
}
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event for each mint.
*/
function _mint(address to, uint256 quantity) internal {
uint256 startTokenId = _currentIndex;
if (to == address(0)) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// `balance` and `numberMinted` have a maximum limit of 2**64.
// `tokenId` has a maximum limit of 2**256.
unchecked {
// Updates:
// - `balance += quantity`.
// - `numberMinted += quantity`.
//
// We can directly add to the `balance` and `numberMinted`.
_packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
// Updates:
// - `address` to the owner.
// - `startTimestamp` to the timestamp of minting.
// - `burned` to `false`.
// - `nextInitialized` to `quantity == 1`.
_packedOwnerships[startTokenId] = _packOwnershipData(
to,
_nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
);
uint256 tokenId = startTokenId;
uint256 end = startTokenId + quantity;
do {
emit Transfer(address(0), to, tokenId++);
} while (tokenId < end);
_currentIndex = end;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* This function is intended for efficient minting only during contract creation.
*
* It emits only one {ConsecutiveTransfer} as defined in
* [ERC2309](https://eips.ethereum.org/EIPS/eip-2309),
* instead of a sequence of {Transfer} event(s).
*
* Calling this function outside of contract creation WILL make your contract
* non-compliant with the ERC721 standard.
* For full ERC721 compliance, substituting ERC721 {Transfer} event(s) with the ERC2309
* {ConsecutiveTransfer} event is only permissible during contract creation.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `quantity` must be greater than 0.
*
* Emits a {ConsecutiveTransfer} event.
*/
function _mintERC2309(address to, uint256 quantity) internal {
uint256 startTokenId = _currentIndex;
if (to == address(0)) revert MintToZeroAddress();
if (quantity == 0) revert MintZeroQuantity();
if (quantity > MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are unrealistic due to the above check for `quantity` to be below the limit.
unchecked {
// Updates:
// - `balance += quantity`.
// - `numberMinted += quantity`.
//
// We can directly add to the `balance` and `numberMinted`.
_packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
// Updates:
// - `address` to the owner.
// - `startTimestamp` to the timestamp of minting.
// - `burned` to `false`.
// - `nextInitialized` to `quantity == 1`.
_packedOwnerships[startTokenId] = _packOwnershipData(
to,
_nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
);
emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);
_currentIndex = startTokenId + quantity;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Returns the storage slot and value for the approved address of `tokenId`.
*/
function _getApprovedAddress(uint256 tokenId)
private
view
returns (uint256 approvedAddressSlot, address approvedAddress)
{
mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
// The following is equivalent to `approvedAddress = _tokenApprovals[tokenId]`.
assembly {
// Compute the slot.
mstore(0x00, tokenId)
mstore(0x20, tokenApprovalsPtr.slot)
approvedAddressSlot := keccak256(0x00, 0x40)
// Load the slot's value from storage.
approvedAddress := sload(approvedAddressSlot)
}
}
/**
* @dev Returns whether the `approvedAddress` is equals to `from` or `msgSender`.
*/
function _isOwnerOrApproved(
address approvedAddress,
address from,
address msgSender
) private pure returns (bool result) {
assembly {
// Mask `from` to the lower 160 bits, in case the upper bits somehow aren't clean.
from := and(from, BITMASK_ADDRESS)
// Mask `msgSender` to the lower 160 bits, in case the upper bits somehow aren't clean.
msgSender := and(msgSender, BITMASK_ADDRESS)
// `msgSender == from || msgSender == approvedAddress`.
result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
}
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();
(uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);
// The nested ifs save around 20+ gas over a compound boolean condition.
if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
if (to == address(0)) revert TransferToZeroAddress();
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner.
assembly {
if approvedAddress {
// This is equivalent to `delete _tokenApprovals[tokenId]`.
sstore(approvedAddressSlot, 0)
}
}
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
// We can directly increment and decrement the balances.
--_packedAddressData[from]; // Updates: `balance -= 1`.
++_packedAddressData[to]; // Updates: `balance += 1`.
// Updates:
// - `address` to the next owner.
// - `startTimestamp` to the timestamp of transfering.
// - `burned` to `false`.
// - `nextInitialized` to `true`.
_packedOwnerships[tokenId] = _packOwnershipData(
to,
BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
);
// If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
uint256 nextTokenId = tokenId + 1;
// If the next slot's address is zero and not burned (i.e. packed value is zero).
if (_packedOwnerships[nextTokenId] == 0) {
// If the next slot is within bounds.
if (nextTokenId != _currentIndex) {
// Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
_packedOwnerships[nextTokenId] = prevOwnershipPacked;
}
}
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @dev Equivalent to `_burn(tokenId, false)`.
*/
function _burn(uint256 tokenId) internal virtual {
_burn(tokenId, false);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
address from = address(uint160(prevOwnershipPacked));
(uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);
if (approvalCheck) {
// The nested ifs save around 20+ gas over a compound boolean condition.
if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
}
_beforeTokenTransfers(from, address(0), tokenId, 1);
// Clear approvals from the previous owner.
assembly {
if approvedAddress {
// This is equivalent to `delete _tokenApprovals[tokenId]`.
sstore(approvedAddressSlot, 0)
}
}
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as `tokenId` would have to be 2**256.
unchecked {
// Updates:
// - `balance -= 1`.
// - `numberBurned += 1`.
//
// We can directly decrement the balance, and increment the number burned.
// This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
_packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;
// Updates:
// - `address` to the last owner.
// - `startTimestamp` to the timestamp of burning.
// - `burned` to `true`.
// - `nextInitialized` to `true`.
_packedOwnerships[tokenId] = _packOwnershipData(
from,
(BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
);
// If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
uint256 nextTokenId = tokenId + 1;
// If the next slot's address is zero and not burned (i.e. packed value is zero).
if (_packedOwnerships[nextTokenId] == 0) {
// If the next slot is within bounds.
if (nextTokenId != _currentIndex) {
// Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
_packedOwnerships[nextTokenId] = prevOwnershipPacked;
}
}
}
}
emit Transfer(from, address(0), tokenId);
_afterTokenTransfers(from, address(0), tokenId, 1);
// Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
unchecked {
_burnCounter++;
}
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkContractOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
bytes4 retval
) {
return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert TransferToNonERC721ReceiverImplementer();
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
/**
* @dev Directly sets the extra data for the ownership data `index`.
*/
function _setExtraDataAt(uint256 index, uint24 extraData) internal {
uint256 packed = _packedOwnerships[index];
if (packed == 0) revert OwnershipNotInitializedForExtraData();
uint256 extraDataCasted;
// Cast `extraData` with assembly to avoid redundant masking.
assembly {
extraDataCasted := extraData
}
packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA);
_packedOwnerships[index] = packed;
}
/**
* @dev Returns the next extra data for the packed ownership data.
* The returned result is shifted into position.
*/
function _nextExtraData(
address from,
address to,
uint256 prevOwnershipPacked
) private view returns (uint256) {
uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA);
return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA;
}
/**
* @dev Called during each token transfer to set the 24bit `extraData` field.
* Intended to be overridden by the cosumer contract.
*
* `previousExtraData` - the value of `extraData` before transfer.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, `tokenId` will be burned by `from`.
* - `from` and `to` are never both zero.
*/
function _extraData(
address from,
address to,
uint24 previousExtraData
) internal view virtual returns (uint24) {}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred.
* This includes minting.
* And also called before burning one token.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, `tokenId` will be burned by `from`.
* - `from` and `to` are never both zero.
*/
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Hook that is called after a set of serially-ordered token ids have been transferred.
* This includes minting.
* And also called after one token has been burned.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
* transferred to `to`.
* - When `from` is zero, `tokenId` has been minted for `to`.
* - When `to` is zero, `tokenId` has been burned by `from`.
* - `from` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Returns the message sender (defaults to `msg.sender`).
*
* If you are writing GSN compatible contracts, you need to override this function.
*/
function _msgSenderERC721A() internal view virtual returns (address) {
return msg.sender;
}
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function _toString(uint256 value) internal pure returns (string memory ptr) {
assembly {
// The maximum value of a uint256 contains 78 digits (1 byte per digit),
// but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
// We will need 1 32-byte word to store the length,
// and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
ptr := add(mload(0x40), 128)
// Update the free memory pointer to allocate.
mstore(0x40, ptr)
// Cache the end of the memory to calculate the length later.
let end := ptr
// We write the string from the rightmost digit to the leftmost digit.
// The following is essentially a do-while loop that also handles the zero case.
// Costs a bit more than early returning for the zero case,
// but cheaper in terms of deployment and overall runtime costs.
for {
// Initialize and perform the first pass without check.
let temp := value
// Move the pointer 1 byte leftwards to point to an empty character slot.
ptr := sub(ptr, 1)
// Write the character to the pointer. 48 is the ASCII index of '0'.
mstore8(ptr, add(48, mod(temp, 10)))
temp := div(temp, 10)
} temp {
// Keep dividing `temp` until zero.
temp := div(temp, 10)
} {
// Body of the for loop.
ptr := sub(ptr, 1)
mstore8(ptr, add(48, mod(temp, 10)))
}
let length := sub(end, ptr)
// Move the pointer 32 bytes leftwards to make room for the length.
ptr := sub(ptr, 32)
// Store the length.
mstore(ptr, length)
}
}
}
contract WolfGang_official is Ownable, ERC721A, ReentrancyGuard {
using Strings for uint256;
string public uri;
bool public hidden = true;
uint public status = 0; // 0-stop 1-free 2-whietlist 3-public
uint COLLECTION_SIZE = 3455;
uint public PRICE = 0.01 ether;
bytes32 public merkleRootFree = 0xcd1bbaac0fa56e150f2884634f1b2ce6388a3ad0bd611dda513a50e0f6a8f13d;
bytes32 public merkleRootWhitelist = 0x8a3b7c543930d7409e858a194e4576f810de5b10ce052dc2ce8b8220947b8eb4;
function setMerkleRoot(bytes32 mFree, bytes32 mWhitelist) public onlyOwner{
merkleRootFree = mFree;
merkleRootWhitelist = mWhitelist;
}
modifier callerIsUser() {
require(tx.origin == msg.sender, "The caller is another contract");
_;
}
constructor() ERC721A("WolfGang(TM) Official", "WOOF") {
uri = "https://woof.ws/nft_collection/hidden_metadata/hidden.json";
}
function reveal(string memory newuri) public onlyOwner{
uri = newuri;
hidden = !hidden;
}
function freeMint(uint256 quantity, bytes32[] calldata merkleproof) public callerIsUser{
require(status == 1, "Freesale not active!!");
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(MerkleProof.verify( merkleproof, merkleRootFree, leaf),"Not whitelisted");
require(totalSupply() < COLLECTION_SIZE, "SOLD OUT!!");
_safeMint(msg.sender, quantity);
}
function whitelistMint(uint256 quantity, bytes32[] calldata merkleproof) public payable callerIsUser{
require(status == 2, "Whitelist not active!!");
bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
require(MerkleProof.verify( merkleproof, merkleRootFree, leaf) || MerkleProof.verify( merkleproof, merkleRootWhitelist, leaf),"Not whitelisted");
require(msg.value >= PRICE, "Invalid price sent");
require(totalSupply() < COLLECTION_SIZE, "SOLD OUT!!");
_safeMint(msg.sender, quantity);
}
function mint(uint256 quantity) public payable callerIsUser{
require(status == 3, "Public Sale not active!!");
require(msg.value >= PRICE, "Invalid price sent");
require(totalSupply() <= COLLECTION_SIZE, "SOLD OUT!!");
_safeMint(msg.sender, quantity);
}
function numberMinted(address owner) public view returns (uint256) {
return _numberMinted(owner);
}
function giveaway(address to, uint256 quantity) public onlyOwner callerIsUser{
require(totalSupply() <= COLLECTION_SIZE, "SOLD OUT!!");
_safeMint(to, quantity);
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token!");
if(hidden)
return bytes(baseURI()).length > 0 ? string(abi.encodePacked(baseURI())) : "";
else
return bytes(baseURI()).length > 0 ? string(abi.encodePacked(baseURI(), tokenId.toString(), ".json")) : "";
}
function baseURI() public view returns (string memory) {
return uri;
}
function setBaseURI(string memory u) public onlyOwner{
uri = u;
}
function setStatus(uint s) public onlyOwner{
status = s;
}
function setPrice(uint p) public onlyOwner{
PRICE = p;
}
function _startTokenId() pure internal override returns (uint256) {
return 1;
}
function withdrawMoney() external nonReentrant onlyOwner {
(bool successB, ) = owner().call{value: address(this).balance}("");
require(successB, "Transfer failed.");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hidden","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootFree","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRootWhitelist","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"u","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"mFree","type":"bytes32"},{"internalType":"bytes32","name":"mWhitelist","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526001600b60006101000a81548160ff0219169083151502179055506000600c55610d7f600d55662386f26fc10000600e557fcd1bbaac0fa56e150f2884634f1b2ce6388a3ad0bd611dda513a50e0f6a8f13d60001b600f557f8a3b7c543930d7409e858a194e4576f810de5b10ce052dc2ce8b8220947b8eb460001b6010553480156200009057600080fd5b506040518060400160405280601581526020017f576f6c6647616e6728544d29204f6666696369616c00000000000000000000008152506040518060400160405280600481526020017f574f4f46000000000000000000000000000000000000000000000000000000008152506200011d62000111620001a760201b60201c565b620001af60201b60201c565b8160039080519060200190620001359291906200027c565b5080600490805190602001906200014e9291906200027c565b506200015f6200027360201b60201c565b600181905550505060016009819055506040518060600160405280603a815260200162004100603a9139600a9080519060200190620001a09291906200027c565b5062000391565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200028a906200032c565b90600052602060002090601f016020900481019282620002ae5760008555620002fa565b82601f10620002c957805160ff1916838001178555620002fa565b82800160010185558215620002fa579182015b82811115620002f9578251825591602001919060010190620002dc565b5b5090506200030991906200030d565b5090565b5b80821115620003285760008160009055506001016200030e565b5090565b600060028204905060018216806200034557607f821691505b602082108114156200035c576200035b62000362565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613d5f80620003a16000396000f3fe6080604052600436106102045760003560e01c806389ba959c11610118578063aef6d4b1116100a0578063dc33e6811161006f578063dc33e68114610711578063e2f36dce1461074e578063e985e9c514610777578063eac989f8146107b4578063f2fde38b146107df57610204565b8063aef6d4b114610664578063b88d4fde1461068f578063c87b56dd146106b8578063d2cab056146106f557610204565b806391b7f5ed116100e757806391b7f5ed146105b457806395d89b41146105dd578063a0712d6814610608578063a22cb46514610624578063ac4460021461064d57610204565b806389ba959c146105085780638d859f3e146105335780638da5cb5b1461055e5780638e1f9cfe1461058957610204565b806342842e0e1161019b57806369ba1a751161016a57806369ba1a75146104375780636c0360eb1461046057806370a082311461048b578063715018a6146104c857806375edcbe0146104df57610204565b806342842e0e1461037f5780634c261247146103a857806355f804b3146103d15780636352211e146103fa57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd14610300578063200d2ed21461032b57806323b872dd1461035657610204565b806301ffc9a714610209578063050225ea1461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612efa565b610808565b60405161023d91906133e7565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612e7a565b61089a565b005b34801561027b57600080fd5b506102846109de565b604051610291919061341d565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612f9d565b610a70565b6040516102ce9190613380565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612e7a565b610aec565b005b34801561030c57600080fd5b50610315610c2d565b60405161032291906135bf565b60405180910390f35b34801561033757600080fd5b50610340610c44565b60405161034d91906135bf565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190612d64565b610c4a565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612d64565b610f6f565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612f54565b610f8f565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612f54565b61104f565b005b34801561040657600080fd5b50610421600480360381019061041c9190612f9d565b6110e5565b60405161042e9190613380565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612f9d565b6110f7565b005b34801561046c57600080fd5b5061047561117d565b604051610482919061341d565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190612cf7565b61120f565b6040516104bf91906135bf565b60405180910390f35b3480156104d457600080fd5b506104dd6112c8565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612eba565b611350565b005b34801561051457600080fd5b5061051d6113de565b60405161052a9190613402565b60405180910390f35b34801561053f57600080fd5b506105486113e4565b60405161055591906135bf565b60405180910390f35b34801561056a57600080fd5b506105736113ea565b6040516105809190613380565b60405180910390f35b34801561059557600080fd5b5061059e611413565b6040516105ab9190613402565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612f9d565b611419565b005b3480156105e957600080fd5b506105f261149f565b6040516105ff919061341d565b60405180910390f35b610622600480360381019061061d9190612f9d565b611531565b005b34801561063057600080fd5b5061064b60048036038101906106469190612e3a565b611682565b005b34801561065957600080fd5b506106626117fa565b005b34801561067057600080fd5b50610679611982565b60405161068691906133e7565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190612db7565b611995565b005b3480156106c457600080fd5b506106df60048036038101906106da9190612f9d565b611a08565b6040516106ec919061341d565b60405180910390f35b61070f600480360381019061070a9190612fca565b611b1a565b005b34801561071d57600080fd5b5061073860048036038101906107339190612cf7565b611d7a565b60405161074591906135bf565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190612fca565b611d8c565b005b34801561078357600080fd5b5061079e60048036038101906107999190612d24565b611f52565b6040516107ab91906133e7565b60405180910390f35b3480156107c057600080fd5b506107c9611fe6565b6040516107d6919061341d565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190612cf7565b612074565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108935750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6108a261216c565b73ffffffffffffffffffffffffffffffffffffffff166108c06113ea565b73ffffffffffffffffffffffffffffffffffffffff1614610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d906134ff565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b906134bf565b60405180910390fd5b600d5461098f610c2d565b11156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c79061349f565b60405180910390fd5b6109da8282612174565b5050565b6060600380546109ed9061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a199061382a565b8015610a665780601f10610a3b57610100808354040283529160200191610a66565b820191906000526020600020905b815481529060010190602001808311610a4957829003601f168201915b5050505050905090565b6000610a7b82612192565b610ab1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af7826110e5565b90508073ffffffffffffffffffffffffffffffffffffffff16610b186121f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b7b57610b4481610b3f6121f1565b611f52565b610b7a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c376121f9565b6002546001540303905090565b600c5481565b6000610c5582612202565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cc8846122d0565b91509150610cde8187610cd96121f1565b6122f2565b610d2a57610cf386610cee6121f1565b611f52565b610d29576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d91576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d9e8686866001612336565b8015610da957600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e7785610e5388888761233c565b7c020000000000000000000000000000000000000000000000000000000017612364565b600560008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610eff576000600185019050600060056000838152602001908152602001600020541415610efd576001548114610efc578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f67868686600161238f565b505050505050565b610f8a83838360405180602001604052806000815250611995565b505050565b610f9761216c565b73ffffffffffffffffffffffffffffffffffffffff16610fb56113ea565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906134ff565b60405180910390fd5b80600a9080519060200190611021929190612aa0565b50600b60009054906101000a900460ff1615600b60006101000a81548160ff02191690831515021790555050565b61105761216c565b73ffffffffffffffffffffffffffffffffffffffff166110756113ea565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c2906134ff565b60405180910390fd5b80600a90805190602001906110e1929190612aa0565b5050565b60006110f082612202565b9050919050565b6110ff61216c565b73ffffffffffffffffffffffffffffffffffffffff1661111d6113ea565b73ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a906134ff565b60405180910390fd5b80600c8190555050565b6060600a805461118c9061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546111b89061382a565b80156112055780601f106111da57610100808354040283529160200191611205565b820191906000526020600020905b8154815290600101906020018083116111e857829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611277576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112d061216c565b73ffffffffffffffffffffffffffffffffffffffff166112ee6113ea565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906134ff565b60405180910390fd5b61134e6000612395565b565b61135861216c565b73ffffffffffffffffffffffffffffffffffffffff166113766113ea565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c3906134ff565b60405180910390fd5b81600f81905550806010819055505050565b600f5481565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61142161216c565b73ffffffffffffffffffffffffffffffffffffffff1661143f6113ea565b73ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c906134ff565b60405180910390fd5b80600e8190555050565b6060600480546114ae9061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546114da9061382a565b80156115275780601f106114fc57610100808354040283529160200191611527565b820191906000526020600020905b81548152906001019060200180831161150a57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906134bf565b60405180910390fd5b6003600c54146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061357f565b60405180910390fd5b600e54341015611629576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116209061355f565b60405180910390fd5b600d54611634610c2d565b1115611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c9061349f565b60405180910390fd5b61167f3382612174565b50565b61168a6121f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ef576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006116fc6121f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117a96121f1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ee91906133e7565b60405180910390a35050565b60026009541415611840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118379061359f565b60405180910390fd5b600260098190555061185061216c565b73ffffffffffffffffffffffffffffffffffffffff1661186e6113ea565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb906134ff565b60405180910390fd5b60006118ce6113ea565b73ffffffffffffffffffffffffffffffffffffffff16476040516118f19061336b565b60006040518083038185875af1925050503d806000811461192e576040519150601f19603f3d011682016040523d82523d6000602084013e611933565b606091505b5050905080611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e9061353f565b60405180910390fd5b506001600981905550565b600b60009054906101000a900460ff1681565b6119a0848484610c4a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611a02576119cb84848484612459565b611a01576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611a1382612192565b611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a499061347f565b60405180910390fd5b600b60009054906101000a900460ff1615611abb576000611a7161117d565b5111611a8c5760405180602001604052806000815250611ab4565b611a9461117d565b604051602001611aa49190613325565b6040516020818303038152906040525b9050611b15565b6000611ac561117d565b5111611ae05760405180602001604052806000815250611b12565b611ae861117d565b611af1836125b9565b604051602001611b0292919061333c565b6040516020818303038152906040525b90505b919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f906134bf565b60405180910390fd5b6002600c5414611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc49061343f565b60405180910390fd5b600033604051602001611be0919061330a565b604051602081830303815290604052805190602001209050611c46838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361271a565b80611c9b5750611c9a838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506010548361271a565b5b611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906134df565b60405180910390fd5b600e54341015611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d169061355f565b60405180910390fd5b600d54611d2a610c2d565b10611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d619061349f565b60405180910390fd5b611d743385612174565b50505050565b6000611d8582612731565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df1906134bf565b60405180910390fd5b6001600c5414611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e369061351f565b60405180910390fd5b600033604051602001611e52919061330a565b604051602081830303815290604052805190602001209050611eb8838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361271a565b611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee906134df565b60405180910390fd5b600d54611f02610c2d565b10611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f399061349f565b60405180910390fd5b611f4c3385612174565b50505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8054611ff39061382a565b80601f016020809104026020016040519081016040528092919081815260200182805461201f9061382a565b801561206c5780601f106120415761010080835404028352916020019161206c565b820191906000526020600020905b81548152906001019060200180831161204f57829003601f168201915b505050505081565b61207c61216c565b73ffffffffffffffffffffffffffffffffffffffff1661209a6113ea565b73ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e7906134ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121579061345f565b60405180910390fd5b61216981612395565b50565b600033905090565b61218e828260405180602001604052806000815250612788565b5050565b60008161219d6121f9565b111580156121ac575060015482105b80156121ea575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b600080829050806122116121f9565b11612299576001548110156122985760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612296575b600081141561228c576005600083600190039350838152602001908152602001600020549050612261565b80925050506122cb565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600790508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612353868684612826565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261247f6121f1565b8786866040518563ffffffff1660e01b81526004016124a1949392919061339b565b602060405180830381600087803b1580156124bb57600080fd5b505af19250505080156124ec57506040513d601f19601f820116820180604052508101906124e99190612f27565b60015b612566573d806000811461251c576040519150601f19603f3d011682016040523d82523d6000602084013e612521565b606091505b5060008151141561255e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612601576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612715565b600082905060005b6000821461263357808061261c9061388d565b915050600a8261262c9190613705565b9150612609565b60008167ffffffffffffffff81111561264f5761264e6139e7565b5b6040519080825280601f01601f1916602001820160405280156126815781602001600182028036833780820191505090505b5090505b6000851461270e5760018261269a9190613736565b9150600a856126a991906138fa565b60306126b591906136af565b60f81b8183815181106126cb576126ca6139b8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127079190613705565b9450612685565b8093505050505b919050565b600082612727858461282f565b1490509392505050565b600067ffffffffffffffff6040600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b61279283836128a4565b60008373ffffffffffffffffffffffffffffffffffffffff163b146128215760006001549050600083820390505b6127d36000868380600101945086612459565b612809576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106127c057816001541461281e57600080fd5b50505b505050565b60009392505050565b60008082905060005b8451811015612899576000858281518110612856576128556139b8565b5b60200260200101519050808311612878576128718382612a79565b9250612885565b6128828184612a79565b92505b5080806128919061388d565b915050612838565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612912576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561294d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61295a6000848385612336565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506129d1836129c2600086600061233c565b6129cb85612a90565b17612364565b60056000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106129f557806001819055505050612a74600084838561238f565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b828054612aac9061382a565b90600052602060002090601f016020900481019282612ace5760008555612b15565b82601f10612ae757805160ff1916838001178555612b15565b82800160010185558215612b15579182015b82811115612b14578251825591602001919060010190612af9565b5b509050612b229190612b26565b5090565b5b80821115612b3f576000816000905550600101612b27565b5090565b6000612b56612b51846135ff565b6135da565b905082815260208101848484011115612b7257612b71613a25565b5b612b7d8482856137e8565b509392505050565b6000612b98612b9384613630565b6135da565b905082815260208101848484011115612bb457612bb3613a25565b5b612bbf8482856137e8565b509392505050565b600081359050612bd681613cb6565b92915050565b60008083601f840112612bf257612bf1613a1b565b5b8235905067ffffffffffffffff811115612c0f57612c0e613a16565b5b602083019150836020820283011115612c2b57612c2a613a20565b5b9250929050565b600081359050612c4181613ccd565b92915050565b600081359050612c5681613ce4565b92915050565b600081359050612c6b81613cfb565b92915050565b600081519050612c8081613cfb565b92915050565b600082601f830112612c9b57612c9a613a1b565b5b8135612cab848260208601612b43565b91505092915050565b600082601f830112612cc957612cc8613a1b565b5b8135612cd9848260208601612b85565b91505092915050565b600081359050612cf181613d12565b92915050565b600060208284031215612d0d57612d0c613a2f565b5b6000612d1b84828501612bc7565b91505092915050565b60008060408385031215612d3b57612d3a613a2f565b5b6000612d4985828601612bc7565b9250506020612d5a85828601612bc7565b9150509250929050565b600080600060608486031215612d7d57612d7c613a2f565b5b6000612d8b86828701612bc7565b9350506020612d9c86828701612bc7565b9250506040612dad86828701612ce2565b9150509250925092565b60008060008060808587031215612dd157612dd0613a2f565b5b6000612ddf87828801612bc7565b9450506020612df087828801612bc7565b9350506040612e0187828801612ce2565b925050606085013567ffffffffffffffff811115612e2257612e21613a2a565b5b612e2e87828801612c86565b91505092959194509250565b60008060408385031215612e5157612e50613a2f565b5b6000612e5f85828601612bc7565b9250506020612e7085828601612c32565b9150509250929050565b60008060408385031215612e9157612e90613a2f565b5b6000612e9f85828601612bc7565b9250506020612eb085828601612ce2565b9150509250929050565b60008060408385031215612ed157612ed0613a2f565b5b6000612edf85828601612c47565b9250506020612ef085828601612c47565b9150509250929050565b600060208284031215612f1057612f0f613a2f565b5b6000612f1e84828501612c5c565b91505092915050565b600060208284031215612f3d57612f3c613a2f565b5b6000612f4b84828501612c71565b91505092915050565b600060208284031215612f6a57612f69613a2f565b5b600082013567ffffffffffffffff811115612f8857612f87613a2a565b5b612f9484828501612cb4565b91505092915050565b600060208284031215612fb357612fb2613a2f565b5b6000612fc184828501612ce2565b91505092915050565b600080600060408486031215612fe357612fe2613a2f565b5b6000612ff186828701612ce2565b935050602084013567ffffffffffffffff81111561301257613011613a2a565b5b61301e86828701612bdc565b92509250509250925092565b6130338161376a565b82525050565b61304a6130458261376a565b6138d6565b82525050565b6130598161377c565b82525050565b61306881613788565b82525050565b600061307982613661565b6130838185613677565b93506130938185602086016137f7565b61309c81613a34565b840191505092915050565b60006130b28261366c565b6130bc8185613693565b93506130cc8185602086016137f7565b6130d581613a34565b840191505092915050565b60006130eb8261366c565b6130f581856136a4565b93506131058185602086016137f7565b80840191505092915050565b600061311e601683613693565b915061312982613a52565b602082019050919050565b6000613141602683613693565b915061314c82613a7b565b604082019050919050565b6000613164603083613693565b915061316f82613aca565b604082019050919050565b6000613187600a83613693565b915061319282613b19565b602082019050919050565b60006131aa601e83613693565b91506131b582613b42565b602082019050919050565b60006131cd600f83613693565b91506131d882613b6b565b602082019050919050565b60006131f06005836136a4565b91506131fb82613b94565b600582019050919050565b6000613213602083613693565b915061321e82613bbd565b602082019050919050565b6000613236601583613693565b915061324182613be6565b602082019050919050565b6000613259600083613688565b915061326482613c0f565b600082019050919050565b600061327c601083613693565b915061328782613c12565b602082019050919050565b600061329f601283613693565b91506132aa82613c3b565b602082019050919050565b60006132c2601883613693565b91506132cd82613c64565b602082019050919050565b60006132e5601f83613693565b91506132f082613c8d565b602082019050919050565b613304816137de565b82525050565b60006133168284613039565b60148201915081905092915050565b600061333182846130e0565b915081905092915050565b600061334882856130e0565b915061335482846130e0565b915061335f826131e3565b91508190509392505050565b60006133768261324c565b9150819050919050565b6000602082019050613395600083018461302a565b92915050565b60006080820190506133b0600083018761302a565b6133bd602083018661302a565b6133ca60408301856132fb565b81810360608301526133dc818461306e565b905095945050505050565b60006020820190506133fc6000830184613050565b92915050565b6000602082019050613417600083018461305f565b92915050565b6000602082019050818103600083015261343781846130a7565b905092915050565b6000602082019050818103600083015261345881613111565b9050919050565b6000602082019050818103600083015261347881613134565b9050919050565b6000602082019050818103600083015261349881613157565b9050919050565b600060208201905081810360008301526134b88161317a565b9050919050565b600060208201905081810360008301526134d88161319d565b9050919050565b600060208201905081810360008301526134f8816131c0565b9050919050565b6000602082019050818103600083015261351881613206565b9050919050565b6000602082019050818103600083015261353881613229565b9050919050565b600060208201905081810360008301526135588161326f565b9050919050565b6000602082019050818103600083015261357881613292565b9050919050565b60006020820190508181036000830152613598816132b5565b9050919050565b600060208201905081810360008301526135b8816132d8565b9050919050565b60006020820190506135d460008301846132fb565b92915050565b60006135e46135f5565b90506135f0828261385c565b919050565b6000604051905090565b600067ffffffffffffffff82111561361a576136196139e7565b5b61362382613a34565b9050602081019050919050565b600067ffffffffffffffff82111561364b5761364a6139e7565b5b61365482613a34565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136ba826137de565b91506136c5836137de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136fa576136f961392b565b5b828201905092915050565b6000613710826137de565b915061371b836137de565b92508261372b5761372a61395a565b5b828204905092915050565b6000613741826137de565b915061374c836137de565b92508282101561375f5761375e61392b565b5b828203905092915050565b6000613775826137be565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138155780820151818401526020810190506137fa565b83811115613824576000848401525b50505050565b6000600282049050600182168061384257607f821691505b6020821081141561385657613855613989565b5b50919050565b61386582613a34565b810181811067ffffffffffffffff82111715613884576138836139e7565b5b80604052505050565b6000613898826137de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138cb576138ca61392b565b5b600182019050919050565b60006138e1826138e8565b9050919050565b60006138f382613a45565b9050919050565b6000613905826137de565b9150613910836137de565b9250826139205761391f61395a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57686974656c697374206e6f7420616374697665212100000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2100000000000000000000000000000000602082015250565b7f534f4c44204f5554212100000000000000000000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4672656573616c65206e6f742061637469766521210000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c69642070726963652073656e740000000000000000000000000000600082015250565b7f5075626c69632053616c65206e6f742061637469766521210000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613cbf8161376a565b8114613cca57600080fd5b50565b613cd68161377c565b8114613ce157600080fd5b50565b613ced81613788565b8114613cf857600080fd5b50565b613d0481613792565b8114613d0f57600080fd5b50565b613d1b816137de565b8114613d2657600080fd5b5056fea26469706673582212205d8e5fe63ab1622a179299919f5ba98f91367fb26647cb9a0e6c0f342acc4c6164736f6c6343000807003368747470733a2f2f776f6f662e77732f6e66745f636f6c6c656374696f6e2f68696464656e5f6d657461646174612f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102045760003560e01c806389ba959c11610118578063aef6d4b1116100a0578063dc33e6811161006f578063dc33e68114610711578063e2f36dce1461074e578063e985e9c514610777578063eac989f8146107b4578063f2fde38b146107df57610204565b8063aef6d4b114610664578063b88d4fde1461068f578063c87b56dd146106b8578063d2cab056146106f557610204565b806391b7f5ed116100e757806391b7f5ed146105b457806395d89b41146105dd578063a0712d6814610608578063a22cb46514610624578063ac4460021461064d57610204565b806389ba959c146105085780638d859f3e146105335780638da5cb5b1461055e5780638e1f9cfe1461058957610204565b806342842e0e1161019b57806369ba1a751161016a57806369ba1a75146104375780636c0360eb1461046057806370a082311461048b578063715018a6146104c857806375edcbe0146104df57610204565b806342842e0e1461037f5780634c261247146103a857806355f804b3146103d15780636352211e146103fa57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806318160ddd14610300578063200d2ed21461032b57806323b872dd1461035657610204565b806301ffc9a714610209578063050225ea1461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612efa565b610808565b60405161023d91906133e7565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612e7a565b61089a565b005b34801561027b57600080fd5b506102846109de565b604051610291919061341d565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612f9d565b610a70565b6040516102ce9190613380565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612e7a565b610aec565b005b34801561030c57600080fd5b50610315610c2d565b60405161032291906135bf565b60405180910390f35b34801561033757600080fd5b50610340610c44565b60405161034d91906135bf565b60405180910390f35b34801561036257600080fd5b5061037d60048036038101906103789190612d64565b610c4a565b005b34801561038b57600080fd5b506103a660048036038101906103a19190612d64565b610f6f565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190612f54565b610f8f565b005b3480156103dd57600080fd5b506103f860048036038101906103f39190612f54565b61104f565b005b34801561040657600080fd5b50610421600480360381019061041c9190612f9d565b6110e5565b60405161042e9190613380565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190612f9d565b6110f7565b005b34801561046c57600080fd5b5061047561117d565b604051610482919061341d565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad9190612cf7565b61120f565b6040516104bf91906135bf565b60405180910390f35b3480156104d457600080fd5b506104dd6112c8565b005b3480156104eb57600080fd5b5061050660048036038101906105019190612eba565b611350565b005b34801561051457600080fd5b5061051d6113de565b60405161052a9190613402565b60405180910390f35b34801561053f57600080fd5b506105486113e4565b60405161055591906135bf565b60405180910390f35b34801561056a57600080fd5b506105736113ea565b6040516105809190613380565b60405180910390f35b34801561059557600080fd5b5061059e611413565b6040516105ab9190613402565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612f9d565b611419565b005b3480156105e957600080fd5b506105f261149f565b6040516105ff919061341d565b60405180910390f35b610622600480360381019061061d9190612f9d565b611531565b005b34801561063057600080fd5b5061064b60048036038101906106469190612e3a565b611682565b005b34801561065957600080fd5b506106626117fa565b005b34801561067057600080fd5b50610679611982565b60405161068691906133e7565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190612db7565b611995565b005b3480156106c457600080fd5b506106df60048036038101906106da9190612f9d565b611a08565b6040516106ec919061341d565b60405180910390f35b61070f600480360381019061070a9190612fca565b611b1a565b005b34801561071d57600080fd5b5061073860048036038101906107339190612cf7565b611d7a565b60405161074591906135bf565b60405180910390f35b34801561075a57600080fd5b5061077560048036038101906107709190612fca565b611d8c565b005b34801561078357600080fd5b5061079e60048036038101906107999190612d24565b611f52565b6040516107ab91906133e7565b60405180910390f35b3480156107c057600080fd5b506107c9611fe6565b6040516107d6919061341d565b60405180910390f35b3480156107eb57600080fd5b5061080660048036038101906108019190612cf7565b612074565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086357506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108935750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6108a261216c565b73ffffffffffffffffffffffffffffffffffffffff166108c06113ea565b73ffffffffffffffffffffffffffffffffffffffff1614610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d906134ff565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b906134bf565b60405180910390fd5b600d5461098f610c2d565b11156109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c79061349f565b60405180910390fd5b6109da8282612174565b5050565b6060600380546109ed9061382a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a199061382a565b8015610a665780601f10610a3b57610100808354040283529160200191610a66565b820191906000526020600020905b815481529060010190602001808311610a4957829003601f168201915b5050505050905090565b6000610a7b82612192565b610ab1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af7826110e5565b90508073ffffffffffffffffffffffffffffffffffffffff16610b186121f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b7b57610b4481610b3f6121f1565b611f52565b610b7a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000610c376121f9565b6002546001540303905090565b600c5481565b6000610c5582612202565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610cc8846122d0565b91509150610cde8187610cd96121f1565b6122f2565b610d2a57610cf386610cee6121f1565b611f52565b610d29576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610d91576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d9e8686866001612336565b8015610da957600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610e7785610e5388888761233c565b7c020000000000000000000000000000000000000000000000000000000017612364565b600560008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610eff576000600185019050600060056000838152602001908152602001600020541415610efd576001548114610efc578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f67868686600161238f565b505050505050565b610f8a83838360405180602001604052806000815250611995565b505050565b610f9761216c565b73ffffffffffffffffffffffffffffffffffffffff16610fb56113ea565b73ffffffffffffffffffffffffffffffffffffffff161461100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906134ff565b60405180910390fd5b80600a9080519060200190611021929190612aa0565b50600b60009054906101000a900460ff1615600b60006101000a81548160ff02191690831515021790555050565b61105761216c565b73ffffffffffffffffffffffffffffffffffffffff166110756113ea565b73ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c2906134ff565b60405180910390fd5b80600a90805190602001906110e1929190612aa0565b5050565b60006110f082612202565b9050919050565b6110ff61216c565b73ffffffffffffffffffffffffffffffffffffffff1661111d6113ea565b73ffffffffffffffffffffffffffffffffffffffff1614611173576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116a906134ff565b60405180910390fd5b80600c8190555050565b6060600a805461118c9061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546111b89061382a565b80156112055780601f106111da57610100808354040283529160200191611205565b820191906000526020600020905b8154815290600101906020018083116111e857829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611277576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112d061216c565b73ffffffffffffffffffffffffffffffffffffffff166112ee6113ea565b73ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906134ff565b60405180910390fd5b61134e6000612395565b565b61135861216c565b73ffffffffffffffffffffffffffffffffffffffff166113766113ea565b73ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c3906134ff565b60405180910390fd5b81600f81905550806010819055505050565b600f5481565b600e5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b61142161216c565b73ffffffffffffffffffffffffffffffffffffffff1661143f6113ea565b73ffffffffffffffffffffffffffffffffffffffff1614611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c906134ff565b60405180910390fd5b80600e8190555050565b6060600480546114ae9061382a565b80601f01602080910402602001604051908101604052809291908181526020018280546114da9061382a565b80156115275780601f106114fc57610100808354040283529160200191611527565b820191906000526020600020905b81548152906001019060200180831161150a57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461159f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611596906134bf565b60405180910390fd5b6003600c54146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061357f565b60405180910390fd5b600e54341015611629576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116209061355f565b60405180910390fd5b600d54611634610c2d565b1115611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c9061349f565b60405180910390fd5b61167f3382612174565b50565b61168a6121f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ef576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006116fc6121f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117a96121f1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ee91906133e7565b60405180910390a35050565b60026009541415611840576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118379061359f565b60405180910390fd5b600260098190555061185061216c565b73ffffffffffffffffffffffffffffffffffffffff1661186e6113ea565b73ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb906134ff565b60405180910390fd5b60006118ce6113ea565b73ffffffffffffffffffffffffffffffffffffffff16476040516118f19061336b565b60006040518083038185875af1925050503d806000811461192e576040519150601f19603f3d011682016040523d82523d6000602084013e611933565b606091505b5050905080611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e9061353f565b60405180910390fd5b506001600981905550565b600b60009054906101000a900460ff1681565b6119a0848484610c4a565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611a02576119cb84848484612459565b611a01576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611a1382612192565b611a52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a499061347f565b60405180910390fd5b600b60009054906101000a900460ff1615611abb576000611a7161117d565b5111611a8c5760405180602001604052806000815250611ab4565b611a9461117d565b604051602001611aa49190613325565b6040516020818303038152906040525b9050611b15565b6000611ac561117d565b5111611ae05760405180602001604052806000815250611b12565b611ae861117d565b611af1836125b9565b604051602001611b0292919061333c565b6040516020818303038152906040525b90505b919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f906134bf565b60405180910390fd5b6002600c5414611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc49061343f565b60405180910390fd5b600033604051602001611be0919061330a565b604051602081830303815290604052805190602001209050611c46838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361271a565b80611c9b5750611c9a838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506010548361271a565b5b611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906134df565b60405180910390fd5b600e54341015611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d169061355f565b60405180910390fd5b600d54611d2a610c2d565b10611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d619061349f565b60405180910390fd5b611d743385612174565b50505050565b6000611d8582612731565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df1906134bf565b60405180910390fd5b6001600c5414611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e369061351f565b60405180910390fd5b600033604051602001611e52919061330a565b604051602081830303815290604052805190602001209050611eb8838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f548361271a565b611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee906134df565b60405180910390fd5b600d54611f02610c2d565b10611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f399061349f565b60405180910390fd5b611f4c3385612174565b50505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600a8054611ff39061382a565b80601f016020809104026020016040519081016040528092919081815260200182805461201f9061382a565b801561206c5780601f106120415761010080835404028352916020019161206c565b820191906000526020600020905b81548152906001019060200180831161204f57829003601f168201915b505050505081565b61207c61216c565b73ffffffffffffffffffffffffffffffffffffffff1661209a6113ea565b73ffffffffffffffffffffffffffffffffffffffff16146120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e7906134ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612160576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121579061345f565b60405180910390fd5b61216981612395565b50565b600033905090565b61218e828260405180602001604052806000815250612788565b5050565b60008161219d6121f9565b111580156121ac575060015482105b80156121ea575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b60006001905090565b600080829050806122116121f9565b11612299576001548110156122985760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612296575b600081141561228c576005600083600190039350838152602001908152602001600020549050612261565b80925050506122cb565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000806000600790508360005280602052604060002092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612353868684612826565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261247f6121f1565b8786866040518563ffffffff1660e01b81526004016124a1949392919061339b565b602060405180830381600087803b1580156124bb57600080fd5b505af19250505080156124ec57506040513d601f19601f820116820180604052508101906124e99190612f27565b60015b612566573d806000811461251c576040519150601f19603f3d011682016040523d82523d6000602084013e612521565b606091505b5060008151141561255e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606000821415612601576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612715565b600082905060005b6000821461263357808061261c9061388d565b915050600a8261262c9190613705565b9150612609565b60008167ffffffffffffffff81111561264f5761264e6139e7565b5b6040519080825280601f01601f1916602001820160405280156126815781602001600182028036833780820191505090505b5090505b6000851461270e5760018261269a9190613736565b9150600a856126a991906138fa565b60306126b591906136af565b60f81b8183815181106126cb576126ca6139b8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127079190613705565b9450612685565b8093505050505b919050565b600082612727858461282f565b1490509392505050565b600067ffffffffffffffff6040600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b61279283836128a4565b60008373ffffffffffffffffffffffffffffffffffffffff163b146128215760006001549050600083820390505b6127d36000868380600101945086612459565b612809576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106127c057816001541461281e57600080fd5b50505b505050565b60009392505050565b60008082905060005b8451811015612899576000858281518110612856576128556139b8565b5b60200260200101519050808311612878576128718382612a79565b9250612885565b6128828184612a79565b92505b5080806128919061388d565b915050612838565b508091505092915050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612912576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561294d576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61295a6000848385612336565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506129d1836129c2600086600061233c565b6129cb85612a90565b17612364565b60056000838152602001908152602001600020819055506000819050600083830190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106129f557806001819055505050612a74600084838561238f565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b828054612aac9061382a565b90600052602060002090601f016020900481019282612ace5760008555612b15565b82601f10612ae757805160ff1916838001178555612b15565b82800160010185558215612b15579182015b82811115612b14578251825591602001919060010190612af9565b5b509050612b229190612b26565b5090565b5b80821115612b3f576000816000905550600101612b27565b5090565b6000612b56612b51846135ff565b6135da565b905082815260208101848484011115612b7257612b71613a25565b5b612b7d8482856137e8565b509392505050565b6000612b98612b9384613630565b6135da565b905082815260208101848484011115612bb457612bb3613a25565b5b612bbf8482856137e8565b509392505050565b600081359050612bd681613cb6565b92915050565b60008083601f840112612bf257612bf1613a1b565b5b8235905067ffffffffffffffff811115612c0f57612c0e613a16565b5b602083019150836020820283011115612c2b57612c2a613a20565b5b9250929050565b600081359050612c4181613ccd565b92915050565b600081359050612c5681613ce4565b92915050565b600081359050612c6b81613cfb565b92915050565b600081519050612c8081613cfb565b92915050565b600082601f830112612c9b57612c9a613a1b565b5b8135612cab848260208601612b43565b91505092915050565b600082601f830112612cc957612cc8613a1b565b5b8135612cd9848260208601612b85565b91505092915050565b600081359050612cf181613d12565b92915050565b600060208284031215612d0d57612d0c613a2f565b5b6000612d1b84828501612bc7565b91505092915050565b60008060408385031215612d3b57612d3a613a2f565b5b6000612d4985828601612bc7565b9250506020612d5a85828601612bc7565b9150509250929050565b600080600060608486031215612d7d57612d7c613a2f565b5b6000612d8b86828701612bc7565b9350506020612d9c86828701612bc7565b9250506040612dad86828701612ce2565b9150509250925092565b60008060008060808587031215612dd157612dd0613a2f565b5b6000612ddf87828801612bc7565b9450506020612df087828801612bc7565b9350506040612e0187828801612ce2565b925050606085013567ffffffffffffffff811115612e2257612e21613a2a565b5b612e2e87828801612c86565b91505092959194509250565b60008060408385031215612e5157612e50613a2f565b5b6000612e5f85828601612bc7565b9250506020612e7085828601612c32565b9150509250929050565b60008060408385031215612e9157612e90613a2f565b5b6000612e9f85828601612bc7565b9250506020612eb085828601612ce2565b9150509250929050565b60008060408385031215612ed157612ed0613a2f565b5b6000612edf85828601612c47565b9250506020612ef085828601612c47565b9150509250929050565b600060208284031215612f1057612f0f613a2f565b5b6000612f1e84828501612c5c565b91505092915050565b600060208284031215612f3d57612f3c613a2f565b5b6000612f4b84828501612c71565b91505092915050565b600060208284031215612f6a57612f69613a2f565b5b600082013567ffffffffffffffff811115612f8857612f87613a2a565b5b612f9484828501612cb4565b91505092915050565b600060208284031215612fb357612fb2613a2f565b5b6000612fc184828501612ce2565b91505092915050565b600080600060408486031215612fe357612fe2613a2f565b5b6000612ff186828701612ce2565b935050602084013567ffffffffffffffff81111561301257613011613a2a565b5b61301e86828701612bdc565b92509250509250925092565b6130338161376a565b82525050565b61304a6130458261376a565b6138d6565b82525050565b6130598161377c565b82525050565b61306881613788565b82525050565b600061307982613661565b6130838185613677565b93506130938185602086016137f7565b61309c81613a34565b840191505092915050565b60006130b28261366c565b6130bc8185613693565b93506130cc8185602086016137f7565b6130d581613a34565b840191505092915050565b60006130eb8261366c565b6130f581856136a4565b93506131058185602086016137f7565b80840191505092915050565b600061311e601683613693565b915061312982613a52565b602082019050919050565b6000613141602683613693565b915061314c82613a7b565b604082019050919050565b6000613164603083613693565b915061316f82613aca565b604082019050919050565b6000613187600a83613693565b915061319282613b19565b602082019050919050565b60006131aa601e83613693565b91506131b582613b42565b602082019050919050565b60006131cd600f83613693565b91506131d882613b6b565b602082019050919050565b60006131f06005836136a4565b91506131fb82613b94565b600582019050919050565b6000613213602083613693565b915061321e82613bbd565b602082019050919050565b6000613236601583613693565b915061324182613be6565b602082019050919050565b6000613259600083613688565b915061326482613c0f565b600082019050919050565b600061327c601083613693565b915061328782613c12565b602082019050919050565b600061329f601283613693565b91506132aa82613c3b565b602082019050919050565b60006132c2601883613693565b91506132cd82613c64565b602082019050919050565b60006132e5601f83613693565b91506132f082613c8d565b602082019050919050565b613304816137de565b82525050565b60006133168284613039565b60148201915081905092915050565b600061333182846130e0565b915081905092915050565b600061334882856130e0565b915061335482846130e0565b915061335f826131e3565b91508190509392505050565b60006133768261324c565b9150819050919050565b6000602082019050613395600083018461302a565b92915050565b60006080820190506133b0600083018761302a565b6133bd602083018661302a565b6133ca60408301856132fb565b81810360608301526133dc818461306e565b905095945050505050565b60006020820190506133fc6000830184613050565b92915050565b6000602082019050613417600083018461305f565b92915050565b6000602082019050818103600083015261343781846130a7565b905092915050565b6000602082019050818103600083015261345881613111565b9050919050565b6000602082019050818103600083015261347881613134565b9050919050565b6000602082019050818103600083015261349881613157565b9050919050565b600060208201905081810360008301526134b88161317a565b9050919050565b600060208201905081810360008301526134d88161319d565b9050919050565b600060208201905081810360008301526134f8816131c0565b9050919050565b6000602082019050818103600083015261351881613206565b9050919050565b6000602082019050818103600083015261353881613229565b9050919050565b600060208201905081810360008301526135588161326f565b9050919050565b6000602082019050818103600083015261357881613292565b9050919050565b60006020820190508181036000830152613598816132b5565b9050919050565b600060208201905081810360008301526135b8816132d8565b9050919050565b60006020820190506135d460008301846132fb565b92915050565b60006135e46135f5565b90506135f0828261385c565b919050565b6000604051905090565b600067ffffffffffffffff82111561361a576136196139e7565b5b61362382613a34565b9050602081019050919050565b600067ffffffffffffffff82111561364b5761364a6139e7565b5b61365482613a34565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006136ba826137de565b91506136c5836137de565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136fa576136f961392b565b5b828201905092915050565b6000613710826137de565b915061371b836137de565b92508261372b5761372a61395a565b5b828204905092915050565b6000613741826137de565b915061374c836137de565b92508282101561375f5761375e61392b565b5b828203905092915050565b6000613775826137be565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138155780820151818401526020810190506137fa565b83811115613824576000848401525b50505050565b6000600282049050600182168061384257607f821691505b6020821081141561385657613855613989565b5b50919050565b61386582613a34565b810181811067ffffffffffffffff82111715613884576138836139e7565b5b80604052505050565b6000613898826137de565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138cb576138ca61392b565b5b600182019050919050565b60006138e1826138e8565b9050919050565b60006138f382613a45565b9050919050565b6000613905826137de565b9150613910836137de565b9250826139205761391f61395a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f57686974656c697374206e6f7420616374697665212100000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e2100000000000000000000000000000000602082015250565b7f534f4c44204f5554212100000000000000000000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4672656573616c65206e6f742061637469766521210000000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f496e76616c69642070726963652073656e740000000000000000000000000000600082015250565b7f5075626c69632053616c65206e6f742061637469766521210000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613cbf8161376a565b8114613cca57600080fd5b50565b613cd68161377c565b8114613ce157600080fd5b50565b613ced81613788565b8114613cf857600080fd5b50565b613d0481613792565b8114613d0f57600080fd5b50565b613d1b816137de565b8114613d2657600080fd5b5056fea26469706673582212205d8e5fe63ab1622a179299919f5ba98f91367fb26647cb9a0e6c0f342acc4c6164736f6c63430008070033
Deployed Bytecode Sourcemap
47969:3744:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17837:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50465:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23484:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25430:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24978:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16891:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48131:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34695:2800;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26320:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48927:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51182:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23273:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51267:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51092:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18516:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3602:103;;;;;;;;;;;;;:::i;:::-;;48488:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48273:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48234:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3379:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48378:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51345:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23653:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50044:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25706:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51520:190;;;;;;;;;;;;;:::i;:::-;;48097:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26576:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50656:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49476:562;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50346:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49045:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26085:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48073:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3714:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17837:615;17922:4;18237:10;18222:25;;:11;:25;;;;:102;;;;18314:10;18299:25;;:11;:25;;;;18222:102;:179;;;;18391:10;18376:25;;:11;:25;;;;18222:179;18202:199;;17837:615;;;:::o;50465:185::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48708:10:::1;48695:23;;:9;:23;;;48687:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50578:15:::2;;50561:13;:11;:13::i;:::-;:32;;50553:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50619:23;50629:2;50633:8;50619:9;:23::i;:::-;50465:185:::0;;:::o;23484:100::-;23538:13;23571:5;23564:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23484:100;:::o;25430:204::-;25498:7;25523:16;25531:7;25523;:16::i;:::-;25518:64;;25548:34;;;;;;;;;;;;;;25518:64;25602:15;:24;25618:7;25602:24;;;;;;;;;;;;;;;;;;;;;25595:31;;25430:204;;;:::o;24978:386::-;25051:13;25067:16;25075:7;25067;:16::i;:::-;25051:32;;25123:5;25100:28;;:19;:17;:19::i;:::-;:28;;;25096:175;;25148:44;25165:5;25172:19;:17;:19::i;:::-;25148:16;:44::i;:::-;25143:128;;25220:35;;;;;;;;;;;;;;25143:128;25096:175;25310:2;25283:15;:24;25299:7;25283:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;25348:7;25344:2;25328:28;;25337:5;25328:28;;;;;;;;;;;;25040:324;24978:386;;:::o;16891:315::-;16944:7;17172:15;:13;:15::i;:::-;17157:12;;17141:13;;:28;:46;17134:53;;16891:315;:::o;48131:22::-;;;;:::o;34695:2800::-;34829:27;34859;34878:7;34859:18;:27::i;:::-;34829:57;;34944:4;34903:45;;34919:19;34903:45;;;34899:86;;34957:28;;;;;;;;;;;;;;34899:86;34999:27;35028:23;35055:28;35075:7;35055:19;:28::i;:::-;34998:85;;;;35183:62;35202:15;35219:4;35225:19;:17;:19::i;:::-;35183:18;:62::i;:::-;35178:174;;35265:43;35282:4;35288:19;:17;:19::i;:::-;35265:16;:43::i;:::-;35260:92;;35317:35;;;;;;;;;;;;;;35260:92;35178:174;35383:1;35369:16;;:2;:16;;;35365:52;;;35394:23;;;;;;;;;;;;;;35365:52;35430:43;35452:4;35458:2;35462:7;35471:1;35430:21;:43::i;:::-;35566:15;35563:160;;;35706:1;35685:19;35678:30;35563:160;36101:18;:24;36120:4;36101:24;;;;;;;;;;;;;;;;36099:26;;;;;;;;;;;;36170:18;:22;36189:2;36170:22;;;;;;;;;;;;;;;;36168:24;;;;;;;;;;;36492:145;36529:2;36577:45;36592:4;36598:2;36602:19;36577:14;:45::i;:::-;14119:8;36550:72;36492:18;:145::i;:::-;36463:17;:26;36481:7;36463:26;;;;;;;;;;;:174;;;;36807:1;14119:8;36757:19;:46;:51;36753:626;;;36829:19;36861:1;36851:7;:11;36829:33;;37018:1;36984:17;:30;37002:11;36984:30;;;;;;;;;;;;:35;36980:384;;;37122:13;;37107:11;:28;37103:242;;37302:19;37269:17;:30;37287:11;37269:30;;;;;;;;;;;:52;;;;37103:242;36980:384;36810:569;36753:626;37426:7;37422:2;37407:27;;37416:4;37407:27;;;;;;;;;;;;37445:42;37466:4;37472:2;37476:7;37485:1;37445:20;:42::i;:::-;34818:2677;;;34695:2800;;;:::o;26320:185::-;26458:39;26475:4;26481:2;26485:7;26458:39;;;;;;;;;;;;:16;:39::i;:::-;26320:185;;;:::o;48927:112::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48998:6:::1;48992:3;:12;;;;;;;;;;;;:::i;:::-;;49025:6;;;;;;;;;;;49024:7;49015:6;;:16;;;;;;;;;;;;;;;;;;48927:112:::0;:::o;51182:79::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51252:1:::1;51246:3;:7;;;;;;;;;;;;:::i;:::-;;51182:79:::0;:::o;23273:144::-;23337:7;23380:27;23399:7;23380:18;:27::i;:::-;23357:52;;23273:144;;;:::o;51267:72::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51330:1:::1;51321:6;:10;;;;51267:72:::0;:::o;51092:84::-;51132:13;51165:3;51158:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51092:84;:::o;18516:224::-;18580:7;18621:1;18604:19;;:5;:19;;;18600:60;;;18632:28;;;;;;;;;;;;;;18600:60;13071:13;18678:18;:25;18697:5;18678:25;;;;;;;;;;;;;;;;:54;18671:61;;18516:224;;;:::o;3602:103::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3667:30:::1;3694:1;3667:18;:30::i;:::-;3602:103::o:0;48488:158::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48590:5:::1;48573:14;:22;;;;48628:10;48606:19;:32;;;;48488:158:::0;;:::o;48273:98::-;;;;:::o;48234:30::-;;;;:::o;3379:87::-;3425:7;3452:6;;;;;;;;;;;3445:13;;3379:87;:::o;48378:103::-;;;;:::o;51345:70::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51406:1:::1;51398:5;:9;;;;51345:70:::0;:::o;23653:104::-;23709:13;23742:7;23735:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23653:104;:::o;50044:296::-;48708:10;48695:23;;:9;:23;;;48687:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50132:1:::1;50122:6;;:11;50114:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;50194:5;;50181:9;:18;;50173:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;50258:15;;50241:13;:11;:13::i;:::-;:32;;50233:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50301:31;50311:10;50323:8;50301:9;:31::i;:::-;50044:296:::0;:::o;25706:308::-;25817:19;:17;:19::i;:::-;25805:31;;:8;:31;;;25801:61;;;25845:17;;;;;;;;;;;;;;25801:61;25927:8;25875:18;:39;25894:19;:17;:19::i;:::-;25875:39;;;;;;;;;;;;;;;:49;25915:8;25875:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;25987:8;25951:55;;25966:19;:17;:19::i;:::-;25951:55;;;25997:8;25951:55;;;;;;:::i;:::-;;;;;;;;25706:308;;:::o;51520:190::-;1161:1;1307:7;;:19;;1299:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1161:1;1368:7;:18;;;;3524:12:::1;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51589:13:::2;51608:7;:5;:7::i;:::-;:12;;51628:21;51608:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51588:66;;;51673:8;51665:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;51577:133;1117:1:::0;1411:7;:22;;;;51520:190::o;48097:25::-;;;;;;;;;;;;;:::o;26576:399::-;26743:31;26756:4;26762:2;26766:7;26743:12;:31::i;:::-;26807:1;26789:2;:14;;;:19;26785:183;;26828:56;26859:4;26865:2;26869:7;26878:5;26828:30;:56::i;:::-;26823:145;;26912:40;;;;;;;;;;;;;;26823:145;26785:183;26576:399;;;;:::o;50656:430::-;50729:13;50763:16;50771:7;50763;:16::i;:::-;50755:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;50845:6;;;;;;;;;;;50842:236;;;50899:1;50879:9;:7;:9::i;:::-;50873:23;:27;:70;;;;;;;;;;;;;;;;;50927:9;:7;:9::i;:::-;50910:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;50873:70;50866:77;;;;50842:236;51005:1;50985:9;:7;:9::i;:::-;50979:23;:27;:99;;;;;;;;;;;;;;;;;51033:9;:7;:9::i;:::-;51044:18;:7;:16;:18::i;:::-;51016:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50979:99;50972:106;;50656:430;;;;:::o;49476:562::-;48708:10;48695:23;;:9;:23;;;48687:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49605:1:::1;49595:6;;:11;49587:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;49644:12;49686:10;49669:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49659:39;;;;;;49644:54;;49717;49737:11;;49717:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49750:14;;49766:4;49717:18;:54::i;:::-;:117;;;;49775:59;49795:11;;49775:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49808:19;;49829:4;49775:18;:59::i;:::-;49717:117;49709:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;49885:5;;49872:9;:18;;49864:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;49948:15;;49932:13;:11;:13::i;:::-;:31;49924:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49999:31;50009:10;50021:8;49999:9;:31::i;:::-;49576:462;49476:562:::0;;;:::o;50346:113::-;50404:7;50431:20;50445:5;50431:13;:20::i;:::-;50424:27;;50346:113;;;:::o;49045:425::-;48708:10;48695:23;;:9;:23;;;48687:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49161:1:::1;49151:6;;:11;49143:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;49199:12;49241:10;49224:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49214:39;;;;;;49199:54;;49272;49292:11;;49272:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49305:14;;49321:4;49272:18;:54::i;:::-;49264:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49380:15;;49364:13;:11;:13::i;:::-;:31;49356:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49431:31;49441:10;49453:8;49431:9;:31::i;:::-;49132:338;49045:425:::0;;;:::o;26085:164::-;26182:4;26206:18;:25;26225:5;26206:25;;;;;;;;;;;;;;;:35;26232:8;26206:35;;;;;;;;;;;;;;;;;;;;;;;;;26199:42;;26085:164;;;;:::o;48073:17::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3714:201::-;3524:12;:10;:12::i;:::-;3513:23;;:7;:5;:7::i;:::-;:23;;;3505:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3823:1:::1;3803:22;;:8;:22;;;;3795:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3879:28;3898:8;3879:18;:28::i;:::-;3714:201:::0;:::o;2922:98::-;2975:7;3002:10;2995:17;;2922:98;:::o;27587:104::-;27656:27;27666:2;27670:8;27656:27;;;;;;;;;;;;:9;:27::i;:::-;27587:104;;:::o;27230:273::-;27287:4;27343:7;27324:15;:13;:15::i;:::-;:26;;:66;;;;;27377:13;;27367:7;:23;27324:66;:152;;;;;27475:1;13841:8;27428:17;:26;27446:7;27428:26;;;;;;;;;;;;:43;:48;27324:152;27304:172;;27230:273;;;:::o;45791:105::-;45851:7;45878:10;45871:17;;45791:105;:::o;51421:93::-;51478:7;51505:1;51498:8;;51421:93;:::o;20190:1129::-;20257:7;20277:12;20292:7;20277:22;;20360:4;20341:15;:13;:15::i;:::-;:23;20337:915;;20394:13;;20387:4;:20;20383:869;;;20432:14;20449:17;:23;20467:4;20449:23;;;;;;;;;;;;20432:40;;20565:1;13841:8;20538:6;:23;:28;20534:699;;;21057:113;21074:1;21064:6;:11;21057:113;;;21117:17;:25;21135:6;;;;;;;21117:25;;;;;;;;;;;;21108:34;;21057:113;;;21203:6;21196:13;;;;;;20534:699;20409:843;20383:869;20337:915;21280:31;;;;;;;;;;;;;;20190:1129;;;;:::o;33031:652::-;33126:27;33155:23;33196:53;33252:15;33196:71;;33438:7;33432:4;33425:21;33473:22;33467:4;33460:36;33549:4;33543;33533:21;33510:44;;33645:19;33639:26;33620:45;;33376:300;33031:652;;;:::o;33796:645::-;33938:11;34100:15;34094:4;34090:26;34082:34;;34259:15;34248:9;34244:31;34231:44;;34406:15;34395:9;34392:30;34385:4;34374:9;34371:19;34368:55;34358:65;;33796:645;;;;;:::o;44624:159::-;;;;;:::o;42936:309::-;43071:7;43091:16;14242:3;43117:19;:40;;43091:67;;14242:3;43184:31;43195:4;43201:2;43205:9;43184:10;:31::i;:::-;43176:40;;:61;;43169:68;;;42936:309;;;;;:::o;22764:447::-;22844:14;23012:15;23005:5;23001:27;22992:36;;23186:5;23172:11;23148:22;23144:40;23141:51;23134:5;23131:62;23121:72;;22764:447;;;;:::o;45442:158::-;;;;;:::o;3924:191::-;3998:16;4017:6;;;;;;;;;;;3998:25;;4043:8;4034:6;;:17;;;;;;;;;;;;;;;;;;4098:8;4067:40;;4088:8;4067:40;;;;;;;;;;;;3987:128;3924:191;:::o;41446:716::-;41609:4;41655:2;41630:45;;;41676:19;:17;:19::i;:::-;41697:4;41703:7;41712:5;41630:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41626:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41930:1;41913:6;:13;:18;41909:235;;;41959:40;;;;;;;;;;;;;;41909:235;42102:6;42096:13;42087:6;42083:2;42079:15;42072:38;41626:529;41799:54;;;41789:64;;;:6;:64;;;;41782:71;;;41446:716;;;;;;:::o;1539:533::-;1595:13;1635:1;1626:5;:10;1622:53;;;1653:10;;;;;;;;;;;;;;;;;;;;;1622:53;1685:12;1700:5;1685:20;;1716:14;1741:78;1756:1;1748:4;:9;1741:78;;1774:8;;;;;:::i;:::-;;;;1805:2;1797:10;;;;;:::i;:::-;;;1741:78;;;1829:19;1861:6;1851:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:39;;1879:154;1895:1;1886:5;:10;1879:154;;1923:1;1913:11;;;;;:::i;:::-;;;1990:2;1982:5;:10;;;;:::i;:::-;1969:2;:24;;;;:::i;:::-;1956:39;;1939:6;1946;1939:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2019:2;2010:11;;;;;:::i;:::-;;;1879:154;;;2057:6;2043:21;;;;;1539:533;;;;:::o;86:190::-;211:4;264;235:25;248:5;255:4;235:12;:25::i;:::-;:33;228:40;;86:190;;;;;:::o;18822:176::-;18883:7;13071:13;13208:2;18911:18;:25;18930:5;18911:25;;;;;;;;;;;;;;;;:49;;18910:80;18903:87;;18822:176;;;:::o;28107:681::-;28230:19;28236:2;28240:8;28230:5;:19::i;:::-;28309:1;28291:2;:14;;;:19;28287:483;;28331:11;28345:13;;28331:27;;28377:13;28399:8;28393:3;:14;28377:30;;28426:233;28457:62;28496:1;28500:2;28504:7;;;;;;28513:5;28457:30;:62::i;:::-;28452:167;;28555:40;;;;;;;;;;;;;;28452:167;28654:3;28646:5;:11;28426:233;;28741:3;28724:13;;:20;28720:34;;28746:8;;;28720:34;28312:458;;28287:483;28107:681;;;:::o;43821:147::-;43958:6;43821:147;;;;;:::o;281:517::-;364:7;384:20;407:4;384:27;;427:9;422:339;446:5;:12;442:1;:16;422:339;;;480:20;503:5;509:1;503:8;;;;;;;;:::i;:::-;;;;;;;;480:31;;546:12;530;:28;526:224;;594:42;609:12;623;594:14;:42::i;:::-;579:57;;526:224;;;692:42;707:12;721;692:14;:42::i;:::-;677:57;;526:224;465:296;460:3;;;;;:::i;:::-;;;;422:339;;;;778:12;771:19;;;281:517;;;;:::o;29061:1529::-;29126:20;29149:13;;29126:36;;29191:1;29177:16;;:2;:16;;;29173:48;;;29202:19;;;;;;;;;;;;;;29173:48;29248:1;29236:8;:13;29232:44;;;29258:18;;;;;;;;;;;;;;29232:44;29289:61;29319:1;29323:2;29327:12;29341:8;29289:21;:61::i;:::-;29832:1;13208:2;29803:1;:25;;29802:31;29790:8;:44;29764:18;:22;29783:2;29764:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;30111:139;30148:2;30202:33;30225:1;30229:2;30233:1;30202:14;:33::i;:::-;30169:30;30190:8;30169:20;:30::i;:::-;:66;30111:18;:139::i;:::-;30077:17;:31;30095:12;30077:31;;;;;;;;;;;:173;;;;30267:15;30285:12;30267:30;;30312:11;30341:8;30326:12;:23;30312:37;;30364:101;30416:9;;;;;;30412:2;30391:35;;30408:1;30391:35;;;;;;;;;;;;30460:3;30450:7;:13;30364:101;;30497:3;30481:13;:19;;;;29538:974;;30522:60;30551:1;30555:2;30559:12;30573:8;30522:20;:60::i;:::-;29115:1475;29061:1529;;:::o;806:224::-;874:13;937:1;931:4;924:15;966:1;960:4;953:15;1007:4;1001;991:21;982:30;;806:224;;;;:::o;24594:322::-;24664:14;24895:1;24885:8;24882:15;24857:23;24853:45;24843:55;;24594:322;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:::-;6424:6;6432;6481:2;6469:9;6460:7;6456:23;6452:32;6449:119;;;6487:79;;:::i;:::-;6449:119;6607:1;6632:53;6677:7;6668:6;6657:9;6653:22;6632:53;:::i;:::-;6622:63;;6578:117;6734:2;6760:53;6805:7;6796:6;6785:9;6781:22;6760:53;:::i;:::-;6750:63;;6705:118;6356:474;;;;;:::o;6836:327::-;6894:6;6943:2;6931:9;6922:7;6918:23;6914:32;6911:119;;;6949:79;;:::i;:::-;6911:119;7069:1;7094:52;7138:7;7129:6;7118:9;7114:22;7094:52;:::i;:::-;7084:62;;7040:116;6836:327;;;;:::o;7169:349::-;7238:6;7287:2;7275:9;7266:7;7262:23;7258:32;7255:119;;;7293:79;;:::i;:::-;7255:119;7413:1;7438:63;7493:7;7484:6;7473:9;7469:22;7438:63;:::i;:::-;7428:73;;7384:127;7169:349;;;;:::o;7524:509::-;7593:6;7642:2;7630:9;7621:7;7617:23;7613:32;7610:119;;;7648:79;;:::i;:::-;7610:119;7796:1;7785:9;7781:17;7768:31;7826:18;7818:6;7815:30;7812:117;;;7848:79;;:::i;:::-;7812:117;7953:63;8008:7;7999:6;7988:9;7984:22;7953:63;:::i;:::-;7943:73;;7739:287;7524:509;;;;:::o;8039:329::-;8098:6;8147:2;8135:9;8126:7;8122:23;8118:32;8115:119;;;8153:79;;:::i;:::-;8115:119;8273:1;8298:53;8343:7;8334:6;8323:9;8319:22;8298:53;:::i;:::-;8288:63;;8244:117;8039:329;;;;:::o;8374:704::-;8469:6;8477;8485;8534:2;8522:9;8513:7;8509:23;8505:32;8502:119;;;8540:79;;:::i;:::-;8502:119;8660:1;8685:53;8730:7;8721:6;8710:9;8706:22;8685:53;:::i;:::-;8675:63;;8631:117;8815:2;8804:9;8800:18;8787:32;8846:18;8838:6;8835:30;8832:117;;;8868:79;;:::i;:::-;8832:117;8981:80;9053:7;9044:6;9033:9;9029:22;8981:80;:::i;:::-;8963:98;;;;8758:313;8374:704;;;;;:::o;9084:118::-;9171:24;9189:5;9171:24;:::i;:::-;9166:3;9159:37;9084:118;;:::o;9208:157::-;9313:45;9333:24;9351:5;9333:24;:::i;:::-;9313:45;:::i;:::-;9308:3;9301:58;9208:157;;:::o;9371:109::-;9452:21;9467:5;9452:21;:::i;:::-;9447:3;9440:34;9371:109;;:::o;9486:118::-;9573:24;9591:5;9573:24;:::i;:::-;9568:3;9561:37;9486:118;;:::o;9610:360::-;9696:3;9724:38;9756:5;9724:38;:::i;:::-;9778:70;9841:6;9836:3;9778:70;:::i;:::-;9771:77;;9857:52;9902:6;9897:3;9890:4;9883:5;9879:16;9857:52;:::i;:::-;9934:29;9956:6;9934:29;:::i;:::-;9929:3;9925:39;9918:46;;9700:270;9610:360;;;;:::o;9976:364::-;10064:3;10092:39;10125:5;10092:39;:::i;:::-;10147:71;10211:6;10206:3;10147:71;:::i;:::-;10140:78;;10227:52;10272:6;10267:3;10260:4;10253:5;10249:16;10227:52;:::i;:::-;10304:29;10326:6;10304:29;:::i;:::-;10299:3;10295:39;10288:46;;10068:272;9976:364;;;;:::o;10346:377::-;10452:3;10480:39;10513:5;10480:39;:::i;:::-;10535:89;10617:6;10612:3;10535:89;:::i;:::-;10528:96;;10633:52;10678:6;10673:3;10666:4;10659:5;10655:16;10633:52;:::i;:::-;10710:6;10705:3;10701:16;10694:23;;10456:267;10346:377;;;;:::o;10729:366::-;10871:3;10892:67;10956:2;10951:3;10892:67;:::i;:::-;10885:74;;10968:93;11057:3;10968:93;:::i;:::-;11086:2;11081:3;11077:12;11070:19;;10729:366;;;:::o;11101:::-;11243:3;11264:67;11328:2;11323:3;11264:67;:::i;:::-;11257:74;;11340:93;11429:3;11340:93;:::i;:::-;11458:2;11453:3;11449:12;11442:19;;11101:366;;;:::o;11473:::-;11615:3;11636:67;11700:2;11695:3;11636:67;:::i;:::-;11629:74;;11712:93;11801:3;11712:93;:::i;:::-;11830:2;11825:3;11821:12;11814:19;;11473:366;;;:::o;11845:::-;11987:3;12008:67;12072:2;12067:3;12008:67;:::i;:::-;12001:74;;12084:93;12173:3;12084:93;:::i;:::-;12202:2;12197:3;12193:12;12186:19;;11845:366;;;:::o;12217:::-;12359:3;12380:67;12444:2;12439:3;12380:67;:::i;:::-;12373:74;;12456:93;12545:3;12456:93;:::i;:::-;12574:2;12569:3;12565:12;12558:19;;12217:366;;;:::o;12589:::-;12731:3;12752:67;12816:2;12811:3;12752:67;:::i;:::-;12745:74;;12828:93;12917:3;12828:93;:::i;:::-;12946:2;12941:3;12937:12;12930:19;;12589:366;;;:::o;12961:400::-;13121:3;13142:84;13224:1;13219:3;13142:84;:::i;:::-;13135:91;;13235:93;13324:3;13235:93;:::i;:::-;13353:1;13348:3;13344:11;13337:18;;12961:400;;;:::o;13367:366::-;13509:3;13530:67;13594:2;13589:3;13530:67;:::i;:::-;13523:74;;13606:93;13695:3;13606:93;:::i;:::-;13724:2;13719:3;13715:12;13708:19;;13367:366;;;:::o;13739:::-;13881:3;13902:67;13966:2;13961:3;13902:67;:::i;:::-;13895:74;;13978:93;14067:3;13978:93;:::i;:::-;14096:2;14091:3;14087:12;14080:19;;13739:366;;;:::o;14111:398::-;14270:3;14291:83;14372:1;14367:3;14291:83;:::i;:::-;14284:90;;14383:93;14472:3;14383:93;:::i;:::-;14501:1;14496:3;14492:11;14485:18;;14111:398;;;:::o;14515:366::-;14657:3;14678:67;14742:2;14737:3;14678:67;:::i;:::-;14671:74;;14754:93;14843:3;14754:93;:::i;:::-;14872:2;14867:3;14863:12;14856:19;;14515:366;;;:::o;14887:::-;15029:3;15050:67;15114:2;15109:3;15050:67;:::i;:::-;15043:74;;15126:93;15215:3;15126:93;:::i;:::-;15244:2;15239:3;15235:12;15228:19;;14887:366;;;:::o;15259:::-;15401:3;15422:67;15486:2;15481:3;15422:67;:::i;:::-;15415:74;;15498:93;15587:3;15498:93;:::i;:::-;15616:2;15611:3;15607:12;15600:19;;15259:366;;;:::o;15631:::-;15773:3;15794:67;15858:2;15853:3;15794:67;:::i;:::-;15787:74;;15870:93;15959:3;15870:93;:::i;:::-;15988:2;15983:3;15979:12;15972:19;;15631:366;;;:::o;16003:118::-;16090:24;16108:5;16090:24;:::i;:::-;16085:3;16078:37;16003:118;;:::o;16127:256::-;16239:3;16254:75;16325:3;16316:6;16254:75;:::i;:::-;16354:2;16349:3;16345:12;16338:19;;16374:3;16367:10;;16127:256;;;;:::o;16389:275::-;16521:3;16543:95;16634:3;16625:6;16543:95;:::i;:::-;16536:102;;16655:3;16648:10;;16389:275;;;;:::o;16670:701::-;16951:3;16973:95;17064:3;17055:6;16973:95;:::i;:::-;16966:102;;17085:95;17176:3;17167:6;17085:95;:::i;:::-;17078:102;;17197:148;17341:3;17197:148;:::i;:::-;17190:155;;17362:3;17355:10;;16670:701;;;;;:::o;17377:379::-;17561:3;17583:147;17726:3;17583:147;:::i;:::-;17576:154;;17747:3;17740:10;;17377:379;;;:::o;17762:222::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17906:71;17974:1;17963:9;17959:17;17950:6;17906:71;:::i;:::-;17762:222;;;;:::o;17990:640::-;18185:4;18223:3;18212:9;18208:19;18200:27;;18237:71;18305:1;18294:9;18290:17;18281:6;18237:71;:::i;:::-;18318:72;18386:2;18375:9;18371:18;18362:6;18318:72;:::i;:::-;18400;18468:2;18457:9;18453:18;18444:6;18400:72;:::i;:::-;18519:9;18513:4;18509:20;18504:2;18493:9;18489:18;18482:48;18547:76;18618:4;18609:6;18547:76;:::i;:::-;18539:84;;17990:640;;;;;;;:::o;18636:210::-;18723:4;18761:2;18750:9;18746:18;18738:26;;18774:65;18836:1;18825:9;18821:17;18812:6;18774:65;:::i;:::-;18636:210;;;;:::o;18852:222::-;18945:4;18983:2;18972:9;18968:18;18960:26;;18996:71;19064:1;19053:9;19049:17;19040:6;18996:71;:::i;:::-;18852:222;;;;:::o;19080:313::-;19193:4;19231:2;19220:9;19216:18;19208:26;;19280:9;19274:4;19270:20;19266:1;19255:9;19251:17;19244:47;19308:78;19381:4;19372:6;19308:78;:::i;:::-;19300:86;;19080:313;;;;:::o;19399:419::-;19565:4;19603:2;19592:9;19588:18;19580:26;;19652:9;19646:4;19642:20;19638:1;19627:9;19623:17;19616:47;19680:131;19806:4;19680:131;:::i;:::-;19672:139;;19399:419;;;:::o;19824:::-;19990:4;20028:2;20017:9;20013:18;20005:26;;20077:9;20071:4;20067:20;20063:1;20052:9;20048:17;20041:47;20105:131;20231:4;20105:131;:::i;:::-;20097:139;;19824:419;;;:::o;20249:::-;20415:4;20453:2;20442:9;20438:18;20430:26;;20502:9;20496:4;20492:20;20488:1;20477:9;20473:17;20466:47;20530:131;20656:4;20530:131;:::i;:::-;20522:139;;20249:419;;;:::o;20674:::-;20840:4;20878:2;20867:9;20863:18;20855:26;;20927:9;20921:4;20917:20;20913:1;20902:9;20898:17;20891:47;20955:131;21081:4;20955:131;:::i;:::-;20947:139;;20674:419;;;:::o;21099:::-;21265:4;21303:2;21292:9;21288:18;21280:26;;21352:9;21346:4;21342:20;21338:1;21327:9;21323:17;21316:47;21380:131;21506:4;21380:131;:::i;:::-;21372:139;;21099:419;;;:::o;21524:::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:::-;22115:4;22153:2;22142:9;22138:18;22130:26;;22202:9;22196:4;22192:20;22188:1;22177:9;22173:17;22166:47;22230:131;22356:4;22230:131;:::i;:::-;22222:139;;21949:419;;;:::o;22374:::-;22540:4;22578:2;22567:9;22563:18;22555:26;;22627:9;22621:4;22617:20;22613:1;22602:9;22598:17;22591:47;22655:131;22781:4;22655:131;:::i;:::-;22647:139;;22374:419;;;:::o;22799:::-;22965:4;23003:2;22992:9;22988:18;22980:26;;23052:9;23046:4;23042:20;23038:1;23027:9;23023:17;23016:47;23080:131;23206:4;23080:131;:::i;:::-;23072:139;;22799:419;;;:::o;23224:::-;23390:4;23428:2;23417:9;23413:18;23405:26;;23477:9;23471:4;23467:20;23463:1;23452:9;23448:17;23441:47;23505:131;23631:4;23505:131;:::i;:::-;23497:139;;23224:419;;;:::o;23649:::-;23815:4;23853:2;23842:9;23838:18;23830:26;;23902:9;23896:4;23892:20;23888:1;23877:9;23873:17;23866:47;23930:131;24056:4;23930:131;:::i;:::-;23922:139;;23649:419;;;:::o;24074:::-;24240:4;24278:2;24267:9;24263:18;24255:26;;24327:9;24321:4;24317:20;24313:1;24302:9;24298:17;24291:47;24355:131;24481:4;24355:131;:::i;:::-;24347:139;;24074:419;;;:::o;24499:222::-;24592:4;24630:2;24619:9;24615:18;24607:26;;24643:71;24711:1;24700:9;24696:17;24687:6;24643:71;:::i;:::-;24499:222;;;;:::o;24727:129::-;24761:6;24788:20;;:::i;:::-;24778:30;;24817:33;24845:4;24837:6;24817:33;:::i;:::-;24727:129;;;:::o;24862:75::-;24895:6;24928:2;24922:9;24912:19;;24862:75;:::o;24943:307::-;25004:4;25094:18;25086:6;25083:30;25080:56;;;25116:18;;:::i;:::-;25080:56;25154:29;25176:6;25154:29;:::i;:::-;25146:37;;25238:4;25232;25228:15;25220:23;;24943:307;;;:::o;25256:308::-;25318:4;25408:18;25400:6;25397:30;25394:56;;;25430:18;;:::i;:::-;25394:56;25468:29;25490:6;25468:29;:::i;:::-;25460:37;;25552:4;25546;25542:15;25534:23;;25256:308;;;:::o;25570:98::-;25621:6;25655:5;25649:12;25639:22;;25570:98;;;:::o;25674:99::-;25726:6;25760:5;25754:12;25744:22;;25674:99;;;:::o;25779:168::-;25862:11;25896:6;25891:3;25884:19;25936:4;25931:3;25927:14;25912:29;;25779:168;;;;:::o;25953:147::-;26054:11;26091:3;26076:18;;25953:147;;;;:::o;26106:169::-;26190:11;26224:6;26219:3;26212:19;26264:4;26259:3;26255:14;26240:29;;26106:169;;;;:::o;26281:148::-;26383:11;26420:3;26405:18;;26281:148;;;;:::o;26435:305::-;26475:3;26494:20;26512:1;26494:20;:::i;:::-;26489:25;;26528:20;26546:1;26528:20;:::i;:::-;26523:25;;26682:1;26614:66;26610:74;26607:1;26604:81;26601:107;;;26688:18;;:::i;:::-;26601:107;26732:1;26729;26725:9;26718:16;;26435:305;;;;:::o;26746:185::-;26786:1;26803:20;26821:1;26803:20;:::i;:::-;26798:25;;26837:20;26855:1;26837:20;:::i;:::-;26832:25;;26876:1;26866:35;;26881:18;;:::i;:::-;26866:35;26923:1;26920;26916:9;26911:14;;26746:185;;;;:::o;26937:191::-;26977:4;26997:20;27015:1;26997:20;:::i;:::-;26992:25;;27031:20;27049:1;27031:20;:::i;:::-;27026:25;;27070:1;27067;27064:8;27061:34;;;27075:18;;:::i;:::-;27061:34;27120:1;27117;27113:9;27105:17;;26937:191;;;;:::o;27134:96::-;27171:7;27200:24;27218:5;27200:24;:::i;:::-;27189:35;;27134:96;;;:::o;27236:90::-;27270:7;27313:5;27306:13;27299:21;27288:32;;27236:90;;;:::o;27332:77::-;27369:7;27398:5;27387:16;;27332:77;;;:::o;27415:149::-;27451:7;27491:66;27484:5;27480:78;27469:89;;27415:149;;;:::o;27570:126::-;27607:7;27647:42;27640:5;27636:54;27625:65;;27570:126;;;:::o;27702:77::-;27739:7;27768:5;27757:16;;27702:77;;;:::o;27785:154::-;27869:6;27864:3;27859;27846:30;27931:1;27922:6;27917:3;27913:16;27906:27;27785:154;;;:::o;27945:307::-;28013:1;28023:113;28037:6;28034:1;28031:13;28023:113;;;28122:1;28117:3;28113:11;28107:18;28103:1;28098:3;28094:11;28087:39;28059:2;28056:1;28052:10;28047:15;;28023:113;;;28154:6;28151:1;28148:13;28145:101;;;28234:1;28225:6;28220:3;28216:16;28209:27;28145:101;27994:258;27945:307;;;:::o;28258:320::-;28302:6;28339:1;28333:4;28329:12;28319:22;;28386:1;28380:4;28376:12;28407:18;28397:81;;28463:4;28455:6;28451:17;28441:27;;28397:81;28525:2;28517:6;28514:14;28494:18;28491:38;28488:84;;;28544:18;;:::i;:::-;28488:84;28309:269;28258:320;;;:::o;28584:281::-;28667:27;28689:4;28667:27;:::i;:::-;28659:6;28655:40;28797:6;28785:10;28782:22;28761:18;28749:10;28746:34;28743:62;28740:88;;;28808:18;;:::i;:::-;28740:88;28848:10;28844:2;28837:22;28627:238;28584:281;;:::o;28871:233::-;28910:3;28933:24;28951:5;28933:24;:::i;:::-;28924:33;;28979:66;28972:5;28969:77;28966:103;;;29049:18;;:::i;:::-;28966:103;29096:1;29089:5;29085:13;29078:20;;28871:233;;;:::o;29110:100::-;29149:7;29178:26;29198:5;29178:26;:::i;:::-;29167:37;;29110:100;;;:::o;29216:94::-;29255:7;29284:20;29298:5;29284:20;:::i;:::-;29273:31;;29216:94;;;:::o;29316:176::-;29348:1;29365:20;29383:1;29365:20;:::i;:::-;29360:25;;29399:20;29417:1;29399:20;:::i;:::-;29394:25;;29438:1;29428:35;;29443:18;;:::i;:::-;29428:35;29484:1;29481;29477:9;29472:14;;29316:176;;;;:::o;29498:180::-;29546:77;29543:1;29536:88;29643:4;29640:1;29633:15;29667:4;29664:1;29657:15;29684:180;29732:77;29729:1;29722:88;29829:4;29826:1;29819:15;29853:4;29850:1;29843:15;29870:180;29918:77;29915:1;29908:88;30015:4;30012:1;30005:15;30039:4;30036:1;30029:15;30056:180;30104:77;30101:1;30094:88;30201:4;30198:1;30191:15;30225:4;30222:1;30215:15;30242:180;30290:77;30287:1;30280:88;30387:4;30384:1;30377:15;30411:4;30408:1;30401:15;30428:117;30537:1;30534;30527:12;30551:117;30660:1;30657;30650:12;30674:117;30783:1;30780;30773:12;30797:117;30906:1;30903;30896:12;30920:117;31029:1;31026;31019:12;31043:117;31152:1;31149;31142:12;31166:102;31207:6;31258:2;31254:7;31249:2;31242:5;31238:14;31234:28;31224:38;;31166:102;;;:::o;31274:94::-;31307:8;31355:5;31351:2;31347:14;31326:35;;31274:94;;;:::o;31374:172::-;31514:24;31510:1;31502:6;31498:14;31491:48;31374:172;:::o;31552:225::-;31692:34;31688:1;31680:6;31676:14;31669:58;31761:8;31756:2;31748:6;31744:15;31737:33;31552:225;:::o;31783:235::-;31923:34;31919:1;31911:6;31907:14;31900:58;31992:18;31987:2;31979:6;31975:15;31968:43;31783:235;:::o;32024:160::-;32164:12;32160:1;32152:6;32148:14;32141:36;32024:160;:::o;32190:180::-;32330:32;32326:1;32318:6;32314:14;32307:56;32190:180;:::o;32376:165::-;32516:17;32512:1;32504:6;32500:14;32493:41;32376:165;:::o;32547:155::-;32687:7;32683:1;32675:6;32671:14;32664:31;32547:155;:::o;32708:182::-;32848:34;32844:1;32836:6;32832:14;32825:58;32708:182;:::o;32896:171::-;33036:23;33032:1;33024:6;33020:14;33013:47;32896:171;:::o;33073:114::-;;:::o;33193:166::-;33333:18;33329:1;33321:6;33317:14;33310:42;33193:166;:::o;33365:168::-;33505:20;33501:1;33493:6;33489:14;33482:44;33365:168;:::o;33539:174::-;33679:26;33675:1;33667:6;33663:14;33656:50;33539:174;:::o;33719:181::-;33859:33;33855:1;33847:6;33843:14;33836:57;33719:181;:::o;33906:122::-;33979:24;33997:5;33979:24;:::i;:::-;33972:5;33969:35;33959:63;;34018:1;34015;34008:12;33959:63;33906:122;:::o;34034:116::-;34104:21;34119:5;34104:21;:::i;:::-;34097:5;34094:32;34084:60;;34140:1;34137;34130:12;34084:60;34034:116;:::o;34156:122::-;34229:24;34247:5;34229:24;:::i;:::-;34222:5;34219:35;34209:63;;34268:1;34265;34258:12;34209:63;34156:122;:::o;34284:120::-;34356:23;34373:5;34356:23;:::i;:::-;34349:5;34346:34;34336:62;;34394:1;34391;34384:12;34336:62;34284:120;:::o;34410:122::-;34483:24;34501:5;34483:24;:::i;:::-;34476:5;34473:35;34463:63;;34522:1;34519;34512:12;34463:63;34410:122;:::o
Swarm Source
ipfs://5d8e5fe63ab1622a179299919f5ba98f91367fb26647cb9a0e6c0f342acc4c61
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.