Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
6,355 EBSS
Holders
231
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 EBSSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EternalBrawlSummoningStoneNFT
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ERC721.sol"; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; contract EternalBrawlSummoningStoneNFT is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost; uint256 public maxSupply; uint256 public timeDeployed; uint256 public allowMintingAfter = 0; bool public isPaused = false; bool public isRevealed = true; address public official; string public notRevealedUri; event Sale(address from, address to, uint256 value); struct Item { uint256 id; address creator; uint256 memberId; uint256 price; uint256 createTime; } mapping(uint256 => Item) public Items; constructor( uint256 _cost, uint256 _maxSupply, string memory _initBaseURI, address _official, string memory _initNotRevealedUri ) ERC721('Eternal Brawl Summoning Stone','EBSS') { cost = _cost*(10 ** 16); maxSupply = _maxSupply; timeDeployed = block.timestamp; official = _official; setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mint(uint256 _mintAmount,uint256 _memberId) public payable { require( block.timestamp >= timeDeployed + allowMintingAfter, "Minting has not been allowed yet" ); uint256 supply = totalSupply(); require(!isPaused); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } _payRoyality(cost * _mintAmount); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); uint256 newItemId=supply + i; Items[newItemId] = Item({ id: newItemId, creator: msg.sender, memberId:_memberId, price:cost, createTime:block.timestamp }); } } function changeMemberId(uint256 id,uint256 _memberId) public{ require(Items[id].id == id, "Could not find NFT"); require(msg.sender == ownerOf(id),"You're not the owner!"); Items[id].creator=msg.sender; Items[id].memberId=_memberId; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (isRevealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } function _payRoyality(uint256 _royalityFee) internal { (bool success1, ) = payable(official).call{value: _royalityFee}(""); require(success1); } // Only Owner Functions function setIsRevealed(bool _state) public onlyOwner { isRevealed = _state; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost*(10 ** 16); } function setMaxSupply(uint256 _newMaxSupply) public onlyOwner { maxSupply = _newMaxSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setOfficial(address _newOfficial) public onlyOwner { official = _newOfficial; } function setIsPaused(bool _state) public onlyOwner { isPaused = _state; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; // import "./IERC721.sol"; // import "./IERC721Receiver.sol"; // import "./extensions/IERC721Metadata.sol"; // import "../../utils/Address.sol"; // import "../../utils/Context.sol"; // import "../../utils/Strings.sol"; // import "../../utils/introspection/ERC165.sol"; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ 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 payable 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 payable virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable 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); } /** * @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); } /** * @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 of token that is not own" ); 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); } /** * @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 {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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 payable; /** * @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 payable; /** * @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 payable; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // 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); }
// SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; contract Migrations { address public owner = msg.sender; uint256 public last_completed_migration; modifier restricted() { require( msg.sender == owner, "This function is restricted to the contract's owner" ); _; } function setCompleted(uint256 completed) public restricted { last_completed_migration = completed; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./Context.sol"; 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT // 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_official","type":"address"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Sale","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":"uint256","name":"","type":"uint256"}],"name":"Items","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"memberId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"createTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowMintingAfter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"_memberId","type":"uint256"}],"name":"changeMemberId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","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":"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":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"uint256","name":"_memberId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"official","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOfficial","type":"address"}],"name":"setOfficial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeDeployed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000430565b5060006010556000601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055503480156200009a57600080fd5b506040516200522b3803806200522b8339818101604052810190620000c0919062000580565b6040518060400160405280601d81526020017f457465726e616c20427261776c2053756d6d6f6e696e672053746f6e650000008152506040518060400160405280600481526020017f454253530000000000000000000000000000000000000000000000000000000081525081600090805190602001906200014492919062000430565b5080600190805190602001906200015d92919062000430565b505050600062000172620002a860201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350662386f26fc100008562000226919062000710565b600d8190555083600e8190555042600f8190555081601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028c83620002b060201b60201c565b6200029d816200035b60201b60201c565b5050505050620008dc565b600033905090565b620002c0620002a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e66200040660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200033f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003369062000676565b60405180910390fd5b80600b90805190602001906200035792919062000430565b5050565b6200036b620002a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003916200040660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003e19062000676565b60405180910390fd5b80601290805190602001906200040292919062000430565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200043e90620007e5565b90600052602060002090601f016020900481019282620004625760008555620004ae565b82601f106200047d57805160ff1916838001178555620004ae565b82800160010185558215620004ae579182015b82811115620004ad57825182559160200191906001019062000490565b5b509050620004bd9190620004c1565b5090565b5b80821115620004dc576000816000905550600101620004c2565b5090565b6000620004f7620004f184620006cc565b62000698565b9050828152602081018484840111156200051057600080fd5b6200051d848285620007af565b509392505050565b6000815190506200053681620008a8565b92915050565b600082601f8301126200054e57600080fd5b815162000560848260208601620004e0565b91505092915050565b6000815190506200057a81620008c2565b92915050565b600080600080600060a086880312156200059957600080fd5b6000620005a98882890162000569565b9550506020620005bc8882890162000569565b945050604086015167ffffffffffffffff811115620005da57600080fd5b620005e8888289016200053c565b9350506060620005fb8882890162000525565b925050608086015167ffffffffffffffff8111156200061957600080fd5b62000627888289016200053c565b9150509295509295909350565b600062000643602083620006ff565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620006918162000634565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620006c257620006c162000879565b5b8060405250919050565b600067ffffffffffffffff821115620006ea57620006e962000879565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60006200071d82620007a5565b91506200072a83620007a5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200076657620007656200081b565b5b828202905092915050565b60006200077e8262000785565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620007cf578082015181840152602081019050620007b2565b83811115620007df576000848401525b50505050565b60006002820490506001821680620007fe57607f821691505b602082108114156200081557620008146200084a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620008b38162000771565b8114620008bf57600080fd5b50565b620008cd81620007a5565b8114620008d957600080fd5b50565b61493f80620008ec6000396000f3fe6080604052600436106102305760003560e01c806355f804b31161012e578063a471da26116100ab578063c87b56dd1161006f578063c87b56dd1461081d578063d5abeb011461085a578063e985e9c514610885578063f2c4ce1e146108c2578063f2fde38b146108eb57610230565b8063a471da2614610759578063adb1298c14610782578063b187bd26146107ab578063b88d4fde146107d6578063c6682862146107f257610230565b8063872bdcdb116100f2578063872bdcdb146106845780638da5cb5b146106af57806395d89b41146106da578063980389e014610705578063a22cb4651461073057610230565b806355f804b3146105a15780636352211e146105ca5780636f8b44b01461060757806370a0823114610630578063715018a61461066d57610230565b80631b2ef1ca116101bc578063438b630011610180578063438b6300146104aa57806344a0d68a146104e757806349a5980a146105105780634f6ccce71461053957806354214f691461057657610230565b80631b2ef1ca146103f057806323b872dd1461040c578063240976bf146104285780632f745c591461045157806342842e0e1461048e57610230565b8063095ea7b311610203578063095ea7b31461030557806313faede61461032e57806317b47cc41461035957806318160ddd1461039a57806319188c35146103c557610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063081c8c44146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906135e8565b610914565b60405161026991906140f1565b60405180910390f35b34801561027e57600080fd5b5061028761098e565b604051610294919061410c565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061367b565b610a20565b6040516102d19190614068565b60405180910390f35b3480156102e657600080fd5b506102ef610aa5565b6040516102fc919061410c565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613583565b610b33565b005b34801561033a57600080fd5b50610343610c4b565b60405161035091906143ce565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061367b565b610c51565b6040516103919594939291906143e9565b60405180910390f35b3480156103a657600080fd5b506103af610ca7565b6040516103bc91906143ce565b60405180910390f35b3480156103d157600080fd5b506103da610cb4565b6040516103e791906143ce565b60405180910390f35b61040a600480360381019061040591906136a4565b610cba565b005b6104266004803603810190610421919061347d565b610ed5565b005b34801561043457600080fd5b5061044f600480360381019061044a91906135bf565b610f35565b005b34801561045d57600080fd5b5061047860048036038101906104739190613583565b610fce565b60405161048591906143ce565b60405180910390f35b6104a860048036038101906104a3919061347d565b611073565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613418565b611093565b6040516104de91906140cf565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061367b565b61118d565b005b34801561051c57600080fd5b50610537600480360381019061053291906135bf565b611225565b005b34801561054557600080fd5b50610560600480360381019061055b919061367b565b6112be565b60405161056d91906143ce565b60405180910390f35b34801561058257600080fd5b5061058b611355565b60405161059891906140f1565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c3919061363a565b611368565b005b3480156105d657600080fd5b506105f160048036038101906105ec919061367b565b6113fe565b6040516105fe9190614068565b60405180910390f35b34801561061357600080fd5b5061062e6004803603810190610629919061367b565b6114b0565b005b34801561063c57600080fd5b5061065760048036038101906106529190613418565b611536565b60405161066491906143ce565b60405180910390f35b34801561067957600080fd5b506106826115ee565b005b34801561069057600080fd5b5061069961172b565b6040516106a691906143ce565b60405180910390f35b3480156106bb57600080fd5b506106c4611731565b6040516106d19190614068565b60405180910390f35b3480156106e657600080fd5b506106ef61175b565b6040516106fc919061410c565b60405180910390f35b34801561071157600080fd5b5061071a6117ed565b6040516107279190614068565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190613547565b611813565b005b34801561076557600080fd5b50610780600480360381019061077b91906136a4565b611829565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613418565b61196b565b005b3480156107b757600080fd5b506107c0611a2b565b6040516107cd91906140f1565b60405180910390f35b6107f060048036038101906107eb91906134cc565b611a3e565b005b3480156107fe57600080fd5b50610807611aa0565b604051610814919061410c565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f919061367b565b611b2e565b604051610851919061410c565b60405180910390f35b34801561086657600080fd5b5061086f611c87565b60405161087c91906143ce565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613441565b611c8d565b6040516108b991906140f1565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e4919061363a565b611d21565b005b3480156108f757600080fd5b50610912600480360381019061090d9190613418565b611db7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610987575061098682611f63565b5b9050919050565b60606000805461099d90614734565b80601f01602080910402602001604051908101604052809291908181526020018280546109c990614734565b8015610a165780601f106109eb57610100808354040283529160200191610a16565b820191906000526020600020905b8154815290600101906020018083116109f957829003601f168201915b5050505050905090565b6000610a2b82612045565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906142ce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610ab290614734565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90614734565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b505050505081565b6000610b3e826113fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba69061434e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bce6120b1565b73ffffffffffffffffffffffffffffffffffffffff161480610bfd5750610bfc81610bf76120b1565b611c8d565b5b610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c339061424e565b60405180910390fd5b610c4683836120b9565b505050565b600d5481565b60136020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154905085565b6000600880549050905090565b600f5481565b601054600f54610cca9190614569565b421015610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d03906143ae565b60405180910390fd5b6000610d16610ca7565b9050601160009054906101000a900460ff1615610d3257600080fd5b60008311610d3f57600080fd5b600e548382610d4e9190614569565b1115610d5957600080fd5b610d61611731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dae5782600d54610da191906145f0565b341015610dad57600080fd5b5b610dc483600d54610dbf91906145f0565b612172565b6000600190505b838111610ecf57610de7338284610de29190614569565b61220e565b60008183610df59190614569565b90506040518060a001604052808281526020013373ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600d54815260200142815250601360008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040155905050508080610ec790614766565b915050610dcb565b50505050565b610ee6610ee06120b1565b8261222c565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c9061436e565b60405180910390fd5b610f3083838361230a565b505050565b610f3d6120b1565b73ffffffffffffffffffffffffffffffffffffffff16610f5b611731565b73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa8906142ee565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000610fd983611536565b821061101a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110119061412e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61108e83838360405180602001604052806000815250611a3e565b505050565b606060006110a083611536565b905060008167ffffffffffffffff8111156110e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111125781602001602082028036833780820191505090505b50905060005b828110156111825761112a8582610fce565b828281518110611163577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061117a90614766565b915050611118565b508092505050919050565b6111956120b1565b73ffffffffffffffffffffffffffffffffffffffff166111b3611731565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906142ee565b60405180910390fd5b662386f26fc100008161121c91906145f0565b600d8190555050565b61122d6120b1565b73ffffffffffffffffffffffffffffffffffffffff1661124b611731565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906142ee565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60006112c8610ca7565b8210611309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113009061438e565b60405180910390fd5b60088281548110611343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6113706120b1565b73ffffffffffffffffffffffffffffffffffffffff1661138e611731565b73ffffffffffffffffffffffffffffffffffffffff16146113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db906142ee565b60405180910390fd5b80600b90805190602001906113fa92919061323c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e9061428e565b60405180910390fd5b80915050919050565b6114b86120b1565b73ffffffffffffffffffffffffffffffffffffffff166114d6611731565b73ffffffffffffffffffffffffffffffffffffffff161461152c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611523906142ee565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e9061426e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f66120b1565b73ffffffffffffffffffffffffffffffffffffffff16611614611731565b73ffffffffffffffffffffffffffffffffffffffff161461166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906142ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461176a90614734565b80601f016020809104026020016040519081016040528092919081815260200182805461179690614734565b80156117e35780601f106117b8576101008083540402835291602001916117e3565b820191906000526020600020905b8154815290600101906020018083116117c657829003601f168201915b5050505050905090565b601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61182561181e6120b1565b8383612566565b5050565b81601360008481526020019081526020016000206000015414611881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611878906141ce565b60405180910390fd5b61188a826113fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee9061418e565b60405180910390fd5b336013600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060136000848152602001908152602001600020600201819055505050565b6119736120b1565b73ffffffffffffffffffffffffffffffffffffffff16611991611731565b73ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906142ee565b60405180910390fd5b80601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900460ff1681565b611a4f611a496120b1565b8361222c565b611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a859061436e565b60405180910390fd5b611a9a848484846126d3565b50505050565b600c8054611aad90614734565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad990614734565b8015611b265780601f10611afb57610100808354040283529160200191611b26565b820191906000526020600020905b815481529060010190602001808311611b0957829003601f168201915b505050505081565b6060611b3982612045565b611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f9061432e565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611c265760128054611ba190614734565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90614734565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b50505050509050611c82565b6000611c3061272f565b90506000815111611c505760405180602001604052806000815250611c7e565b80611c5a846127c1565b600c604051602001611c6e93929190614022565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d296120b1565b73ffffffffffffffffffffffffffffffffffffffff16611d47611731565b73ffffffffffffffffffffffffffffffffffffffff1614611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d94906142ee565b60405180910390fd5b8060129080519060200190611db392919061323c565b5050565b611dbf6120b1565b73ffffffffffffffffffffffffffffffffffffffff16611ddd611731565b73ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a906142ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a9061416e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061202e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061203e575061203d8261296e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661212c836113fe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516121ba90614053565b60006040518083038185875af1925050503d80600081146121f7576040519150601f19603f3d011682016040523d82523d6000602084013e6121fc565b606091505b505090508061220a57600080fd5b5050565b6122288282604051806020016040528060008152506129d8565b5050565b600061223782612045565b612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d9061422e565b60405180910390fd5b6000612281836113fe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122f057508373ffffffffffffffffffffffffffffffffffffffff166122d884610a20565b73ffffffffffffffffffffffffffffffffffffffff16145b8061230157506123008185611c8d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661232a826113fe565b73ffffffffffffffffffffffffffffffffffffffff1614612380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123779061430e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e7906141ee565b60405180910390fd5b6123fb838383612a33565b6124066000826120b9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612456919061464a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ad9190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc9061420e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126c691906140f1565b60405180910390a3505050565b6126de84848461230a565b6126ea84848484612b47565b612729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127209061414e565b60405180910390fd5b50505050565b6060600b805461273e90614734565b80601f016020809104026020016040519081016040528092919081815260200182805461276a90614734565b80156127b75780601f1061278c576101008083540402835291602001916127b7565b820191906000526020600020905b81548152906001019060200180831161279a57829003601f168201915b5050505050905090565b60606000821415612809576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612969565b600082905060005b6000821461283b57808061282490614766565b915050600a8261283491906145bf565b9150612811565b60008167ffffffffffffffff81111561287d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128af5781602001600182028036833780820191505090505b5090505b60008514612962576001826128c8919061464a565b9150600a856128d791906147af565b60306128e39190614569565b60f81b81838151811061291f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561295b91906145bf565b94506128b3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129e28383612cde565b6129ef6000848484612b47565b612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a259061414e565b60405180910390fd5b505050565b612a3e838383612eac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8157612a7c81612eb1565b612ac0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612abf57612abe8382612efa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0357612afe81613067565b612b42565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b4157612b4082826131aa565b5b5b505050565b6000612b688473ffffffffffffffffffffffffffffffffffffffff16613229565b15612cd1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b916120b1565b8786866040518563ffffffff1660e01b8152600401612bb39493929190614083565b602060405180830381600087803b158015612bcd57600080fd5b505af1925050508015612bfe57506040513d601f19601f82011682018060405250810190612bfb9190613611565b60015b612c81573d8060008114612c2e576040519150601f19603f3d011682016040523d82523d6000602084013e612c33565b606091505b50600081511415612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c709061414e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cd6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d45906142ae565b60405180910390fd5b612d5781612045565b15612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e906141ae565b60405180910390fd5b612da360008383612a33565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df39190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f0784611536565b612f11919061464a565b9050600060076000848152602001908152602001600020549050818114612ff6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061307b919061464a565b90506000600960008481526020019081526020016000205490506000600883815481106130d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613119577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061318e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006131b583611536565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461324890614734565b90600052602060002090601f01602090048101928261326a57600085556132b1565b82601f1061328357805160ff19168380011785556132b1565b828001600101855582156132b1579182015b828111156132b0578251825591602001919060010190613295565b5b5090506132be91906132c2565b5090565b5b808211156132db5760008160009055506001016132c3565b5090565b60006132f26132ed8461446d565b61443c565b90508281526020810184848401111561330a57600080fd5b6133158482856146f2565b509392505050565b600061333061332b8461449d565b61443c565b90508281526020810184848401111561334857600080fd5b6133538482856146f2565b509392505050565b60008135905061336a816148ad565b92915050565b60008135905061337f816148c4565b92915050565b600081359050613394816148db565b92915050565b6000815190506133a9816148db565b92915050565b600082601f8301126133c057600080fd5b81356133d08482602086016132df565b91505092915050565b600082601f8301126133ea57600080fd5b81356133fa84826020860161331d565b91505092915050565b600081359050613412816148f2565b92915050565b60006020828403121561342a57600080fd5b60006134388482850161335b565b91505092915050565b6000806040838503121561345457600080fd5b60006134628582860161335b565b92505060206134738582860161335b565b9150509250929050565b60008060006060848603121561349257600080fd5b60006134a08682870161335b565b93505060206134b18682870161335b565b92505060406134c286828701613403565b9150509250925092565b600080600080608085870312156134e257600080fd5b60006134f08782880161335b565b94505060206135018782880161335b565b935050604061351287828801613403565b925050606085013567ffffffffffffffff81111561352f57600080fd5b61353b878288016133af565b91505092959194509250565b6000806040838503121561355a57600080fd5b60006135688582860161335b565b925050602061357985828601613370565b9150509250929050565b6000806040838503121561359657600080fd5b60006135a48582860161335b565b92505060206135b585828601613403565b9150509250929050565b6000602082840312156135d157600080fd5b60006135df84828501613370565b91505092915050565b6000602082840312156135fa57600080fd5b600061360884828501613385565b91505092915050565b60006020828403121561362357600080fd5b60006136318482850161339a565b91505092915050565b60006020828403121561364c57600080fd5b600082013567ffffffffffffffff81111561366657600080fd5b613672848285016133d9565b91505092915050565b60006020828403121561368d57600080fd5b600061369b84828501613403565b91505092915050565b600080604083850312156136b757600080fd5b60006136c585828601613403565b92505060206136d685828601613403565b9150509250929050565b60006136ec8383614004565b60208301905092915050565b6137018161467e565b82525050565b6000613712826144f2565b61371c8185614520565b9350613727836144cd565b8060005b8381101561375857815161373f88826136e0565b975061374a83614513565b92505060018101905061372b565b5085935050505092915050565b61376e81614690565b82525050565b600061377f826144fd565b6137898185614531565b9350613799818560208601614701565b6137a28161489c565b840191505092915050565b60006137b882614508565b6137c2818561454d565b93506137d2818560208601614701565b6137db8161489c565b840191505092915050565b60006137f182614508565b6137fb818561455e565b935061380b818560208601614701565b80840191505092915050565b6000815461382481614734565b61382e818661455e565b94506001821660008114613849576001811461385a5761388d565b60ff1983168652818601935061388d565b613863856144dd565b60005b8381101561388557815481890152600182019150602081019050613866565b838801955050505b50505092915050565b60006138a3602b8361454d565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061390960328361454d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061396f60268361454d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139d560158361454d565b91507f596f75277265206e6f7420746865206f776e65722100000000000000000000006000830152602082019050919050565b6000613a15601c8361454d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a5560128361454d565b91507f436f756c64206e6f742066696e64204e465400000000000000000000000000006000830152602082019050919050565b6000613a9560248361454d565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613afb60198361454d565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613b3b602c8361454d565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ba160388361454d565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613c07602a8361454d565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c6d60298361454d565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cd360208361454d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613d13602c8361454d565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613d7960208361454d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613db960298361454d565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e1f602f8361454d565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e8560218361454d565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eeb600083614542565b9150600082019050919050565b6000613f0560318361454d565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f6b602c8361454d565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613fd160208361454d565b91507f4d696e74696e6720686173206e6f74206265656e20616c6c6f776564207965746000830152602082019050919050565b61400d816146e8565b82525050565b61401c816146e8565b82525050565b600061402e82866137e6565b915061403a82856137e6565b91506140468284613817565b9150819050949350505050565b600061405e82613ede565b9150819050919050565b600060208201905061407d60008301846136f8565b92915050565b600060808201905061409860008301876136f8565b6140a560208301866136f8565b6140b26040830185614013565b81810360608301526140c48184613774565b905095945050505050565b600060208201905081810360008301526140e98184613707565b905092915050565b60006020820190506141066000830184613765565b92915050565b6000602082019050818103600083015261412681846137ad565b905092915050565b6000602082019050818103600083015261414781613896565b9050919050565b60006020820190508181036000830152614167816138fc565b9050919050565b6000602082019050818103600083015261418781613962565b9050919050565b600060208201905081810360008301526141a7816139c8565b9050919050565b600060208201905081810360008301526141c781613a08565b9050919050565b600060208201905081810360008301526141e781613a48565b9050919050565b6000602082019050818103600083015261420781613a88565b9050919050565b6000602082019050818103600083015261422781613aee565b9050919050565b6000602082019050818103600083015261424781613b2e565b9050919050565b6000602082019050818103600083015261426781613b94565b9050919050565b6000602082019050818103600083015261428781613bfa565b9050919050565b600060208201905081810360008301526142a781613c60565b9050919050565b600060208201905081810360008301526142c781613cc6565b9050919050565b600060208201905081810360008301526142e781613d06565b9050919050565b6000602082019050818103600083015261430781613d6c565b9050919050565b6000602082019050818103600083015261432781613dac565b9050919050565b6000602082019050818103600083015261434781613e12565b9050919050565b6000602082019050818103600083015261436781613e78565b9050919050565b6000602082019050818103600083015261438781613ef8565b9050919050565b600060208201905081810360008301526143a781613f5e565b9050919050565b600060208201905081810360008301526143c781613fc4565b9050919050565b60006020820190506143e36000830184614013565b92915050565b600060a0820190506143fe6000830188614013565b61440b60208301876136f8565b6144186040830186614013565b6144256060830185614013565b6144326080830184614013565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156144635761446261486d565b5b8060405250919050565b600067ffffffffffffffff8211156144885761448761486d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156144b8576144b761486d565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614574826146e8565b915061457f836146e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b4576145b36147e0565b5b828201905092915050565b60006145ca826146e8565b91506145d5836146e8565b9250826145e5576145e461480f565b5b828204905092915050565b60006145fb826146e8565b9150614606836146e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463f5761463e6147e0565b5b828202905092915050565b6000614655826146e8565b9150614660836146e8565b925082821015614673576146726147e0565b5b828203905092915050565b6000614689826146c8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561471f578082015181840152602081019050614704565b8381111561472e576000848401525b50505050565b6000600282049050600182168061474c57607f821691505b602082108114156147605761475f61483e565b5b50919050565b6000614771826146e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147a4576147a36147e0565b5b600182019050919050565b60006147ba826146e8565b91506147c5836146e8565b9250826147d5576147d461480f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6148b68161467e565b81146148c157600080fd5b50565b6148cd81614690565b81146148d857600080fd5b50565b6148e48161469c565b81146148ef57600080fd5b50565b6148fb816146e8565b811461490657600080fd5b5056fea26469706673582212202c12b685db561e5db7f29d1849fad76546fc83ca5e1cb650cf9f210ed1178a0364736f6c63430008000033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000004e2000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000eb46098c374b21a2a3252e75cef177b7838b47ce0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f657465726e616c627261776c2e6d7970696e6174612e636c6f75642f697066732f516d554b6f41566a4d3570615853476b706632365765725431586a6f4578756d715264527562646279676234624d2f0000000000000000000000000000000000000000000000000000000000000000000000000000006368747470733a2f2f657465726e616c627261776c2e6d7970696e6174612e636c6f75642f697066732f516d554b6f41566a4d3570615853476b706632365765725431586a6f4578756d715264527562646279676234624d2f68696464656e2e6a736f6e0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c806355f804b31161012e578063a471da26116100ab578063c87b56dd1161006f578063c87b56dd1461081d578063d5abeb011461085a578063e985e9c514610885578063f2c4ce1e146108c2578063f2fde38b146108eb57610230565b8063a471da2614610759578063adb1298c14610782578063b187bd26146107ab578063b88d4fde146107d6578063c6682862146107f257610230565b8063872bdcdb116100f2578063872bdcdb146106845780638da5cb5b146106af57806395d89b41146106da578063980389e014610705578063a22cb4651461073057610230565b806355f804b3146105a15780636352211e146105ca5780636f8b44b01461060757806370a0823114610630578063715018a61461066d57610230565b80631b2ef1ca116101bc578063438b630011610180578063438b6300146104aa57806344a0d68a146104e757806349a5980a146105105780634f6ccce71461053957806354214f691461057657610230565b80631b2ef1ca146103f057806323b872dd1461040c578063240976bf146104285780632f745c591461045157806342842e0e1461048e57610230565b8063095ea7b311610203578063095ea7b31461030557806313faede61461032e57806317b47cc41461035957806318160ddd1461039a57806319188c35146103c557610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063081c8c44146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906135e8565b610914565b60405161026991906140f1565b60405180910390f35b34801561027e57600080fd5b5061028761098e565b604051610294919061410c565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061367b565b610a20565b6040516102d19190614068565b60405180910390f35b3480156102e657600080fd5b506102ef610aa5565b6040516102fc919061410c565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613583565b610b33565b005b34801561033a57600080fd5b50610343610c4b565b60405161035091906143ce565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061367b565b610c51565b6040516103919594939291906143e9565b60405180910390f35b3480156103a657600080fd5b506103af610ca7565b6040516103bc91906143ce565b60405180910390f35b3480156103d157600080fd5b506103da610cb4565b6040516103e791906143ce565b60405180910390f35b61040a600480360381019061040591906136a4565b610cba565b005b6104266004803603810190610421919061347d565b610ed5565b005b34801561043457600080fd5b5061044f600480360381019061044a91906135bf565b610f35565b005b34801561045d57600080fd5b5061047860048036038101906104739190613583565b610fce565b60405161048591906143ce565b60405180910390f35b6104a860048036038101906104a3919061347d565b611073565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190613418565b611093565b6040516104de91906140cf565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061367b565b61118d565b005b34801561051c57600080fd5b50610537600480360381019061053291906135bf565b611225565b005b34801561054557600080fd5b50610560600480360381019061055b919061367b565b6112be565b60405161056d91906143ce565b60405180910390f35b34801561058257600080fd5b5061058b611355565b60405161059891906140f1565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c3919061363a565b611368565b005b3480156105d657600080fd5b506105f160048036038101906105ec919061367b565b6113fe565b6040516105fe9190614068565b60405180910390f35b34801561061357600080fd5b5061062e6004803603810190610629919061367b565b6114b0565b005b34801561063c57600080fd5b5061065760048036038101906106529190613418565b611536565b60405161066491906143ce565b60405180910390f35b34801561067957600080fd5b506106826115ee565b005b34801561069057600080fd5b5061069961172b565b6040516106a691906143ce565b60405180910390f35b3480156106bb57600080fd5b506106c4611731565b6040516106d19190614068565b60405180910390f35b3480156106e657600080fd5b506106ef61175b565b6040516106fc919061410c565b60405180910390f35b34801561071157600080fd5b5061071a6117ed565b6040516107279190614068565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190613547565b611813565b005b34801561076557600080fd5b50610780600480360381019061077b91906136a4565b611829565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613418565b61196b565b005b3480156107b757600080fd5b506107c0611a2b565b6040516107cd91906140f1565b60405180910390f35b6107f060048036038101906107eb91906134cc565b611a3e565b005b3480156107fe57600080fd5b50610807611aa0565b604051610814919061410c565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f919061367b565b611b2e565b604051610851919061410c565b60405180910390f35b34801561086657600080fd5b5061086f611c87565b60405161087c91906143ce565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613441565b611c8d565b6040516108b991906140f1565b60405180910390f35b3480156108ce57600080fd5b506108e960048036038101906108e4919061363a565b611d21565b005b3480156108f757600080fd5b50610912600480360381019061090d9190613418565b611db7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610987575061098682611f63565b5b9050919050565b60606000805461099d90614734565b80601f01602080910402602001604051908101604052809291908181526020018280546109c990614734565b8015610a165780601f106109eb57610100808354040283529160200191610a16565b820191906000526020600020905b8154815290600101906020018083116109f957829003601f168201915b5050505050905090565b6000610a2b82612045565b610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a61906142ce565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610ab290614734565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90614734565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b505050505081565b6000610b3e826113fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba69061434e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bce6120b1565b73ffffffffffffffffffffffffffffffffffffffff161480610bfd5750610bfc81610bf76120b1565b611c8d565b5b610c3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c339061424e565b60405180910390fd5b610c4683836120b9565b505050565b600d5481565b60136020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154905085565b6000600880549050905090565b600f5481565b601054600f54610cca9190614569565b421015610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d03906143ae565b60405180910390fd5b6000610d16610ca7565b9050601160009054906101000a900460ff1615610d3257600080fd5b60008311610d3f57600080fd5b600e548382610d4e9190614569565b1115610d5957600080fd5b610d61611731565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dae5782600d54610da191906145f0565b341015610dad57600080fd5b5b610dc483600d54610dbf91906145f0565b612172565b6000600190505b838111610ecf57610de7338284610de29190614569565b61220e565b60008183610df59190614569565b90506040518060a001604052808281526020013373ffffffffffffffffffffffffffffffffffffffff168152602001858152602001600d54815260200142815250601360008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040155905050508080610ec790614766565b915050610dcb565b50505050565b610ee6610ee06120b1565b8261222c565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c9061436e565b60405180910390fd5b610f3083838361230a565b505050565b610f3d6120b1565b73ffffffffffffffffffffffffffffffffffffffff16610f5b611731565b73ffffffffffffffffffffffffffffffffffffffff1614610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa8906142ee565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000610fd983611536565b821061101a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110119061412e565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61108e83838360405180602001604052806000815250611a3e565b505050565b606060006110a083611536565b905060008167ffffffffffffffff8111156110e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111125781602001602082028036833780820191505090505b50905060005b828110156111825761112a8582610fce565b828281518110611163577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061117a90614766565b915050611118565b508092505050919050565b6111956120b1565b73ffffffffffffffffffffffffffffffffffffffff166111b3611731565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611200906142ee565b60405180910390fd5b662386f26fc100008161121c91906145f0565b600d8190555050565b61122d6120b1565b73ffffffffffffffffffffffffffffffffffffffff1661124b611731565b73ffffffffffffffffffffffffffffffffffffffff16146112a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611298906142ee565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b60006112c8610ca7565b8210611309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113009061438e565b60405180910390fd5b60088281548110611343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b6113706120b1565b73ffffffffffffffffffffffffffffffffffffffff1661138e611731565b73ffffffffffffffffffffffffffffffffffffffff16146113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db906142ee565b60405180910390fd5b80600b90805190602001906113fa92919061323c565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e9061428e565b60405180910390fd5b80915050919050565b6114b86120b1565b73ffffffffffffffffffffffffffffffffffffffff166114d6611731565b73ffffffffffffffffffffffffffffffffffffffff161461152c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611523906142ee565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e9061426e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115f66120b1565b73ffffffffffffffffffffffffffffffffffffffff16611614611731565b73ffffffffffffffffffffffffffffffffffffffff161461166a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611661906142ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60105481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461176a90614734565b80601f016020809104026020016040519081016040528092919081815260200182805461179690614734565b80156117e35780601f106117b8576101008083540402835291602001916117e3565b820191906000526020600020905b8154815290600101906020018083116117c657829003601f168201915b5050505050905090565b601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61182561181e6120b1565b8383612566565b5050565b81601360008481526020019081526020016000206000015414611881576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611878906141ce565b60405180910390fd5b61188a826113fe565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee9061418e565b60405180910390fd5b336013600084815260200190815260200160002060010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060136000848152602001908152602001600020600201819055505050565b6119736120b1565b73ffffffffffffffffffffffffffffffffffffffff16611991611731565b73ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906142ee565b60405180910390fd5b80601160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160009054906101000a900460ff1681565b611a4f611a496120b1565b8361222c565b611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a859061436e565b60405180910390fd5b611a9a848484846126d3565b50505050565b600c8054611aad90614734565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad990614734565b8015611b265780601f10611afb57610100808354040283529160200191611b26565b820191906000526020600020905b815481529060010190602001808311611b0957829003601f168201915b505050505081565b6060611b3982612045565b611b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6f9061432e565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611c265760128054611ba190614734565b80601f0160208091040260200160405190810160405280929190818152602001828054611bcd90614734565b8015611c1a5780601f10611bef57610100808354040283529160200191611c1a565b820191906000526020600020905b815481529060010190602001808311611bfd57829003601f168201915b50505050509050611c82565b6000611c3061272f565b90506000815111611c505760405180602001604052806000815250611c7e565b80611c5a846127c1565b600c604051602001611c6e93929190614022565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d296120b1565b73ffffffffffffffffffffffffffffffffffffffff16611d47611731565b73ffffffffffffffffffffffffffffffffffffffff1614611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d94906142ee565b60405180910390fd5b8060129080519060200190611db392919061323c565b5050565b611dbf6120b1565b73ffffffffffffffffffffffffffffffffffffffff16611ddd611731565b73ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a906142ee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a9061416e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061202e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061203e575061203d8261296e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661212c836113fe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000601160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516121ba90614053565b60006040518083038185875af1925050503d80600081146121f7576040519150601f19603f3d011682016040523d82523d6000602084013e6121fc565b606091505b505090508061220a57600080fd5b5050565b6122288282604051806020016040528060008152506129d8565b5050565b600061223782612045565b612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d9061422e565b60405180910390fd5b6000612281836113fe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122f057508373ffffffffffffffffffffffffffffffffffffffff166122d884610a20565b73ffffffffffffffffffffffffffffffffffffffff16145b8061230157506123008185611c8d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661232a826113fe565b73ffffffffffffffffffffffffffffffffffffffff1614612380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123779061430e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e7906141ee565b60405180910390fd5b6123fb838383612a33565b6124066000826120b9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612456919061464a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ad9190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc9061420e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126c691906140f1565b60405180910390a3505050565b6126de84848461230a565b6126ea84848484612b47565b612729576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127209061414e565b60405180910390fd5b50505050565b6060600b805461273e90614734565b80601f016020809104026020016040519081016040528092919081815260200182805461276a90614734565b80156127b75780601f1061278c576101008083540402835291602001916127b7565b820191906000526020600020905b81548152906001019060200180831161279a57829003601f168201915b5050505050905090565b60606000821415612809576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612969565b600082905060005b6000821461283b57808061282490614766565b915050600a8261283491906145bf565b9150612811565b60008167ffffffffffffffff81111561287d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156128af5781602001600182028036833780820191505090505b5090505b60008514612962576001826128c8919061464a565b9150600a856128d791906147af565b60306128e39190614569565b60f81b81838151811061291f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561295b91906145bf565b94506128b3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6129e28383612cde565b6129ef6000848484612b47565b612a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a259061414e565b60405180910390fd5b505050565b612a3e838383612eac565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a8157612a7c81612eb1565b612ac0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612abf57612abe8382612efa565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b0357612afe81613067565b612b42565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b4157612b4082826131aa565b5b5b505050565b6000612b688473ffffffffffffffffffffffffffffffffffffffff16613229565b15612cd1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b916120b1565b8786866040518563ffffffff1660e01b8152600401612bb39493929190614083565b602060405180830381600087803b158015612bcd57600080fd5b505af1925050508015612bfe57506040513d601f19601f82011682018060405250810190612bfb9190613611565b60015b612c81573d8060008114612c2e576040519150601f19603f3d011682016040523d82523d6000602084013e612c33565b606091505b50600081511415612c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c709061414e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cd6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d45906142ae565b60405180910390fd5b612d5781612045565b15612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e906141ae565b60405180910390fd5b612da360008383612a33565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612df39190614569565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f0784611536565b612f11919061464a565b9050600060076000848152602001908152602001600020549050818114612ff6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061307b919061464a565b90506000600960008481526020019081526020016000205490506000600883815481106130d1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613119577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061318e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006131b583611536565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b82805461324890614734565b90600052602060002090601f01602090048101928261326a57600085556132b1565b82601f1061328357805160ff19168380011785556132b1565b828001600101855582156132b1579182015b828111156132b0578251825591602001919060010190613295565b5b5090506132be91906132c2565b5090565b5b808211156132db5760008160009055506001016132c3565b5090565b60006132f26132ed8461446d565b61443c565b90508281526020810184848401111561330a57600080fd5b6133158482856146f2565b509392505050565b600061333061332b8461449d565b61443c565b90508281526020810184848401111561334857600080fd5b6133538482856146f2565b509392505050565b60008135905061336a816148ad565b92915050565b60008135905061337f816148c4565b92915050565b600081359050613394816148db565b92915050565b6000815190506133a9816148db565b92915050565b600082601f8301126133c057600080fd5b81356133d08482602086016132df565b91505092915050565b600082601f8301126133ea57600080fd5b81356133fa84826020860161331d565b91505092915050565b600081359050613412816148f2565b92915050565b60006020828403121561342a57600080fd5b60006134388482850161335b565b91505092915050565b6000806040838503121561345457600080fd5b60006134628582860161335b565b92505060206134738582860161335b565b9150509250929050565b60008060006060848603121561349257600080fd5b60006134a08682870161335b565b93505060206134b18682870161335b565b92505060406134c286828701613403565b9150509250925092565b600080600080608085870312156134e257600080fd5b60006134f08782880161335b565b94505060206135018782880161335b565b935050604061351287828801613403565b925050606085013567ffffffffffffffff81111561352f57600080fd5b61353b878288016133af565b91505092959194509250565b6000806040838503121561355a57600080fd5b60006135688582860161335b565b925050602061357985828601613370565b9150509250929050565b6000806040838503121561359657600080fd5b60006135a48582860161335b565b92505060206135b585828601613403565b9150509250929050565b6000602082840312156135d157600080fd5b60006135df84828501613370565b91505092915050565b6000602082840312156135fa57600080fd5b600061360884828501613385565b91505092915050565b60006020828403121561362357600080fd5b60006136318482850161339a565b91505092915050565b60006020828403121561364c57600080fd5b600082013567ffffffffffffffff81111561366657600080fd5b613672848285016133d9565b91505092915050565b60006020828403121561368d57600080fd5b600061369b84828501613403565b91505092915050565b600080604083850312156136b757600080fd5b60006136c585828601613403565b92505060206136d685828601613403565b9150509250929050565b60006136ec8383614004565b60208301905092915050565b6137018161467e565b82525050565b6000613712826144f2565b61371c8185614520565b9350613727836144cd565b8060005b8381101561375857815161373f88826136e0565b975061374a83614513565b92505060018101905061372b565b5085935050505092915050565b61376e81614690565b82525050565b600061377f826144fd565b6137898185614531565b9350613799818560208601614701565b6137a28161489c565b840191505092915050565b60006137b882614508565b6137c2818561454d565b93506137d2818560208601614701565b6137db8161489c565b840191505092915050565b60006137f182614508565b6137fb818561455e565b935061380b818560208601614701565b80840191505092915050565b6000815461382481614734565b61382e818661455e565b94506001821660008114613849576001811461385a5761388d565b60ff1983168652818601935061388d565b613863856144dd565b60005b8381101561388557815481890152600182019150602081019050613866565b838801955050505b50505092915050565b60006138a3602b8361454d565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061390960328361454d565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061396f60268361454d565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139d560158361454d565b91507f596f75277265206e6f7420746865206f776e65722100000000000000000000006000830152602082019050919050565b6000613a15601c8361454d565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000613a5560128361454d565b91507f436f756c64206e6f742066696e64204e465400000000000000000000000000006000830152602082019050919050565b6000613a9560248361454d565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613afb60198361454d565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613b3b602c8361454d565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613ba160388361454d565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613c07602a8361454d565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c6d60298361454d565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cd360208361454d565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613d13602c8361454d565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613d7960208361454d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613db960298361454d565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e1f602f8361454d565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613e8560218361454d565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eeb600083614542565b9150600082019050919050565b6000613f0560318361454d565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613f6b602c8361454d565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613fd160208361454d565b91507f4d696e74696e6720686173206e6f74206265656e20616c6c6f776564207965746000830152602082019050919050565b61400d816146e8565b82525050565b61401c816146e8565b82525050565b600061402e82866137e6565b915061403a82856137e6565b91506140468284613817565b9150819050949350505050565b600061405e82613ede565b9150819050919050565b600060208201905061407d60008301846136f8565b92915050565b600060808201905061409860008301876136f8565b6140a560208301866136f8565b6140b26040830185614013565b81810360608301526140c48184613774565b905095945050505050565b600060208201905081810360008301526140e98184613707565b905092915050565b60006020820190506141066000830184613765565b92915050565b6000602082019050818103600083015261412681846137ad565b905092915050565b6000602082019050818103600083015261414781613896565b9050919050565b60006020820190508181036000830152614167816138fc565b9050919050565b6000602082019050818103600083015261418781613962565b9050919050565b600060208201905081810360008301526141a7816139c8565b9050919050565b600060208201905081810360008301526141c781613a08565b9050919050565b600060208201905081810360008301526141e781613a48565b9050919050565b6000602082019050818103600083015261420781613a88565b9050919050565b6000602082019050818103600083015261422781613aee565b9050919050565b6000602082019050818103600083015261424781613b2e565b9050919050565b6000602082019050818103600083015261426781613b94565b9050919050565b6000602082019050818103600083015261428781613bfa565b9050919050565b600060208201905081810360008301526142a781613c60565b9050919050565b600060208201905081810360008301526142c781613cc6565b9050919050565b600060208201905081810360008301526142e781613d06565b9050919050565b6000602082019050818103600083015261430781613d6c565b9050919050565b6000602082019050818103600083015261432781613dac565b9050919050565b6000602082019050818103600083015261434781613e12565b9050919050565b6000602082019050818103600083015261436781613e78565b9050919050565b6000602082019050818103600083015261438781613ef8565b9050919050565b600060208201905081810360008301526143a781613f5e565b9050919050565b600060208201905081810360008301526143c781613fc4565b9050919050565b60006020820190506143e36000830184614013565b92915050565b600060a0820190506143fe6000830188614013565b61440b60208301876136f8565b6144186040830186614013565b6144256060830185614013565b6144326080830184614013565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156144635761446261486d565b5b8060405250919050565b600067ffffffffffffffff8211156144885761448761486d565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156144b8576144b761486d565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614574826146e8565b915061457f836146e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b4576145b36147e0565b5b828201905092915050565b60006145ca826146e8565b91506145d5836146e8565b9250826145e5576145e461480f565b5b828204905092915050565b60006145fb826146e8565b9150614606836146e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561463f5761463e6147e0565b5b828202905092915050565b6000614655826146e8565b9150614660836146e8565b925082821015614673576146726147e0565b5b828203905092915050565b6000614689826146c8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561471f578082015181840152602081019050614704565b8381111561472e576000848401525b50505050565b6000600282049050600182168061474c57607f821691505b602082108114156147605761475f61483e565b5b50919050565b6000614771826146e8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147a4576147a36147e0565b5b600182019050919050565b60006147ba826146e8565b91506147c5836146e8565b9250826147d5576147d461480f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6148b68161467e565b81146148c157600080fd5b50565b6148cd81614690565b81146148d857600080fd5b50565b6148e48161469c565b81146148ef57600080fd5b50565b6148fb816146e8565b811461490657600080fd5b5056fea26469706673582212202c12b685db561e5db7f29d1849fad76546fc83ca5e1cb650cf9f210ed1178a0364736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000004e2000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000eb46098c374b21a2a3252e75cef177b7838b47ce0000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f657465726e616c627261776c2e6d7970696e6174612e636c6f75642f697066732f516d554b6f41566a4d3570615853476b706632365765725431586a6f4578756d715264527562646279676234624d2f0000000000000000000000000000000000000000000000000000000000000000000000000000006368747470733a2f2f657465726e616c627261776c2e6d7970696e6174612e636c6f75642f697066732f516d554b6f41566a4d3570615853476b706632365765725431586a6f4578756d715264527562646279676234624d2f68696464656e2e6a736f6e0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _cost (uint256): 10
Arg [1] : _maxSupply (uint256): 20000
Arg [2] : _initBaseURI (string): https://eternalbrawl.mypinata.cloud/ipfs/QmUKoAVjM5paXSGkpf26WerT1XjoExumqRdRubdbygb4bM/
Arg [3] : _official (address): 0xEb46098C374B21a2a3252E75ceF177b7838b47cE
Arg [4] : _initNotRevealedUri (string): https://eternalbrawl.mypinata.cloud/ipfs/QmUKoAVjM5paXSGkpf26WerT1XjoExumqRdRubdbygb4bM/hidden.json
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000004e20
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 000000000000000000000000eb46098c374b21a2a3252e75cef177b7838b47ce
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000058
Arg [6] : 68747470733a2f2f657465726e616c627261776c2e6d7970696e6174612e636c
Arg [7] : 6f75642f697066732f516d554b6f41566a4d3570615853476b70663236576572
Arg [8] : 5431586a6f4578756d715264527562646279676234624d2f0000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000063
Arg [10] : 68747470733a2f2f657465726e616c627261776c2e6d7970696e6174612e636c
Arg [11] : 6f75642f697066732f516d554b6f41566a4d3570615853476b70663236576572
Arg [12] : 5431586a6f4578756d715264527562646279676234624d2f68696464656e2e6a
Arg [13] : 736f6e0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
136:4400:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;989:290:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2878:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4511:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;533:28:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4049:401:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;305:19:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;771:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;1760:111:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;360:27:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1379:924;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5388:372:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4320:85:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1358:331:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5826:187:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2584:379:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3897:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3803:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1943:308:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;469:29:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4107:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2503:313:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3998:104:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2163:283:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1261:148:12;;;;;;;;;;;;;:::i;:::-;;393:36:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;610:87:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3040:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;504:23:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4873:181:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2309:270:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4214:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;435:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6079:362:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;262:37:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2969:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;330:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:206:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4410:124:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1564:281:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;989:290:4;1131:4;1185:35;1170:50;;;:11;:50;;;;:102;;;;1236:36;1260:11;1236:23;:36::i;:::-;1170:102;1151:121;;989:290;;;:::o;2878:98:3:-;2932:13;2964:5;2957:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:98;:::o;4511:295::-;4627:7;4671:16;4679:7;4671;:16::i;:::-;4650:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;4775:15;:24;4791:7;4775:24;;;;;;;;;;;;;;;;;;;;;4768:31;;4511:295;;;:::o;533:28:5:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4049:401:3:-;4129:13;4145:23;4160:7;4145:14;:23::i;:::-;4129:39;;4192:5;4186:11;;:2;:11;;;;4178:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4283:5;4267:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4292:37;4309:5;4316:12;:10;:12::i;:::-;4292:16;:37::i;:::-;4267:62;4246:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;4422:21;4431:2;4435:7;4422:8;:21::i;:::-;4049:401;;;:::o;305:19:5:-;;;;:::o;771:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1760:111:4:-;1821:7;1847:10;:17;;;;1840:24;;1760:111;:::o;360:27:5:-;;;;:::o;1379:924::-;1513:17;;1498:12;;:32;;;;:::i;:::-;1479:15;:51;;1458:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;1600:14;1617:13;:11;:13::i;:::-;1600:30;;1649:8;;;;;;;;;;;1648:9;1640:18;;;;;;1690:1;1676:11;:15;1668:24;;;;;;1734:9;;1719:11;1710:6;:20;;;;:::i;:::-;:33;;1702:42;;;;;;1780:7;:5;:7::i;:::-;1766:21;;:10;:21;;;1762:108;;1839:11;1832:4;;:18;;;;:::i;:::-;1819:9;:31;;1811:40;;;;;;1762:108;1879:32;1899:11;1892:4;;:18;;;;:::i;:::-;1879:12;:32::i;:::-;1926:9;1938:1;1926:13;;1921:376;1946:11;1941:1;:16;1921:376;;1978:33;1988:10;2009:1;2000:6;:10;;;;:::i;:::-;1978:9;:33::i;:::-;2025:17;2052:1;2043:6;:10;;;;:::i;:::-;2025:28;;2086:200;;;;;;;;2113:9;2086:200;;;;2149:10;2086:200;;;;;;2186:9;2086:200;;;;2219:4;;2086:200;;;;2252:15;2086:200;;;2067:5;:16;2073:9;2067:16;;;;;;;;;;;:219;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1921:376;1959:3;;;;;:::i;:::-;;;;1921:376;;;;1379:924;;;:::o;5388:372:3:-;5598:41;5617:12;:10;:12::i;:::-;5631:7;5598:18;:41::i;:::-;5577:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;5725:28;5735:4;5741:2;5745:7;5725:9;:28::i;:::-;5388:372;;;:::o;4320:85:5:-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4392:6:5::1;4381:8;;:17;;;;;;;;;;;;;;;;;;4320:85:::0;:::o;1358:331:4:-;1495:7;1547:23;1564:5;1547:16;:23::i;:::-;1539:5;:31;1518:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;1656:12;:19;1669:5;1656:19;;;;;;;;;;;;;;;:26;1676:5;1656:26;;;;;;;;;;;;1649:33;;1358:331;;;;:::o;5826:187:3:-;5967:39;5984:4;5990:2;5994:7;5967:39;;;;;;;;;;;;:16;:39::i;:::-;5826:187;;;:::o;2584:379:5:-;2668:16;2700:23;2726:17;2736:6;2726:9;:17::i;:::-;2700:43;;2753:25;2795:15;2781:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2753:58;;2826:9;2821:111;2841:15;2837:1;:19;2821:111;;;2891:30;2911:6;2919:1;2891:19;:30::i;:::-;2877:8;2886:1;2877:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;2858:3;;;;;:::i;:::-;;;;2821:111;;;;2948:8;2941:15;;;;2584:379;;;:::o;3897:95::-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3976:8:5::1;3966;:19;;;;:::i;:::-;3959:4;:26;;;;3897:95:::0;:::o;3803:89::-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3879:6:5::1;3866:10;;:19;;;;;;;;;;;;;;;;;;3803:89:::0;:::o;1943:308:4:-;2058:7;2110:30;:28;:30::i;:::-;2102:5;:38;2081:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;2227:10;2238:5;2227:17;;;;;;;;;;;;;;;;;;;;;;;;2220:24;;1943:308;;;:::o;469:29:5:-;;;;;;;;;;;;;:::o;4107:102::-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4191:11:5::1;4181:7;:21;;;;;;;;;;;;:::i;:::-;;4107:102:::0;:::o;2503:313:3:-;2615:7;2638:13;2654:7;:16;2662:7;2654:16;;;;;;;;;;;;;;;;;;;;;2638:32;;2718:1;2701:19;;:5;:19;;;;2680:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;2804:5;2797:12;;;2503:313;;;:::o;3998:104:5:-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4082:13:5::1;4070:9;:25;;;;3998:104:::0;:::o;2163:283:3:-;2275:7;2336:1;2319:19;;:5;:19;;;;2298:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;2423:9;:16;2433:5;2423:16;;;;;;;;;;;;;;;;2416:23;;2163:283;;;:::o;1261:148:12:-;841:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1368:1:::1;1331:40;;1352:6;;;;;;;;;;;1331:40;;;;;;;;;;;;1399:1;1382:6;;:19;;;;;;;;;;;;;;;;;;1261:148::o:0;393:36:5:-;;;;:::o;610:87:12:-;656:7;683:6;;;;;;;;;;;676:13;;610:87;:::o;3040:102:3:-;3096:13;3128:7;3121:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3040:102;:::o;504:23:5:-;;;;;;;;;;;;;:::o;4873:181:3:-;4995:52;5014:12;:10;:12::i;:::-;5028:8;5038;4995:18;:52::i;:::-;4873:181;;:::o;2309:270:5:-;2403:2;2387:5;:9;2393:2;2387:9;;;;;;;;;;;:12;;;:18;2379:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2460:11;2468:2;2460:7;:11::i;:::-;2446:25;;:10;:25;;;2438:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;2524:10;2506:5;:9;2512:2;2506:9;;;;;;;;;;;:17;;;:28;;;;;;;;;;;;;;;;;;2563:9;2544:5;:9;2550:2;2544:9;;;;;;;;;;;:18;;:28;;;;2309:270;;:::o;4214:101::-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4296:12:5::1;4285:8;;:23;;;;;;;;;;;;;;;;;;4214:101:::0;:::o;435:28::-;;;;;;;;;;;;;:::o;6079:362:3:-;6269:41;6288:12;:10;:12::i;:::-;6302:7;6269:18;:41::i;:::-;6248:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;6395:39;6409:4;6415:2;6419:7;6428:5;6395:13;:39::i;:::-;6079:362;;;;:::o;262:37:5:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2969:631::-;3082:13;3132:16;3140:7;3132;:16::i;:::-;3111:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3249:5;3235:19;;:10;;;;;;;;;;;:19;;;3231:71;;;3277:14;3270:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3231:71;3312:28;3343:10;:8;:10::i;:::-;3312:41;;3409:1;3384:14;3378:28;:32;:215;;;;;;;;;;;;;;;;;3475:14;3507:18;:7;:16;:18::i;:::-;3543:13;3441:129;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3378:215;3363:230;;;2969:631;;;;:::o;330:24::-;;;;:::o;5120:206:3:-;5257:4;5284:18;:25;5303:5;5284:25;;;;;;;;;;;;;;;:35;5310:8;5284:35;;;;;;;;;;;;;;;;;;;;;;;;;5277:42;;5120:206;;;;:::o;4410:124:5:-;841:12:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4512:15:5::1;4495:14;:32;;;;;;;;;;;;:::i;:::-;;4410:124:::0;:::o;1564:281:12:-;841:12;:10;:12::i;:::-;830:23;;:7;:5;:7::i;:::-;:23;;;822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1687:1:::1;1667:22;;:8;:22;;;;1645:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;1800:8;1771:38;;1792:6;;;;;;;;;;;1771:38;;;;;;;;;;;;1829:8;1820:6;;:17;;;;;;;;;;;;;;;;;;1564:281:::0;:::o;1760:344:3:-;1902:4;1956:25;1941:40;;;:11;:40;;;;:104;;;;2012:33;1997:48;;;:11;:48;;;;1941:104;:156;;;;2061:36;2085:11;2061:23;:36::i;:::-;1941:156;1922:175;;1760:344;;;:::o;7947:125::-;8012:4;8063:1;8035:30;;:7;:16;8043:7;8035:16;;;;;;;;;;;;;;;;;;;;;:30;;;;8028:37;;7947:125;;;:::o;602:98:1:-;655:7;682:10;675:17;;602:98;:::o;11926:171:3:-;12027:2;12000:15;:24;12016:7;12000:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12082:7;12078:2;12044:46;;12053:23;12068:7;12053:14;:23::i;:::-;12044:46;;;;;;;;;;;;11926:171;;:::o;3605:164:5:-;3669:13;3696:8;;;;;;;;;;;3688:22;;3718:12;3688:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3668:67;;;3753:8;3745:17;;;;;;3605:164;;:::o;8998:108:3:-;9073:26;9083:2;9087:7;9073:26;;;;;;;;;;;;:9;:26::i;:::-;8998:108;;:::o;8230:438::-;8355:4;8396:16;8404:7;8396;:16::i;:::-;8375:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;8492:13;8508:23;8523:7;8508:14;:23::i;:::-;8492:39;;8560:5;8549:16;;:7;:16;;;:63;;;;8605:7;8581:31;;:20;8593:7;8581:11;:20::i;:::-;:31;;;8549:63;:111;;;;8628:32;8645:5;8652:7;8628:16;:32::i;:::-;8549:111;8541:120;;;8230:438;;;;:::o;11221:594::-;11388:4;11361:31;;:23;11376:7;11361:14;:23::i;:::-;:31;;;11340:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;11491:1;11477:16;;:2;:16;;;;11469:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11545:39;11566:4;11572:2;11576:7;11545:20;:39::i;:::-;11646:29;11663:1;11667:7;11646:8;:29::i;:::-;11705:1;11686:9;:15;11696:4;11686:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11733:1;11716:9;:13;11726:2;11716:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11763:2;11744:7;:16;11752:7;11744:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11800:7;11796:2;11781:27;;11790:4;11781:27;;;;;;;;;;;;11221:594;;;:::o;12232:307::-;12382:8;12373:17;;:5;:17;;;;12365:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12468:8;12430:18;:25;12449:5;12430:25;;;;;;;;;;;;;;;:35;12456:8;12430:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12513:8;12491:41;;12506:5;12491:41;;;12523:8;12491:41;;;;;;:::i;:::-;;;;;;;;12232:307;;;:::o;7303:341::-;7454:28;7464:4;7470:2;7474:7;7454:9;:28::i;:::-;7513:48;7536:4;7542:2;7546:7;7555:5;7513:22;:48::i;:::-;7492:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;7303:341;;;;:::o;1267:106:5:-;1327:13;1359:7;1352:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1267:106;:::o;328:703:13:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;829:155:2:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;9327:311:3:-;9452:18;9458:2;9462:7;9452:5;:18::i;:::-;9501:54;9532:1;9536:2;9540:7;9549:5;9501:22;:54::i;:::-;9480:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;9327:311;;;:::o;2847:572:4:-;2986:45;3013:4;3019:2;3023:7;2986:26;:45::i;:::-;3062:1;3046:18;;:4;:18;;;3042:183;;;3080:40;3112:7;3080:31;:40::i;:::-;3042:183;;;3149:2;3141:10;;:4;:10;;;3137:88;;3167:47;3200:4;3206:7;3167:32;:47::i;:::-;3137:88;3042:183;3252:1;3238:16;;:2;:16;;;3234:179;;;3270:45;3307:7;3270:36;:45::i;:::-;3234:179;;;3342:4;3336:10;;:2;:10;;;3332:81;;3362:40;3390:2;3394:7;3362:27;:40::i;:::-;3332:81;3234:179;2847:572;;;:::o;13092:950:3:-;13242:4;13262:15;:2;:13;;;:15::i;:::-;13258:778;;;13329:2;13313:36;;;13371:12;:10;:12::i;:::-;13405:4;13431:7;13460:5;13313:170;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13293:691;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13679:1;13662:6;:13;:18;13658:312;;;13704:106;;;;;;;;;;:::i;:::-;;;;;;;;13658:312;13922:6;13916:13;13907:6;13903:2;13899:15;13892:38;13293:691;13555:41;;;13545:51;;;:6;:51;;;;13538:58;;;;;13258:778;14021:4;14014:11;;13092:950;;;;;;;:::o;9960:372::-;10053:1;10039:16;;:2;:16;;;;10031:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;10111:16;10119:7;10111;:16::i;:::-;10110:17;10102:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10171:45;10200:1;10204:2;10208:7;10171:20;:45::i;:::-;10244:1;10227:9;:13;10237:2;10227:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;10274:2;10255:7;:16;10263:7;10255:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10317:7;10313:2;10292:33;;10309:1;10292:33;;;;;;;;;;;;9960:372;;:::o;14598:122::-;;;;:::o;4125:161:4:-;4228:10;:17;;;;4201:15;:24;4217:7;4201:24;;;;;;;;;;;:44;;;;4255:10;4271:7;4255:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4125:161;:::o;4903:982::-;5177:22;5227:1;5202:22;5219:4;5202:16;:22::i;:::-;:26;;;;:::i;:::-;5177:51;;5238:18;5259:17;:26;5277:7;5259:26;;;;;;;;;;;;5238:47;;5403:14;5389:10;:28;5385:323;;5433:19;5455:12;:18;5468:4;5455:18;;;;;;;;;;;;;;;:34;5474:14;5455:34;;;;;;;;;;;;5433:56;;5537:11;5504:12;:18;5517:4;5504:18;;;;;;;;;;;;;;;:30;5523:10;5504:30;;;;;;;;;;;:44;;;;5653:10;5620:17;:30;5638:11;5620:30;;;;;;;;;;;:43;;;;5385:323;;5801:17;:26;5819:7;5801:26;;;;;;;;;;;5794:33;;;5844:12;:18;5857:4;5844:18;;;;;;;;;;;;;;;:34;5863:14;5844:34;;;;;;;;;;;5837:41;;;4903:982;;;;:::o;6173:1061::-;6422:22;6467:1;6447:10;:17;;;;:21;;;;:::i;:::-;6422:46;;6478:18;6499:15;:24;6515:7;6499:24;;;;;;;;;;;;6478:45;;6845:19;6867:10;6878:14;6867:26;;;;;;;;;;;;;;;;;;;;;;;;6845:48;;6929:11;6904:10;6915;6904:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;7039:10;7008:15;:28;7024:11;7008:28;;;;;;;;;;;:41;;;;7177:15;:24;7193:7;7177:24;;;;;;;;;;;7170:31;;;7211:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6173:1061;;;;:::o;3713:217::-;3797:14;3814:20;3831:2;3814:16;:20::i;:::-;3797:37;;3871:7;3844:12;:16;3857:2;3844:16;;;;;;;;;;;;;;;:24;3861:6;3844:24;;;;;;;;;;;:34;;;;3917:6;3888:17;:26;3906:7;3888:26;;;;;;;;;;;:35;;;;3713:217;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:14:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:407::-;;;6471:2;6459:9;6450:7;6446:23;6442:32;6439:2;;;6487:1;6484;6477:12;6439:2;6530:1;6555:53;6600:7;6591:6;6580:9;6576:22;6555:53;:::i;:::-;6545:63;;6501:117;6657:2;6683:53;6728:7;6719:6;6708:9;6704:22;6683:53;:::i;:::-;6673:63;;6628:118;6429:324;;;;;:::o;6759:179::-;;6849:46;6891:3;6883:6;6849:46;:::i;:::-;6927:4;6922:3;6918:14;6904:28;;6839:99;;;;:::o;6944:118::-;7031:24;7049:5;7031:24;:::i;:::-;7026:3;7019:37;7009:53;;:::o;7098:732::-;;7246:54;7294:5;7246:54;:::i;:::-;7316:86;7395:6;7390:3;7316:86;:::i;:::-;7309:93;;7426:56;7476:5;7426:56;:::i;:::-;7505:7;7536:1;7521:284;7546:6;7543:1;7540:13;7521:284;;;7622:6;7616:13;7649:63;7708:3;7693:13;7649:63;:::i;:::-;7642:70;;7735:60;7788:6;7735:60;:::i;:::-;7725:70;;7581:224;7568:1;7565;7561:9;7556:14;;7521:284;;;7525:14;7821:3;7814:10;;7222:608;;;;;;;:::o;7836:109::-;7917:21;7932:5;7917:21;:::i;:::-;7912:3;7905:34;7895:50;;:::o;7951:360::-;;8065:38;8097:5;8065:38;:::i;:::-;8119:70;8182:6;8177:3;8119:70;:::i;:::-;8112:77;;8198:52;8243:6;8238:3;8231:4;8224:5;8220:16;8198:52;:::i;:::-;8275:29;8297:6;8275:29;:::i;:::-;8270:3;8266:39;8259:46;;8041:270;;;;;:::o;8317:364::-;;8433:39;8466:5;8433:39;:::i;:::-;8488:71;8552:6;8547:3;8488:71;:::i;:::-;8481:78;;8568:52;8613:6;8608:3;8601:4;8594:5;8590:16;8568:52;:::i;:::-;8645:29;8667:6;8645:29;:::i;:::-;8640:3;8636:39;8629:46;;8409:272;;;;;:::o;8687:377::-;;8821:39;8854:5;8821:39;:::i;:::-;8876:89;8958:6;8953:3;8876:89;:::i;:::-;8869:96;;8974:52;9019:6;9014:3;9007:4;9000:5;8996:16;8974:52;:::i;:::-;9051:6;9046:3;9042:16;9035:23;;8797:267;;;;;:::o;9094:845::-;;9234:5;9228:12;9263:36;9289:9;9263:36;:::i;:::-;9315:89;9397:6;9392:3;9315:89;:::i;:::-;9308:96;;9435:1;9424:9;9420:17;9451:1;9446:137;;;;9597:1;9592:341;;;;9413:520;;9446:137;9530:4;9526:9;9515;9511:25;9506:3;9499:38;9566:6;9561:3;9557:16;9550:23;;9446:137;;9592:341;9659:38;9691:5;9659:38;:::i;:::-;9719:1;9733:154;9747:6;9744:1;9741:13;9733:154;;;9821:7;9815:14;9811:1;9806:3;9802:11;9795:35;9871:1;9862:7;9858:15;9847:26;;9769:4;9766:1;9762:12;9757:17;;9733:154;;;9916:6;9911:3;9907:16;9900:23;;9599:334;;9413:520;;9201:738;;;;;;:::o;9945:375::-;;10108:67;10172:2;10167:3;10108:67;:::i;:::-;10101:74;;10205:34;10201:1;10196:3;10192:11;10185:55;10271:13;10266:2;10261:3;10257:12;10250:35;10311:2;10306:3;10302:12;10295:19;;10091:229;;;:::o;10326:382::-;;10489:67;10553:2;10548:3;10489:67;:::i;:::-;10482:74;;10586:34;10582:1;10577:3;10573:11;10566:55;10652:20;10647:2;10642:3;10638:12;10631:42;10699:2;10694:3;10690:12;10683:19;;10472:236;;;:::o;10714:370::-;;10877:67;10941:2;10936:3;10877:67;:::i;:::-;10870:74;;10974:34;10970:1;10965:3;10961:11;10954:55;11040:8;11035:2;11030:3;11026:12;11019:30;11075:2;11070:3;11066:12;11059:19;;10860:224;;;:::o;11090:319::-;;11253:67;11317:2;11312:3;11253:67;:::i;:::-;11246:74;;11350:23;11346:1;11341:3;11337:11;11330:44;11400:2;11395:3;11391:12;11384:19;;11236:173;;;:::o;11415:326::-;;11578:67;11642:2;11637:3;11578:67;:::i;:::-;11571:74;;11675:30;11671:1;11666:3;11662:11;11655:51;11732:2;11727:3;11723:12;11716:19;;11561:180;;;:::o;11747:316::-;;11910:67;11974:2;11969:3;11910:67;:::i;:::-;11903:74;;12007:20;12003:1;11998:3;11994:11;11987:41;12054:2;12049:3;12045:12;12038:19;;11893:170;;;:::o;12069:368::-;;12232:67;12296:2;12291:3;12232:67;:::i;:::-;12225:74;;12329:34;12325:1;12320:3;12316:11;12309:55;12395:6;12390:2;12385:3;12381:12;12374:28;12428:2;12423:3;12419:12;12412:19;;12215:222;;;:::o;12443:323::-;;12606:67;12670:2;12665:3;12606:67;:::i;:::-;12599:74;;12703:27;12699:1;12694:3;12690:11;12683:48;12757:2;12752:3;12748:12;12741:19;;12589:177;;;:::o;12772:376::-;;12935:67;12999:2;12994:3;12935:67;:::i;:::-;12928:74;;13032:34;13028:1;13023:3;13019:11;13012:55;13098:14;13093:2;13088:3;13084:12;13077:36;13139:2;13134:3;13130:12;13123:19;;12918:230;;;:::o;13154:388::-;;13317:67;13381:2;13376:3;13317:67;:::i;:::-;13310:74;;13414:34;13410:1;13405:3;13401:11;13394:55;13480:26;13475:2;13470:3;13466:12;13459:48;13533:2;13528:3;13524:12;13517:19;;13300:242;;;:::o;13548:374::-;;13711:67;13775:2;13770:3;13711:67;:::i;:::-;13704:74;;13808:34;13804:1;13799:3;13795:11;13788:55;13874:12;13869:2;13864:3;13860:12;13853:34;13913:2;13908:3;13904:12;13897:19;;13694:228;;;:::o;13928:373::-;;14091:67;14155:2;14150:3;14091:67;:::i;:::-;14084:74;;14188:34;14184:1;14179:3;14175:11;14168:55;14254:11;14249:2;14244:3;14240:12;14233:33;14292:2;14287:3;14283:12;14276:19;;14074:227;;;:::o;14307:330::-;;14470:67;14534:2;14529:3;14470:67;:::i;:::-;14463:74;;14567:34;14563:1;14558:3;14554:11;14547:55;14628:2;14623:3;14619:12;14612:19;;14453:184;;;:::o;14643:376::-;;14806:67;14870:2;14865:3;14806:67;:::i;:::-;14799:74;;14903:34;14899:1;14894:3;14890:11;14883:55;14969:14;14964:2;14959:3;14955:12;14948:36;15010:2;15005:3;15001:12;14994:19;;14789:230;;;:::o;15025:330::-;;15188:67;15252:2;15247:3;15188:67;:::i;:::-;15181:74;;15285:34;15281:1;15276:3;15272:11;15265:55;15346:2;15341:3;15337:12;15330:19;;15171:184;;;:::o;15361:373::-;;15524:67;15588:2;15583:3;15524:67;:::i;:::-;15517:74;;15621:34;15617:1;15612:3;15608:11;15601:55;15687:11;15682:2;15677:3;15673:12;15666:33;15725:2;15720:3;15716:12;15709:19;;15507:227;;;:::o;15740:379::-;;15903:67;15967:2;15962:3;15903:67;:::i;:::-;15896:74;;16000:34;15996:1;15991:3;15987:11;15980:55;16066:17;16061:2;16056:3;16052:12;16045:39;16110:2;16105:3;16101:12;16094:19;;15886:233;;;:::o;16125:365::-;;16288:67;16352:2;16347:3;16288:67;:::i;:::-;16281:74;;16385:34;16381:1;16376:3;16372:11;16365:55;16451:3;16446:2;16441:3;16437:12;16430:25;16481:2;16476:3;16472:12;16465:19;;16271:219;;;:::o;16496:297::-;;16676:83;16757:1;16752:3;16676:83;:::i;:::-;16669:90;;16785:1;16780:3;16776:11;16769:18;;16659:134;;;:::o;16799:381::-;;16962:67;17026:2;17021:3;16962:67;:::i;:::-;16955:74;;17059:34;17055:1;17050:3;17046:11;17039:55;17125:19;17120:2;17115:3;17111:12;17104:41;17171:2;17166:3;17162:12;17155:19;;16945:235;;;:::o;17186:376::-;;17349:67;17413:2;17408:3;17349:67;:::i;:::-;17342:74;;17446:34;17442:1;17437:3;17433:11;17426:55;17512:14;17507:2;17502:3;17498:12;17491:36;17553:2;17548:3;17544:12;17537:19;;17332:230;;;:::o;17568:330::-;;17731:67;17795:2;17790:3;17731:67;:::i;:::-;17724:74;;17828:34;17824:1;17819:3;17815:11;17808:55;17889:2;17884:3;17880:12;17873:19;;17714:184;;;:::o;17904:108::-;17981:24;17999:5;17981:24;:::i;:::-;17976:3;17969:37;17959:53;;:::o;18018:118::-;18105:24;18123:5;18105:24;:::i;:::-;18100:3;18093:37;18083:53;;:::o;18142:589::-;;18389:95;18480:3;18471:6;18389:95;:::i;:::-;18382:102;;18501:95;18592:3;18583:6;18501:95;:::i;:::-;18494:102;;18613:92;18701:3;18692:6;18613:92;:::i;:::-;18606:99;;18722:3;18715:10;;18371:360;;;;;;:::o;18737:379::-;;18943:147;19086:3;18943:147;:::i;:::-;18936:154;;19107:3;19100:10;;18925:191;;;:::o;19122:222::-;;19253:2;19242:9;19238:18;19230:26;;19266:71;19334:1;19323:9;19319:17;19310:6;19266:71;:::i;:::-;19220:124;;;;:::o;19350:640::-;;19583:3;19572:9;19568:19;19560:27;;19597:71;19665:1;19654:9;19650:17;19641:6;19597:71;:::i;:::-;19678:72;19746:2;19735:9;19731:18;19722:6;19678:72;:::i;:::-;19760;19828:2;19817:9;19813:18;19804:6;19760:72;:::i;:::-;19879:9;19873:4;19869:20;19864:2;19853:9;19849:18;19842:48;19907:76;19978:4;19969:6;19907:76;:::i;:::-;19899:84;;19550:440;;;;;;;:::o;19996:373::-;;20177:2;20166:9;20162:18;20154:26;;20226:9;20220:4;20216:20;20212:1;20201:9;20197:17;20190:47;20254:108;20357:4;20348:6;20254:108;:::i;:::-;20246:116;;20144:225;;;;:::o;20375:210::-;;20500:2;20489:9;20485:18;20477:26;;20513:65;20575:1;20564:9;20560:17;20551:6;20513:65;:::i;:::-;20467:118;;;;:::o;20591:313::-;;20742:2;20731:9;20727:18;20719:26;;20791:9;20785:4;20781:20;20777:1;20766:9;20762:17;20755:47;20819:78;20892:4;20883:6;20819:78;:::i;:::-;20811:86;;20709:195;;;;:::o;20910:419::-;;21114:2;21103:9;21099:18;21091:26;;21163:9;21157:4;21153:20;21149:1;21138:9;21134:17;21127:47;21191:131;21317:4;21191:131;:::i;:::-;21183:139;;21081:248;;;:::o;21335:419::-;;21539:2;21528:9;21524:18;21516:26;;21588:9;21582:4;21578:20;21574:1;21563:9;21559:17;21552:47;21616:131;21742:4;21616:131;:::i;:::-;21608:139;;21506:248;;;:::o;21760:419::-;;21964:2;21953:9;21949:18;21941:26;;22013:9;22007:4;22003:20;21999:1;21988:9;21984:17;21977:47;22041:131;22167:4;22041:131;:::i;:::-;22033:139;;21931:248;;;:::o;22185:419::-;;22389:2;22378:9;22374:18;22366:26;;22438:9;22432:4;22428:20;22424:1;22413:9;22409:17;22402:47;22466:131;22592:4;22466:131;:::i;:::-;22458:139;;22356:248;;;:::o;22610:419::-;;22814:2;22803:9;22799:18;22791:26;;22863:9;22857:4;22853:20;22849:1;22838:9;22834:17;22827:47;22891:131;23017:4;22891:131;:::i;:::-;22883:139;;22781:248;;;:::o;23035:419::-;;23239:2;23228:9;23224:18;23216:26;;23288:9;23282:4;23278:20;23274:1;23263:9;23259:17;23252:47;23316:131;23442:4;23316:131;:::i;:::-;23308:139;;23206:248;;;:::o;23460:419::-;;23664:2;23653:9;23649:18;23641:26;;23713:9;23707:4;23703:20;23699:1;23688:9;23684:17;23677:47;23741:131;23867:4;23741:131;:::i;:::-;23733:139;;23631:248;;;:::o;23885:419::-;;24089:2;24078:9;24074:18;24066:26;;24138:9;24132:4;24128:20;24124:1;24113:9;24109:17;24102:47;24166:131;24292:4;24166:131;:::i;:::-;24158:139;;24056:248;;;:::o;24310:419::-;;24514:2;24503:9;24499:18;24491:26;;24563:9;24557:4;24553:20;24549:1;24538:9;24534:17;24527:47;24591:131;24717:4;24591:131;:::i;:::-;24583:139;;24481:248;;;:::o;24735:419::-;;24939:2;24928:9;24924:18;24916:26;;24988:9;24982:4;24978:20;24974:1;24963:9;24959:17;24952:47;25016:131;25142:4;25016:131;:::i;:::-;25008:139;;24906:248;;;:::o;25160:419::-;;25364:2;25353:9;25349:18;25341:26;;25413:9;25407:4;25403:20;25399:1;25388:9;25384:17;25377:47;25441:131;25567:4;25441:131;:::i;:::-;25433:139;;25331:248;;;:::o;25585:419::-;;25789:2;25778:9;25774:18;25766:26;;25838:9;25832:4;25828:20;25824:1;25813:9;25809:17;25802:47;25866:131;25992:4;25866:131;:::i;:::-;25858:139;;25756:248;;;:::o;26010:419::-;;26214:2;26203:9;26199:18;26191:26;;26263:9;26257:4;26253:20;26249:1;26238:9;26234:17;26227:47;26291:131;26417:4;26291:131;:::i;:::-;26283:139;;26181:248;;;:::o;26435:419::-;;26639:2;26628:9;26624:18;26616:26;;26688:9;26682:4;26678:20;26674:1;26663:9;26659:17;26652:47;26716:131;26842:4;26716:131;:::i;:::-;26708:139;;26606:248;;;:::o;26860:419::-;;27064:2;27053:9;27049:18;27041:26;;27113:9;27107:4;27103:20;27099:1;27088:9;27084:17;27077:47;27141:131;27267:4;27141:131;:::i;:::-;27133:139;;27031:248;;;:::o;27285:419::-;;27489:2;27478:9;27474:18;27466:26;;27538:9;27532:4;27528:20;27524:1;27513:9;27509:17;27502:47;27566:131;27692:4;27566:131;:::i;:::-;27558:139;;27456:248;;;:::o;27710:419::-;;27914:2;27903:9;27899:18;27891:26;;27963:9;27957:4;27953:20;27949:1;27938:9;27934:17;27927:47;27991:131;28117:4;27991:131;:::i;:::-;27983:139;;27881:248;;;:::o;28135:419::-;;28339:2;28328:9;28324:18;28316:26;;28388:9;28382:4;28378:20;28374:1;28363:9;28359:17;28352:47;28416:131;28542:4;28416:131;:::i;:::-;28408:139;;28306:248;;;:::o;28560:419::-;;28764:2;28753:9;28749:18;28741:26;;28813:9;28807:4;28803:20;28799:1;28788:9;28784:17;28777:47;28841:131;28967:4;28841:131;:::i;:::-;28833:139;;28731:248;;;:::o;28985:419::-;;29189:2;29178:9;29174:18;29166:26;;29238:9;29232:4;29228:20;29224:1;29213:9;29209:17;29202:47;29266:131;29392:4;29266:131;:::i;:::-;29258:139;;29156:248;;;:::o;29410:419::-;;29614:2;29603:9;29599:18;29591:26;;29663:9;29657:4;29653:20;29649:1;29638:9;29634:17;29627:47;29691:131;29817:4;29691:131;:::i;:::-;29683:139;;29581:248;;;:::o;29835:222::-;;29966:2;29955:9;29951:18;29943:26;;29979:71;30047:1;30036:9;30032:17;30023:6;29979:71;:::i;:::-;29933:124;;;;:::o;30063:664::-;;30306:3;30295:9;30291:19;30283:27;;30320:71;30388:1;30377:9;30373:17;30364:6;30320:71;:::i;:::-;30401:72;30469:2;30458:9;30454:18;30445:6;30401:72;:::i;:::-;30483;30551:2;30540:9;30536:18;30527:6;30483:72;:::i;:::-;30565;30633:2;30622:9;30618:18;30609:6;30565:72;:::i;:::-;30647:73;30715:3;30704:9;30700:19;30691:6;30647:73;:::i;:::-;30273:454;;;;;;;;:::o;30733:283::-;;30799:2;30793:9;30783:19;;30841:4;30833:6;30829:17;30948:6;30936:10;30933:22;30912:18;30900:10;30897:34;30894:62;30891:2;;;30959:18;;:::i;:::-;30891:2;30999:10;30995:2;30988:22;30773:243;;;;:::o;31022:331::-;;31173:18;31165:6;31162:30;31159:2;;;31195:18;;:::i;:::-;31159:2;31280:4;31276:9;31269:4;31261:6;31257:17;31253:33;31245:41;;31341:4;31335;31331:15;31323:23;;31088:265;;;:::o;31359:332::-;;31511:18;31503:6;31500:30;31497:2;;;31533:18;;:::i;:::-;31497:2;31618:4;31614:9;31607:4;31599:6;31595:17;31591:33;31583:41;;31679:4;31673;31669:15;31661:23;;31426:265;;;:::o;31697:132::-;;31787:3;31779:11;;31817:4;31812:3;31808:14;31800:22;;31769:60;;;:::o;31835:141::-;;31907:3;31899:11;;31930:3;31927:1;31920:14;31964:4;31961:1;31951:18;31943:26;;31889:87;;;:::o;31982:114::-;;32083:5;32077:12;32067:22;;32056:40;;;:::o;32102:98::-;;32187:5;32181:12;32171:22;;32160:40;;;:::o;32206:99::-;;32292:5;32286:12;32276:22;;32265:40;;;:::o;32311:113::-;;32413:4;32408:3;32404:14;32396:22;;32386:38;;;:::o;32430:184::-;;32563:6;32558:3;32551:19;32603:4;32598:3;32594:14;32579:29;;32541:73;;;;:::o;32620:168::-;;32737:6;32732:3;32725:19;32777:4;32772:3;32768:14;32753:29;;32715:73;;;;:::o;32794:147::-;;32932:3;32917:18;;32907:34;;;;:::o;32947:169::-;;33065:6;33060:3;33053:19;33105:4;33100:3;33096:14;33081:29;;33043:73;;;;:::o;33122:148::-;;33261:3;33246:18;;33236:34;;;;:::o;33276:305::-;;33335:20;33353:1;33335:20;:::i;:::-;33330:25;;33369:20;33387:1;33369:20;:::i;:::-;33364:25;;33523:1;33455:66;33451:74;33448:1;33445:81;33442:2;;;33529:18;;:::i;:::-;33442:2;33573:1;33570;33566:9;33559:16;;33320:261;;;;:::o;33587:185::-;;33644:20;33662:1;33644:20;:::i;:::-;33639:25;;33678:20;33696:1;33678:20;:::i;:::-;33673:25;;33717:1;33707:2;;33722:18;;:::i;:::-;33707:2;33764:1;33761;33757:9;33752:14;;33629:143;;;;:::o;33778:348::-;;33841:20;33859:1;33841:20;:::i;:::-;33836:25;;33875:20;33893:1;33875:20;:::i;:::-;33870:25;;34063:1;33995:66;33991:74;33988:1;33985:81;33980:1;33973:9;33966:17;33962:105;33959:2;;;34070:18;;:::i;:::-;33959:2;34118:1;34115;34111:9;34100:20;;33826:300;;;;:::o;34132:191::-;;34192:20;34210:1;34192:20;:::i;:::-;34187:25;;34226:20;34244:1;34226:20;:::i;:::-;34221:25;;34265:1;34262;34259:8;34256:2;;;34270:18;;:::i;:::-;34256:2;34315:1;34312;34308:9;34300:17;;34177:146;;;;:::o;34329:96::-;;34395:24;34413:5;34395:24;:::i;:::-;34384:35;;34374:51;;;:::o;34431:90::-;;34508:5;34501:13;34494:21;34483:32;;34473:48;;;:::o;34527:149::-;;34603:66;34596:5;34592:78;34581:89;;34571:105;;;:::o;34682:126::-;;34759:42;34752:5;34748:54;34737:65;;34727:81;;;:::o;34814:77::-;;34880:5;34869:16;;34859:32;;;:::o;34897:154::-;34981:6;34976:3;34971;34958:30;35043:1;35034:6;35029:3;35025:16;35018:27;34948:103;;;:::o;35057:307::-;35125:1;35135:113;35149:6;35146:1;35143:13;35135:113;;;35234:1;35229:3;35225:11;35219:18;35215:1;35210:3;35206:11;35199:39;35171:2;35168:1;35164:10;35159:15;;35135:113;;;35266:6;35263:1;35260:13;35257:2;;;35346:1;35337:6;35332:3;35328:16;35321:27;35257:2;35106:258;;;;:::o;35370:320::-;;35451:1;35445:4;35441:12;35431:22;;35498:1;35492:4;35488:12;35519:18;35509:2;;35575:4;35567:6;35563:17;35553:27;;35509:2;35637;35629:6;35626:14;35606:18;35603:38;35600:2;;;35656:18;;:::i;:::-;35600:2;35421:269;;;;:::o;35696:233::-;;35758:24;35776:5;35758:24;:::i;:::-;35749:33;;35804:66;35797:5;35794:77;35791:2;;;35874:18;;:::i;:::-;35791:2;35921:1;35914:5;35910:13;35903:20;;35739:190;;;:::o;35935:176::-;;35984:20;36002:1;35984:20;:::i;:::-;35979:25;;36018:20;36036:1;36018:20;:::i;:::-;36013:25;;36057:1;36047:2;;36062:18;;:::i;:::-;36047:2;36103:1;36100;36096:9;36091:14;;35969:142;;;;:::o;36117:180::-;36165:77;36162:1;36155:88;36262:4;36259:1;36252:15;36286:4;36283:1;36276:15;36303:180;36351:77;36348:1;36341:88;36448:4;36445:1;36438:15;36472:4;36469:1;36462:15;36489:180;36537:77;36534:1;36527:88;36634:4;36631:1;36624:15;36658:4;36655:1;36648:15;36675:180;36723:77;36720:1;36713:88;36820:4;36817:1;36810:15;36844:4;36841:1;36834:15;36861:102;;36953:2;36949:7;36944:2;36937:5;36933:14;36929:28;36919:38;;36909:54;;;:::o;36969:122::-;37042:24;37060:5;37042:24;:::i;:::-;37035:5;37032:35;37022:2;;37081:1;37078;37071:12;37022:2;37012:79;:::o;37097:116::-;37167:21;37182:5;37167:21;:::i;:::-;37160:5;37157:32;37147:2;;37203:1;37200;37193:12;37147:2;37137:76;:::o;37219:120::-;37291:23;37308:5;37291:23;:::i;:::-;37284:5;37281:34;37271:2;;37329:1;37326;37319:12;37271:2;37261:78;:::o;37345:122::-;37418:24;37436:5;37418:24;:::i;:::-;37411:5;37408:35;37398:2;;37457:1;37454;37447:12;37398:2;37388:79;:::o
Swarm Source
ipfs://2c12b685db561e5db7f29d1849fad76546fc83ca5e1cb650cf9f210ed1178a03
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.