Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From | 14250692 | 888 days ago | IN | 0 ETH | 0.01036333 | ||||
Withdraw | 14247443 | 889 days ago | IN | 0 ETH | 0.00973269 | ||||
Set Active | 14247439 | 889 days ago | IN | 0 ETH | 0.00151341 | ||||
Mint | 14247436 | 889 days ago | IN | 0.065 ETH | 0.00603925 | ||||
Set Active | 14247419 | 889 days ago | IN | 0 ETH | 0.00346929 | ||||
0x60806040 | 14247174 | 889 days ago | IN | 0 ETH | 0.23616386 |
Loading...
Loading
Contract Name:
toksalpha
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT // Contract by TOKS pragma solidity ^0.8.7; import "./ERC721Enumerable.sol"; import "./Ownable.sol"; import "./MerkleProof.sol"; import "./RoyaltiesV2Impl.sol"; import "./LibPart.sol"; import "./LibRoyaltiesV2.sol"; contract toksalpha is ERC721Enumerable, Ownable, RoyaltiesV2Impl { using Strings for uint256; string public _baseTokenURI; bool public _active = false; bool public _presaleActive = false; bytes32 public _merkleRoot = 0x3454ba2028cca49223166a1b2b5f75c59cfeaa353eced6a39bd596a31a5fe29e; uint256 public _gifts = 300; uint256 public _price = 0.065 ether; uint256 public _presaleMintLimit = 2; uint256 public constant _MINT_LIMIT = 10; uint256 public constant _SUPPLY = 10000; uint256 public _SALE_SUPPLY = 3200; uint256 public _PRESALE_SUPPLY = 6500; mapping(address => uint256) private _claimed; address public _v1 = 0xB72b8e32860fEB870553D00F421311008a93236C; address public _v2 = 0x0d35F889C276b8566DB407fB6BD240388Fb3EdeB; address public _v3 = 0x0dB9a71032A1573a0C8ecfC18E99333Bc2e8503E; address public _v4 = 0xa28A7bBa6d373805C0E7afC9044F17EAbF3C066E; bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a; constructor() ERC721("TOKS ALPHA", "TOKSA") {} function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setActive(bool active) public onlyOwner { _active = active; } function setPresaleActive(bool presaleActive) public onlyOwner { _presaleActive = presaleActive; } function setSaleSupply(uint256 saleSupply) public onlyOwner { _SALE_SUPPLY= saleSupply; } function setPresaleSupply(uint256 presaleSupply) public onlyOwner { _PRESALE_SUPPLY= presaleSupply; } function setPresaleMintLimit(uint256 presaleMintLimit) public onlyOwner { _presaleMintLimit = presaleMintLimit; } function setMerkleRoot(bytes32 merkleRoot) public onlyOwner { _merkleRoot = merkleRoot; } function setPrice(uint256 price) public onlyOwner { _price = price; } function setRoyalties(uint _tokenId, address payable _royaltiesReceipientAddress, uint96 _percentageBasisPoints) public onlyOwner { LibPart.Part[] memory _royalties = new LibPart.Part[](1); _royalties[0].value = _percentageBasisPoints; _royalties[0].account = _royaltiesReceipientAddress; _saveRoyalties(_tokenId, _royalties); } function royaltyInfo(uint256 _tokenId, uint256 _secndprice) external view returns (address receiver, uint256 royaltyAmount) { LibPart.Part[] memory _royalties = royalties[_tokenId]; if(_royalties.length > 0) { return (_royalties[0].account, (_secndprice * _royalties[0].value)/7500); } return (address(0), 0); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721Enumerable) returns (bool) { if(interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) { return true; } if(interfaceId == _INTERFACE_ID_ERC2981) { return true; } return super.supportsInterface(interfaceId); } function getTokensByWallet(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function getPresaleMints(address owner) public view returns (uint256){ return _claimed[owner]; } function gift(address _to, uint256 _amount) public onlyOwner { uint256 supply = totalSupply(); require(_amount <= _gifts, "Gift reserve exceeded with provided amount."); for(uint256 i; i < _amount; i++){ _safeMint( _to, supply + i ); } _gifts -= _amount; } function mint(uint256 _amount) public payable { uint256 supply = totalSupply(); require( _active, "Not active"); require( _amount <= _MINT_LIMIT, "Amount denied"); require( msg.value >= _price * _amount, "Insufficient ether"); require( supply + _amount <= _SALE_SUPPLY, "Supply denied"); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); } } function presale(bytes32[] calldata _merkleProof, uint256 _amount) public payable { uint256 supply = totalSupply(); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require( _presaleActive, "Not active"); require( _amount + _claimed[msg.sender] <= _presaleMintLimit, "Amount denied"); require( MerkleProof.verify(_merkleProof, _merkleRoot, leaf), "Invalid Address"); require( msg.value >= _price * _amount, "Insufficient ether"); require( supply + _amount <= _PRESALE_SUPPLY, "Supply denied"); for(uint256 i; i < _amount; i++){ _safeMint( msg.sender, supply + i ); _claimed[msg.sender] += 1; } } function withdraw() public payable onlyOwner { uint256 _p1 = address(this).balance * 2 / 5; uint256 _p2 = address(this).balance * 2 / 10; uint256 _p3 = address(this).balance * 2 / 10; uint256 _p4 = address(this).balance * 2 / 10; require(payable(_v1).send(_p1)); require(payable(_v2).send(_p2)); require(payable(_v3).send(_p3)); require(payable(_v4).send(_p4)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./LibPart.sol"; abstract contract AbstractRoyalties { mapping (uint256 => LibPart.Part[]) public royalties; function _saveRoyalties(uint256 _id, LibPart.Part[] memory _royalties) internal { for (uint i = 0; i < _royalties.length; i++) { require(_royalties[i].account != address(0x0), "Recipient should be present"); require(_royalties[i].value != 0, "Royalty value should be positive"); royalties[_id].push(_royalties[i]); } _onRoyaltiesSet(_id, _royalties); } function _updateAccount(uint256 _id, address _from, address _to) internal { uint length = royalties[_id].length; for(uint i = 0; i < length; i++) { if (royalties[_id][i].account == _from) { royalties[_id][i].account = payable(address(uint160(_to))); } } } function _onRoyaltiesSet(uint256 _id, LibPart.Part[] memory _royalties) virtual internal; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) 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 // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// 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 "./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 virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; }
// 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.8.0; import "./LibPart.sol"; interface IRoyaltiesProvider { function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library LibPart { bytes32 public constant TYPE_HASH = keccak256("Part(address account,uint96 value)"); struct Part { address payable account; uint96 value; } function hash(Part memory part) internal pure returns (bytes32) { return keccak256(abi.encode(TYPE_HASH, part.account, part.value)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library LibRoyaltiesV2 { /* * bytes4(keccak256('getRoyalties(LibAsset.AssetType)')) == 0x44c74bcc */ bytes4 constant _INTERFACE_ID_ROYALTIES = 0x44c74bcc; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./LibPart.sol"; interface RoyaltiesV2 { event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties); function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./AbstractRoyalties.sol"; import "./RoyaltiesV2.sol"; contract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2 { function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) { return royalties[id]; } function _onRoyaltiesSet(uint256 _id, LibPart.Part[] memory _royalties) override internal { emit RoyaltiesSet(_id, _royalties); } }
// 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":[],"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":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"}],"indexed":false,"internalType":"struct LibPart.Part[]","name":"royalties","type":"tuple[]"}],"name":"RoyaltiesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_PRESALE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SALE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_gifts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_presaleMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_v1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_v2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_v3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_v4","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"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"}],"name":"getPresaleMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getRaribleV2Royalties","outputs":[{"components":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"}],"internalType":"struct LibPart.Part[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByWallet","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"royalties","outputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint96","name":"value","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_secndprice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"presaleActive","type":"bool"}],"name":"setPresaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleMintLimit","type":"uint256"}],"name":"setPresaleMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"presaleSupply","type":"uint256"}],"name":"setPresaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address payable","name":"_royaltiesReceipientAddress","type":"address"},{"internalType":"uint96","name":"_percentageBasisPoints","type":"uint96"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"saleSupply","type":"uint256"}],"name":"setSaleSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052600d805461ffff191690557f3454ba2028cca49223166a1b2b5f75c59cfeaa353eced6a39bd596a31a5fe29e600e5561012c600f5566e6ed27d66680006010556002601155610c80601255611964601355601580546001600160a01b031990811673b72b8e32860feb870553d00f421311008a93236c17909155601680548216730d35f889c276b8566db407fb6bd240388fb3edeb179055601780548216730db9a71032a1573a0c8ecfc18e99333bc2e8503e1790556018805490911673a28a7bba6d373805c0e7afc9044f17eabf3c066e179055348015620000e657600080fd5b50604080518082018252600a815269544f4b5320414c50484160b01b602080830191825283518085019094526005845264544f4b534160d81b9084015281519192916200013691600091620001c5565b5080516200014c906001906020840190620001c5565b50505062000169620001636200016f60201b60201c565b62000173565b620002a8565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001d3906200026b565b90600052602060002090601f016020900481019282620001f7576000855562000242565b82601f106200021257805160ff191683800117855562000242565b8280016001018555821562000242579182015b828111156200024257825182559160200191906001019062000225565b506200025092915062000254565b5090565b5b8082111562000250576000815560010162000255565b600181811c908216806200028057607f821691505b60208210811415620002a257634e487b7160e01b600052602260045260246000fd5b50919050565b613f2480620002b86000396000f3fe60806040526004361061033f5760003560e01c806372132870116101b0578063baa551ee116100ec578063cfc86f7b11610095578063ea5cb5321161006f578063ea5cb53214610a0b578063ee40494614610a21578063f2fde38b14610a37578063fdfbe10a14610a5757600080fd5b8063cfc86f7b14610973578063d3b90b3014610988578063e985e9c5146109b557600080fd5b8063c87b56dd116100c6578063c87b56dd14610906578063cad96cca14610926578063cbce4c971461095357600080fd5b8063baa551ee14610869578063c21d0e6e146108ac578063c56597ba146108d957600080fd5b806391b7f5ed11610159578063a22cb46511610133578063a22cb465146107e9578063acec338a14610809578063b88d4fde14610829578063b96502cb1461084957600080fd5b806391b7f5ed146107a157806395d89b41146107c1578063a0712d68146107d657600080fd5b80638be3a8971161018a5780638be3a897146107295780638da5cb5b146107565780638dba521e1461078157600080fd5b8063721328701461069a5780637cb64759146106b05780638924af74146106d057600080fd5b80632f745c591161027f5780634d615d23116102285780636352211e116102025780636352211e146106265780636b0a11761461064657806370a0823114610665578063715018a61461068557600080fd5b80634d615d23146105cc5780634f6ccce7146105e657806355f804b31461060657600080fd5b80633e672ea0116102595780633e672ea0146105765780633f8121a21461058c57806342842e0e146105ac57600080fd5b80632f745c59146105385780632fc37ab2146105585780633ccfd60b1461056e57600080fd5b8063143094db116102ec578063235b6ea1116102c6578063235b6ea1146104a357806323b872dd146104b957806327ed3dce146104d95780632a55205a146104ec57600080fd5b8063143094db1461044f57806318160ddd1461046f5780631c9073601461048e57600080fd5b8063081812fc1161031d578063081812fc146103bd578063095ea7b3146104025780630be702bf1461042257600080fd5b806301ffc9a71461034457806304db5eed1461037957806306fdde031461039b575b600080fd5b34801561035057600080fd5b5061036461035f3660046139bf565b610a6d565b60405190151581526020015b60405180910390f35b34801561038557600080fd5b506103996103943660046139a6565b610b22565b005b3480156103a757600080fd5b506103b0610b93565b6040516103709190613c3a565b3480156103c957600080fd5b506103dd6103d83660046139a6565b610c25565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610370565b34801561040e57600080fd5b5061039961041d3660046138e4565b610ce5565b34801561042e57600080fd5b506018546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561045b57600080fd5b5061039961046a366004613a42565b610e3e565b34801561047b57600080fd5b506008545b604051908152602001610370565b34801561049a57600080fd5b50610480600a81565b3480156104af57600080fd5b5061048060105481565b3480156104c557600080fd5b506103996104d43660046137ee565b610f70565b6103996104e7366004613910565b610ff7565b3480156104f857600080fd5b5061050c610507366004613a95565b6112bb565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610370565b34801561054457600080fd5b506104806105533660046138e4565b6113e9565b34801561056457600080fd5b50610480600e5481565b61039961149e565b34801561058257600080fd5b5061048060115481565b34801561059857600080fd5b506103996105a736600461398b565b61166c565b3480156105b857600080fd5b506103996105c73660046137ee565b61170a565b3480156105d857600080fd5b50600d546103649060ff1681565b3480156105f257600080fd5b506104806106013660046139a6565b611725565b34801561061257600080fd5b506103996106213660046139f9565b6117c9565b34801561063257600080fd5b506103dd6106413660046139a6565b611847565b34801561065257600080fd5b50600d5461036490610100900460ff1681565b34801561067157600080fd5b50610480610680366004613798565b6118df565b34801561069157600080fd5b50610399611993565b3480156106a657600080fd5b5061048060125481565b3480156106bc57600080fd5b506103996106cb3660046139a6565b611a06565b3480156106dc57600080fd5b506106f06106eb366004613a95565b611a72565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff909116602083015201610370565b34801561073557600080fd5b506017546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561076257600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff166103dd565b34801561078d57600080fd5b5061039961079c3660046139a6565b611ade565b3480156107ad57600080fd5b506103996107bc3660046139a6565b611b4a565b3480156107cd57600080fd5b506103b0611bb6565b6103996107e43660046139a6565b611bc5565b3480156107f557600080fd5b506103996108043660046138af565b611d59565b34801561081557600080fd5b5061039961082436600461398b565b611d64565b34801561083557600080fd5b5061039961084436600461382f565b611dfc565b34801561085557600080fd5b506103996108643660046139a6565b611e84565b34801561087557600080fd5b50610480610884366004613798565b73ffffffffffffffffffffffffffffffffffffffff1660009081526014602052604090205490565b3480156108b857600080fd5b506015546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108e557600080fd5b506016546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561091257600080fd5b506103b06109213660046139a6565b611ef0565b34801561093257600080fd5b506109466109413660046139a6565b611fe6565b6040516103709190613be3565b34801561095f57600080fd5b5061039961096e3660046138e4565b612098565b34801561097f57600080fd5b506103b06121cc565b34801561099457600080fd5b506109a86109a3366004613798565b61225a565b6040516103709190613bf6565b3480156109c157600080fd5b506103646109d03660046137b5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610a1757600080fd5b5061048061271081565b348015610a2d57600080fd5b50610480600f5481565b348015610a4357600080fd5b50610399610a52366004613798565b6122fc565b348015610a6357600080fd5b5061048060135481565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f44c74bcc000000000000000000000000000000000000000000000000000000001415610ac157506001919050565b7fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001415610b1357506001919050565b610b1c826123f8565b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610b8e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601255565b606060008054610ba290613d12565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce90613d12565b8015610c1b5780601f10610bf057610100808354040283529160200191610c1b565b820191906000526020600020905b815481529060010190602001808311610bfe57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610cbc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b85565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610cf082611847565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d945760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b85565b3373ffffffffffffffffffffffffffffffffffffffff82161480610dbd5750610dbd81336109d0565b610e2f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b85565b610e39838361244e565b505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ea55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610ebc5790505090508181600081518110610ef957610ef9613e40565b6020026020010151602001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff16815250508281600081518110610f3b57610f3b613e40565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff9091169052610f6a84826124ee565b50505050565b610f7a33826126b4565b610fec5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b85565b610e3983838361280a565b600061100260085490565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152909150600090603401604051602081830303815290604052805190602001209050600d60019054906101000a900460ff166110ad5760405162461bcd60e51b815260206004820152600a60248201527f4e6f7420616374697665000000000000000000000000000000000000000000006044820152606401610b85565b601154336000908152601460205260409020546110ca9085613c66565b11156111185760405162461bcd60e51b815260206004820152600d60248201527f416d6f756e742064656e696564000000000000000000000000000000000000006044820152606401610b85565b61115985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600e549150849050612a48565b6111a55760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964204164647265737300000000000000000000000000000000006044820152606401610b85565b826010546111b39190613c92565b3410156112025760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420657468657200000000000000000000000000006044820152606401610b85565b60135461120f8484613c66565b111561125d5760405162461bcd60e51b815260206004820152600d60248201527f537570706c792064656e696564000000000000000000000000000000000000006044820152606401610b85565b60005b838110156112b35761127b336112768386613c66565b612a5e565b33600090815260146020526040812080546001929061129b908490613c66565b909155508190506112ab81613d66565b915050611260565b505050505050565b6000828152600b60209081526040808320805482518185028101850190935280835284938493929190849084015b8282101561135b576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16818301528252600190920191016112e9565b5050505090506000815111156113d9578060008151811061137e5761137e613e40565b602002602001015160000151611d4c826000815181106113a0576113a0613e40565b6020026020010151602001516bffffffffffffffffffffffff16866113c59190613c92565b6113cf9190613c7e565b92509250506113e2565b60008092509250505b9250929050565b60006113f4836118df565b82106114685760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b85565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146115055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b60006005611514476002613c92565b61151e9190613c7e565b90506000600a61152f476002613c92565b6115399190613c7e565b90506000600a61154a476002613c92565b6115549190613c7e565b90506000600a611565476002613c92565b61156f9190613c7e565b60155460405191925073ffffffffffffffffffffffffffffffffffffffff169085156108fc029086906000818181858888f193505050506115af57600080fd5b60165460405173ffffffffffffffffffffffffffffffffffffffff9091169084156108fc029085906000818181858888f193505050506115ee57600080fd5b60175460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f1935050505061162d57600080fd5b60185460405173ffffffffffffffffffffffffffffffffffffffff9091169082156108fc029083906000818181858888f19350505050610f6a57600080fd5b600a5473ffffffffffffffffffffffffffffffffffffffff1633146116d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600d8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b610e3983838360405180602001604052806000815250611dfc565b600061173060085490565b82106117a45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b85565b600882815481106117b7576117b7613e40565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146118305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b805161184390600c906020840190613656565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610b1c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b85565b600073ffffffffffffffffffffffffffffffffffffffff821661196a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b85565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b611a046000612a78565b565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611a6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600e55565b600b6020528160005260406000208181548110611a8e57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff811692507401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16905082565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611b455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b601155565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611bb15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b601055565b606060018054610ba290613d12565b6000611bd060085490565b600d5490915060ff16611c255760405162461bcd60e51b815260206004820152600a60248201527f4e6f7420616374697665000000000000000000000000000000000000000000006044820152606401610b85565b600a821115611c765760405162461bcd60e51b815260206004820152600d60248201527f416d6f756e742064656e696564000000000000000000000000000000000000006044820152606401610b85565b81601054611c849190613c92565b341015611cd35760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420657468657200000000000000000000000000006044820152606401610b85565b601254611ce08383613c66565b1115611d2e5760405162461bcd60e51b815260206004820152600d60248201527f537570706c792064656e696564000000000000000000000000000000000000006044820152606401610b85565b60005b82811015610e3957611d47336112768385613c66565b80611d5181613d66565b915050611d31565b611843338383612aef565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611dcb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b611e0633836126b4565b611e785760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b85565b610f6a84848484612c03565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611eeb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b601355565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611f8a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b85565b6000611f94612c8c565b90506000815111611fb45760405180602001604052806000815250611fdf565b80611fbe84612c9b565b604051602001611fcf929190613b6b565b6040516020818303038152906040525b9392505050565b6060600b6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561208d576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168183015282526001909201910161201b565b505050509050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146120ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600061210a60085490565b9050600f548211156121845760405162461bcd60e51b815260206004820152602b60248201527f47696674207265736572766520657863656564656420776974682070726f766960448201527f64656420616d6f756e742e0000000000000000000000000000000000000000006064820152608401610b85565b60005b828110156121af5761219d846112768385613c66565b806121a781613d66565b915050612187565b5081600f60008282546121c29190613ccf565b9091555050505050565b600c80546121d990613d12565b80601f016020809104026020016040519081016040528092919081815260200182805461220590613d12565b80156122525780601f1061222757610100808354040283529160200191612252565b820191906000526020600020905b81548152906001019060200180831161223557829003601f168201915b505050505081565b60606000612267836118df565b905060008167ffffffffffffffff81111561228457612284613e6f565b6040519080825280602002602001820160405280156122ad578160200160208202803683370190505b50905060005b828110156122f4576122c585826113e9565b8282815181106122d7576122d7613e40565b6020908102919091010152806122ec81613d66565b9150506122b3565b509392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146123635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b73ffffffffffffffffffffffffffffffffffffffff81166123ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b85565b6123f581612a78565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610b1c5750610b1c82612dcd565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906124a882611847565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b81518110156126a957600073ffffffffffffffffffffffffffffffffffffffff1682828151811061252457612524613e40565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614156125945760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e7400000000006044820152606401610b85565b8181815181106125a6576125a6613e40565b6020026020010151602001516bffffffffffffffffffffffff16600014156126105760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f7369746976656044820152606401610b85565b6000838152600b60205260409020825183908390811061263257612632613e40565b6020908102919091018101518254600181018455600093845292829020815191909201516bffffffffffffffffffffffff16740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff90911617910155806126a181613d66565b9150506124f1565b506118438282612eb0565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1661274b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b85565b600061275683611847565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127c557508373ffffffffffffffffffffffffffffffffffffffff166127ad84610c25565b73ffffffffffffffffffffffffffffffffffffffff16145b80612802575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661282a82611847565b73ffffffffffffffffffffffffffffffffffffffff16146128b35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b85565b73ffffffffffffffffffffffffffffffffffffffff821661293b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b85565b612946838383612eed565b61295160008261244e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290612987908490613ccf565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906129c2908490613c66565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082612a558584612ff3565b14949350505050565b611843828260405180602001604052806000815250613097565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b6b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b85565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c0e84848461280a565b612c1a84848484613120565b610f6a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b85565b6060600c8054610ba290613d12565b606081612cdb57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612d055780612cef81613d66565b9150612cfe9050600a83613c7e565b9150612cdf565b60008167ffffffffffffffff811115612d2057612d20613e6f565b6040519080825280601f01601f191660200182016040528015612d4a576020820181803683370190505b5090505b841561280257612d5f600183613ccf565b9150612d6c600a86613d9f565b612d77906030613c66565b60f81b818381518110612d8c57612d8c613e40565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612dc6600a86613c7e565b9450612d4e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612e6057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610b1c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610b1c565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ee1929190613c4d565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8316612f5557612f5081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612f92565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f9257612f928382613305565b73ffffffffffffffffffffffffffffffffffffffff8216612fb657610e39816133bc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610e3957610e39828261346b565b600081815b84518110156122f457600085828151811061301557613015613e40565b60200260200101519050808311613057576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250613084565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061308f81613d66565b915050612ff8565b6130a183836134bc565b6130ae6000848484613120565b610e395760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b85565b600073ffffffffffffffffffffffffffffffffffffffff84163b156132fa576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290613197903390899088908890600401613b9a565b602060405180830381600087803b1580156131b157600080fd5b505af19250505080156131ff575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526131fc918101906139dc565b60015b6132af573d80801561322d576040519150601f19603f3d011682016040523d82523d6000602084013e613232565b606091505b5080516132a75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b85565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612802565b506001949350505050565b60006001613312846118df565b61331c9190613ccf565b60008381526007602052604090205490915080821461337c5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b6008546000906133ce90600190613ccf565b600083815260096020526040812054600880549394509092849081106133f6576133f6613e40565b90600052602060002001549050806008838154811061341757613417613e40565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061344f5761344f613e11565b6001900381819060005260206000200160009055905550505050565b6000613476836118df565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff821661351f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b85565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156135915760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b85565b61359d60008383612eed565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906135d3908490613c66565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461366290613d12565b90600052602060002090601f01602090048101928261368457600085556136ca565b82601f1061369d57805160ff19168380011785556136ca565b828001600101855582156136ca579182015b828111156136ca5782518255916020019190600101906136af565b506136d69291506136da565b5090565b5b808211156136d657600081556001016136db565b600067ffffffffffffffff8084111561370a5761370a613e6f565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561375057613750613e6f565b8160405280935085815286868601111561376957600080fd5b858560208301376000602087830101525050509392505050565b8035801515811461379357600080fd5b919050565b6000602082840312156137aa57600080fd5b8135611fdf81613e9e565b600080604083850312156137c857600080fd5b82356137d381613e9e565b915060208301356137e381613e9e565b809150509250929050565b60008060006060848603121561380357600080fd5b833561380e81613e9e565b9250602084013561381e81613e9e565b929592945050506040919091013590565b6000806000806080858703121561384557600080fd5b843561385081613e9e565b9350602085013561386081613e9e565b925060408501359150606085013567ffffffffffffffff81111561388357600080fd5b8501601f8101871361389457600080fd5b6138a3878235602084016136ef565b91505092959194509250565b600080604083850312156138c257600080fd5b82356138cd81613e9e565b91506138db60208401613783565b90509250929050565b600080604083850312156138f757600080fd5b823561390281613e9e565b946020939093013593505050565b60008060006040848603121561392557600080fd5b833567ffffffffffffffff8082111561393d57600080fd5b818601915086601f83011261395157600080fd5b81358181111561396057600080fd5b8760208260051b850101111561397557600080fd5b6020928301989097509590910135949350505050565b60006020828403121561399d57600080fd5b611fdf82613783565b6000602082840312156139b857600080fd5b5035919050565b6000602082840312156139d157600080fd5b8135611fdf81613ec0565b6000602082840312156139ee57600080fd5b8151611fdf81613ec0565b600060208284031215613a0b57600080fd5b813567ffffffffffffffff811115613a2257600080fd5b8201601f81018413613a3357600080fd5b612802848235602084016136ef565b600080600060608486031215613a5757600080fd5b833592506020840135613a6981613e9e565b915060408401356bffffffffffffffffffffffff81168114613a8a57600080fd5b809150509250925092565b60008060408385031215613aa857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613b16578151805173ffffffffffffffffffffffffffffffffffffffff1688528301516bffffffffffffffffffffffff168388015260409096019590820190600101613acb565b509495945050505050565b60008151808452613b39816020860160208601613ce6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008351613b7d818460208801613ce6565b835190830190613b91818360208801613ce6565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613bd96080830184613b21565b9695505050505050565b602081526000611fdf6020830184613ab7565b6020808252825182820181905260009190848201906040850190845b81811015613c2e57835183529284019291840191600101613c12565b50909695505050505050565b602081526000611fdf6020830184613b21565b8281526040602082015260006128026040830184613ab7565b60008219821115613c7957613c79613db3565b500190565b600082613c8d57613c8d613de2565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cca57613cca613db3565b500290565b600082821015613ce157613ce1613db3565b500390565b60005b83811015613d01578181015183820152602001613ce9565b83811115610f6a5750506000910152565b600181811c90821680613d2657607f821691505b60208210811415613d60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9857613d98613db3565b5060010190565b600082613dae57613dae613de2565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146123f557600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146123f557600080fdfea26469706673582212205f966e5b4f22fde5ccec4c68af59346011e7f2008e0b01ddc8d08cf22521c60064736f6c63430008070033
Deployed Bytecode
0x60806040526004361061033f5760003560e01c806372132870116101b0578063baa551ee116100ec578063cfc86f7b11610095578063ea5cb5321161006f578063ea5cb53214610a0b578063ee40494614610a21578063f2fde38b14610a37578063fdfbe10a14610a5757600080fd5b8063cfc86f7b14610973578063d3b90b3014610988578063e985e9c5146109b557600080fd5b8063c87b56dd116100c6578063c87b56dd14610906578063cad96cca14610926578063cbce4c971461095357600080fd5b8063baa551ee14610869578063c21d0e6e146108ac578063c56597ba146108d957600080fd5b806391b7f5ed11610159578063a22cb46511610133578063a22cb465146107e9578063acec338a14610809578063b88d4fde14610829578063b96502cb1461084957600080fd5b806391b7f5ed146107a157806395d89b41146107c1578063a0712d68146107d657600080fd5b80638be3a8971161018a5780638be3a897146107295780638da5cb5b146107565780638dba521e1461078157600080fd5b8063721328701461069a5780637cb64759146106b05780638924af74146106d057600080fd5b80632f745c591161027f5780634d615d23116102285780636352211e116102025780636352211e146106265780636b0a11761461064657806370a0823114610665578063715018a61461068557600080fd5b80634d615d23146105cc5780634f6ccce7146105e657806355f804b31461060657600080fd5b80633e672ea0116102595780633e672ea0146105765780633f8121a21461058c57806342842e0e146105ac57600080fd5b80632f745c59146105385780632fc37ab2146105585780633ccfd60b1461056e57600080fd5b8063143094db116102ec578063235b6ea1116102c6578063235b6ea1146104a357806323b872dd146104b957806327ed3dce146104d95780632a55205a146104ec57600080fd5b8063143094db1461044f57806318160ddd1461046f5780631c9073601461048e57600080fd5b8063081812fc1161031d578063081812fc146103bd578063095ea7b3146104025780630be702bf1461042257600080fd5b806301ffc9a71461034457806304db5eed1461037957806306fdde031461039b575b600080fd5b34801561035057600080fd5b5061036461035f3660046139bf565b610a6d565b60405190151581526020015b60405180910390f35b34801561038557600080fd5b506103996103943660046139a6565b610b22565b005b3480156103a757600080fd5b506103b0610b93565b6040516103709190613c3a565b3480156103c957600080fd5b506103dd6103d83660046139a6565b610c25565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610370565b34801561040e57600080fd5b5061039961041d3660046138e4565b610ce5565b34801561042e57600080fd5b506018546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561045b57600080fd5b5061039961046a366004613a42565b610e3e565b34801561047b57600080fd5b506008545b604051908152602001610370565b34801561049a57600080fd5b50610480600a81565b3480156104af57600080fd5b5061048060105481565b3480156104c557600080fd5b506103996104d43660046137ee565b610f70565b6103996104e7366004613910565b610ff7565b3480156104f857600080fd5b5061050c610507366004613a95565b6112bb565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610370565b34801561054457600080fd5b506104806105533660046138e4565b6113e9565b34801561056457600080fd5b50610480600e5481565b61039961149e565b34801561058257600080fd5b5061048060115481565b34801561059857600080fd5b506103996105a736600461398b565b61166c565b3480156105b857600080fd5b506103996105c73660046137ee565b61170a565b3480156105d857600080fd5b50600d546103649060ff1681565b3480156105f257600080fd5b506104806106013660046139a6565b611725565b34801561061257600080fd5b506103996106213660046139f9565b6117c9565b34801561063257600080fd5b506103dd6106413660046139a6565b611847565b34801561065257600080fd5b50600d5461036490610100900460ff1681565b34801561067157600080fd5b50610480610680366004613798565b6118df565b34801561069157600080fd5b50610399611993565b3480156106a657600080fd5b5061048060125481565b3480156106bc57600080fd5b506103996106cb3660046139a6565b611a06565b3480156106dc57600080fd5b506106f06106eb366004613a95565b611a72565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526bffffffffffffffffffffffff909116602083015201610370565b34801561073557600080fd5b506017546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561076257600080fd5b50600a5473ffffffffffffffffffffffffffffffffffffffff166103dd565b34801561078d57600080fd5b5061039961079c3660046139a6565b611ade565b3480156107ad57600080fd5b506103996107bc3660046139a6565b611b4a565b3480156107cd57600080fd5b506103b0611bb6565b6103996107e43660046139a6565b611bc5565b3480156107f557600080fd5b506103996108043660046138af565b611d59565b34801561081557600080fd5b5061039961082436600461398b565b611d64565b34801561083557600080fd5b5061039961084436600461382f565b611dfc565b34801561085557600080fd5b506103996108643660046139a6565b611e84565b34801561087557600080fd5b50610480610884366004613798565b73ffffffffffffffffffffffffffffffffffffffff1660009081526014602052604090205490565b3480156108b857600080fd5b506015546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156108e557600080fd5b506016546103dd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561091257600080fd5b506103b06109213660046139a6565b611ef0565b34801561093257600080fd5b506109466109413660046139a6565b611fe6565b6040516103709190613be3565b34801561095f57600080fd5b5061039961096e3660046138e4565b612098565b34801561097f57600080fd5b506103b06121cc565b34801561099457600080fd5b506109a86109a3366004613798565b61225a565b6040516103709190613bf6565b3480156109c157600080fd5b506103646109d03660046137b5565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b348015610a1757600080fd5b5061048061271081565b348015610a2d57600080fd5b50610480600f5481565b348015610a4357600080fd5b50610399610a52366004613798565b6122fc565b348015610a6357600080fd5b5061048060135481565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f44c74bcc000000000000000000000000000000000000000000000000000000001415610ac157506001919050565b7fffffffff0000000000000000000000000000000000000000000000000000000082167f2a55205a000000000000000000000000000000000000000000000000000000001415610b1357506001919050565b610b1c826123f8565b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610b8e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601255565b606060008054610ba290613d12565b80601f0160208091040260200160405190810160405280929190818152602001828054610bce90613d12565b8015610c1b5780601f10610bf057610100808354040283529160200191610c1b565b820191906000526020600020905b815481529060010190602001808311610bfe57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610cbc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b85565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610cf082611847565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d945760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610b85565b3373ffffffffffffffffffffffffffffffffffffffff82161480610dbd5750610dbd81336109d0565b610e2f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b85565b610e39838361244e565b505050565b600a5473ffffffffffffffffffffffffffffffffffffffff163314610ea55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b604080516001808252818301909252600091816020015b6040805180820190915260008082526020820152815260200190600190039081610ebc5790505090508181600081518110610ef957610ef9613e40565b6020026020010151602001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff16815250508281600081518110610f3b57610f3b613e40565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff9091169052610f6a84826124ee565b50505050565b610f7a33826126b4565b610fec5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b85565b610e3983838361280a565b600061100260085490565b6040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b166020820152909150600090603401604051602081830303815290604052805190602001209050600d60019054906101000a900460ff166110ad5760405162461bcd60e51b815260206004820152600a60248201527f4e6f7420616374697665000000000000000000000000000000000000000000006044820152606401610b85565b601154336000908152601460205260409020546110ca9085613c66565b11156111185760405162461bcd60e51b815260206004820152600d60248201527f416d6f756e742064656e696564000000000000000000000000000000000000006044820152606401610b85565b61115985858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600e549150849050612a48565b6111a55760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964204164647265737300000000000000000000000000000000006044820152606401610b85565b826010546111b39190613c92565b3410156112025760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420657468657200000000000000000000000000006044820152606401610b85565b60135461120f8484613c66565b111561125d5760405162461bcd60e51b815260206004820152600d60248201527f537570706c792064656e696564000000000000000000000000000000000000006044820152606401610b85565b60005b838110156112b35761127b336112768386613c66565b612a5e565b33600090815260146020526040812080546001929061129b908490613c66565b909155508190506112ab81613d66565b915050611260565b505050505050565b6000828152600b60209081526040808320805482518185028101850190935280835284938493929190849084015b8282101561135b576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16818301528252600190920191016112e9565b5050505090506000815111156113d9578060008151811061137e5761137e613e40565b602002602001015160000151611d4c826000815181106113a0576113a0613e40565b6020026020010151602001516bffffffffffffffffffffffff16866113c59190613c92565b6113cf9190613c7e565b92509250506113e2565b60008092509250505b9250929050565b60006113f4836118df565b82106114685760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610b85565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600660209081526040808320938352929052205490565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146115055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b60006005611514476002613c92565b61151e9190613c7e565b90506000600a61152f476002613c92565b6115399190613c7e565b90506000600a61154a476002613c92565b6115549190613c7e565b90506000600a611565476002613c92565b61156f9190613c7e565b60155460405191925073ffffffffffffffffffffffffffffffffffffffff169085156108fc029086906000818181858888f193505050506115af57600080fd5b60165460405173ffffffffffffffffffffffffffffffffffffffff9091169084156108fc029085906000818181858888f193505050506115ee57600080fd5b60175460405173ffffffffffffffffffffffffffffffffffffffff9091169083156108fc029084906000818181858888f1935050505061162d57600080fd5b60185460405173ffffffffffffffffffffffffffffffffffffffff9091169082156108fc029083906000818181858888f19350505050610f6a57600080fd5b600a5473ffffffffffffffffffffffffffffffffffffffff1633146116d35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600d8054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b610e3983838360405180602001604052806000815250611dfc565b600061173060085490565b82106117a45760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610b85565b600882815481106117b7576117b7613e40565b90600052602060002001549050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146118305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b805161184390600c906020840190613656565b5050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610b1c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610b85565b600073ffffffffffffffffffffffffffffffffffffffff821661196a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610b85565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146119fa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b611a046000612a78565b565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611a6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600e55565b600b6020528160005260406000208181548110611a8e57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff811692507401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16905082565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611b455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b601155565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611bb15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b601055565b606060018054610ba290613d12565b6000611bd060085490565b600d5490915060ff16611c255760405162461bcd60e51b815260206004820152600a60248201527f4e6f7420616374697665000000000000000000000000000000000000000000006044820152606401610b85565b600a821115611c765760405162461bcd60e51b815260206004820152600d60248201527f416d6f756e742064656e696564000000000000000000000000000000000000006044820152606401610b85565b81601054611c849190613c92565b341015611cd35760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420657468657200000000000000000000000000006044820152606401610b85565b601254611ce08383613c66565b1115611d2e5760405162461bcd60e51b815260206004820152600d60248201527f537570706c792064656e696564000000000000000000000000000000000000006044820152606401610b85565b60005b82811015610e3957611d47336112768385613c66565b80611d5181613d66565b915050611d31565b611843338383612aef565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611dcb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b611e0633836126b4565b611e785760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610b85565b610f6a84848484612c03565b600a5473ffffffffffffffffffffffffffffffffffffffff163314611eeb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b601355565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611f8a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006064820152608401610b85565b6000611f94612c8c565b90506000815111611fb45760405180602001604052806000815250611fdf565b80611fbe84612c9b565b604051602001611fcf929190613b6b565b6040516020818303038152906040525b9392505050565b6060600b6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561208d576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff811682527401000000000000000000000000000000000000000090046bffffffffffffffffffffffff168183015282526001909201910161201b565b505050509050919050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146120ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b600061210a60085490565b9050600f548211156121845760405162461bcd60e51b815260206004820152602b60248201527f47696674207265736572766520657863656564656420776974682070726f766960448201527f64656420616d6f756e742e0000000000000000000000000000000000000000006064820152608401610b85565b60005b828110156121af5761219d846112768385613c66565b806121a781613d66565b915050612187565b5081600f60008282546121c29190613ccf565b9091555050505050565b600c80546121d990613d12565b80601f016020809104026020016040519081016040528092919081815260200182805461220590613d12565b80156122525780601f1061222757610100808354040283529160200191612252565b820191906000526020600020905b81548152906001019060200180831161223557829003601f168201915b505050505081565b60606000612267836118df565b905060008167ffffffffffffffff81111561228457612284613e6f565b6040519080825280602002602001820160405280156122ad578160200160208202803683370190505b50905060005b828110156122f4576122c585826113e9565b8282815181106122d7576122d7613e40565b6020908102919091010152806122ec81613d66565b9150506122b3565b509392505050565b600a5473ffffffffffffffffffffffffffffffffffffffff1633146123635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b85565b73ffffffffffffffffffffffffffffffffffffffff81166123ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b85565b6123f581612a78565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610b1c5750610b1c82612dcd565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906124a882611847565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b81518110156126a957600073ffffffffffffffffffffffffffffffffffffffff1682828151811061252457612524613e40565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614156125945760405162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e7400000000006044820152606401610b85565b8181815181106125a6576125a6613e40565b6020026020010151602001516bffffffffffffffffffffffff16600014156126105760405162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f7369746976656044820152606401610b85565b6000838152600b60205260409020825183908390811061263257612632613e40565b6020908102919091018101518254600181018455600093845292829020815191909201516bffffffffffffffffffffffff16740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff90911617910155806126a181613d66565b9150506124f1565b506118438282612eb0565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1661274b5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610b85565b600061275683611847565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127c557508373ffffffffffffffffffffffffffffffffffffffff166127ad84610c25565b73ffffffffffffffffffffffffffffffffffffffff16145b80612802575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661282a82611847565b73ffffffffffffffffffffffffffffffffffffffff16146128b35760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610b85565b73ffffffffffffffffffffffffffffffffffffffff821661293b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610b85565b612946838383612eed565b61295160008261244e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290612987908490613ccf565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906129c2908490613c66565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082612a558584612ff3565b14949350505050565b611843828260405180602001604052806000815250613097565b600a805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b6b5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b85565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612c0e84848461280a565b612c1a84848484613120565b610f6a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b85565b6060600c8054610ba290613d12565b606081612cdb57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612d055780612cef81613d66565b9150612cfe9050600a83613c7e565b9150612cdf565b60008167ffffffffffffffff811115612d2057612d20613e6f565b6040519080825280601f01601f191660200182016040528015612d4a576020820181803683370190505b5090505b841561280257612d5f600183613ccf565b9150612d6c600a86613d9f565b612d77906030613c66565b60f81b818381518110612d8c57612d8c613e40565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612dc6600a86613c7e565b9450612d4e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612e6057507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610b1c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610b1c565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ee1929190613c4d565b60405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8316612f5557612f5081600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612f92565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612f9257612f928382613305565b73ffffffffffffffffffffffffffffffffffffffff8216612fb657610e39816133bc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610e3957610e39828261346b565b600081815b84518110156122f457600085828151811061301557613015613e40565b60200260200101519050808311613057576040805160208101859052908101829052606001604051602081830303815290604052805190602001209250613084565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b508061308f81613d66565b915050612ff8565b6130a183836134bc565b6130ae6000848484613120565b610e395760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b85565b600073ffffffffffffffffffffffffffffffffffffffff84163b156132fa576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290613197903390899088908890600401613b9a565b602060405180830381600087803b1580156131b157600080fd5b505af19250505080156131ff575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526131fc918101906139dc565b60015b6132af573d80801561322d576040519150601f19603f3d011682016040523d82523d6000602084013e613232565b606091505b5080516132a75760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610b85565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612802565b506001949350505050565b60006001613312846118df565b61331c9190613ccf565b60008381526007602052604090205490915080821461337c5773ffffffffffffffffffffffffffffffffffffffff841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b50600091825260076020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600681528383209183525290812055565b6008546000906133ce90600190613ccf565b600083815260096020526040812054600880549394509092849081106133f6576133f6613e40565b90600052602060002001549050806008838154811061341757613417613e40565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061344f5761344f613e11565b6001900381819060005260206000200160009055905550505050565b6000613476836118df565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b73ffffffffffffffffffffffffffffffffffffffff821661351f5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b85565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156135915760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b85565b61359d60008383612eed565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906135d3908490613c66565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461366290613d12565b90600052602060002090601f01602090048101928261368457600085556136ca565b82601f1061369d57805160ff19168380011785556136ca565b828001600101855582156136ca579182015b828111156136ca5782518255916020019190600101906136af565b506136d69291506136da565b5090565b5b808211156136d657600081556001016136db565b600067ffffffffffffffff8084111561370a5761370a613e6f565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561375057613750613e6f565b8160405280935085815286868601111561376957600080fd5b858560208301376000602087830101525050509392505050565b8035801515811461379357600080fd5b919050565b6000602082840312156137aa57600080fd5b8135611fdf81613e9e565b600080604083850312156137c857600080fd5b82356137d381613e9e565b915060208301356137e381613e9e565b809150509250929050565b60008060006060848603121561380357600080fd5b833561380e81613e9e565b9250602084013561381e81613e9e565b929592945050506040919091013590565b6000806000806080858703121561384557600080fd5b843561385081613e9e565b9350602085013561386081613e9e565b925060408501359150606085013567ffffffffffffffff81111561388357600080fd5b8501601f8101871361389457600080fd5b6138a3878235602084016136ef565b91505092959194509250565b600080604083850312156138c257600080fd5b82356138cd81613e9e565b91506138db60208401613783565b90509250929050565b600080604083850312156138f757600080fd5b823561390281613e9e565b946020939093013593505050565b60008060006040848603121561392557600080fd5b833567ffffffffffffffff8082111561393d57600080fd5b818601915086601f83011261395157600080fd5b81358181111561396057600080fd5b8760208260051b850101111561397557600080fd5b6020928301989097509590910135949350505050565b60006020828403121561399d57600080fd5b611fdf82613783565b6000602082840312156139b857600080fd5b5035919050565b6000602082840312156139d157600080fd5b8135611fdf81613ec0565b6000602082840312156139ee57600080fd5b8151611fdf81613ec0565b600060208284031215613a0b57600080fd5b813567ffffffffffffffff811115613a2257600080fd5b8201601f81018413613a3357600080fd5b612802848235602084016136ef565b600080600060608486031215613a5757600080fd5b833592506020840135613a6981613e9e565b915060408401356bffffffffffffffffffffffff81168114613a8a57600080fd5b809150509250925092565b60008060408385031215613aa857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613b16578151805173ffffffffffffffffffffffffffffffffffffffff1688528301516bffffffffffffffffffffffff168388015260409096019590820190600101613acb565b509495945050505050565b60008151808452613b39816020860160208601613ce6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008351613b7d818460208801613ce6565b835190830190613b91818360208801613ce6565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152613bd96080830184613b21565b9695505050505050565b602081526000611fdf6020830184613ab7565b6020808252825182820181905260009190848201906040850190845b81811015613c2e57835183529284019291840191600101613c12565b50909695505050505050565b602081526000611fdf6020830184613b21565b8281526040602082015260006128026040830184613ab7565b60008219821115613c7957613c79613db3565b500190565b600082613c8d57613c8d613de2565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cca57613cca613db3565b500290565b600082821015613ce157613ce1613db3565b500390565b60005b83811015613d01578181015183820152602001613ce9565b83811115610f6a5750506000910152565b600181811c90821680613d2657607f821691505b60208210811415613d60577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9857613d98613db3565b5060010190565b600082613dae57613dae613de2565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146123f557600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000811681146123f557600080fdfea26469706673582212205f966e5b4f22fde5ccec4c68af59346011e7f2008e0b01ddc8d08cf22521c60064736f6c63430008070033
Deployed Bytecode Sourcemap
252:5226:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2897:356;;;;;;;;;;-1:-1:-1;2897:356:19;;;;;:::i;:::-;;:::i;:::-;;;10840:14:20;;10833:22;10815:41;;10803:2;10788:18;2897:356:19;;;;;;;;1657:95;;;;;;;;;;-1:-1:-1;1657:95:19;;;;;:::i;:::-;;:::i;:::-;;2408:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3919:217::-;;;;;;;;;;-1:-1:-1;3919:217:4;;;;;:::i;:::-;;:::i;:::-;;;8502:42:20;8490:55;;;8472:74;;8460:2;8445:18;3919:217:4;8326:226:20;3457:401:4;;;;;;;;;;-1:-1:-1;3457:401:4;;;;;:::i;:::-;;:::i;1080:63:19:-;;;;;;;;;;-1:-1:-1;1080:63:19;;;;;;;;2168:363;;;;;;;;;;-1:-1:-1;2168:363:19;;;;;:::i;:::-;;:::i;1614:111:5:-;;;;;;;;;;-1:-1:-1;1701:10:5;:17;1614:111;;;11013:25:20;;;11001:2;10986:18;1614:111:5;10867:177:20;663:40:19;;;;;;;;;;;;701:2;663:40;;584:35;;;;;;;;;;;;;;;;4646:330:4;;;;;;;;;;-1:-1:-1;4646:330:4;;;;;:::i;:::-;;:::i;4420:654:19:-;;;;;;:::i;:::-;;:::i;2535:358::-;;;;;;;;;;-1:-1:-1;2535:358:19;;;;;:::i;:::-;;:::i;:::-;;;;9626:42:20;9614:55;;;9596:74;;9701:2;9686:18;;9679:34;;;;9569:18;2535:358:19;9422:297:20;1290:253:5;;;;;;;;;;-1:-1:-1;1290:253:5;;;;;:::i;:::-;;:::i;453:95:19:-;;;;;;;;;;;;;;;;5078:398;;;:::i;623:36::-;;;;;;;;;;;;;;;;1549:104;;;;;;;;;;-1:-1:-1;1549:104:19;;;;;:::i;:::-;;:::i;5042:179:4:-;;;;;;;;;;-1:-1:-1;5042:179:4;;;;;:::i;:::-;;:::i;383:27:19:-;;;;;;;;;;-1:-1:-1;383:27:19;;;;;;;;1797:230:5;;;;;;;;;;-1:-1:-1;1797:230:5;;;;;:::i;:::-;;:::i;1371:94:19:-;;;;;;;;;;-1:-1:-1;1371:94:19;;;;;:::i;:::-;;:::i;2111:235:4:-;;;;;;;;;;-1:-1:-1;2111:235:4;;;;;:::i;:::-;;:::i;414:34:19:-;;;;;;;;;;-1:-1:-1;414:34:19;;;;;;;;;;;1849:205:4;;;;;;;;;;-1:-1:-1;1849:205:4;;;;;:::i;:::-;;:::i;1661:101:15:-;;;;;;;;;;;;;:::i;750:34:19:-;;;;;;;;;;;;;;;;1990:95;;;;;;;;;;-1:-1:-1;1990:95:19;;;;;:::i;:::-;;:::i;125:52:0:-;;;;;;;;;;-1:-1:-1;125:52:0;;;;;:::i;:::-;;:::i;:::-;;;;8775:42:20;8763:55;;;8745:74;;8867:26;8855:39;;;8850:2;8835:18;;8828:67;8718:18;125:52:0;8557:344:20;1013:63:19;;;;;;;;;;-1:-1:-1;1013:63:19;;;;;;;;1029:85:15;;;;;;;;;;-1:-1:-1;1101:6:15;;;;1029:85;;1867:119:19;;;;;;;;;;-1:-1:-1;1867:119:19;;;;;:::i;:::-;;:::i;2089:75::-;;;;;;;;;;-1:-1:-1;2089:75:19;;;;;:::i;:::-;;:::i;2570:102:4:-;;;;;;;;;;;;;:::i;4016:400:19:-;;;;;;:::i;:::-;;:::i;4203:153:4:-;;;;;;;;;;-1:-1:-1;4203:153:4;;;;;:::i;:::-;;:::i;1469:76:19:-;;;;;;;;;;-1:-1:-1;1469:76:19;;;;;:::i;:::-;;:::i;5287:320:4:-;;;;;;;;;;-1:-1:-1;5287:320:4;;;;;:::i;:::-;;:::i;1756:107:19:-;;;;;;;;;;-1:-1:-1;1756:107:19;;;;;:::i;:::-;;:::i;3572:110::-;;;;;;;;;;-1:-1:-1;3572:110:19;;;;;:::i;:::-;3658:15;;3633:7;3658:15;;;:8;:15;;;;;;;3572:110;879:63;;;;;;;;;;-1:-1:-1;879:63:19;;;;;;;;946;;;;;;;;;;-1:-1:-1;946:63:19;;;;;;;;2738:329:4;;;;;;;;;;-1:-1:-1;2738:329:4;;;;;:::i;:::-;;:::i;186:135:17:-;;;;;;;;;;-1:-1:-1;186:135:17;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3694:317:19:-;;;;;;;;;;-1:-1:-1;3694:317:19;;;;;:::i;:::-;;:::i;351:27::-;;;;;;;;;;;;;:::i;3258:310::-;;;;;;;;;;-1:-1:-1;3258:310:19;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4422:162:4:-;;;;;;;;;;-1:-1:-1;4422:162:4;;;;;:::i;:::-;4542:25;;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4422:162;707:39:19;;;;;;;;;;;;741:5;707:39;;553:27;;;;;;;;;;;;;;;;1911:198:15;;;;;;;;;;-1:-1:-1;1911:198:15;;;;;:::i;:::-;;:::i;788:37:19:-;;;;;;;;;;;;;;;;2897:356;3000:4;3019:53;;;3034:38;3019:53;3016:94;;;-1:-1:-1;3095:4:19;;2897:356;-1:-1:-1;2897:356:19:o;3016:94::-;3122:36;;;3137:21;3122:36;3119:77;;;-1:-1:-1;3181:4:19;;2897:356;-1:-1:-1;2897:356:19:o;3119:77::-;3212:36;3236:11;3212:23;:36::i;:::-;3205:43;2897:356;-1:-1:-1;;2897:356:19:o;1657:95::-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;;;;;;;;;1723:12:19::1;:24:::0;1657:95::o;2408:98:4:-;2462:13;2494:5;2487:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2408:98;:::o;3919:217::-;3995:7;7167:16;;;:7;:16;;;;;;:30;:16;4014:73;;;;-1:-1:-1;;;4014:73:4;;17308:2:20;4014:73:4;;;17290:21:20;17347:2;17327:18;;;17320:30;17386:34;17366:18;;;17359:62;17457:14;17437:18;;;17430:42;17489:19;;4014:73:4;17106:408:20;4014:73:4;-1:-1:-1;4105:24:4;;;;:15;:24;;;;;;;;;3919:217::o;3457:401::-;3537:13;3553:23;3568:7;3553:14;:23::i;:::-;3537:39;;3600:5;3594:11;;:2;:11;;;;3586:57;;;;-1:-1:-1;;;3586:57:4;;18908:2:20;3586:57:4;;;18890:21:20;18947:2;18927:18;;;18920:30;18986:34;18966:18;;;18959:62;19057:3;19037:18;;;19030:31;19078:19;;3586:57:4;18706:397:20;3586:57:4;719:10:2;3675:21:4;;;;;:62;;-1:-1:-1;3700:37:4;3717:5;719:10:2;4422:162:4;:::i;3700:37::-;3654:165;;;;-1:-1:-1;;;3654:165:4;;15701:2:20;3654:165:4;;;15683:21:20;15740:2;15720:18;;;15713:30;15779:34;15759:18;;;15752:62;15850:26;15830:18;;;15823:54;15894:19;;3654:165:4;15499:420:20;3654:165:4;3830:21;3839:2;3843:7;3830:8;:21::i;:::-;3527:331;3457:401;;:::o;2168:363:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;2343:21:19::1;::::0;;2362:1:::1;2343:21:::0;;;;;::::1;::::0;;;2308:32:::1;::::0;2343:21:::1;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;2343:21:19::1;;;;;;;;;;;;;;;2308:56;;2396:22;2374:10;2385:1;2374:13;;;;;;;;:::i;:::-;;;;;;;:19;;:44;;;;;;;;;::::0;::::1;2452:27;2428:10;2439:1;2428:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;:51:::1;::::0;;::::1;::::0;;2489:36:::1;2504:8:::0;2514:10;2489:14:::1;:36::i;:::-;2298:233;2168:363:::0;;;:::o;4646:330:4:-;4835:41;719:10:2;4868:7:4;4835:18;:41::i;:::-;4827:103;;;;-1:-1:-1;;;4827:103:4;;19654:2:20;4827:103:4;;;19636:21:20;19693:2;19673:18;;;19666:30;19732:34;19712:18;;;19705:62;19803:19;19783:18;;;19776:47;19840:19;;4827:103:4;19452:413:20;4827:103:4;4941:28;4951:4;4957:2;4961:7;4941:9;:28::i;4420:654:19:-;4508:14;4525:13;1701:10:5;:17;;1614:111;4525:13:19;4569:28;;7492:66:20;4586:10:19;7479:2:20;7475:15;7471:88;4569:28:19;;;7459:101:20;4508:30:19;;-1:-1:-1;4544:12:19;;7576::20;;4569:28:19;;;;;;;;;;;;4559:39;;;;;;4544:54;;4614:14;;;;;;;;;;;4605:38;;;;-1:-1:-1;;;4605:38:19;;13829:2:20;4605:38:19;;;13811:21:20;13868:2;13848:18;;;13841:30;13907:12;13887:18;;;13880:40;13937:18;;4605:38:19;13627:334:20;4605:38:19;4692:17;;4677:10;4668:20;;;;:8;:20;;;;;;4658:30;;:7;:30;:::i;:::-;:51;;4649:78;;;;-1:-1:-1;;;4649:78:19;;20072:2:20;4649:78:19;;;20054:21:20;20111:2;20091:18;;;20084:30;20150:15;20130:18;;;20123:43;20183:18;;4649:78:19;19870:337:20;4649:78:19;4742:51;4761:12;;4742:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4775:11:19;;;-1:-1:-1;4788:4:19;;-1:-1:-1;4742:18:19;:51::i;:::-;4733:80;;;;-1:-1:-1;;;4733:80:19;;19310:2:20;4733:80:19;;;19292:21:20;19349:2;19329:18;;;19322:30;19388:17;19368:18;;;19361:45;19423:18;;4733:80:19;19108:339:20;4733:80:19;4850:7;4841:6;;:16;;;;:::i;:::-;4828:9;:29;;4819:61;;;;-1:-1:-1;;;4819:61:19;;14168:2:20;4819:61:19;;;14150:21:20;14207:2;14187:18;;;14180:30;14246:20;14226:18;;;14219:48;14284:18;;4819:61:19;13966:342:20;4819:61:19;4915:15;;4895:16;4904:7;4895:6;:16;:::i;:::-;:35;;4886:62;;;;-1:-1:-1;;;4886:62:19;;21183:2:20;4886:62:19;;;21165:21:20;21222:2;21202:18;;;21195:30;21261:15;21241:18;;;21234:43;21294:18;;4886:62:19;20981:337:20;4886:62:19;4959:9;4955:115;4974:7;4970:1;:11;4955:115;;;4995:35;5006:10;5018;5027:1;5018:6;:10;:::i;:::-;4995:9;:35::i;:::-;5047:10;5038:20;;;;:8;:20;;;;;:25;;5062:1;;5038:20;:25;;5062:1;;5038:25;:::i;:::-;;;;-1:-1:-1;4983:3:19;;-1:-1:-1;4983:3:19;;;:::i;:::-;;;;4955:115;;;;4502:572;;4420:654;;;:::o;2535:358::-;2618:16;2704:19;;;:9;:19;;;;;;;;2669:54;;;;;;;;;;;;;;;;;2618:16;;;;2669:54;2704:19;2669:54;2618:16;;2669:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2756:1;2736:10;:17;:21;2733:123;;;2781:10;2792:1;2781:13;;;;;;;;:::i;:::-;;;;;;;:21;;;2840:4;2819:10;2830:1;2819:13;;;;;;;;:::i;:::-;;;;;;;:19;;;2805:33;;:11;:33;;;;:::i;:::-;2804:40;;;;:::i;:::-;2773:72;;;;;;;2733:123;2881:1;2885;2865:22;;;;;2535:358;;;;;;:::o;1290:253:5:-;1387:7;1422:23;1439:5;1422:16;:23::i;:::-;1414:5;:31;1406:87;;;;-1:-1:-1;;;1406:87:5;;11475:2:20;1406:87:5;;;11457:21:20;11514:2;11494:18;;;11487:30;11553:34;11533:18;;;11526:62;11624:13;11604:18;;;11597:41;11655:19;;1406:87:5;11273:407:20;1406:87:5;-1:-1:-1;1510:19:5;;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1290:253::o;5078:398:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;5129:11:19::1;5171:1;5143:25;:21;5167:1;5143:25;:::i;:::-;:29;;;;:::i;:::-;5129:43:::0;-1:-1:-1;5178:11:19::1;5220:2;5192:25;:21;5216:1;5192:25;:::i;:::-;:30;;;;:::i;:::-;5178:44:::0;-1:-1:-1;5228:11:19::1;5270:2;5242:25;:21;5266:1;5242:25;:::i;:::-;:30;;;;:::i;:::-;5228:44:::0;-1:-1:-1;5278:11:19::1;5320:2;5292:25;:21;5316:1;5292:25;:::i;:::-;:30;;;;:::i;:::-;5345:3;::::0;5337:22:::1;::::0;5278:44;;-1:-1:-1;5345:3:19::1;;::::0;5337:22;::::1;;;::::0;5355:3;;5345::::1;5337:22:::0;5345:3;5337:22;5355:3;5345;5337:22;::::1;;;;;;5329:31;;;::::0;::::1;;5382:3;::::0;5374:22:::1;::::0;5382:3:::1;::::0;;::::1;::::0;5374:22;::::1;;;::::0;5392:3;;5382::::1;5374:22:::0;5382:3;5374:22;5392:3;5382;5374:22;::::1;;;;;;5366:31;;;::::0;::::1;;5419:3;::::0;5411:22:::1;::::0;5419:3:::1;::::0;;::::1;::::0;5411:22;::::1;;;::::0;5429:3;;5419::::1;5411:22:::0;5419:3;5411:22;5429:3;5419;5411:22;::::1;;;;;;5403:31;;;::::0;::::1;;5456:3;::::0;5448:22:::1;::::0;5456:3:::1;::::0;;::::1;::::0;5448:22;::::1;;;::::0;5466:3;;5456::::1;5448:22:::0;5456:3;5448:22;5466:3;5456;5448:22;::::1;;;;;;5440:31;;;::::0;::::1;1549:104:::0;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1618:14:19::1;:30:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;1549:104::o;5042:179:4:-;5175:39;5192:4;5198:2;5202:7;5175:39;;;;;;;;;;;;:16;:39::i;1797:230:5:-;1872:7;1907:30;1701:10;:17;;1614:111;1907:30;1899:5;:38;1891:95;;;;-1:-1:-1;;;1891:95:5;;20414:2:20;1891:95:5;;;20396:21:20;20453:2;20433:18;;;20426:30;20492:34;20472:18;;;20465:62;20563:14;20543:18;;;20536:42;20595:19;;1891:95:5;20212:408:20;1891:95:5;2003:10;2014:5;2003:17;;;;;;;;:::i;:::-;;;;;;;;;1996:24;;1797:230;;;:::o;1371:94:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1437:23:19;;::::1;::::0;:13:::1;::::0;:23:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1371:94:::0;:::o;2111:235:4:-;2183:7;2218:16;;;:7;:16;;;;;;;;2252:19;2244:73;;;;-1:-1:-1;;;2244:73:4;;16537:2:20;2244:73:4;;;16519:21:20;16576:2;16556:18;;;16549:30;16615:34;16595:18;;;16588:62;16686:11;16666:18;;;16659:39;16715:19;;2244:73:4;16335:405:20;1849:205:4;1921:7;1948:19;;;1940:74;;;;-1:-1:-1;;;1940:74:4;;16126:2:20;1940:74:4;;;16108:21:20;16165:2;16145:18;;;16138:30;16204:34;16184:18;;;16177:62;16275:12;16255:18;;;16248:40;16305:19;;1940:74:4;15924:406:20;1940:74:4;-1:-1:-1;2031:16:4;;;;;;:9;:16;;;;;;;1849:205::o;1661:101:15:-;1101:6;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1990:95:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;2056:11:19::1;:24:::0;1990:95::o;125:52:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;125:52:0;;;;;;-1:-1:-1;125:52:0;:::o;1867:119:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1945:17:19::1;:36:::0;1867:119::o;2089:75::-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;2145:6:19::1;:14:::0;2089:75::o;2570:102:4:-;2626:13;2658:7;2651:14;;;;;:::i;4016:400:19:-;4068:14;4085:13;1701:10:5;:17;;1614:111;4085:13:19;4114:7;;4068:30;;-1:-1:-1;4114:7:19;;4105:31;;;;-1:-1:-1;;;4105:31:19;;13829:2:20;4105:31:19;;;13811:21:20;13868:2;13848:18;;;13841:30;13907:12;13887:18;;;13880:40;13937:18;;4105:31:19;13627:334:20;4105:31:19;701:2;4151:7;:22;;4142:49;;;;-1:-1:-1;;;4142:49:19;;20072:2:20;4142:49:19;;;20054:21:20;20111:2;20091:18;;;20084:30;20150:15;20130:18;;;20123:43;20183:18;;4142:49:19;19870:337:20;4142:49:19;4228:7;4219:6;;:16;;;;:::i;:::-;4206:9;:29;;4197:61;;;;-1:-1:-1;;;4197:61:19;;14168:2:20;4197:61:19;;;14150:21:20;14207:2;14187:18;;;14180:30;14246:20;14226:18;;;14219:48;14284:18;;4197:61:19;13966:342:20;4197:61:19;4293:12;;4273:16;4282:7;4273:6;:16;:::i;:::-;:32;;4264:59;;;;-1:-1:-1;;;4264:59:19;;21183:2:20;4264:59:19;;;21165:21:20;21222:2;21202:18;;;21195:30;21261:15;21241:18;;;21234:43;21294:18;;4264:59:19;20981:337:20;4264:59:19;4334:9;4330:82;4349:7;4345:1;:11;4330:82;;;4370:35;4381:10;4393;4402:1;4393:6;:10;:::i;4370:35::-;4358:3;;;;:::i;:::-;;;;4330:82;;4203:153:4;4297:52;719:10:2;4330:8:4;4340;4297:18;:52::i;1469:76:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1524:7:19::1;:16:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;1469:76::o;5287:320:4:-;5456:41;719:10:2;5489:7:4;5456:18;:41::i;:::-;5448:103;;;;-1:-1:-1;;;5448:103:4;;19654:2:20;5448:103:4;;;19636:21:20;19693:2;19673:18;;;19666:30;19732:34;19712:18;;;19705:62;19803:19;19783:18;;;19776:47;19840:19;;5448:103:4;19452:413:20;5448:103:4;5561:39;5575:4;5581:2;5585:7;5594:5;5561:13;:39::i;1756:107:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1828:15:19::1;:30:::0;1756:107::o;2738:329:4:-;7144:4;7167:16;;;:7;:16;;;;;;2811:13;;7167:30;:16;2836:76;;;;-1:-1:-1;;;2836:76:4;;18492:2:20;2836:76:4;;;18474:21:20;18531:2;18511:18;;;18504:30;18570:34;18550:18;;;18543:62;18641:17;18621:18;;;18614:45;18676:19;;2836:76:4;18290:411:20;2836:76:4;2923:21;2947:10;:8;:10::i;:::-;2923:34;;2998:1;2980:7;2974:21;:25;:86;;;;;;;;;;;;;;;;;3026:7;3035:18;:7;:16;:18::i;:::-;3009:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2974:86;2967:93;2738:329;-1:-1:-1;;;2738:329:4:o;186:135:17:-;261:21;301:9;:13;311:2;301:13;;;;;;;;;;;294:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;186:135;;;:::o;3694:317:19:-;1101:6:15;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;3765:14:19::1;3782:13;1701:10:5::0;:17;;1614:111;3782:13:19::1;3765:30;;3824:6;;3813:7;:17;;3805:73;;;::::0;-1:-1:-1;;;3805:73:19;;15289:2:20;3805:73:19::1;::::0;::::1;15271:21:20::0;15328:2;15308:18;;;15301:30;15367:34;15347:18;;;15340:62;15438:13;15418:18;;;15411:41;15469:19;;3805:73:19::1;15087:407:20::0;3805:73:19::1;3897:9;3893:83;3912:7;3908:1;:11;3893:83;;;3937:28;3948:3:::0;3953:10:::1;3962:1:::0;3953:6;:10:::1;:::i;3937:28::-;3921:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3893:83;;;;3995:7;3985:6;;:17;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;3694:317:19:o;351:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3258:310::-;3321:16;3345:18;3366:17;3376:6;3366:9;:17::i;:::-;3345:38;;3389:25;3431:10;3417:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3417:25:19;;3389:53;;3453:9;3449:94;3468:10;3464:1;:14;3449:94;;;3506:30;3526:6;3534:1;3506:19;:30::i;:::-;3492:8;3501:1;3492:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;3480:3;;;;:::i;:::-;;;;3449:94;;;-1:-1:-1;3555:8:19;3258:310;-1:-1:-1;;;3258:310:19:o;1911:198:15:-;1101:6;;1241:23;1101:6;719:10:2;1241:23:15;1233:68;;;;-1:-1:-1;;;1233:68:15;;17721:2:20;1233:68:15;;;17703:21:20;;;17740:18;;;17733:30;17799:34;17779:18;;;17772:62;17851:18;;1233:68:15;17519:356:20;1233:68:15;1999:22:::1;::::0;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:15;;12306:2:20;1991:73:15::1;::::0;::::1;12288:21:20::0;12345:2;12325:18;;;12318:30;12384:34;12364:18;;;12357:62;12455:8;12435:18;;;12428:36;12481:19;;1991:73:15::1;12104:402:20::0;1991:73:15::1;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;989:222:5:-;1091:4;1114:50;;;1129:35;1114:50;;:90;;;1168:36;1192:11;1168:23;:36::i;10930:171:4:-;11004:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;11057:23;11004:24;11057:14;:23::i;:::-;11048:46;;;;;;;;;;;;10930:171;;:::o;184:416:0:-;279:6;274:278;295:10;:17;291:1;:21;274:278;;;374:3;341:37;;:10;352:1;341:13;;;;;;;;:::i;:::-;;;;;;;:21;;;:37;;;;333:77;;;;-1:-1:-1;;;333:77:0;;20827:2:20;333:77:0;;;20809:21:20;20866:2;20846:18;;;20839:30;20905:29;20885:18;;;20878:57;20952:18;;333:77:0;20625:351:20;333:77:0;432:10;443:1;432:13;;;;;;;;:::i;:::-;;;;;;;:19;;;:24;;455:1;432:24;;424:69;;;;-1:-1:-1;;;424:69:0;;14928:2:20;424:69:0;;;14910:21:20;;;14947:18;;;14940:30;15006:34;14986:18;;;14979:62;15058:18;;424:69:0;14726:356:20;424:69:0;507:14;;;;:9;:14;;;;;527:13;;:10;;538:1;;527:13;;;;;;:::i;:::-;;;;;;;;;;;;507:34;;;;;;;-1:-1:-1;507:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;314:3;;;;:::i;:::-;;;;274:278;;;;561:32;577:3;582:10;561:15;:32::i;7362:344:4:-;7455:4;7167:16;;;:7;:16;;;;;;:30;:16;7471:73;;;;-1:-1:-1;;;7471:73:4;;14515:2:20;7471:73:4;;;14497:21:20;14554:2;14534:18;;;14527:30;14593:34;14573:18;;;14566:62;14664:14;14644:18;;;14637:42;14696:19;;7471:73:4;14313:408:20;7471:73:4;7554:13;7570:23;7585:7;7570:14;:23::i;:::-;7554:39;;7622:5;7611:16;;:7;:16;;;:51;;;;7655:7;7631:31;;:20;7643:7;7631:11;:20::i;:::-;:31;;;7611:51;:87;;;-1:-1:-1;4542:25:4;;;;4519:4;4542:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7666:32;7603:96;7362:344;-1:-1:-1;;;;7362:344:4:o;10259:560::-;10413:4;10386:31;;:23;10401:7;10386:14;:23::i;:::-;:31;;;10378:85;;;;-1:-1:-1;;;10378:85:4;;18082:2:20;10378:85:4;;;18064:21:20;18121:2;18101:18;;;18094:30;18160:34;18140:18;;;18133:62;18231:11;18211:18;;;18204:39;18260:19;;10378:85:4;17880:405:20;10378:85:4;10481:16;;;10473:65;;;;-1:-1:-1;;;10473:65:4;;13070:2:20;10473:65:4;;;13052:21:20;13109:2;13089:18;;;13082:30;13148:34;13128:18;;;13121:62;13219:6;13199:18;;;13192:34;13243:19;;10473:65:4;12868:400:20;10473:65:4;10549:39;10570:4;10576:2;10580:7;10549:20;:39::i;:::-;10650:29;10667:1;10671:7;10650:8;:29::i;:::-;10690:15;;;;;;;:9;:15;;;;;:20;;10709:1;;10690:15;:20;;10709:1;;10690:20;:::i;:::-;;;;-1:-1:-1;;10720:13:4;;;;;;;:9;:13;;;;;:18;;10737:1;;10720:13;:18;;10737:1;;10720:18;:::i;:::-;;;;-1:-1:-1;;10748:16:4;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;;10785:27;;10748:16;;10785:27;;;;;;;10259:560;;;:::o;847:184:14:-;968:4;1020;991:25;1004:5;1011:4;991:12;:25::i;:::-;:33;;847:184;-1:-1:-1;;;;847:184:14:o;8036:108:4:-;8111:26;8121:2;8125:7;8111:26;;;;;;;;;;;;:9;:26::i;2263:187:15:-;2355:6;;;;2371:17;;;;;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;11236:307:4:-;11386:8;11377:17;;:5;:17;;;;11369:55;;;;-1:-1:-1;;;11369:55:4;;13475:2:20;11369:55:4;;;13457:21:20;13514:2;13494:18;;;13487:30;13553:27;13533:18;;;13526:55;13598:18;;11369:55:4;13273:349:20;11369:55:4;11434:25;;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;11495:41;;10815::20;;;11495::4;;10788:18:20;11495:41:4;;;;;;;11236:307;;;:::o;6469:::-;6620:28;6630:4;6636:2;6640:7;6620:9;:28::i;:::-;6666:48;6689:4;6695:2;6699:7;6708:5;6666:22;:48::i;:::-;6658:111;;;;-1:-1:-1;;;6658:111:4;;11887:2:20;6658:111:4;;;11869:21:20;11926:2;11906:18;;;11899:30;11965:34;11945:18;;;11938:62;12036:20;12016:18;;;12009:48;12074:19;;6658:111:4;11685:414:20;1261:106:19;1321:13;1349;1342:20;;;;;:::i;328:703:18:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:18;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:18;;-1:-1:-1;773:2:18;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:18;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:18;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:18;981:2;972:11;;:::i;:::-;;;844:150;;1490:300:4;1592:4;1627:40;;;1642:25;1627:40;;:104;;-1:-1:-1;1683:48:4;;;1698:33;1683:48;1627:104;:156;;;-1:-1:-1;952:25:3;937:40;;;;1747:36:4;829:155:3;327:141:17;432:29;445:3;450:10;432:29;;;;;;;:::i;:::-;;;;;;;;327:141;;:::o;2623:572:5:-;2822:18;;;2818:183;;2856:40;2888:7;4004:10;:17;;3977:24;;;;:15;:24;;;;;:44;;;4031:24;;;;;;;;;;;;3901:161;2856:40;2818:183;;;2925:2;2917:10;;:4;:10;;;2913:88;;2943:47;2976:4;2982:7;2943:32;:47::i;:::-;3014:16;;;3010:179;;3046:45;3083:7;3046:36;:45::i;3010:179::-;3118:4;3112:10;;:2;:10;;;3108:81;;3138:40;3166:2;3170:7;3138:27;:40::i;1383:688:14:-;1466:7;1508:4;1466:7;1522:514;1546:5;:12;1542:1;:16;1522:514;;;1579:20;1602:5;1608:1;1602:8;;;;;;;;:::i;:::-;;;;;;;1579:31;;1644:12;1628;:28;1624:402;;1779:44;;;;;;7756:19:20;;;7791:12;;;7784:28;;;7828:12;;1779:44:14;;;;;;;;;;;;1769:55;;;;;;1754:70;;1624:402;;;1966:44;;;;;;7756:19:20;;;7791:12;;;7784:28;;;7828:12;;1966:44:14;;;;;;;;;;;;1956:55;;;;;;1941:70;;1624:402;-1:-1:-1;1560:3:14;;;;:::i;:::-;;;;1522:514;;8365:311:4;8490:18;8496:2;8500:7;8490:5;:18::i;:::-;8539:54;8570:1;8574:2;8578:7;8587:5;8539:22;:54::i;:::-;8518:151;;;;-1:-1:-1;;;8518:151:4;;11887:2:20;8518:151:4;;;11869:21:20;11926:2;11906:18;;;11899:30;11965:34;11945:18;;;11938:62;12036:20;12016:18;;;12009:48;12074:19;;8518:151:4;11685:414:20;12096:778:4;12246:4;12266:13;;;1087:20:1;1133:8;12262:606:4;;12301:72;;;;;:36;;;;;;:72;;719:10:2;;12352:4:4;;12358:7;;12367:5;;12301:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12301:72:4;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12297:519;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12540:13:4;;12536:266;;12582:60;;-1:-1:-1;;;12582:60:4;;11887:2:20;12582:60:4;;;11869:21:20;11926:2;11906:18;;;11899:30;11965:34;11945:18;;;11938:62;12036:20;12016:18;;;12009:48;12074:19;;12582:60:4;11685:414:20;12536:266:4;12754:6;12748:13;12739:6;12735:2;12731:15;12724:38;12297:519;12423:51;;12433:41;12423:51;;-1:-1:-1;12416:58:4;;12262:606;-1:-1:-1;12853:4:4;12096:778;;;;;;:::o;4679:970:5:-;4941:22;4991:1;4966:22;4983:4;4966:16;:22::i;:::-;:26;;;;:::i;:::-;5002:18;5023:26;;;:17;:26;;;;;;4941:51;;-1:-1:-1;5153:28:5;;;5149:323;;5219:18;;;5197:19;5219:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5268:30;;;;;;:44;;;5384:30;;:17;:30;;;;;:43;;;5149:323;-1:-1:-1;5565:26:5;;;;:17;:26;;;;;;;;5558:33;;;5608:18;;;;;;:12;:18;;;;;:34;;;;;;;5601:41;4679:970::o;5937:1061::-;6211:10;:17;6186:22;;6211:21;;6231:1;;6211:21;:::i;:::-;6242:18;6263:24;;;:15;:24;;;;;;6631:10;:26;;6186:46;;-1:-1:-1;6263:24:5;;6186:46;;6631:26;;;;;;:::i;:::-;;;;;;;;;6609:48;;6693:11;6668:10;6679;6668:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6772:28;;;:15;:28;;;;;;;:41;;;6941:24;;;;;6934:31;6975:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6008:990;;;5937:1061;:::o;3489:217::-;3573:14;3590:20;3607:2;3590:16;:20::i;:::-;3620:16;;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3664:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3489:217:5:o;8998:372:4:-;9077:16;;;9069:61;;;;-1:-1:-1;;;9069:61:4;;16947:2:20;9069:61:4;;;16929:21:20;;;16966:18;;;16959:30;17025:34;17005:18;;;16998:62;17077:18;;9069:61:4;16745:356:20;9069:61:4;7144:4;7167:16;;;:7;:16;;;;;;:30;:16;:30;9140:58;;;;-1:-1:-1;;;9140:58:4;;12713:2:20;9140:58:4;;;12695:21:20;12752:2;12732:18;;;12725:30;12791;12771:18;;;12764:58;12839:18;;9140:58:4;12511:352:20;9140:58:4;9209:45;9238:1;9242:2;9246:7;9209:20;:45::i;:::-;9265:13;;;;;;;:9;:13;;;;;:18;;9282:1;;9265:13;:18;;9282:1;;9265:18;:::i;:::-;;;;-1:-1:-1;;9293:16:4;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;9330:33;;9293:16;;;9330:33;;9293:16;;9330:33;8998:372;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:690:20;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;194:66;339:24;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:72;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:45;;;591:1;588;581:12;550:45;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;14:690;;;;;:::o;709:160::-;774:20;;830:13;;823:21;813:32;;803:60;;859:1;856;849:12;803:60;709:160;;;:::o;874:247::-;933:6;986:2;974:9;965:7;961:23;957:32;954:52;;;1002:1;999;992:12;954:52;1041:9;1028:23;1060:31;1085:5;1060:31;:::i;1126:388::-;1194:6;1202;1255:2;1243:9;1234:7;1230:23;1226:32;1223:52;;;1271:1;1268;1261:12;1223:52;1310:9;1297:23;1329:31;1354:5;1329:31;:::i;:::-;1379:5;-1:-1:-1;1436:2:20;1421:18;;1408:32;1449:33;1408:32;1449:33;:::i;:::-;1501:7;1491:17;;;1126:388;;;;;:::o;1519:456::-;1596:6;1604;1612;1665:2;1653:9;1644:7;1640:23;1636:32;1633:52;;;1681:1;1678;1671:12;1633:52;1720:9;1707:23;1739:31;1764:5;1739:31;:::i;:::-;1789:5;-1:-1:-1;1846:2:20;1831:18;;1818:32;1859:33;1818:32;1859:33;:::i;:::-;1519:456;;1911:7;;-1:-1:-1;;;1965:2:20;1950:18;;;;1937:32;;1519:456::o;1980:794::-;2075:6;2083;2091;2099;2152:3;2140:9;2131:7;2127:23;2123:33;2120:53;;;2169:1;2166;2159:12;2120:53;2208:9;2195:23;2227:31;2252:5;2227:31;:::i;:::-;2277:5;-1:-1:-1;2334:2:20;2319:18;;2306:32;2347:33;2306:32;2347:33;:::i;:::-;2399:7;-1:-1:-1;2453:2:20;2438:18;;2425:32;;-1:-1:-1;2508:2:20;2493:18;;2480:32;2535:18;2524:30;;2521:50;;;2567:1;2564;2557:12;2521:50;2590:22;;2643:4;2635:13;;2631:27;-1:-1:-1;2621:55:20;;2672:1;2669;2662:12;2621:55;2695:73;2760:7;2755:2;2742:16;2737:2;2733;2729:11;2695:73;:::i;:::-;2685:83;;;1980:794;;;;;;;:::o;2779:315::-;2844:6;2852;2905:2;2893:9;2884:7;2880:23;2876:32;2873:52;;;2921:1;2918;2911:12;2873:52;2960:9;2947:23;2979:31;3004:5;2979:31;:::i;:::-;3029:5;-1:-1:-1;3053:35:20;3084:2;3069:18;;3053:35;:::i;:::-;3043:45;;2779:315;;;;;:::o;3099:::-;3167:6;3175;3228:2;3216:9;3207:7;3203:23;3199:32;3196:52;;;3244:1;3241;3234:12;3196:52;3283:9;3270:23;3302:31;3327:5;3302:31;:::i;:::-;3352:5;3404:2;3389:18;;;;3376:32;;-1:-1:-1;;;3099:315:20:o;3419:689::-;3514:6;3522;3530;3583:2;3571:9;3562:7;3558:23;3554:32;3551:52;;;3599:1;3596;3589:12;3551:52;3639:9;3626:23;3668:18;3709:2;3701:6;3698:14;3695:34;;;3725:1;3722;3715:12;3695:34;3763:6;3752:9;3748:22;3738:32;;3808:7;3801:4;3797:2;3793:13;3789:27;3779:55;;3830:1;3827;3820:12;3779:55;3870:2;3857:16;3896:2;3888:6;3885:14;3882:34;;;3912:1;3909;3902:12;3882:34;3967:7;3960:4;3950:6;3947:1;3943:14;3939:2;3935:23;3931:34;3928:47;3925:67;;;3988:1;3985;3978:12;3925:67;4019:4;4011:13;;;;4043:6;;-1:-1:-1;4081:20:20;;;;4068:34;;3419:689;-1:-1:-1;;;;3419:689:20:o;4113:180::-;4169:6;4222:2;4210:9;4201:7;4197:23;4193:32;4190:52;;;4238:1;4235;4228:12;4190:52;4261:26;4277:9;4261:26;:::i;4298:180::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;-1:-1:-1;4449:23:20;;4298:180;-1:-1:-1;4298:180:20:o;4483:245::-;4541:6;4594:2;4582:9;4573:7;4569:23;4565:32;4562:52;;;4610:1;4607;4600:12;4562:52;4649:9;4636:23;4668:30;4692:5;4668:30;:::i;4733:249::-;4802:6;4855:2;4843:9;4834:7;4830:23;4826:32;4823:52;;;4871:1;4868;4861:12;4823:52;4903:9;4897:16;4922:30;4946:5;4922:30;:::i;4987:450::-;5056:6;5109:2;5097:9;5088:7;5084:23;5080:32;5077:52;;;5125:1;5122;5115:12;5077:52;5165:9;5152:23;5198:18;5190:6;5187:30;5184:50;;;5230:1;5227;5220:12;5184:50;5253:22;;5306:4;5298:13;;5294:27;-1:-1:-1;5284:55:20;;5335:1;5332;5325:12;5284:55;5358:73;5423:7;5418:2;5405:16;5400:2;5396;5392:11;5358:73;:::i;5627:511::-;5711:6;5719;5727;5780:2;5768:9;5759:7;5755:23;5751:32;5748:52;;;5796:1;5793;5786:12;5748:52;5832:9;5819:23;5809:33;;5892:2;5881:9;5877:18;5864:32;5905:31;5930:5;5905:31;:::i;:::-;5955:5;-1:-1:-1;6012:2:20;5997:18;;5984:32;6060:26;6047:40;;6035:53;;6025:81;;6102:1;6099;6092:12;6025:81;6125:7;6115:17;;;5627:511;;;;;:::o;6143:248::-;6211:6;6219;6272:2;6260:9;6251:7;6247:23;6243:32;6240:52;;;6288:1;6285;6278:12;6240:52;-1:-1:-1;;6311:23:20;;;6381:2;6366:18;;;6353:32;;-1:-1:-1;6143:248:20:o;6396:608::-;6453:3;6491:5;6485:12;6518:6;6513:3;6506:19;6544:4;6573:2;6568:3;6564:12;6557:19;;6610:2;6603:5;6599:14;6631:1;6641:338;6655:6;6652:1;6649:13;6641:338;;;6714:13;;6756:9;;6767:42;6752:58;6740:71;;6855:11;;6849:18;6869:26;6845:51;6831:12;;;6824:73;6926:4;6917:14;;;;6954:15;;;;6677:1;6670:9;6641:338;;;-1:-1:-1;6995:3:20;;6396:608;-1:-1:-1;;;;;6396:608:20:o;7009:316::-;7050:3;7088:5;7082:12;7115:6;7110:3;7103:19;7131:63;7187:6;7180:4;7175:3;7171:14;7164:4;7157:5;7153:16;7131:63;:::i;:::-;7239:2;7227:15;7244:66;7223:88;7214:98;;;;7314:4;7210:109;;7009:316;-1:-1:-1;;7009:316:20:o;7851:470::-;8030:3;8068:6;8062:13;8084:53;8130:6;8125:3;8118:4;8110:6;8106:17;8084:53;:::i;:::-;8200:13;;8159:16;;;;8222:57;8200:13;8159:16;8256:4;8244:17;;8222:57;:::i;:::-;8295:20;;7851:470;-1:-1:-1;;;;7851:470:20:o;8906:511::-;9100:4;9129:42;9210:2;9202:6;9198:15;9187:9;9180:34;9262:2;9254:6;9250:15;9245:2;9234:9;9230:18;9223:43;;9302:6;9297:2;9286:9;9282:18;9275:34;9345:3;9340:2;9329:9;9325:18;9318:31;9366:45;9406:3;9395:9;9391:19;9383:6;9366:45;:::i;:::-;9358:53;8906:511;-1:-1:-1;;;;;;8906:511:20:o;9724:309::-;9947:2;9936:9;9929:21;9910:4;9967:60;10023:2;10012:9;10008:18;10000:6;9967:60;:::i;10038:632::-;10209:2;10261:21;;;10331:13;;10234:18;;;10353:22;;;10180:4;;10209:2;10432:15;;;;10406:2;10391:18;;;10180:4;10475:169;10489:6;10486:1;10483:13;10475:169;;;10550:13;;10538:26;;10619:15;;;;10584:12;;;;10511:1;10504:9;10475:169;;;-1:-1:-1;10661:3:20;;10038:632;-1:-1:-1;;;;;;10038:632:20:o;11049:219::-;11198:2;11187:9;11180:21;11161:4;11218:44;11258:2;11247:9;11243:18;11235:6;11218:44;:::i;21505:380::-;21756:6;21745:9;21738:25;21799:2;21794;21783:9;21779:18;21772:30;21719:4;21819:60;21875:2;21864:9;21860:18;21852:6;21819:60;:::i;21890:128::-;21930:3;21961:1;21957:6;21954:1;21951:13;21948:39;;;21967:18;;:::i;:::-;-1:-1:-1;22003:9:20;;21890:128::o;22023:120::-;22063:1;22089;22079:35;;22094:18;;:::i;:::-;-1:-1:-1;22128:9:20;;22023:120::o;22148:228::-;22188:7;22314:1;22246:66;22242:74;22239:1;22236:81;22231:1;22224:9;22217:17;22213:105;22210:131;;;22321:18;;:::i;:::-;-1:-1:-1;22361:9:20;;22148:228::o;22381:125::-;22421:4;22449:1;22446;22443:8;22440:34;;;22454:18;;:::i;:::-;-1:-1:-1;22491:9:20;;22381:125::o;22511:258::-;22583:1;22593:113;22607:6;22604:1;22601:13;22593:113;;;22683:11;;;22677:18;22664:11;;;22657:39;22629:2;22622:10;22593:113;;;22724:6;22721:1;22718:13;22715:48;;;-1:-1:-1;;22759:1:20;22741:16;;22734:27;22511:258::o;22774:437::-;22853:1;22849:12;;;;22896;;;22917:61;;22971:4;22963:6;22959:17;22949:27;;22917:61;23024:2;23016:6;23013:14;22993:18;22990:38;22987:218;;;23061:77;23058:1;23051:88;23162:4;23159:1;23152:15;23190:4;23187:1;23180:15;22987:218;;22774:437;;;:::o;23216:195::-;23255:3;23286:66;23279:5;23276:77;23273:103;;;23356:18;;:::i;:::-;-1:-1:-1;23403:1:20;23392:13;;23216:195::o;23416:112::-;23448:1;23474;23464:35;;23479:18;;:::i;:::-;-1:-1:-1;23513:9:20;;23416:112::o;23533:184::-;23585:77;23582:1;23575:88;23682:4;23679:1;23672:15;23706:4;23703:1;23696:15;23722:184;23774:77;23771:1;23764:88;23871:4;23868:1;23861:15;23895:4;23892:1;23885:15;23911:184;23963:77;23960:1;23953:88;24060:4;24057:1;24050:15;24084:4;24081:1;24074:15;24100:184;24152:77;24149:1;24142:88;24249:4;24246:1;24239:15;24273:4;24270:1;24263:15;24289:184;24341:77;24338:1;24331:88;24438:4;24435:1;24428:15;24462:4;24459:1;24452:15;24478:154;24564:42;24557:5;24553:54;24546:5;24543:65;24533:93;;24622:1;24619;24612:12;24637:177;24722:66;24715:5;24711:78;24704:5;24701:89;24691:117;;24804:1;24801;24794:12
Swarm Source
ipfs://5f966e5b4f22fde5ccec4c68af59346011e7f2008e0b01ddc8d08cf22521c600
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.