Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
[ Download CSV Export ]
Latest 11 internal transactions
[ Download CSV Export ]
Contract Name:
McNiftyV2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-05-01 */ // File: contract/mcnifty_v2/MerkleProof.sol // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ 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) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) 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) } } } // File: contract/mcnifty_v2/Collection.sol pragma solidity >=0.7.0 <0.9.0; contract Collection{ string public CID; string public hiddenCID; uint256 public total_supply; uint256 public report_totalAirdropSent; uint256 public sales_publicSale; uint256 public sales_presale; uint256 public sales_withdrawal; uint256[] public tokenIds; mapping(address => uint256) public map_airdropSent; constructor(){ } function setSettings(string memory _CID, uint256 total) public { CID = _CID; total_supply = total; } function setAirdropCount(address addr) public{ map_airdropSent[addr] += 1; report_totalAirdropSent += 1; } function getTokenIds() public view returns(uint256[] memory){ return tokenIds; } function getCurrentSupply() public view returns(uint256){ return tokenIds.length; } function pushTokenId(uint256 tokenId) public{ tokenIds.push(tokenId); } function addSales(uint256 amount, bool status_presale) public{ if(status_presale){ sales_presale += amount; }else{ sales_publicSale += amount; } } function addWithdrawal(uint256 amount) public{ sales_withdrawal += amount; } function getTokenIndex(uint256 tokenId)public view returns(uint256){ for(uint256 i = 0; i < tokenIds.length; i += 1){ if(tokenIds[i] == tokenId){ return i + 1; } } return 0; } function verifyMerkle(address sender, bytes32 merkle_airdrop, bytes32[] calldata proof) public pure returns(bool){ bytes32 leaf = keccak256(abi.encodePacked(sender)); return MerkleProof.verify(proof, merkle_airdrop, leaf); } } // File: contract/mcnifty_v2/LetsgoNFTBase.sol //SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; contract LetsgoNFTBase { uint256 public mantissa = 10000; struct AddreessWithPercent { address addr; uint256 value; } function validateCoCreators(AddreessWithPercent[] memory coCreators) external view{ require( coCreators.length <= 10, "validateCoCreators: coCreators length should be less or equal to 10" ); uint256 coCreatorsSum = 0; for (uint256 i = 0; i < coCreators.length; i++) { require( coCreators[i].addr != address(0), "validateCoCreators: coCreator address address can't be empty" ); require( coCreators[i].value > 0, "validateCoCreators: coCreator value must be higher than 0" ); coCreatorsSum += coCreators[i].value; } require( coCreatorsSum <= mantissa, "validateCoCreators: coCreators sum should be less or equal to 100%" ); } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @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, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), 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-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a 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 _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contract/mcnifty_v2/McNiftyV2.sol pragma solidity >=0.7.0 <0.9.0; contract McNiftyV2 is ERC721, Ownable, LetsgoNFTBase { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; Counters.Counter private collection_generator; Counters.Counter private minting_collection; string public xname = "McNaughton"; string public xsymbol = "McNaughton"; constructor() ERC721(xname, xsymbol){ minting_collection.increment(); } string public cid_hidden; mapping(uint256 => Collection) public collection; uint256[] public token_collection_id; address[] private administrators; uint256 cost_presale; uint256 cost_publicSale; uint256 public report_totalSupply; uint256 report_totalAirdropClaimed; uint256 limit_airdropClaims; bool public status_paused; bool public status_presale; bool public status_revealed; bool public status_airdrop; bytes32 merkle_airdrop; mapping(address => uint256) map_airdropClaimed; mapping(address => uint256) public map_whitelistMinting; bytes4 _interfaceId = 0xce77acc3; uint256 private _royalty = 500; mapping(uint256 => address) private _creators; function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); Collection c = collection[getCollectionIdByToken(tokenId)]; if(status_revealed){ return string(abi.encodePacked("ipfs://", c.CID(), "/", c.getTokenIndex(tokenId).toString(), ".json")); } return string(abi.encodePacked("ipfs://", cid_hidden, "/hidden.json")); } modifier onlyAdministrators() { bool isAdmin = isAdministrator(); if(!isAdmin){ isAdmin = owner() == _msgSender(); } require(isAdmin, "Ownable: caller is neither owner nor administrator"); _; } function setAdministrators(address[] memory adminAddress) public onlyOwner{ delete administrators; administrators = adminAddress; } function isAdministrator() public view returns(bool){ if(msg.sender == owner()){ return true; } for(uint256 i = 0; i < administrators.length; i += 1){ if(msg.sender == administrators[i]){ return true; } } return false; } function setCollection( uint256 collectionId, string memory newCID, uint256 xtotalNFTSupply) public onlyAdministrators returns(uint256) { Collection c; if(collectionId == 0){ c = new Collection(); }else{ c = collection[collectionId]; } c.setSettings(newCID, xtotalNFTSupply); if(collectionId == 0){ collection_generator.increment(); collectionId = collection_generator.current(); collection[collectionId] = c; } report_totalSupply = getTotalSupply(); return collectionId; } function setSettings(uint256 publicSale, uint256 presale, bool presale_status, bool minting_status, bool reveal_status, string memory hiddenCID) public onlyAdministrators{ cost_publicSale = publicSale; cost_presale = presale; status_presale = presale_status; status_paused = minting_status; status_revealed = reveal_status; cid_hidden = hiddenCID; } function setAirdrop( bool xAirdropEnabled, bytes32 addresses, uint256 limit ) public onlyOwner{ status_airdrop = xAirdropEnabled; merkle_airdrop = addresses; limit_airdropClaims = limit; } function computeCost(uint256 _mintAmount) public view returns(uint256){ return status_presale ? cost_presale * _mintAmount : cost_publicSale * _mintAmount; } function getSettings() public view returns(uint, uint, bool, bool, bool, string memory){ return (cost_publicSale, cost_presale, status_presale, status_paused, status_revealed, cid_hidden); } function totalSupply() public view returns(uint){ return supply.current(); } function getTotalSupply() public view returns(uint256){ uint256 total = 0; for(uint256 i = 1; i <= getCollectionCount(); i++){ total += collection[i].total_supply(); } return total; } function getCollectionCount()public view returns(uint256){ return collection_generator.current(); } function getCurrentSupply()public view returns(uint256){ return supply.current(); } function getCurrentMintingCollection() public view returns(uint256){ return minting_collection.current(); } function getCollectionById(uint256 collectionId) public view returns(string memory, uint256){ if(collectionId <= collection_generator.current()){ Collection c = collection[collectionId]; return ( c.CID(), c.total_supply() ); } return ("<UNKNOWN COLLECTION>", 0); } function getCollectionIdByToken(uint256 tokenId) public view returns(uint256){ return token_collection_id[tokenId - 1]; } function getCollectionTokens(uint256 collectionId) public view returns(uint256[] memory){ return collection[collectionId].getTokenIds(); } function mint(uint256 _mintAmount) public payable{ require(!status_paused, "Minting is paused"); Collection c = collection[minting_collection.current()]; require(supply.current() + _mintAmount <= report_totalSupply, "Mint quantity exceeds max supply"); if (msg.sender != owner()) { require(msg.value >= computeCost(_mintAmount), "Cost is too low"); } c.addSales(msg.value, status_presale); for (uint256 i = 1; i <= _mintAmount; i+=1) { if(c.getCurrentSupply() == c.total_supply()){ minting_collection.increment(); c = collection[minting_collection.current()]; } if(minting_collection.current() <= collection_generator.current()){ supply.increment(); _safeMint(msg.sender, supply.current()); c.pushTokenId(supply.current()); token_collection_id.push(minting_collection.current()); _creators[supply.current()] = msg.sender; } if(status_presale){ map_whitelistMinting[msg.sender]++; } } } function walletOfOwner(address _owner) public view returns (uint256[] memory){ uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while(ownedTokenIndex < ownerTokenCount && currentTokenId <= supply.current()){ address currentTokenOwner = ownerOf(currentTokenId); if(currentTokenOwner == _owner){ tokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex += 1; } currentTokenId += 1; } return tokenIds; } function withdraw() public payable onlyOwner { uint256 remaining = address(this).balance; if(remaining > 0){ (bool a,) = payable(owner()).call{value: remaining}(""); require(a); } } function sendAirdrop(address[] memory addresses) public onlyAdministrators{ require(supply.current() + addresses.length <= report_totalSupply, "Airdrop addresses exceeds the total NFT supply"); Collection c = collection[minting_collection.current()]; uint256 i = 0; while(i < addresses.length){ if(c.getCurrentSupply() == c.total_supply()){ minting_collection.increment(); c = collection[minting_collection.current()]; } if(minting_collection.current() <= collection_generator.current()){ supply.increment(); _safeMint(addresses[i], supply.current()); c.pushTokenId(supply.current()); c.setAirdropCount(addresses[i]); token_collection_id.push(minting_collection.current()); _creators[supply.current()] = msg.sender; } i += 1; } } function claimAirdrop(bytes32[] calldata _merkleProof) public { Collection c = collection[minting_collection.current()]; require(status_airdrop, "Airdrop is not enabled"); require(report_totalAirdropClaimed < limit_airdropClaims, "No more available airdrops."); require(getCurrentSupply() < report_totalSupply, "No more NFT available"); require(map_airdropClaimed[msg.sender] == 0, "Address already claimed"); require(c.verifyMerkle(msg.sender, merkle_airdrop, _merkleProof), "Invalid proof"); if(c.getCurrentSupply() == c.total_supply()){ minting_collection.increment(); c = collection[minting_collection.current()]; } supply.increment(); _safeMint(msg.sender, supply.current()); map_airdropClaimed[msg.sender] += 1; c.pushTokenId(supply.current()); token_collection_id.push(minting_collection.current()); } function bulkTransfer(uint256[] memory tokenIds, address receiver) public{ uint256[] memory ownedTokens = walletOfOwner(msg.sender); uint256 i = 0; uint256 j = 0; while(i < tokenIds.length){ j = 0; while(j < ownedTokens.length){ if(tokenIds[i] == ownedTokens[j]){ _transfer(msg.sender, receiver, ownedTokens[j]); } j+=1; } i+=1; } } function getAirdropConfig(uint256 collectionId) public view returns(uint256){ return collection[collectionId].report_totalAirdropSent(); } function getAirdropClaims(uint256 collectionId, address addr) public view returns(uint256){ return collection[collectionId].map_airdropSent(addr); } function getSales(uint256 collectionId) public view returns (uint256, uint256, uint256, uint256){ return ( collection[collectionId].sales_publicSale(), collection[collectionId].sales_presale(), collection[collectionId].sales_withdrawal(), address(this).balance); } function getRoyalty(uint256 tokenId) external view returns (uint256) { return _royalty; } function getCreator(uint256 tokenId) external view returns (address) { return _creators[tokenId]; } function getCoCreators(uint256 tokenId) external view returns (AddreessWithPercent[] memory) { AddreessWithPercent[] memory array; return array; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) { return interfaceId == _interfaceId || super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"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":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address","name":"receiver","type":"address"}],"name":"bulkTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cid_hidden","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"claimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"collection","outputs":[{"internalType":"contract Collection","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"computeCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionId","type":"uint256"},{"internalType":"address","name":"addr","type":"address"}],"name":"getAirdropClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionId","type":"uint256"}],"name":"getAirdropConfig","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCoCreators","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct LetsgoNFTBase.AddreessWithPercent[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionId","type":"uint256"}],"name":"getCollectionById","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCollectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCollectionIdByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionId","type":"uint256"}],"name":"getCollectionTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMintingCollection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionId","type":"uint256"}],"name":"getSales","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSettings","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAdministrator","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":"mantissa","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"map_whitelistMinting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[],"name":"report_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":"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":"addresses","type":"address[]"}],"name":"sendAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"adminAddress","type":"address[]"}],"name":"setAdministrators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"xAirdropEnabled","type":"bool"},{"internalType":"bytes32","name":"addresses","type":"bytes32"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setAirdrop","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":"uint256","name":"collectionId","type":"uint256"},{"internalType":"string","name":"newCID","type":"string"},{"internalType":"uint256","name":"xtotalNFTSupply","type":"uint256"}],"name":"setCollection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"publicSale","type":"uint256"},{"internalType":"uint256","name":"presale","type":"uint256"},{"internalType":"bool","name":"presale_status","type":"bool"},{"internalType":"bool","name":"minting_status","type":"bool"},{"internalType":"bool","name":"reveal_status","type":"bool"},{"internalType":"string","name":"hiddenCID","type":"string"}],"name":"setSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status_airdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status_presale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"status_revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"token_collection_id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"internalType":"struct LetsgoNFTBase.AddreessWithPercent[]","name":"coCreators","type":"tuple[]"}],"name":"validateCoCreators","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"xname","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xsymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61271060075560c0604052600a60808190526926b1a730bab3b43a37b760b11b60a09081526200003391600b919062000279565b5060408051808201909152600a8082526926b1a730bab3b43a37b760b11b60209092019182526200006791600c9162000279565b50601a805463ffffffff191663ce77acc31790556101f4601b553480156200008e57600080fd5b50600b80546200009e906200031f565b80601f0160208091040260200160405190810160405280929190818152602001828054620000cc906200031f565b80156200011d5780601f10620000f1576101008083540402835291602001916200011d565b820191906000526020600020905b815481529060010190602001808311620000ff57829003601f168201915b5050505050600c805462000131906200031f565b80601f01602080910402602001604051908101604052809291908181526020018280546200015f906200031f565b8015620001b05780601f106200018457610100808354040283529160200191620001b0565b820191906000526020600020905b8154815290600101906020018083116200019257829003601f168201915b50508451620001ca93506000925060208601915062000279565b508051620001e090600190602084019062000279565b505050620001fd620001f76200021a60201b60201c565b6200021e565b62000214600a6200027060201b62002c351760201c565b6200035c565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80546001019055565b82805462000287906200031f565b90600052602060002090601f016020900481019282620002ab5760008555620002f6565b82601f10620002c657805160ff1916838001178555620002f6565b82800160010185558215620002f6579182015b82811115620002f6578251825591602001919060010190620002d9565b506200030492915062000308565b5090565b5b8082111562000304576000815560010162000309565b600181811c908216806200033457607f821691505b602082108114156200035657634e487b7160e01b600052602260045260246000fd5b50919050565b614cd9806200036c6000396000f3fe60806040526004361061036b5760003560e01c8063715018a6116101c6578063b88d4fde116100f7578063df3c410f11610095578063e985e9c51161006f578063e985e9c5146109d5578063f077237714610a1e578063f2fde38b14610a54578063f6dff37914610a7457600080fd5b8063df3c410f14610968578063e547cb8514610988578063e6166f90146109b657600080fd5b8063c7808eb5116100d1578063c7808eb5146108d1578063c87b56dd146108f1578063d0d9dc7d14610911578063d48e638a1461093257600080fd5b8063b88d4fde14610887578063beab1f1d146108a7578063c4e41b22146108bc57600080fd5b80639c36fc8811610164578063a22cb4651161013e578063a22cb46514610807578063a3f0939b14610827578063a9c415d214610847578063b4ce7d451461086757600080fd5b80639c36fc88146107bf5780639ffdaa61146107d4578063a0712d68146107f457600080fd5b806385b4bb53116101a057806385b4bb53146107385780638da5cb5b1461075f57806395d89b411461077d57806396a3c7a61461079257600080fd5b8063715018a6146106e3578063783eeb99146106f8578063834e9c0a1461071857600080fd5b80633ccfd60b116102a057806353223ab01161023e578063657d950111610218578063657d9501146106495780636f905b781461066957806370a08231146106a957806370b54f1b146106c957600080fd5b806353223ab0146105f35780635c8177a2146106135780636352211e1461062957600080fd5b80634d92a80f1161027a5780634d92a80f146105905780634f3e1efc146104455780635092e130146105b057806350e0ab6b146105de57600080fd5b80633ccfd60b1461054857806342842e0e14610550578063438b63001461057057600080fd5b80631af9cf491161030d57806323b872dd116102e757806323b872dd146104bb5780632bb88056146104db5780632d19cd941461050857806338f8c6081461052857600080fd5b80631af9cf491461046f5780631c10106f1461049157806320aa8dd4146104a657600080fd5b8063095ea7b311610349578063095ea7b3146103ff57806309824f131461042157806318160ddd146104455780631aea62571461045a57600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b366004613acf565b610a94565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610ac2565b60405161039c9190613f2c565b3480156103d357600080fd5b506103e76103e2366004613b7f565b610b54565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a36600461374c565b610bee565b005b34801561042d57600080fd5b5061043760135481565b60405190815260200161039c565b34801561045157600080fd5b50610437610d04565b34801561046657600080fd5b50610390610d14565b34801561047b57600080fd5b5061043761048a366004613b7f565b50601b5490565b34801561049d57600080fd5b50610437610da5565b3480156104b257600080fd5b506103ba610db0565b3480156104c757600080fd5b5061041f6104d636600461365e565b610e3e565b3480156104e757600080fd5b506104fb6104f6366004613b7f565b610e6f565b60405161039c9190613ee8565b34801561051457600080fd5b5061041f610523366004613c23565b610efa565b34801561053457600080fd5b50610437610543366004613b7f565b610f89565b61041f610fba565b34801561055c57600080fd5b5061041f61056b36600461365e565b611061565b34801561057c57600080fd5b506104fb61058b366004613610565b61107c565b34801561059c57600080fd5b5061041f6105ab366004613a9a565b61115c565b3480156105bc57600080fd5b506105d16105cb366004613b7f565b50606090565b60405161039c9190613e90565b3480156105ea57600080fd5b506103ba6111ab565b3480156105ff57600080fd5b5061041f61060e366004613814565b6111b8565b34801561061f57600080fd5b5061043760075481565b34801561063557600080fd5b506103e7610644366004613b7f565b6115e9565b34801561065557600080fd5b5061041f610664366004613776565b611660565b34801561067557600080fd5b50610689610684366004613b7f565b6119f3565b60408051948552602085019390935291830152606082015260800161039c565b3480156106b557600080fd5b506104376106c4366004613610565b611b9c565b3480156106d557600080fd5b506016546103909060ff1681565b3480156106ef57600080fd5b5061041f611c23565b34801561070457600080fd5b50610437610713366004613bd4565b611c59565b34801561072457600080fd5b50610437610733366004613bb1565b611da2565b34801561074457600080fd5b5061074d611e32565b60405161039c9695949392919061408b565b34801561076b57600080fd5b506006546001600160a01b03166103e7565b34801561078957600080fd5b506103ba611f07565b34801561079e57600080fd5b506104376107ad366004613610565b60196020526000908152604090205481565b3480156107cb57600080fd5b50610437611f16565b3480156107e057600080fd5b506016546103909062010000900460ff1681565b61041f610802366004613b7f565b611f21565b34801561081357600080fd5b5061041f610822366004613715565b612300565b34801561083357600080fd5b5061041f610842366004613888565b61230b565b34801561085357600080fd5b50610437610862366004613b7f565b612596565b34801561087357600080fd5b5061041f610882366004613776565b6125c9565b34801561089357600080fd5b5061041f6108a236600461369a565b612612565b3480156108b357600080fd5b506103ba612644565b3480156108c857600080fd5b50610437612651565b3480156108dd57600080fd5b506104376108ec366004613b7f565b612710565b3480156108fd57600080fd5b506103ba61090c366004613b7f565b612795565b34801561091d57600080fd5b50601654610390906301000000900460ff1681565b34801561093e57600080fd5b506103e761094d366004613b7f565b6000908152601c60205260409020546001600160a01b031690565b34801561097457600080fd5b5061041f6109833660046139d4565b612981565b34801561099457600080fd5b506109a86109a3366004613b7f565b612a31565b60405161039c929190613f3f565b3480156109c257600080fd5b5060165461039090610100900460ff1681565b3480156109e157600080fd5b506103906109f036600461362b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610a2a57600080fd5b506103e7610a39366004613b7f565b600e602052600090815260409020546001600160a01b031681565b348015610a6057600080fd5b5061041f610a6f366004613610565b612b7c565b348015610a8057600080fd5b50610437610a8f366004613b7f565b612c14565b601a5460009060e01b6001600160e01b03199081169083161480610abc5750610abc82612c3e565b92915050565b606060008054610ad1906141fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610afd906141fe565b8015610b4a5780601f10610b1f57610100808354040283529160200191610b4a565b820191906000526020600020905b815481529060010190602001808311610b2d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bd25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610bf9826115e9565b9050806001600160a01b0316836001600160a01b03161415610c675760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610bc9565b336001600160a01b0382161480610c835750610c8381336109f0565b610cf55760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610bc9565b610cff8383612c8e565b505050565b6000610d0f60085490565b905090565b6000610d286006546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415610d475750600190565b60005b601054811015610d9d5760108181548110610d6757610d6761428e565b6000918252602090912001546001600160a01b0316331415610d8b57600191505090565b610d96600182614170565b9050610d4a565b506000905090565b6000610d0f60095490565b600d8054610dbd906141fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610de9906141fe565b8015610e365780601f10610e0b57610100808354040283529160200191610e36565b820191906000526020600020905b815481529060010190602001808311610e1957829003601f168201915b505050505081565b610e483382612cfc565b610e645760405162461bcd60e51b8152600401610bc990613fe8565b610cff838383612df3565b6000818152600e60205260408082205481516367f718a960e01b815291516060936001600160a01b03909216926367f718a9926004808301939192829003018186803b158015610ebe57600080fd5b505afa158015610ed2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610abc9190810190613949565b6000610f04610d14565b905080610f1b57506006546001600160a01b031633145b80610f385760405162461bcd60e51b8152600401610bc990614039565b601287905560118690556016805461ffff19166101008715150260ff1916178515151762ff0000191662010000851515021790558151610f7f90600d90602085019061347d565b5050505050505050565b6000600f610f986001846141bb565b81548110610fa857610fa861428e565b90600052602060002001549050919050565b6006546001600160a01b03163314610fe45760405162461bcd60e51b8152600401610bc990613fb3565b47801561105e576000610fff6006546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b505090508061105c57600080fd5b505b50565b610cff83838360405180602001604052806000815250612612565b6060600061108983611b9c565b90506000816001600160401b038111156110a5576110a56142a4565b6040519080825280602002602001820160405280156110ce578160200160208202803683370190505b509050600160005b83811080156110e757506008548211155b156111525760006110f7836115e9565b9050866001600160a01b0316816001600160a01b0316141561113f57828483815181106111265761112661428e565b602090810291909101015261113c600183614170565b91505b61114a600184614170565b9250506110d6565b5090949350505050565b6006546001600160a01b031633146111865760405162461bcd60e51b8152600401610bc990613fb3565b6016805493151563010000000263ff0000001990941693909317909255601755601555565b600b8054610dbd906141fe565b6000600e60006111c7600a5490565b81526020810191909152604001600020546016546001600160a01b0390911691506301000000900460ff166112375760405162461bcd60e51b8152602060048201526016602482015275105a5c991c9bdc081a5cc81b9bdd08195b98589b195960521b6044820152606401610bc9565b6015546014541061128a5760405162461bcd60e51b815260206004820152601b60248201527f4e6f206d6f726520617661696c61626c652061697264726f70732e00000000006044820152606401610bc9565b601354611295610d04565b106112da5760405162461bcd60e51b81526020600482015260156024820152744e6f206d6f7265204e465420617661696c61626c6560581b6044820152606401610bc9565b33600090815260186020526040902054156113375760405162461bcd60e51b815260206004820152601760248201527f4164647265737320616c726561647920636c61696d65640000000000000000006044820152606401610bc9565b60175460405163ca2e8df360e01b81526001600160a01b0383169163ca2e8df39161136a91339188908890600401613e3b565b60206040518083038186803b15801561138257600080fd5b505afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190613a7d565b6113f65760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b210383937b7b360991b6044820152606401610bc9565b806001600160a01b0316633940e9ee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561142f57600080fd5b505afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114679190613b98565b816001600160a01b0316634f3e1efc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114a057600080fd5b505afa1580156114b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d89190613b98565b1415611516576114ec600a80546001019055565b600e60006114f9600a5490565b81526020810191909152604001600020546001600160a01b031690505b611524600880546001019055565b6115363361153160085490565b612f8f565b336000908152601860205260408120805460019290611556908490614170565b90915550506001600160a01b038116630a6b378c61157360085490565b6040518263ffffffff1660e01b815260040161159191815260200190565b600060405180830381600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b50505050600f6115ce600a5490565b81546001810183556000928352602090922090910155505050565b6000818152600260205260408120546001600160a01b031680610abc5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610bc9565b600061166a610d14565b90508061168157506006546001600160a01b031633145b8061169e5760405162461bcd60e51b8152600401610bc990614039565b60135482516008546116b09190614170565b11156117155760405162461bcd60e51b815260206004820152602e60248201527f41697264726f702061646472657373657320657863656564732074686520746f60448201526d74616c204e465420737570706c7960901b6064820152608401610bc9565b6000600e6000611724600a5490565b815260208101919091526040016000908120546001600160a01b031691505b83518110156119ed57816001600160a01b0316633940e9ee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd9190613b98565b826001600160a01b0316634f3e1efc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117f657600080fd5b505afa15801561180a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182e9190613b98565b141561186c57611842600a80546001019055565b600e600061184f600a5490565b81526020810191909152604001600020546001600160a01b031691505b600954600a54116119db57611885600880546001019055565b6118ab84828151811061189a5761189a61428e565b602002602001015161153160085490565b816001600160a01b0316630a6b378c6118c360085490565b6040518263ffffffff1660e01b81526004016118e191815260200190565b600060405180830381600087803b1580156118fb57600080fd5b505af115801561190f573d6000803e3d6000fd5b50505050816001600160a01b03166326ab844b8583815181106119345761193461428e565b60200260200101516040518263ffffffff1660e01b815260040161196791906001600160a01b0391909116815260200190565b600060405180830381600087803b15801561198157600080fd5b505af1158015611995573d6000803e3d6000fd5b50505050600f6119a4600a5490565b815460018101835560009283526020808420909101919091556008548252601c90526040902080546001600160a01b031916331790555b6119e6600182614170565b9050611743565b50505050565b6000818152600e60209081526040808320548151637c997d8160e01b815291518493849384936001600160a01b031692637c997d8192600480840193919291829003018186803b158015611a4657600080fd5b505afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e9190613b98565b6000868152600e60209081526040918290205482516307f9d91760e21b815292516001600160a01b0390911692631fe7645c926004808301939192829003018186803b158015611acd57600080fd5b505afa158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b059190613b98565b6000878152600e6020908152604091829020548251634eab7af760e11b815292516001600160a01b0390911692639d56f5ee926004808301939192829003018186803b158015611b5457600080fd5b505afa158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c9190613b98565b4793509350935093509193509193565b60006001600160a01b038216611c075760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610bc9565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314611c4d5760405162461bcd60e51b8152600401610bc990613fb3565b611c576000612fa9565b565b600080611c64610d14565b905080611c7b57506006546001600160a01b031633145b80611c985760405162461bcd60e51b8152600401610bc990614039565b600085611ccf57604051611cab90613501565b604051809103906000f080158015611cc7573d6000803e3d6000fd5b509050611ce9565b506000858152600e60205260409020546001600160a01b03165b6040516337c5940b60e01b81526001600160a01b038216906337c5940b90611d179088908890600401613f3f565b600060405180830381600087803b158015611d3157600080fd5b505af1158015611d45573d6000803e3d6000fd5b505050508560001415611d8d57611d60600980546001019055565b6009546000818152600e6020526040902080546001600160a01b0319166001600160a01b03841617905595505b611d95612651565b6013555093949350505050565b6000828152600e60205260408082205490516373b0f5db60e01b81526001600160a01b038481166004830152909116906373b0f5db9060240160206040518083038186803b158015611df357600080fd5b505afa158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b9190613b98565b9392505050565b601254601154601654600d80546000948594859485948594606094939260ff61010082048116938183169362010000909304909116918190611e73906141fe565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9f906141fe565b8015611eec5780601f10611ec157610100808354040283529160200191611eec565b820191906000526020600020905b815481529060010190602001808311611ecf57829003601f168201915b50505050509050955095509550955095509550909192939495565b606060018054610ad1906141fe565b6000610d0f600a5490565b60165460ff1615611f685760405162461bcd60e51b8152602060048201526011602482015270135a5b9d1a5b99c81a5cc81c185d5cd959607a1b6044820152606401610bc9565b6000600e6000611f77600a5490565b81526020810191909152604001600020546013546001600160a01b03909116915082611fa260085490565b611fac9190614170565b1115611ffa5760405162461bcd60e51b815260206004820181905260248201527f4d696e74207175616e746974792065786365656473206d617820737570706c796044820152606401610bc9565b6006546001600160a01b031633146120565761201582612596565b3410156120565760405162461bcd60e51b815260206004820152600f60248201526e436f737420697320746f6f206c6f7760881b6044820152606401610bc9565b60165460405163e6f314c960e01b815234600482015261010090910460ff16151560248201526001600160a01b0382169063e6f314c990604401600060405180830381600087803b1580156120aa57600080fd5b505af11580156120be573d6000803e3d6000fd5b506001925050505b828111610cff57816001600160a01b0316633940e9ee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561210657600080fd5b505afa15801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e9190613b98565b826001600160a01b0316634f3e1efc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561217757600080fd5b505afa15801561218b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121af9190613b98565b14156121ed576121c3600a80546001019055565b600e60006121d0600a5490565b81526020810191909152604001600020546001600160a01b031691505b600954600a54116122bd57612206600880546001019055565b6122133361153160085490565b816001600160a01b0316630a6b378c61222b60085490565b6040518263ffffffff1660e01b815260040161224991815260200190565b600060405180830381600087803b15801561226357600080fd5b505af1158015612277573d6000803e3d6000fd5b50505050600f612286600a5490565b815460018101835560009283526020808420909101919091556008548252601c90526040902080546001600160a01b031916331790555b601654610100900460ff16156122ee573360009081526019602052604081208054916122e883614233565b91905055505b6122f9600182614170565b90506120c6565b61105c338383612ffb565b600a8151111561238f5760405162461bcd60e51b815260206004820152604360248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7273206c60448201527f656e6774682073686f756c64206265206c657373206f7220657175616c20746f60648201526202031360ec1b608482015260a401610bc9565b6000805b82518110156125125760006001600160a01b03168382815181106123b9576123b961428e565b6020026020010151600001516001600160a01b031614156124425760405162461bcd60e51b815260206004820152603c60248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7220616460448201527f647265737320616464726573732063616e277420626520656d707479000000006064820152608401610bc9565b60008382815181106124565761245661428e565b602002602001015160200151116124d55760405162461bcd60e51b815260206004820152603960248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7220766160448201527f6c7565206d75737420626520686967686572207468616e2030000000000000006064820152608401610bc9565b8281815181106124e7576124e761428e565b602002602001015160200151826124fe9190614170565b91508061250a81614233565b915050612393565b5060075481111561105c5760405162461bcd60e51b815260206004820152604260248201527f76616c6964617465436f43726561746f72733a20636f43726561746f7273207360448201527f756d2073686f756c64206265206c657373206f7220657175616c20746f203130606482015261302560f01b608482015260a401610bc9565b601654600090610100900460ff166125bb57816012546125b6919061419c565b610abc565b81601154610abc919061419c565b6006546001600160a01b031633146125f35760405162461bcd60e51b8152600401610bc990613fb3565b6125ff6010600061350e565b805161105c90601090602084019061352c565b61261c3383612cfc565b6126385760405162461bcd60e51b8152600401610bc990613fe8565b6119ed848484846130ca565b600c8054610dbd906141fe565b60008060015b61265f610da5565b811161270a576000818152600e6020908152604091829020548251631ca074f760e11b815292516001600160a01b0390911692633940e9ee926004808301939192829003018186803b1580156126b457600080fd5b505afa1580156126c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ec9190613b98565b6126f69083614170565b91508061270281614233565b915050612657565b50919050565b6000818152600e602090815260408083205481516353046c4d60e01b815291516001600160a01b03909116926353046c4d9260048082019391829003018186803b15801561275d57600080fd5b505afa158015612771573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abc9190613b98565b6000818152600260205260409020546060906001600160a01b03166128145760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610bc9565b6000600e600061282385610f89565b81526020810191909152604001600020546016546001600160a01b03909116915062010000900460ff161561296f57806001600160a01b031663c098004c6040518163ffffffff1660e01b815260040160006040518083038186803b15801561288b57600080fd5b505afa15801561289f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128c79190810190613b09565b6040516274cc7960e71b815260048101859052612947906001600160a01b03841690633a663c809060240160206040518083038186803b15801561290a57600080fd5b505afa15801561291e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129429190613b98565b6130fd565b604051602001612958929190613cd5565b604051602081830303815290604052915050919050565b600d6040516020016129589190613d36565b600061298c3361107c565b90506000805b8451821015612a2a575060005b8251811015612a18578281815181106129ba576129ba61428e565b60200260200101518583815181106129d4576129d461428e565b60200260200101511415612a0657612a0633858584815181106129f9576129f961428e565b6020026020010151612df3565b612a11600182614170565b905061299f565b612a23600183614170565b9150612992565b5050505050565b60606000612a3e60095490565b8311612b48576000838152600e6020526040808220548151633026001360e21b815291516001600160a01b0390911692839263c098004c9260048083019392829003018186803b158015612a9157600080fd5b505afa158015612aa5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612acd9190810190613b09565b816001600160a01b0316633940e9ee6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0657600080fd5b505afa158015612b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3e9190613b98565b9250925050915091565b50506040805180820190915260148152731e2aa725a727aba71021a7a62622a1aa24a7a71f60611b60208201529160009150565b6006546001600160a01b03163314612ba65760405162461bcd60e51b8152600401610bc990613fb3565b6001600160a01b038116612c0b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc9565b61105e81612fa9565b600f8181548110612c2457600080fd5b600091825260209091200154905081565b80546001019055565b60006001600160e01b031982166380ac58cd60e01b1480612c6f57506001600160e01b03198216635b5e139f60e01b145b80610abc57506301ffc9a760e01b6001600160e01b0319831614610abc565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612cc3826115e9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316612d755760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610bc9565b6000612d80836115e9565b9050806001600160a01b0316846001600160a01b03161480612dbb5750836001600160a01b0316612db084610b54565b6001600160a01b0316145b80612deb57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316612e06826115e9565b6001600160a01b031614612e6a5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610bc9565b6001600160a01b038216612ecc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc9565b612ed7600082612c8e565b6001600160a01b0383166000908152600360205260408120805460019290612f009084906141bb565b90915550506001600160a01b0382166000908152600360205260408120805460019290612f2e908490614170565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61105c8282604051806020016040528060008152506131fa565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316141561305d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610bc9565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6130d5848484612df3565b6130e18484848461322d565b6119ed5760405162461bcd60e51b8152600401610bc990613f61565b6060816131215750506040805180820190915260018152600360fc1b602082015290565b8160005b811561314b578061313581614233565b91506131449050600a83614188565b9150613125565b6000816001600160401b03811115613165576131656142a4565b6040519080825280601f01601f19166020018201604052801561318f576020820181803683370190505b5090505b8415612deb576131a46001836141bb565b91506131b1600a8661424e565b6131bc906030614170565b60f81b8183815181106131d1576131d161428e565b60200101906001600160f81b031916908160001a9053506131f3600a86614188565b9450613193565b613204838361333a565b613211600084848461322d565b610cff5760405162461bcd60e51b8152600401610bc990613f61565b60006001600160a01b0384163b1561332f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613271903390899088908890600401613dfe565b602060405180830381600087803b15801561328b57600080fd5b505af19250505080156132bb575060408051601f3d908101601f191682019092526132b891810190613aec565b60015b613315573d8080156132e9576040519150601f19603f3d011682016040523d82523d6000602084013e6132ee565b606091505b50805161330d5760405162461bcd60e51b8152600401610bc990613f61565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612deb565b506001949350505050565b6001600160a01b0382166133905760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610bc9565b6000818152600260205260409020546001600160a01b0316156133f55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610bc9565b6001600160a01b038216600090815260036020526040812080546001929061341e908490614170565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461105c565b828054613489906141fe565b90600052602060002090601f0160209004810192826134ab57600085556134f1565b82601f106134c457805160ff19168380011785556134f1565b828001600101855582156134f1579182015b828111156134f15782518255916020019190600101906134d6565b506134fd929150613581565b5090565b6109c5806142df83390190565b508054600082559060005260206000209081019061105e9190613581565b8280548282559060005260206000209081019282156134f1579160200282015b828111156134f157825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061354c565b5b808211156134fd5760008155600101613582565b60006135a96135a484614149565b6140f6565b90508281528383830111156135bd57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146135eb57600080fd5b919050565b600082601f83011261360157600080fd5b611e2b83833560208501613596565b60006020828403121561362257600080fd5b611e2b826135d4565b6000806040838503121561363e57600080fd5b613647836135d4565b9150613655602084016135d4565b90509250929050565b60008060006060848603121561367357600080fd5b61367c846135d4565b925061368a602085016135d4565b9150604084013590509250925092565b600080600080608085870312156136b057600080fd5b6136b9856135d4565b93506136c7602086016135d4565b92506040850135915060608501356001600160401b038111156136e957600080fd5b8501601f810187136136fa57600080fd5b61370987823560208401613596565b91505092959194509250565b6000806040838503121561372857600080fd5b613731836135d4565b91506020830135613741816142ba565b809150509250929050565b6000806040838503121561375f57600080fd5b613768836135d4565b946020939093013593505050565b6000602080838503121561378957600080fd5b82356001600160401b0381111561379f57600080fd5b8301601f810185136137b057600080fd5b80356137be6135a482614126565b80828252848201915084840188868560051b87010111156137de57600080fd5b600094505b83851015613808576137f4816135d4565b8352600194909401939185019185016137e3565b50979650505050505050565b6000806020838503121561382757600080fd5b82356001600160401b038082111561383e57600080fd5b818501915085601f83011261385257600080fd5b81358181111561386157600080fd5b8660208260051b850101111561387657600080fd5b60209290920196919550909350505050565b6000602080838503121561389b57600080fd5b82356001600160401b038111156138b157600080fd5b8301601f810185136138c257600080fd5b80356138d06135a482614126565b80828252848201915084840188868560061b87010111156138f057600080fd5b60009450845b8481101561393b57604080838c03121561390e578687fd5b6139166140ce565b61391f846135d4565b81528389013589820152855293870193909101906001016138f6565b509098975050505050505050565b6000602080838503121561395c57600080fd5b82516001600160401b0381111561397257600080fd5b8301601f8101851361398357600080fd5b80516139916135a482614126565b80828252848201915084840188868560051b87010111156139b157600080fd5b600094505b838510156138085780518352600194909401939185019185016139b6565b600080604083850312156139e757600080fd5b82356001600160401b038111156139fd57600080fd5b8301601f81018513613a0e57600080fd5b80356020613a1e6135a483614126565b80838252828201915082850189848660051b8801011115613a3e57600080fd5b600095505b84861015613a61578035835260019590950194918301918301613a43565b509550613a7190508682016135d4565b93505050509250929050565b600060208284031215613a8f57600080fd5b8151611e2b816142ba565b600080600060608486031215613aaf57600080fd5b8335613aba816142ba565b95602085013595506040909401359392505050565b600060208284031215613ae157600080fd5b8135611e2b816142c8565b600060208284031215613afe57600080fd5b8151611e2b816142c8565b600060208284031215613b1b57600080fd5b81516001600160401b03811115613b3157600080fd5b8201601f81018413613b4257600080fd5b8051613b506135a482614149565b818152856020838501011115613b6557600080fd5b613b768260208301602086016141d2565b95945050505050565b600060208284031215613b9157600080fd5b5035919050565b600060208284031215613baa57600080fd5b5051919050565b60008060408385031215613bc457600080fd5b82359150613655602084016135d4565b600080600060608486031215613be957600080fd5b8335925060208401356001600160401b03811115613c0657600080fd5b613c12868287016135f0565b925050604084013590509250925092565b60008060008060008060c08789031215613c3c57600080fd5b86359550602087013594506040870135613c55816142ba565b93506060870135613c65816142ba565b92506080870135613c75816142ba565b915060a08701356001600160401b03811115613c9057600080fd5b613c9c89828a016135f0565b9150509295509295509295565b60008151808452613cc18160208601602086016141d2565b601f01601f19169290920160200192915050565b66697066733a2f2f60c81b815260008351613cf78160078501602088016141d2565b602f60f81b6007918401918201528351613d188160088401602088016141d2565b64173539b7b760d91b60089290910191820152600d01949350505050565b66697066733a2f2f60c81b8152600060076000845481600182811c915080831680613d6257607f831692505b6020808410821415613d8257634e487b7160e01b86526022600452602486fd5b818015613d965760018114613dab57613ddc565b60ff1986168a890152848a0188019650613ddc565b60008b81526020902060005b86811015613dd25781548c82018b0152908501908301613db7565b505087858b010196505b505050505050613b76816b17b434b23232b7173539b7b760a11b8152600c0190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613e3190830184613ca9565b9695505050505050565b6001600160a01b038516815260208101849052606060408201819052810182905260006001600160fb1b03831115613e7257600080fd5b8260051b808560808501376000920160800191825250949350505050565b602080825282518282018190526000919060409081850190868401855b82811015613edb57815180516001600160a01b03168552860151868501529284019290850190600101613ead565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613f2057835183529284019291840191600101613f04565b50909695505050505050565b602081526000611e2b6020830184613ca9565b604081526000613f526040830185613ca9565b90508260208301529392505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526032908201527f4f776e61626c653a2063616c6c6572206973206e656974686572206f776e6572604082015271103737b91030b236b4b734b9ba3930ba37b960711b606082015260800190565b86815285602082015284151560408201528315156060820152821515608082015260c060a082015260006140c260c0830184613ca9565b98975050505050505050565b604080519081016001600160401b03811182821017156140f0576140f06142a4565b60405290565b604051601f8201601f191681016001600160401b038111828210171561411e5761411e6142a4565b604052919050565b60006001600160401b0382111561413f5761413f6142a4565b5060051b60200190565b60006001600160401b03821115614162576141626142a4565b50601f01601f191660200190565b6000821982111561418357614183614262565b500190565b60008261419757614197614278565b500490565b60008160001904831182151516156141b6576141b6614262565b500290565b6000828210156141cd576141cd614262565b500390565b60005b838110156141ed5781810151838201526020016141d5565b838111156119ed5750506000910152565b600181811c9082168061421257607f821691505b6020821081141561270a57634e487b7160e01b600052602260045260246000fd5b600060001982141561424757614247614262565b5060010190565b60008261425d5761425d614278565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461105e57600080fd5b6001600160e01b03198116811461105e57600080fdfe608060405234801561001057600080fd5b506109a5806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806373b0f5db116100a25780639d56f5ee116100715780639d56f5ee14610235578063c098004c1461023e578063ca2e8df314610246578063d58778d614610269578063e6f314c91461027c57600080fd5b806373b0f5db146101e45780637841e1bb146102045780637c997d811461021957806388d5e0531461022257600080fd5b80633940e9ee116100e95780633940e9ee146101a25780633a663c80146101ab5780634f3e1efc146101be57806353046c4d146101c657806367f718a9146101cf57600080fd5b80630a6b378c1461011b5780631fe7645c1461016057806326ab844b1461017c57806337c5940b1461018f575b600080fd5b61015e6101293660046107d8565b600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b005b61016960055481565b6040519081526020015b60405180910390f35b61015e61018a36600461067e565b61028f565b61015e61019d366004610723565b6102da565b61016960025481565b6101696101b93660046107d8565b6102f4565b600754610169565b61016960035481565b6101d7610354565b6040516101739190610826565b6101696101f236600461067e565b60086020526000908152604090205481565b61020c6103ac565b604051610173919061086a565b61016960045481565b61015e6102303660046107d8565b61043a565b61016960065481565b61020c61044c565b610259610254366004610699565b610459565b6040519015158152602001610173565b6101696102773660046107d8565b6104df565b61015e61028a3660046107f1565b610500565b6001600160a01b03811660009081526008602052604081208054600192906102b89084906108bf565b925050819055506001600360008282546102d291906108bf565b909155505050565b81516102ed9060009060208501906105c9565b5060025550565b6000805b60075481101561034b57826007828154811061031657610316610943565b90600052602060002001541415610339576103328160016108bf565b9392505050565b6103446001826108bf565b90506102f8565b50600092915050565b606060078054806020026020016040519081016040528092919081815260200182805480156103a257602002820191906000526020600020905b81548152602001906001019080831161038e575b5050505050905090565b600180546103b9906108d7565b80601f01602080910402602001604051908101604052809291908181526020018280546103e5906108d7565b80156104325780601f1061040757610100808354040283529160200191610432565b820191906000526020600020905b81548152906001019060200180831161041557829003601f168201915b505050505081565b80600660008282546102d291906108bf565b600080546103b9906108d7565b6040516bffffffffffffffffffffffff19606086901b16602082015260009081906034016040516020818303038152906040528051906020012090506104d584848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925085915061053f9050565b9695505050505050565b600781815481106104ef57600080fd5b600091825260209091200154905081565b801561052357816005600082825461051891906108bf565b9091555061053b9050565b816004600082825461053591906108bf565b90915550505b5050565b60008261054c8584610555565b14949350505050565b600081815b84518110156105c157600085828151811061057757610577610943565b6020026020010151905080831161059d57600083815260208290526040902092506105ae565b600081815260208490526040902092505b50806105b981610912565b91505061055a565b509392505050565b8280546105d5906108d7565b90600052602060002090601f0160209004810192826105f7576000855561063d565b82601f1061061057805160ff191683800117855561063d565b8280016001018555821561063d579182015b8281111561063d578251825591602001919060010190610622565b5061064992915061064d565b5090565b5b80821115610649576000815560010161064e565b80356001600160a01b038116811461067957600080fd5b919050565b60006020828403121561069057600080fd5b61033282610662565b600080600080606085870312156106af57600080fd5b6106b885610662565b935060208501359250604085013567ffffffffffffffff808211156106dc57600080fd5b818701915087601f8301126106f057600080fd5b8135818111156106ff57600080fd5b8860208260051b850101111561071457600080fd5b95989497505060200194505050565b6000806040838503121561073657600080fd5b823567ffffffffffffffff8082111561074e57600080fd5b818501915085601f83011261076257600080fd5b81358181111561077457610774610959565b604051601f8201601f19908116603f0116810190838211818310171561079c5761079c610959565b816040528281528860208487010111156107b557600080fd5b826020860160208301376000602093820184015298969091013596505050505050565b6000602082840312156107ea57600080fd5b5035919050565b6000806040838503121561080457600080fd5b823591506020830135801515811461081b57600080fd5b809150509250929050565b6020808252825182820181905260009190848201906040850190845b8181101561085e57835183529284019291840191600101610842565b50909695505050505050565b600060208083528351808285015260005b818110156108975785810183015185820160400152820161087b565b818111156108a9576000604083870101525b50601f01601f1916929092016040019392505050565b600082198211156108d2576108d261092d565b500190565b600181811c908216806108eb57607f821691505b6020821081141561090c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156109265761092661092d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122050a2528632960008065f598443a1db5ea0d85dc320192768b70ad8e543cb2deb64736f6c63430008070033a264697066735822122045f0724c9bdea5134533408672440700d3e49d8712d3a29bde3f5c6ef92bd74364736f6c63430008070033
Deployed ByteCode Sourcemap
44197:11616:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55555:255;;;;;;;;;;-1:-1:-1;55555:255:0;;;;;:::i;:::-;;:::i;:::-;;;17090:14:1;;17083:22;17065:41;;17053:2;17038:18;55555:255:0;;;;;;;;31933:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33492:221::-;;;;;;;;;;-1:-1:-1;33492:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;14249:32:1;;;14231:51;;14219:2;14204:18;33492:221:0;14085:203:1;33015:411:0;;;;;;;;;;-1:-1:-1;33015:411:0;;;;;:::i;:::-;;:::i;:::-;;44897:33;;;;;;;;;;;;;;;;;;;29828:25:1;;;29816:2;29801:18;44897:33:0;29682:177:1;48452:90:0;;;;;;;;;;;;;:::i;46361:326::-;;;;;;;;;;;;;:::i;55146:103::-;;;;;;;;;;-1:-1:-1;55146:103:0;;;;;:::i;:::-;-1:-1:-1;55233:8:0;;;55146:103;48796:113;;;;;;;;;;;;;:::i;44662:24::-;;;;;;;;;;;;;:::i;34242:339::-;;;;;;;;;;-1:-1:-1;34242:339:0;;;;;:::i;:::-;;:::i;49673:152::-;;;;;;;;;;-1:-1:-1;49673:152:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;47369:408::-;;;;;;;;;;-1:-1:-1;47369:408:0;;;;;:::i;:::-;;:::i;49530:135::-;;;;;;;;;;-1:-1:-1;49530:135:0;;;;;:::i;:::-;;:::i;51732:239::-;;;:::i;34652:185::-;;;;;;;;;;-1:-1:-1;34652:185:0;;;;;:::i;:::-;;:::i;51040:684::-;;;;;;;;;;-1:-1:-1;51040:684:0;;;;;:::i;:::-;;:::i;47785:268::-;;;;;;;;;;-1:-1:-1;47785:268:0;;;;;:::i;:::-;;:::i;55378:169::-;;;;;;;;;;-1:-1:-1;55378:169:0;;;;;:::i;:::-;-1:-1:-1;55441:28:0;;55378:169;;;;;;;;:::i;44483:34::-;;;;;;;;;;;;;:::i;52983:962::-;;;;;;;;;;-1:-1:-1;52983:962:0;;;;;:::i;:::-;;:::i;4388:31::-;;;;;;;;;;;;;;;;31627:239;;;;;;;;;;-1:-1:-1;31627:239:0;;;;;:::i;:::-;;:::i;51979:996::-;;;;;;;;;;-1:-1:-1;51979:996:0;;;;;:::i;:::-;;:::i;54805:333::-;;;;;;;;;;-1:-1:-1;54805:333:0;;;;;:::i;:::-;;:::i;:::-;;;;30971:25:1;;;31027:2;31012:18;;31005:34;;;;31055:18;;;31048:34;31113:2;31098:18;;31091:34;30958:3;30943:19;54805:333:0;30740:391:1;31357:208:0;;;;;;;;;;-1:-1:-1;31357:208:0;;;;;:::i;:::-;;:::i;45020:25::-;;;;;;;;;;-1:-1:-1;45020:25:0;;;;;;;;11609:103;;;;;;;;;;;;;:::i;46695:666::-;;;;;;;;;;-1:-1:-1;46695:666:0;;;;;:::i;:::-;;:::i;54635:162::-;;;;;;;;;;-1:-1:-1;54635:162:0;;;;;:::i;:::-;;:::i;48240:204::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;10958:87::-;;;;;;;;;;-1:-1:-1;11031:6:0;;-1:-1:-1;;;;;11031:6:0;10958:87;;32102:104;;;;;;;;;;;;;:::i;45238:55::-;;;;;;;;;;-1:-1:-1;45238:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;49022:121;;;;;;;;;;;;;:::i;45085:27::-;;;;;;;;;;-1:-1:-1;45085:27:0;;;;;;;;;;;49833:1199;;;;;;:::i;:::-;;:::i;33785:155::-;;;;;;;;;;-1:-1:-1;33785:155:0;;;;;:::i;:::-;;:::i;4518:891::-;;;;;;;;;;-1:-1:-1;4518:891:0;;;;;:::i;:::-;;:::i;48061:171::-;;;;;;;;;;-1:-1:-1;48061:171:0;;;;;:::i;:::-;;:::i;46199:154::-;;;;;;;;;;-1:-1:-1;46199:154:0;;;;;:::i;:::-;;:::i;34908:328::-;;;;;;;;;;-1:-1:-1;34908:328:0;;;;;:::i;:::-;;:::i;44524:36::-;;;;;;;;;;;;;:::i;48550:238::-;;;;;;;;;;;;;:::i;54471:152::-;;;;;;;;;;-1:-1:-1;54471:152:0;;;;;:::i;:::-;;:::i;45436:491::-;;;;;;;;;;-1:-1:-1;45436:491:0;;;;;:::i;:::-;;:::i;45119:26::-;;;;;;;;;;-1:-1:-1;45119:26:0;;;;;;;;;;;55257:113;;;;;;;;;;-1:-1:-1;55257:113:0;;;;;:::i;:::-;55317:7;55344:18;;;:9;:18;;;;;;-1:-1:-1;;;;;55344:18:0;;55257:113;53953:510;;;;;;;;;;-1:-1:-1;53953:510:0;;;;;:::i;:::-;;:::i;49151:371::-;;;;;;;;;;-1:-1:-1;49151:371:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;45052:26::-;;;;;;;;;;-1:-1:-1;45052:26:0;;;;;;;;;;;34011:164;;;;;;;;;;-1:-1:-1;34011:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;34132:25:0;;;34108:4;34132:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34011:164;44699:48;;;;;;;;;;-1:-1:-1;44699:48:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;44699:48:0;;;11867:201;;;;;;;;;;-1:-1:-1;11867:201:0;;;;;:::i;:::-;;:::i;44754:36::-;;;;;;;;;;-1:-1:-1;44754:36:0;;;;;:::i;:::-;;:::i;55555:255::-;55750:12;;55693:4;;55750:12;;-1:-1:-1;;;;;;55735:27:0;;;;;;;;:67;;;55766:36;55790:11;55766:23;:36::i;:::-;55715:87;55555:255;-1:-1:-1;;55555:255:0:o;31933:100::-;31987:13;32020:5;32013:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31933:100;:::o;33492:221::-;33568:7;36835:16;;;:7;:16;;;;;;-1:-1:-1;;;;;36835:16:0;33588:73;;;;-1:-1:-1;;;33588:73:0;;24328:2:1;33588:73:0;;;24310:21:1;24367:2;24347:18;;;24340:30;24406:34;24386:18;;;24379:62;-1:-1:-1;;;24457:18:1;;;24450:42;24509:19;;33588:73:0;;;;;;;;;-1:-1:-1;33681:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;33681:24:0;;33492:221::o;33015:411::-;33096:13;33112:23;33127:7;33112:14;:23::i;:::-;33096:39;;33160:5;-1:-1:-1;;;;;33154:11:0;:2;-1:-1:-1;;;;;33154:11:0;;;33146:57;;;;-1:-1:-1;;;33146:57:0;;27053:2:1;33146:57:0;;;27035:21:1;27092:2;27072:18;;;27065:30;27131:34;27111:18;;;27104:62;-1:-1:-1;;;27182:18:1;;;27175:31;27223:19;;33146:57:0;26851:397:1;33146:57:0;9762:10;-1:-1:-1;;;;;33238:21:0;;;;:62;;-1:-1:-1;33263:37:0;33280:5;9762:10;34011:164;:::i;33263:37::-;33216:168;;;;-1:-1:-1;;;33216:168:0;;21584:2:1;33216:168:0;;;21566:21:1;21623:2;21603:18;;;21596:30;21662:34;21642:18;;;21635:62;21733:26;21713:18;;;21706:54;21777:19;;33216:168:0;21382:420:1;33216:168:0;33397:21;33406:2;33410:7;33397:8;:21::i;:::-;33085:341;33015:411;;:::o;48452:90::-;48495:4;48518:16;:6;6378:14;;6286:114;48518:16;48511:23;;48452:90;:::o;46361:326::-;46408:4;46441:7;11031:6;;-1:-1:-1;;;;;11031:6:0;;10958:87;46441:7;-1:-1:-1;;;;;46427:21:0;:10;-1:-1:-1;;;;;46427:21:0;;46424:63;;;-1:-1:-1;46471:4:0;;46361:326::o;46424:63::-;46501:9;46497:160;46520:14;:21;46516:25;;46497:160;;;46582:14;46597:1;46582:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;46582:17:0;46568:10;:31;46565:81;;;46626:4;46619:11;;;46361:326;:::o;46565:81::-;46543:6;46548:1;46543:6;;:::i;:::-;;;46497:160;;;;46674:5;46667:12;;46361:326;:::o;48796:113::-;48845:7;48871:30;:20;6378:14;;6286:114;44662:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34242:339::-;34437:41;9762:10;34470:7;34437:18;:41::i;:::-;34429:103;;;;-1:-1:-1;;;34429:103:0;;;;;;;:::i;:::-;34545:28;34555:4;34561:2;34565:7;34545:9;:28::i;49673:152::-;49779:24;;;;:10;:24;;;;;;;:38;;-1:-1:-1;;;49779:38:0;;;;49744:16;;-1:-1:-1;;;;;49779:24:0;;;;:36;;:38;;;;;:24;;:38;;;;;:24;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49779:38:0;;;;;;;;;;;;:::i;47369:408::-;45976:12;45991:17;:15;:17::i;:::-;45976:32;;46023:7;46019:72;;-1:-1:-1;11031:6:0;;-1:-1:-1;;;;;11031:6:0;9762:10;46056:23;46019:72;46109:7;46101:70;;;;-1:-1:-1;;;46101:70:0;;;;;;;:::i;:::-;47550:15:::1;:28:::0;;;47589:12:::1;:22:::0;;;47622:14:::1;:31:::0;;-1:-1:-1;;47664:30:0;47622:31:::1;::::0;::::1;;;-1:-1:-1::0;;47664:30:0;;;::::1;;;-1:-1:-1::0;;47705:31:0::1;::::0;;::::1;;;;::::0;;47747:22;;::::1;::::0;:10:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;45965:226:::0;47369:408;;;;;;:::o;49530:135::-;49599:7;49625:19;49645:11;49655:1;49645:7;:11;:::i;:::-;49625:32;;;;;;;;:::i;:::-;;;;;;;;;49618:39;;49530:135;;;:::o;51732:239::-;11031:6;;-1:-1:-1;;;;;11031:6:0;9762:10;11178:23;11170:68;;;;-1:-1:-1;;;11170:68:0;;;;;;;:::i;:::-;51808:21:::1;51843:13:::0;;51840:124:::1;;51873:6;51892:7;11031:6:::0;;-1:-1:-1;;;;;11031:6:0;;10958:87;51892:7:::1;-1:-1:-1::0;;;;;51884:21:0::1;51913:9;51884:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51872:55;;;51950:1;51942:10;;;::::0;::::1;;51857:107;51840:124;51777:194;51732:239::o:0;34652:185::-;34790:39;34807:4;34813:2;34817:7;34790:39;;;;;;;;;;;;:16;:39::i;51040:684::-;51100:16;51128:23;51154:17;51164:6;51154:9;:17::i;:::-;51128:43;;51182:25;51224:15;-1:-1:-1;;;;;51210:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51210:30:0;-1:-1:-1;51182:58:0;-1:-1:-1;51286:1:0;51261:22;51338:351;51362:15;51344;:33;:71;;;;-1:-1:-1;51399:6:0;6378:14;51381;:34;;51344:71;51338:351;;;51431:25;51459:23;51467:14;51459:7;:23::i;:::-;51431:51;;51521:6;-1:-1:-1;;;;;51500:27:0;:17;-1:-1:-1;;;;;51500:27:0;;51497:147;;;51575:14;51547:8;51556:15;51547:25;;;;;;;;:::i;:::-;;;;;;;;;;:42;51608:20;51627:1;51608:20;;:::i;:::-;;;51497:147;51658:19;51676:1;51658:19;;:::i;:::-;;;51416:273;51338:351;;;-1:-1:-1;51708:8:0;;51040:684;-1:-1:-1;;;;51040:684:0:o;47785:268::-;11031:6;;-1:-1:-1;;;;;11031:6:0;9762:10;11178:23;11170:68;;;;-1:-1:-1;;;11170:68:0;;;;;;;:::i;:::-;47930:14:::1;:32:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;47930:32:0;;::::1;::::0;;;::::1;::::0;;;47977:14:::1;:26:::0;48018:19:::1;:27:::0;47785:268::o;44483:34::-;;;;;;;:::i;52983:962::-;53056:12;53071:10;:40;53082:28;:18;6378:14;;6286:114;53082:28;53071:40;;;;;;;;;;;-1:-1:-1;53071:40:0;;53132:14;;-1:-1:-1;;;;;53071:40:0;;;;-1:-1:-1;53132:14:0;;;;;53124:49;;;;-1:-1:-1;;;53124:49:0;;25454:2:1;53124:49:0;;;25436:21:1;25493:2;25473:18;;;25466:30;-1:-1:-1;;;25512:18:1;;;25505:52;25574:18;;53124:49:0;25252:346:1;53124:49:0;53221:19;;53192:26;;:48;53184:88;;;;-1:-1:-1;;;53184:88:0;;26697:2:1;53184:88:0;;;26679:21:1;26736:2;26716:18;;;26709:30;26775:29;26755:18;;;26748:57;26822:18;;53184:88:0;26495:351:1;53184:88:0;53312:18;;53291;:16;:18::i;:::-;:39;53283:73;;;;-1:-1:-1;;;53283:73:0;;22830:2:1;53283:73:0;;;22812:21:1;22869:2;22849:18;;;22842:30;-1:-1:-1;;;22888:18:1;;;22881:51;22949:18;;53283:73:0;22628:345:1;53283:73:0;53394:10;53375:30;;;;:18;:30;;;;;;:35;53367:71;;;;-1:-1:-1;;;53367:71:0;;25102:2:1;53367:71:0;;;25084:21:1;25141:2;25121:18;;;25114:30;25180:25;25160:18;;;25153:53;25223:18;;53367:71:0;24900:347:1;53367:71:0;53484:14;;53457:56;;-1:-1:-1;;;53457:56:0;;-1:-1:-1;;;;;53457:14:0;;;;;:56;;53472:10;;53500:12;;;;53457:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53449:82;;;;-1:-1:-1;;;53449:82:0;;28219:2:1;53449:82:0;;;28201:21:1;28258:2;28238:18;;;28231:30;-1:-1:-1;;;28277:18:1;;;28270:43;28330:18;;53449:82:0;28017:337:1;53449:82:0;53571:1;-1:-1:-1;;;;;53571:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53547:1;-1:-1:-1;;;;;53547:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;53544:160;;;53603:30;:18;6497:19;;6515:1;6497:19;;;6408:127;53603:30;53652:10;:40;53663:28;:18;6378:14;;6286:114;53663:28;53652:40;;;;;;;;;;;-1:-1:-1;53652:40:0;;-1:-1:-1;;;;;53652:40:0;;-1:-1:-1;53544:160:0;53716:18;:6;6497:19;;6515:1;6497:19;;;6408:127;53716:18;53745:39;53755:10;53767:16;:6;6378:14;;6286:114;53767:16;53745:9;:39::i;:::-;53814:10;53795:30;;;;:18;:30;;;;;:35;;53829:1;;53795:30;:35;;53829:1;;53795:35;:::i;:::-;;;;-1:-1:-1;;;;;;;53841:13:0;;;53855:16;:6;6378:14;;6286:114;53855:16;53841:31;;;;;;;;;;;;;29828:25:1;;29816:2;29801:18;;29682:177;53841:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53883:19;53908:28;:18;6378:14;;6286:114;53908:28;53883:54;;;;;;;-1:-1:-1;53883:54:0;;;;;;;;;;;-1:-1:-1;;;52983:962:0:o;31627:239::-;31699:7;31735:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31735:16:0;31770:19;31762:73;;;;-1:-1:-1;;;31762:73:0;;22420:2:1;31762:73:0;;;22402:21:1;22459:2;22439:18;;;22432:30;22498:34;22478:18;;;22471:62;-1:-1:-1;;;22549:18:1;;;22542:39;22598:19;;31762:73:0;22218:405:1;51979:996:0;45976:12;45991:17;:15;:17::i;:::-;45976:32;;46023:7;46019:72;;-1:-1:-1;11031:6:0;;-1:-1:-1;;;;;11031:6:0;9762:10;46056:23;46019:72;46109:7;46101:70;;;;-1:-1:-1;;;46101:70:0;;;;;;;:::i;:::-;52111:18:::1;::::0;52091:16;;52072:6:::1;6378:14:::0;52072:35:::1;;;;:::i;:::-;:57;;52064:116;;;::::0;-1:-1:-1;;;52064:116:0;;18064:2:1;52064:116:0::1;::::0;::::1;18046:21:1::0;18103:2;18083:18;;;18076:30;18142:34;18122:18;;;18115:62;-1:-1:-1;;;18193:18:1;;;18186:44;18247:19;;52064:116:0::1;17862:410:1::0;52064:116:0::1;52193:12;52208:10;:40;52219:28;:18;6378:14:::0;;6286:114;52219:28:::1;52208:40:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52208:40:0;;;;-1:-1:-1;;;;;52208:40:0::1;::::0;-1:-1:-1;52294:674:0::1;52304:9;:16;52300:1;:20;52294:674;;;52363:1;-1:-1:-1::0;;;;;52363:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52339:1;-1:-1:-1::0;;;;;52339:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;52336:172;;;52399:30;:18;6497:19:::0;;6515:1;6497:19;;;6408:127;52399:30:::1;52452:10;:40;52463:28;:18;6378:14:::0;;6286:114;52463:28:::1;52452:40:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;52452:40:0;;-1:-1:-1;;;;;52452:40:0::1;::::0;-1:-1:-1;52336:172:0::1;52557:20;6378:14:::0;52525:18:::1;6378:14:::0;52525:62:::1;52522:413;;52607:18;:6;6497:19:::0;;6515:1;6497:19;;;6408:127;52607:18:::1;52644:41;52654:9;52664:1;52654:12;;;;;;;;:::i;:::-;;;;;;;52668:16;:6;6378:14:::0;;6286:114;52644:41:::1;52704:1;-1:-1:-1::0;;;;;52704:13:0::1;;52718:16;:6;6378:14:::0;;6286:114;52718:16:::1;52704:31;;;;;;;;;;;;;29828:25:1::0;;29816:2;29801:18;;29682:177;52704:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52754:1;-1:-1:-1::0;;;;;52754:17:0::1;;52772:9;52782:1;52772:12;;;;;;;;:::i;:::-;;;;;;;52754:31;;;;;;;;;;;;;;-1:-1:-1::0;;;;;14249:32:1;;;;14231:51;;14219:2;14204:18;;14085:203;52754:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52804:19;52829:28;:18;6378:14:::0;;6286:114;52829:28:::1;52804:54:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;52804:54:0;;;::::1;::::0;;;;;::::1;::::0;;;;52889:6:::1;6378:14:::0;52879:27;;:9:::1;:27:::0;;;;;:40;;-1:-1:-1;;;;;;52879:40:0::1;52909:10;52879:40;::::0;;52522:413:::1;52949:6;52954:1;52949:6:::0;::::1;:::i;:::-;;;52294:674;;;52053:922;;45965:226:::0;51979:996;:::o;54805:333::-;54866:7;54934:24;;;:10;:24;;;;;;;;;:43;;-1:-1:-1;;;54934:43:0;;;;54866:7;;;;;;-1:-1:-1;;;;;54934:24:0;;:41;;:43;;;;;:24;;:43;;;;;;:24;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54993:24;;;;:10;:24;;;;;;;;;;:40;;-1:-1:-1;;;54993:40:0;;;;-1:-1:-1;;;;;54993:24:0;;;;:38;;:40;;;;;:24;;:40;;;;;:24;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55049:24;;;;:10;:24;;;;;;;;;;:43;;-1:-1:-1;;;55049:43:0;;;;-1:-1:-1;;;;;55049:24:0;;;;:41;;:43;;;;;:24;;:43;;;;;:24;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55108:21;54912:218;;;;;;;;54805:333;;;;;:::o;31357:208::-;31429:7;-1:-1:-1;;;;;31457:19:0;;31449:74;;;;-1:-1:-1;;;31449:74:0;;22009:2:1;31449:74:0;;;21991:21:1;22048:2;22028:18;;;22021:30;22087:34;22067:18;;;22060:62;-1:-1:-1;;;22138:18:1;;;22131:40;22188:19;;31449:74:0;21807:406:1;31449:74:0;-1:-1:-1;;;;;;31541:16:0;;;;;:9;:16;;;;;;;31357:208::o;11609:103::-;11031:6;;-1:-1:-1;;;;;11031:6:0;9762:10;11178:23;11170:68;;;;-1:-1:-1;;;11170:68:0;;;;;;;:::i;:::-;11674:30:::1;11701:1;11674:18;:30::i;:::-;11609:103::o:0;46695:666::-;46849:7;45976:12;45991:17;:15;:17::i;:::-;45976:32;;46023:7;46019:72;;-1:-1:-1;11031:6:0;;-1:-1:-1;;;;;11031:6:0;9762:10;46056:23;46019:72;46109:7;46101:70;;;;-1:-1:-1;;;46101:70:0;;;;;;;:::i;:::-;46871:12:::1;46899:17:::0;46896:130:::1;;46936:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46932:20;;46896:130;;;-1:-1:-1::0;46987:24:0::1;::::0;;;:10:::1;:24;::::0;;;;;-1:-1:-1;;;;;46987:24:0::1;46896:130;47038:38;::::0;-1:-1:-1;;;47038:38:0;;-1:-1:-1;;;;;47038:13:0;::::1;::::0;::::1;::::0;:38:::1;::::0;47052:6;;47060:15;;47038:38:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47092:12;47108:1;47092:17;47089:183;;;47125:32;:20;6497:19:::0;;6515:1;6497:19;;;6408:127;47125:32:::1;47187:20;6378:14:::0;47232:24:::1;::::0;;;:10:::1;:24;::::0;;;;:28;;-1:-1:-1;;;;;;47232:28:0::1;-1:-1:-1::0;;;;;47232:28:0;::::1;;::::0;;:24;-1:-1:-1;47089:183:0::1;47305:16;:14;:16::i;:::-;47284:18;:37:::0;-1:-1:-1;47341:12:0;;46695:666;-1:-1:-1;;;;46695:666:0:o;54635:162::-;54717:7;54743:24;;;:10;:24;;;;;;;:46;;-1:-1:-1;;;54743:46:0;;-1:-1:-1;;;;;14249:32:1;;;54743:46:0;;;14231:51:1;54743:24:0;;;;:40;;14204:18:1;;54743:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54736:53;54635:162;-1:-1:-1;;;54635:162:0:o;48240:204::-;48346:15;;48363:12;;48377:14;;48425:10;48338:98;;48283:4;;;;;;;;;;48313:13;;48346:15;48363:12;48377:14;;;;;;;48393:13;;;;48408:15;;;;;;;;48425:10;;48338:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48240:204;;;;;;:::o;32102:104::-;32158:13;32191:7;32184:14;;;;;:::i;49022:121::-;49081:7;49107:28;:18;6378:14;;6286:114;49833:1199;49902:13;;;;49901:14;49893:44;;;;-1:-1:-1;;;49893:44:0;;27873:2:1;49893:44:0;;;27855:21:1;27912:2;27892:18;;;27885:30;-1:-1:-1;;;27931:18:1;;;27924:47;27988:18;;49893:44:0;27671:341:1;49893:44:0;49950:12;49965:10;:40;49976:28;:18;6378:14;;6286:114;49976:28;49965:40;;;;;;;;;;;-1:-1:-1;49965:40:0;;50060:18;;-1:-1:-1;;;;;49965:40:0;;;;-1:-1:-1;50045:11:0;50026:16;:6;6378:14;;6286:114;50026:16;:30;;;;:::i;:::-;:52;;50018:97;;;;-1:-1:-1;;;50018:97:0;;23180:2:1;50018:97:0;;;23162:21:1;;;23199:18;;;23192:30;23258:34;23238:18;;;23231:62;23310:18;;50018:97:0;22978:356:1;50018:97:0;11031:6;;-1:-1:-1;;;;;11031:6:0;50132:10;:21;50128:119;;50191:24;50203:11;50191;:24::i;:::-;50178:9;:37;;50170:65;;;;-1:-1:-1;;;50170:65:0;;21240:2:1;50170:65:0;;;21222:21:1;21279:2;21259:18;;;21252:30;-1:-1:-1;;;21298:18:1;;;21291:45;21353:18;;50170:65:0;21038:339:1;50170:65:0;50279:14;;50257:37;;-1:-1:-1;;;50257:37:0;;50268:9;50257:37;;;30032:25:1;50279:14:0;;;;;;30100::1;30093:22;30073:18;;;30066:50;-1:-1:-1;;;;;50257:10:0;;;;;30005:18:1;;50257:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50324:1:0;;-1:-1:-1;;;50307:718:0;50332:11;50327:1;:16;50307:718;;50393:1;-1:-1:-1;;;;;50393:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50369:1;-1:-1:-1;;;;;50369:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;50366:172;;;50429:30;:18;6497:19;;6515:1;6497:19;;;6408:127;50429:30;50482:10;:40;50493:28;:18;6378:14;;6286:114;50493:28;50482:40;;;;;;;;;;;-1:-1:-1;50482:40:0;;-1:-1:-1;;;;;50482:40:0;;-1:-1:-1;50366:172:0;50587:20;6378:14;50555:18;6378:14;50555:62;50552:361;;50637:18;:6;6497:19;;6515:1;6497:19;;;6408:127;50637:18;50674:39;50684:10;50696:16;:6;6378:14;;6286:114;50674:39;50732:1;-1:-1:-1;;;;;50732:13:0;;50746:16;:6;6378:14;;6286:114;50746:16;50732:31;;;;;;;;;;;;;29828:25:1;;29816:2;29801:18;;29682:177;50732:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50782:19;50807:28;:18;6378:14;;6286:114;50807:28;50782:54;;;;;;;-1:-1:-1;50782:54:0;;;;;;;;;;;;;;50867:6;6378:14;50857:27;;:9;:27;;;;;:40;;-1:-1:-1;;;;;;50857:40:0;50887:10;50857:40;;;50552:361;50930:14;;;;;;;50927:87;;;50985:10;50964:32;;;;:20;:32;;;;;:34;;;;;;:::i;:::-;;;;;;50927:87;50345:4;50348:1;50345:4;;:::i;:::-;;;50307:718;;33785:155;33880:52;9762:10;33913:8;33923;33880:18;:52::i;4518:891::-;4655:2;4634:10;:17;:23;;4612:140;;;;-1:-1:-1;;;4612:140:0;;26221:2:1;4612:140:0;;;26203:21:1;26260:2;26240:18;;;26233:30;26299:34;26279:18;;;26272:62;26370:34;26350:18;;;26343:62;-1:-1:-1;;;26421:19:1;;;26414:34;26465:19;;4612:140:0;26019:471:1;4612:140:0;4765:21;4808:9;4803:437;4827:10;:17;4823:1;:21;4803:437;;;4922:1;-1:-1:-1;;;;;4892:32:0;:10;4903:1;4892:13;;;;;;;;:::i;:::-;;;;;;;:18;;;-1:-1:-1;;;;;4892:32:0;;;4866:154;;;;-1:-1:-1;;;4866:154:0;;29036:2:1;4866:154:0;;;29018:21:1;29075:2;29055:18;;;29048:30;29114:34;29094:18;;;29087:62;29185:30;29165:18;;;29158:58;29233:19;;4866:154:0;28834:424:1;4866:154:0;5083:1;5061:10;5072:1;5061:13;;;;;;;;:::i;:::-;;;;;;;:19;;;:23;5035:142;;;;-1:-1:-1;;;5035:142:0;;23902:2:1;5035:142:0;;;23884:21:1;23941:2;23921:18;;;23914:30;23980:34;23960:18;;;23953:62;24051:27;24031:18;;;24024:55;24096:19;;5035:142:0;23700:421:1;5035:142:0;5209:10;5220:1;5209:13;;;;;;;;:::i;:::-;;;;;;;:19;;;5192:36;;;;;:::i;:::-;;-1:-1:-1;4846:3:0;;;;:::i;:::-;;;;4803:437;;;;5299:8;;5282:13;:25;;5260:141;;;;-1:-1:-1;;;5260:141:0;;28561:2:1;5260:141:0;;;28543:21:1;28600:2;28580:18;;;28573:30;28639:34;28619:18;;;28612:62;28710:34;28690:18;;;28683:62;-1:-1:-1;;;28761:19:1;;;28754:33;28804:19;;5260:141:0;28359:470:1;48061:171:0;48149:14;;48123:7;;48149:14;;;;;:75;;48213:11;48195:15;;:29;;;;:::i;:::-;48149:75;;;48181:11;48166:12;;:26;;;;:::i;46199:154::-;11031:6;;-1:-1:-1;;;;;11031:6:0;9762:10;11178:23;11170:68;;;;-1:-1:-1;;;11170:68:0;;;;;;;:::i;:::-;46284:21:::1;46291:14;;46284:21;:::i;:::-;46316:29:::0;;::::1;::::0;:14:::1;::::0;:29:::1;::::0;::::1;::::0;::::1;:::i;34908:328::-:0;35083:41;9762:10;35116:7;35083:18;:41::i;:::-;35075:103;;;;-1:-1:-1;;;35075:103:0;;;;;;;:::i;:::-;35189:39;35203:4;35209:2;35213:7;35222:5;35189:13;:39::i;44524:36::-;;;;;;;:::i;48550:238::-;48596:7;;48660:1;48644:114;48668:20;:18;:20::i;:::-;48663:1;:25;48644:114;;48718:13;;;;:10;:13;;;;;;;;;;:28;;-1:-1:-1;;;48718:28:0;;;;-1:-1:-1;;;;;48718:13:0;;;;:26;;:28;;;;;:13;;:28;;;;;:13;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48709:37;;;;:::i;:::-;;-1:-1:-1;48690:3:0;;;;:::i;:::-;;;;48644:114;;;-1:-1:-1;48775:5:0;48550:238;-1:-1:-1;48550:238:0:o;54471:152::-;54539:7;54565:24;;;:10;:24;;;;;;;;;:50;;-1:-1:-1;;;54565:50:0;;;;-1:-1:-1;;;;;54565:24:0;;;;:48;;:50;;;;;;;;;;;:24;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45436:491::-;36811:4;36835:16;;;:7;:16;;;;;;45509:13;;-1:-1:-1;;;;;36835:16:0;45535:76;;;;-1:-1:-1;;;45535:76:0;;25805:2:1;45535:76:0;;;25787:21:1;25844:2;25824:18;;;25817:30;25883:34;25863:18;;;25856:62;-1:-1:-1;;;25934:18:1;;;25927:45;25989:19;;45535:76:0;25603:411:1;45535:76:0;45622:12;45637:10;:43;45648:31;45671:7;45648:22;:31::i;:::-;45637:43;;;;;;;;;;;-1:-1:-1;45637:43:0;;45694:15;;-1:-1:-1;;;;;45637:43:0;;;;-1:-1:-1;45694:15:0;;;;;45691:148;;;45767:1;-1:-1:-1;;;;;45767:5:0;;:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;45767:7:0;;;;;;;;;;;;:::i;:::-;45781:24;;-1:-1:-1;;;45781:24:0;;;;;29828:25:1;;;45781:35:0;;-1:-1:-1;;;;;45781:15:0;;;;;29801:18:1;;45781:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;:35::i;:::-;45739:87;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45725:102;;;45436:491;;;:::o;45691:148::-;45891:10;45863:55;;;;;;;;:::i;53953:510::-;54037:28;54068:25;54082:10;54068:13;:25::i;:::-;54037:56;;54106:9;54131;54155:301;54165:8;:15;54161:1;:19;54155:301;;;-1:-1:-1;54200:1:0;54216:210;54226:11;:18;54222:1;:22;54216:210;;;54282:11;54294:1;54282:14;;;;;;;;:::i;:::-;;;;;;;54267:8;54276:1;54267:11;;;;;;;;:::i;:::-;;;;;;;:29;54264:123;;;54320:47;54330:10;54342:8;54352:11;54364:1;54352:14;;;;;;;;:::i;:::-;;;;;;;54320:9;:47::i;:::-;54405:4;54408:1;54405:4;;:::i;:::-;;;54216:210;;;54440:4;54443:1;54440:4;;:::i;:::-;;;54155:301;;;54026:437;;;53953:510;;:::o;49151:371::-;49220:13;49235:7;49273:30;:20;6378:14;;6286:114;49273:30;49257:12;:46;49254:214;;49319:12;49334:24;;;:10;:24;;;;;;;49399:7;;-1:-1:-1;;;49399:7:0;;;;-1:-1:-1;;;;;49334:24:0;;;;;;49399:5;;:7;;;;;49319:12;49399:7;;;;;49334:24;49399:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49399:7:0;;;;;;;;;;;;:::i;:::-;49425:1;-1:-1:-1;;;;;49425:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49373:83;;;;;49151:371;;;:::o;49254:214::-;-1:-1:-1;;49480:34:0;;;;;;;;;;;;-1:-1:-1;;;49480:34:0;;;;;49512:1;;-1:-1:-1;49151:371:0:o;11867:201::-;11031:6;;-1:-1:-1;;;;;11031:6:0;9762:10;11178:23;11170:68;;;;-1:-1:-1;;;11170:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11956:22:0;::::1;11948:73;;;::::0;-1:-1:-1;;;11948:73:0;;18898:2:1;11948:73:0::1;::::0;::::1;18880:21:1::0;18937:2;18917:18;;;18910:30;18976:34;18956:18;;;18949:62;-1:-1:-1;;;19027:18:1;;;19020:36;19073:19;;11948:73:0::1;18696:402:1::0;11948:73:0::1;12032:28;12051:8;12032:18;:28::i;44754:36::-:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44754:36:0;:::o;6408:127::-;6497:19;;6515:1;6497:19;;;6408:127::o;30988:305::-;31090:4;-1:-1:-1;;;;;;31127:40:0;;-1:-1:-1;;;31127:40:0;;:105;;-1:-1:-1;;;;;;;31184:48:0;;-1:-1:-1;;;31184:48:0;31127:105;:158;;;-1:-1:-1;;;;;;;;;;23851:40:0;;;31249:36;23742:157;40892:174;40967:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;40967:29:0;-1:-1:-1;;;;;40967:29:0;;;;;;;;:24;;41021:23;40967:24;41021:14;:23::i;:::-;-1:-1:-1;;;;;41012:46:0;;;;;;;;;;;40892:174;;:::o;37040:348::-;37133:4;36835:16;;;:7;:16;;;;;;-1:-1:-1;;;;;36835:16:0;37150:73;;;;-1:-1:-1;;;37150:73:0;;20827:2:1;37150:73:0;;;20809:21:1;20866:2;20846:18;;;20839:30;20905:34;20885:18;;;20878:62;-1:-1:-1;;;20956:18:1;;;20949:42;21008:19;;37150:73:0;20625:408:1;37150:73:0;37234:13;37250:23;37265:7;37250:14;:23::i;:::-;37234:39;;37303:5;-1:-1:-1;;;;;37292:16:0;:7;-1:-1:-1;;;;;37292:16:0;;:51;;;;37336:7;-1:-1:-1;;;;;37312:31:0;:20;37324:7;37312:11;:20::i;:::-;-1:-1:-1;;;;;37312:31:0;;37292:51;:87;;;-1:-1:-1;;;;;;34132:25:0;;;34108:4;34132:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;37347:32;37284:96;37040:348;-1:-1:-1;;;;37040:348:0:o;40149:625::-;40308:4;-1:-1:-1;;;;;40281:31:0;:23;40296:7;40281:14;:23::i;:::-;-1:-1:-1;;;;;40281:31:0;;40273:81;;;;-1:-1:-1;;;40273:81:0;;19305:2:1;40273:81:0;;;19287:21:1;19344:2;19324:18;;;19317:30;19383:34;19363:18;;;19356:62;-1:-1:-1;;;19434:18:1;;;19427:35;19479:19;;40273:81:0;19103:401:1;40273:81:0;-1:-1:-1;;;;;40373:16:0;;40365:65;;;;-1:-1:-1;;;40365:65:0;;20068:2:1;40365:65:0;;;20050:21:1;20107:2;20087:18;;;20080:30;20146:34;20126:18;;;20119:62;-1:-1:-1;;;20197:18:1;;;20190:34;20241:19;;40365:65:0;19866:400:1;40365:65:0;40547:29;40564:1;40568:7;40547:8;:29::i;:::-;-1:-1:-1;;;;;40589:15:0;;;;;;:9;:15;;;;;:20;;40608:1;;40589:15;:20;;40608:1;;40589:20;:::i;:::-;;;;-1:-1:-1;;;;;;;40620:13:0;;;;;;:9;:13;;;;;:18;;40637:1;;40620:13;:18;;40637:1;;40620:18;:::i;:::-;;;;-1:-1:-1;;40649:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;40649:21:0;-1:-1:-1;;;;;40649:21:0;;;;;;;;;40688:27;;40649:16;;40688:27;;;;;;;33085:341;33015:411;;:::o;37730:110::-;37806:26;37816:2;37820:7;37806:26;;;;;;;;;;;;:9;:26::i;12228:191::-;12321:6;;;-1:-1:-1;;;;;12338:17:0;;;-1:-1:-1;;;;;;12338:17:0;;;;;;;12371:40;;12321:6;;;12338:17;12321:6;;12371:40;;12302:16;;12371:40;12291:128;12228:191;:::o;41208:315::-;41363:8;-1:-1:-1;;;;;41354:17:0;:5;-1:-1:-1;;;;;41354:17:0;;;41346:55;;;;-1:-1:-1;;;41346:55:0;;20473:2:1;41346:55:0;;;20455:21:1;20512:2;20492:18;;;20485:30;20551:27;20531:18;;;20524:55;20596:18;;41346:55:0;20271:349:1;41346:55:0;-1:-1:-1;;;;;41412:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;41412:46:0;;;;;;;;;;41474:41;;17065::1;;;41474::0;;17038:18:1;41474:41:0;;;;;;;41208:315;;;:::o;36118:::-;36275:28;36285:4;36291:2;36295:7;36275:9;:28::i;:::-;36322:48;36345:4;36351:2;36355:7;36364:5;36322:22;:48::i;:::-;36314:111;;;;-1:-1:-1;;;36314:111:0;;;;;;;:::i;7244:723::-;7300:13;7521:10;7517:53;;-1:-1:-1;;7548:10:0;;;;;;;;;;;;-1:-1:-1;;;7548:10:0;;;;;7244:723::o;7517:53::-;7595:5;7580:12;7636:78;7643:9;;7636:78;;7669:8;;;;:::i;:::-;;-1:-1:-1;7692:10:0;;-1:-1:-1;7700:2:0;7692:10;;:::i;:::-;;;7636:78;;;7724:19;7756:6;-1:-1:-1;;;;;7746:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7746:17:0;;7724:39;;7774:154;7781:10;;7774:154;;7808:11;7818:1;7808:11;;:::i;:::-;;-1:-1:-1;7877:10:0;7885:2;7877:5;:10;:::i;:::-;7864:24;;:2;:24;:::i;:::-;7851:39;;7834:6;7841;7834:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;7834:56:0;;;;;;;;-1:-1:-1;7905:11:0;7914:2;7905:11;;:::i;:::-;;;7774:154;;38067:321;38197:18;38203:2;38207:7;38197:5;:18::i;:::-;38248:54;38279:1;38283:2;38287:7;38296:5;38248:22;:54::i;:::-;38226:154;;;;-1:-1:-1;;;38226:154:0;;;;;;;:::i;42088:799::-;42243:4;-1:-1:-1;;;;;42264:13:0;;13954:19;:23;42260:620;;42300:72;;-1:-1:-1;;;42300:72:0;;-1:-1:-1;;;;;42300:36:0;;;;;:72;;9762:10;;42351:4;;42357:7;;42366:5;;42300:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42300:72:0;;;;;;;;-1:-1:-1;;42300:72:0;;;;;;;;;;;;:::i;:::-;;;42296:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42542:13:0;;42538:272;;42585:60;;-1:-1:-1;;;42585:60:0;;;;;;;:::i;42538:272::-;42760:6;42754:13;42745:6;42741:2;42737:15;42730:38;42296:529;-1:-1:-1;;;;;;42423:51:0;-1:-1:-1;;;42423:51:0;;-1:-1:-1;42416:58:0;;42260:620;-1:-1:-1;42864:4:0;42088:799;;;;;;:::o;38724:439::-;-1:-1:-1;;;;;38804:16:0;;38796:61;;;;-1:-1:-1;;;38796:61:0;;23541:2:1;38796:61:0;;;23523:21:1;;;23560:18;;;23553:30;23619:34;23599:18;;;23592:62;23671:18;;38796:61:0;23339:356:1;38796:61:0;36811:4;36835:16;;;:7;:16;;;;;;-1:-1:-1;;;;;36835:16:0;:30;38868:58;;;;-1:-1:-1;;;38868:58:0;;19711:2:1;38868:58:0;;;19693:21:1;19750:2;19730:18;;;19723:30;19789;19769:18;;;19762:58;19837:18;;38868:58:0;19509:352:1;38868:58:0;-1:-1:-1;;;;;38997:13:0;;;;;;:9;:13;;;;;:18;;39014:1;;38997:13;:18;;39014:1;;38997:18;:::i;:::-;;;;-1:-1:-1;;39026:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;39026:21:0;-1:-1:-1;;;;;39026:21:0;;;;;;;;39065:33;;39026:16;;;39065:33;;39026:16;;39065:33;39111:44;33015:411;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:336:1;78:5;107:52;123:35;151:6;123:35;:::i;:::-;107:52;:::i;:::-;98:61;;182:6;175:5;168:21;222:3;213:6;208:3;204:16;201:25;198:45;;;239:1;236;229:12;198:45;288:6;283:3;276:4;269:5;265:16;252:43;342:1;335:4;326:6;319:5;315:18;311:29;304:40;14:336;;;;;:::o;355:173::-;423:20;;-1:-1:-1;;;;;472:31:1;;462:42;;452:70;;518:1;515;508:12;452:70;355:173;;;:::o;533:221::-;576:5;629:3;622:4;614:6;610:17;606:27;596:55;;647:1;644;637:12;596:55;669:79;744:3;735:6;722:20;715:4;707:6;703:17;669:79;:::i;759:186::-;818:6;871:2;859:9;850:7;846:23;842:32;839:52;;;887:1;884;877:12;839:52;910:29;929:9;910:29;:::i;950:260::-;1018:6;1026;1079:2;1067:9;1058:7;1054:23;1050:32;1047:52;;;1095:1;1092;1085:12;1047:52;1118:29;1137:9;1118:29;:::i;:::-;1108:39;;1166:38;1200:2;1189:9;1185:18;1166:38;:::i;:::-;1156:48;;950:260;;;;;:::o;1215:328::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;1400:29;1419:9;1400:29;:::i;:::-;1390:39;;1448:38;1482:2;1471:9;1467:18;1448:38;:::i;:::-;1438:48;;1533:2;1522:9;1518:18;1505:32;1495:42;;1215:328;;;;;:::o;1548:666::-;1643:6;1651;1659;1667;1720:3;1708:9;1699:7;1695:23;1691:33;1688:53;;;1737:1;1734;1727:12;1688:53;1760:29;1779:9;1760:29;:::i;:::-;1750:39;;1808:38;1842:2;1831:9;1827:18;1808:38;:::i;:::-;1798:48;;1893:2;1882:9;1878:18;1865:32;1855:42;;1948:2;1937:9;1933:18;1920:32;-1:-1:-1;;;;;1967:6:1;1964:30;1961:50;;;2007:1;2004;1997:12;1961:50;2030:22;;2083:4;2075:13;;2071:27;-1:-1:-1;2061:55:1;;2112:1;2109;2102:12;2061:55;2135:73;2200:7;2195:2;2182:16;2177:2;2173;2169:11;2135:73;:::i;:::-;2125:83;;;1548:666;;;;;;;:::o;2219:315::-;2284:6;2292;2345:2;2333:9;2324:7;2320:23;2316:32;2313:52;;;2361:1;2358;2351:12;2313:52;2384:29;2403:9;2384:29;:::i;:::-;2374:39;;2463:2;2452:9;2448:18;2435:32;2476:28;2498:5;2476:28;:::i;:::-;2523:5;2513:15;;;2219:315;;;;;:::o;2539:254::-;2607:6;2615;2668:2;2656:9;2647:7;2643:23;2639:32;2636:52;;;2684:1;2681;2674:12;2636:52;2707:29;2726:9;2707:29;:::i;:::-;2697:39;2783:2;2768:18;;;;2755:32;;-1:-1:-1;;;2539:254:1:o;2798:908::-;2882:6;2913:2;2956;2944:9;2935:7;2931:23;2927:32;2924:52;;;2972:1;2969;2962:12;2924:52;3012:9;2999:23;-1:-1:-1;;;;;3037:6:1;3034:30;3031:50;;;3077:1;3074;3067:12;3031:50;3100:22;;3153:4;3145:13;;3141:27;-1:-1:-1;3131:55:1;;3182:1;3179;3172:12;3131:55;3218:2;3205:16;3241:60;3257:43;3297:2;3257:43;:::i;3241:60::-;3323:3;3347:2;3342:3;3335:15;3375:2;3370:3;3366:12;3359:19;;3406:2;3402;3398:11;3454:7;3449:2;3443;3440:1;3436:10;3432:2;3428:19;3424:28;3421:41;3418:61;;;3475:1;3472;3465:12;3418:61;3497:1;3488:10;;3507:169;3521:2;3518:1;3515:9;3507:169;;;3578:23;3597:3;3578:23;:::i;:::-;3566:36;;3539:1;3532:9;;;;;3622:12;;;;3654;;3507:169;;;-1:-1:-1;3695:5:1;2798:908;-1:-1:-1;;;;;;;2798:908:1:o;3711:615::-;3797:6;3805;3858:2;3846:9;3837:7;3833:23;3829:32;3826:52;;;3874:1;3871;3864:12;3826:52;3914:9;3901:23;-1:-1:-1;;;;;3984:2:1;3976:6;3973:14;3970:34;;;4000:1;3997;3990:12;3970:34;4038:6;4027:9;4023:22;4013:32;;4083:7;4076:4;4072:2;4068:13;4064:27;4054:55;;4105:1;4102;4095:12;4054:55;4145:2;4132:16;4171:2;4163:6;4160:14;4157:34;;;4187:1;4184;4177:12;4157:34;4240:7;4235:2;4225:6;4222:1;4218:14;4214:2;4210:23;4206:32;4203:45;4200:65;;;4261:1;4258;4251:12;4200:65;4292:2;4284:11;;;;;4314:6;;-1:-1:-1;3711:615:1;;-1:-1:-1;;;;3711:615:1:o;4331:1201::-;4451:6;4482:2;4525;4513:9;4504:7;4500:23;4496:32;4493:52;;;4541:1;4538;4531:12;4493:52;4581:9;4568:23;-1:-1:-1;;;;;4606:6:1;4603:30;4600:50;;;4646:1;4643;4636:12;4600:50;4669:22;;4722:4;4714:13;;4710:27;-1:-1:-1;4700:55:1;;4751:1;4748;4741:12;4700:55;4787:2;4774:16;4810:60;4826:43;4866:2;4826:43;:::i;4810:60::-;4892:3;4916:2;4911:3;4904:15;4944:2;4939:3;4935:12;4928:19;;4975:2;4971;4967:11;5023:7;5018:2;5012;5009:1;5005:10;5001:2;4997:19;4993:28;4990:41;4987:61;;;5044:1;5041;5034:12;4987:61;5066:1;5057:10;;5087:1;5097:405;5113:2;5108:3;5105:11;5097:405;;;5172:4;5215:2;5209:3;5200:7;5196:17;5192:26;5189:46;;;5231:1;5228;5221:12;5189:46;5261:22;;:::i;:::-;5310:23;5329:3;5310:23;:::i;:::-;5296:38;;5383:12;;;5370:26;5354:14;;;5347:50;5410:18;;5448:12;;;;5480;;;;5135:1;5126:11;5097:405;;;-1:-1:-1;5521:5:1;;4331:1201;-1:-1:-1;;;;;;;;4331:1201:1:o;5537:892::-;5632:6;5663:2;5706;5694:9;5685:7;5681:23;5677:32;5674:52;;;5722:1;5719;5712:12;5674:52;5755:9;5749:16;-1:-1:-1;;;;;5780:6:1;5777:30;5774:50;;;5820:1;5817;5810:12;5774:50;5843:22;;5896:4;5888:13;;5884:27;-1:-1:-1;5874:55:1;;5925:1;5922;5915:12;5874:55;5954:2;5948:9;5977:60;5993:43;6033:2;5993:43;:::i;5977:60::-;6059:3;6083:2;6078:3;6071:15;6111:2;6106:3;6102:12;6095:19;;6142:2;6138;6134:11;6190:7;6185:2;6179;6176:1;6172:10;6168:2;6164:19;6160:28;6157:41;6154:61;;;6211:1;6208;6201:12;6154:61;6233:1;6224:10;;6243:156;6257:2;6254:1;6251:9;6243:156;;;6314:10;;6302:23;;6275:1;6268:9;;;;;6345:12;;;;6377;;6243:156;;6434:978;6527:6;6535;6588:2;6576:9;6567:7;6563:23;6559:32;6556:52;;;6604:1;6601;6594:12;6556:52;6644:9;6631:23;-1:-1:-1;;;;;6669:6:1;6666:30;6663:50;;;6709:1;6706;6699:12;6663:50;6732:22;;6785:4;6777:13;;6773:27;-1:-1:-1;6763:55:1;;6814:1;6811;6804:12;6763:55;6850:2;6837:16;6872:4;6896:60;6912:43;6952:2;6912:43;:::i;6896:60::-;6978:3;7002:2;6997:3;6990:15;7030:2;7025:3;7021:12;7014:19;;7061:2;7057;7053:11;7109:7;7104:2;7098;7095:1;7091:10;7087:2;7083:19;7079:28;7076:41;7073:61;;;7130:1;7127;7120:12;7073:61;7152:1;7143:10;;7162:163;7176:2;7173:1;7170:9;7162:163;;;7233:17;;7221:30;;7194:1;7187:9;;;;;7271:12;;;;7303;;7162:163;;;-1:-1:-1;7344:5:1;-1:-1:-1;7368:38:1;;-1:-1:-1;7387:18:1;;;7368:38;:::i;:::-;7358:48;;;;;6434:978;;;;;:::o;7417:245::-;7484:6;7537:2;7525:9;7516:7;7512:23;7508:32;7505:52;;;7553:1;7550;7543:12;7505:52;7585:9;7579:16;7604:28;7626:5;7604:28;:::i;7667:377::-;7741:6;7749;7757;7810:2;7798:9;7789:7;7785:23;7781:32;7778:52;;;7826:1;7823;7816:12;7778:52;7865:9;7852:23;7884:28;7906:5;7884:28;:::i;:::-;7931:5;7983:2;7968:18;;7955:32;;-1:-1:-1;8034:2:1;8019:18;;;8006:32;;7667:377;-1:-1:-1;;;7667:377:1:o;8049:245::-;8107:6;8160:2;8148:9;8139:7;8135:23;8131:32;8128:52;;;8176:1;8173;8166:12;8128:52;8215:9;8202:23;8234:30;8258:5;8234:30;:::i;8299:249::-;8368:6;8421:2;8409:9;8400:7;8396:23;8392:32;8389:52;;;8437:1;8434;8427:12;8389:52;8469:9;8463:16;8488:30;8512:5;8488:30;:::i;8553:635::-;8633:6;8686:2;8674:9;8665:7;8661:23;8657:32;8654:52;;;8702:1;8699;8692:12;8654:52;8735:9;8729:16;-1:-1:-1;;;;;8760:6:1;8757:30;8754:50;;;8800:1;8797;8790:12;8754:50;8823:22;;8876:4;8868:13;;8864:27;-1:-1:-1;8854:55:1;;8905:1;8902;8895:12;8854:55;8934:2;8928:9;8959:48;8975:31;9003:2;8975:31;:::i;8959:48::-;9030:2;9023:5;9016:17;9070:7;9065:2;9060;9056;9052:11;9048:20;9045:33;9042:53;;;9091:1;9088;9081:12;9042:53;9104:54;9155:2;9150;9143:5;9139:14;9134:2;9130;9126:11;9104:54;:::i;:::-;9177:5;8553:635;-1:-1:-1;;;;;8553:635:1:o;9193:180::-;9252:6;9305:2;9293:9;9284:7;9280:23;9276:32;9273:52;;;9321:1;9318;9311:12;9273:52;-1:-1:-1;9344:23:1;;9193:180;-1:-1:-1;9193:180:1:o;9378:184::-;9448:6;9501:2;9489:9;9480:7;9476:23;9472:32;9469:52;;;9517:1;9514;9507:12;9469:52;-1:-1:-1;9540:16:1;;9378:184;-1:-1:-1;9378:184:1:o;9567:254::-;9635:6;9643;9696:2;9684:9;9675:7;9671:23;9667:32;9664:52;;;9712:1;9709;9702:12;9664:52;9748:9;9735:23;9725:33;;9777:38;9811:2;9800:9;9796:18;9777:38;:::i;9826:458::-;9913:6;9921;9929;9982:2;9970:9;9961:7;9957:23;9953:32;9950:52;;;9998:1;9995;9988:12;9950:52;10034:9;10021:23;10011:33;;10095:2;10084:9;10080:18;10067:32;-1:-1:-1;;;;;10114:6:1;10111:30;10108:50;;;10154:1;10151;10144:12;10108:50;10177;10219:7;10210:6;10199:9;10195:22;10177:50;:::i;:::-;10167:60;;;10274:2;10263:9;10259:18;10246:32;10236:42;;9826:458;;;;;:::o;10289:860::-;10394:6;10402;10410;10418;10426;10434;10487:3;10475:9;10466:7;10462:23;10458:33;10455:53;;;10504:1;10501;10494:12;10455:53;10540:9;10527:23;10517:33;;10597:2;10586:9;10582:18;10569:32;10559:42;;10651:2;10640:9;10636:18;10623:32;10664:28;10686:5;10664:28;:::i;:::-;10711:5;-1:-1:-1;10768:2:1;10753:18;;10740:32;10781:30;10740:32;10781:30;:::i;:::-;10830:7;-1:-1:-1;10889:3:1;10874:19;;10861:33;10903:30;10861:33;10903:30;:::i;:::-;10952:7;-1:-1:-1;11010:3:1;10995:19;;10982:33;-1:-1:-1;;;;;11027:30:1;;11024:50;;;11070:1;11067;11060:12;11024:50;11093;11135:7;11126:6;11115:9;11111:22;11093:50;:::i;:::-;11083:60;;;10289:860;;;;;;;;:::o;11154:257::-;11195:3;11233:5;11227:12;11260:6;11255:3;11248:19;11276:63;11332:6;11325:4;11320:3;11316:14;11309:4;11302:5;11298:16;11276:63;:::i;:::-;11393:2;11372:15;-1:-1:-1;;11368:29:1;11359:39;;;;11400:4;11355:50;;11154:257;-1:-1:-1;;11154:257:1:o;11542:909::-;-1:-1:-1;;;12049:3:1;12042:22;12024:3;12093:6;12087:13;12109:61;12163:6;12159:1;12154:3;12150:11;12143:4;12135:6;12131:17;12109:61;:::i;:::-;-1:-1:-1;;;12229:1:1;12189:16;;;12221:10;;;12214:23;12262:13;;12284:62;12262:13;12333:1;12325:10;;12318:4;12306:17;;12284:62;:::i;:::-;-1:-1:-1;;;12406:1:1;12365:17;;;;12398:10;;;12391:27;12442:2;12434:11;;11542:909;-1:-1:-1;;;;11542:909:1:o;12456:1414::-;-1:-1:-1;;;12811:3:1;12804:22;12786:3;12845:1;12866;12899:6;12893:13;12929:3;12951:1;12979:9;12975:2;12971:18;12961:28;;13039:2;13028:9;13024:18;13061;13051:61;;13105:4;13097:6;13093:17;13083:27;;13051:61;13131:2;13179;13171:6;13168:14;13148:18;13145:38;13142:165;;;-1:-1:-1;;;13206:33:1;;13262:4;13259:1;13252:15;13292:4;13213:3;13280:17;13142:165;13323:18;13350:122;;;;13486:1;13481:338;;;;13316:503;;13350:122;-1:-1:-1;;13392:24:1;;13378:12;;;13371:46;13441:16;;;13437:25;;;-1:-1:-1;13350:122:1;;13481:338;32130:1;32123:14;;;32167:4;32154:18;;13576:1;13590:174;13604:6;13601:1;13598:13;13590:174;;;13691:14;;13673:11;;;13669:20;;13662:44;13734:16;;;;13619:10;;13590:174;;;13594:3;;13806:2;13797:6;13792:3;13788:16;13784:25;13777:32;;13316:503;;;;;;;13835:29;13860:3;-1:-1:-1;;;11476:27:1;;11528:2;11519:12;;11416:121;14293:488;-1:-1:-1;;;;;14562:15:1;;;14544:34;;14614:15;;14609:2;14594:18;;14587:43;14661:2;14646:18;;14639:34;;;14709:3;14704:2;14689:18;;14682:31;;;14487:4;;14730:45;;14755:19;;14747:6;14730:45;:::i;:::-;14722:53;14293:488;-1:-1:-1;;;;;;14293:488:1:o;14786:656::-;-1:-1:-1;;;;;15031:32:1;;15013:51;;15095:2;15080:18;;15073:34;;;15143:2;15138;15123:18;;15116:30;;;15162:18;;15155:34;;;-1:-1:-1;;;;;;15201:31:1;;15198:51;;;15245:1;15242;15235:12;15198:51;15279:6;15276:1;15272:14;15337:6;15329;15323:3;15312:9;15308:19;15295:49;15415:1;15367:22;;15391:3;15363:32;15404:13;;;-1:-1:-1;15363:32:1;14786:656;-1:-1:-1;;;;14786:656:1:o;15447:836::-;15690:2;15742:21;;;15812:13;;15715:18;;;15834:22;;;15661:4;;15690:2;15875;;15893:18;;;;15934:15;;;15661:4;15977:280;15991:6;15988:1;15985:13;15977:280;;;16050:13;;16092:9;;-1:-1:-1;;;;;16088:35:1;16076:48;;16164:11;;16158:18;16144:12;;;16137:40;16197:12;;;;16232:15;;;;16120:1;16006:9;15977:280;;;-1:-1:-1;16274:3:1;;15447:836;-1:-1:-1;;;;;;;15447:836:1:o;16288:632::-;16459:2;16511:21;;;16581:13;;16484:18;;;16603:22;;;16430:4;;16459:2;16682:15;;;;16656:2;16641:18;;;16430:4;16725:169;16739:6;16736:1;16733:13;16725:169;;;16800:13;;16788:26;;16869:15;;;;16834:12;;;;16761:1;16754:9;16725:169;;;-1:-1:-1;16911:3:1;;16288:632;-1:-1:-1;;;;;;16288:632:1:o;17343:219::-;17492:2;17481:9;17474:21;17455:4;17512:44;17552:2;17541:9;17537:18;17529:6;17512:44;:::i;17567:290::-;17744:2;17733:9;17726:21;17707:4;17764:44;17804:2;17793:9;17789:18;17781:6;17764:44;:::i;:::-;17756:52;;17844:6;17839:2;17828:9;17824:18;17817:34;17567:290;;;;;:::o;18277:414::-;18479:2;18461:21;;;18518:2;18498:18;;;18491:30;18557:34;18552:2;18537:18;;18530:62;-1:-1:-1;;;18623:2:1;18608:18;;18601:48;18681:3;18666:19;;18277:414::o;24539:356::-;24741:2;24723:21;;;24760:18;;;24753:30;24819:34;24814:2;24799:18;;24792:62;24886:2;24871:18;;24539:356::o;27253:413::-;27455:2;27437:21;;;27494:2;27474:18;;;27467:30;27533:34;27528:2;27513:18;;27506:62;-1:-1:-1;;;27599:2:1;27584:18;;27577:47;27656:3;27641:19;;27253:413::o;29263:414::-;29465:2;29447:21;;;29504:2;29484:18;;;29477:30;29543:34;29538:2;29523:18;;29516:62;-1:-1:-1;;;29609:2:1;29594:18;;29587:48;29667:3;29652:19;;29263:414::o;30127:608::-;30398:6;30387:9;30380:25;30441:6;30436:2;30425:9;30421:18;30414:34;30498:6;30491:14;30484:22;30479:2;30468:9;30464:18;30457:50;30557:6;30550:14;30543:22;30538:2;30527:9;30523:18;30516:50;30617:6;30610:14;30603:22;30597:3;30586:9;30582:19;30575:51;30663:3;30657;30646:9;30642:19;30635:32;30361:4;30684:45;30724:3;30713:9;30709:19;30701:6;30684:45;:::i;:::-;30676:53;30127:608;-1:-1:-1;;;;;;;;30127:608:1:o;31136:257::-;31208:4;31202:11;;;31240:17;;-1:-1:-1;;;;;31272:34:1;;31308:22;;;31269:62;31266:88;;;31334:18;;:::i;:::-;31370:4;31363:24;31136:257;:::o;31398:275::-;31469:2;31463:9;31534:2;31515:13;;-1:-1:-1;;31511:27:1;31499:40;;-1:-1:-1;;;;;31554:34:1;;31590:22;;;31551:62;31548:88;;;31616:18;;:::i;:::-;31652:2;31645:22;31398:275;;-1:-1:-1;31398:275:1:o;31678:183::-;31738:4;-1:-1:-1;;;;;31763:6:1;31760:30;31757:56;;;31793:18;;:::i;:::-;-1:-1:-1;31838:1:1;31834:14;31850:4;31830:25;;31678:183::o;31866:186::-;31914:4;-1:-1:-1;;;;;31939:6:1;31936:30;31933:56;;;31969:18;;:::i;:::-;-1:-1:-1;32035:2:1;32014:15;-1:-1:-1;;32010:29:1;32041:4;32006:40;;31866:186::o;32183:128::-;32223:3;32254:1;32250:6;32247:1;32244:13;32241:39;;;32260:18;;:::i;:::-;-1:-1:-1;32296:9:1;;32183:128::o;32316:120::-;32356:1;32382;32372:35;;32387:18;;:::i;:::-;-1:-1:-1;32421:9:1;;32316:120::o;32441:168::-;32481:7;32547:1;32543;32539:6;32535:14;32532:1;32529:21;32524:1;32517:9;32510:17;32506:45;32503:71;;;32554:18;;:::i;:::-;-1:-1:-1;32594:9:1;;32441:168::o;32614:125::-;32654:4;32682:1;32679;32676:8;32673:34;;;32687:18;;:::i;:::-;-1:-1:-1;32724:9:1;;32614:125::o;32744:258::-;32816:1;32826:113;32840:6;32837:1;32834:13;32826:113;;;32916:11;;;32910:18;32897:11;;;32890:39;32862:2;32855:10;32826:113;;;32957:6;32954:1;32951:13;32948:48;;;-1:-1:-1;;32992:1:1;32974:16;;32967:27;32744:258::o;33007:380::-;33086:1;33082:12;;;;33129;;;33150:61;;33204:4;33196:6;33192:17;33182:27;;33150:61;33257:2;33249:6;33246:14;33226:18;33223:38;33220:161;;;33303:10;33298:3;33294:20;33291:1;33284:31;33338:4;33335:1;33328:15;33366:4;33363:1;33356:15;33392:135;33431:3;-1:-1:-1;;33452:17:1;;33449:43;;;33472:18;;:::i;:::-;-1:-1:-1;33519:1:1;33508:13;;33392:135::o;33532:112::-;33564:1;33590;33580:35;;33595:18;;:::i;:::-;-1:-1:-1;33629:9:1;;33532:112::o;33649:127::-;33710:10;33705:3;33701:20;33698:1;33691:31;33741:4;33738:1;33731:15;33765:4;33762:1;33755:15;33781:127;33842:10;33837:3;33833:20;33830:1;33823:31;33873:4;33870:1;33863:15;33897:4;33894:1;33887:15;33913:127;33974:10;33969:3;33965:20;33962:1;33955:31;34005:4;34002:1;33995:15;34029:4;34026:1;34019:15;34045:127;34106:10;34101:3;34097:20;34094:1;34087:31;34137:4;34134:1;34127:15;34161:4;34158:1;34151:15;34177:118;34263:5;34256:13;34249:21;34242:5;34239:32;34229:60;;34285:1;34282;34275:12;34300:131;-1:-1:-1;;;;;;34374:32:1;;34364:43;;34354:71;;34421:1;34418;34411:12
Swarm Source
ipfs://45f0724c9bdea5134533408672440700d3e49d8712d3a29bde3f5c6ef92bd743
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.