Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
1,024 AVLB
Holders
628
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 AVLBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BsideNFT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-14 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer( address indexed from, address indexed to, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval( address indexed owner, address indexed approved, uint256 indexed tokenId ); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @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); } // File @openzeppelin/contracts/utils/[email protected] /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] /** * @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() { _setOwner(_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 { _setOwner(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" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/utils/[email protected] /** * @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); } } } } // File @openzeppelin/contracts/utils/[email protected] /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File contracts/ERC721.sol /** * @dev Modified OpenZeppelin ERC721 contract, remove unnecessary stuffs to reduce gas usages. */ contract ERC721 is Context, ERC165, IERC721 { using Address for address; using Strings for uint256; // 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 See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "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), "Nonexistent token"); return owner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "Can't approval to owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "Access denied" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "Nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "Approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 { require(_isApprovedOrOwner(_msgSender(), tokenId), "Access denied"); _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), "Access denied"); _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), "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), "Nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @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), "Zero address"); require(!_exists(tokenId), "Already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, 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, "Not your token"); require(to != address(0), "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 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("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 {} } // File contracts/ContextMixin.sol abstract contract ContextMixin { function msgSender() internal view returns (address payable sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { sender = payable(msg.sender); } return sender; } } // File contracts/BsideNFT.sol contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } contract BsideNFT is ERC721, IERC721Metadata, IERC721Enumerable, Ownable, ContextMixin { // 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; address private _proxyRegistryAddress; constructor(address proxyRegistryAddress) { _proxyRegistryAddress = proxyRegistryAddress; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Metadata-name}. */ function name() public pure override returns (string memory) { return "AVLab B-side"; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public pure override returns (string memory) { return "AVLB"; } /** * @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 "ipfs://bafybeihjnrp5beru2mo4i5zcibdd4omikqy6bltm7nmihz3nurf6duwjbq/"; } /** * @dev Batch operation for {mintTo}. */ function airdrop(address[] memory _recipients, uint256[] memory _tokenIds) public onlyOwner { require(_recipients.length <= 200, "Exceed limit"); require(_recipients.length == _tokenIds.length, "Unequal length"); for (uint256 i = 0; i < _recipients.length; ++i) { mintTo(_recipients[i], _tokenIds[i]); } } /** * @dev Mints a token to an address. */ function mintTo(address _to, uint256 _tokenId) public onlyOwner { require(_tokenId < totalSupply(), "Out of bounds"); _mint(_to, _tokenId); } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view override returns (string memory) { require(_exists(tokenId), "Nonexistent token"); return string(abi.encodePacked(_baseURI(), Strings.toString(tokenId))); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public pure override returns (uint256) { return 1024; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public pure override returns (uint256) { require(index < totalSupply(), "Out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < ERC721.balanceOf(owner), "Out of bounds"); return _ownedTokens[owner][index]; } /** * @dev Hook that is called before any token transfer. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override { if (from != to) { if (from != address(0)) { _removeTokenFromOwnerEnumeration(from, tokenId); } _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 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). * @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 { 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 } delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Override {ERC721-isApprovedForAll} to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll(address owner, address operator) public view override(IERC721, ERC721) returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(_proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return ERC721.isApprovedForAll(owner, operator); } /** * @dev Used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea. */ function _msgSender() internal view override returns (address sender) { return ContextMixin.msgSender(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"proxyRegistryAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"pure","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"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620034993803806200349983398181016040528101906200003791906200024b565b620000576200004b6200009f60201b60201c565b620000bb60201b60201c565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620002c5565b6000620000b66200018160201b620011971760201c565b905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200022d57600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff81830151169250505062000231565b3390505b90565b6000815190506200024581620002ab565b92915050565b6000602082840312156200025e57600080fd5b60006200026e8482850162000234565b91505092915050565b600062000284826200028b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620002b68162000277565b8114620002c257600080fd5b50565b6131c480620002d56000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80636352211e116100b857806395d89b411161007c57806395d89b411461034c578063a22cb4651461036a578063b88d4fde14610386578063c87b56dd146103a2578063e985e9c5146103d2578063f2fde38b1461040257610137565b80636352211e146102a857806367243482146102d857806370a08231146102f4578063715018a6146103245780638da5cb5b1461032e57610137565b806323b872dd116100ff57806323b872dd146101f45780632f745c591461021057806342842e0e14610240578063449a52f81461025c5780634f6ccce71461027857610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806318160ddd146101d6575b600080fd5b61015660048036038101906101519190612522565b61041e565b60405161016391906128e8565b60405180910390f35b610174610500565b6040516101819190612903565b60405180910390f35b6101a4600480360381019061019f919061259d565b61053d565b6040516101b19190612881565b60405180910390f35b6101d460048036038101906101cf919061247a565b6105c2565b005b6101de6106da565b6040516101eb9190612ac5565b60405180910390f35b61020e60048036038101906102099190612374565b6106e4565b005b61022a6004803603810190610225919061247a565b610744565b6040516102379190612ac5565b60405180910390f35b61025a60048036038101906102559190612374565b6107e9565b005b6102766004803603810190610271919061247a565b610809565b005b610292600480360381019061028d919061259d565b6108dc565b60405161029f9190612ac5565b60405180910390f35b6102c260048036038101906102bd919061259d565b61092f565b6040516102cf9190612881565b60405180910390f35b6102f260048036038101906102ed91906124b6565b6109e0565b005b61030e6004803603810190610309919061230f565b610b91565b60405161031b9190612ac5565b60405180910390f35b61032c610c49565b005b610336610cd1565b6040516103439190612881565b60405180910390f35b610354610cfb565b6040516103619190612903565b60405180910390f35b610384600480360381019061037f919061243e565b610d38565b005b6103a0600480360381019061039b91906123c3565b610eb9565b005b6103bc60048036038101906103b7919061259d565b610f1b565b6040516103c99190612903565b60405180910390f35b6103ec60048036038101906103e79190612338565b610f9d565b6040516103f991906128e8565b60405180910390f35b61041c6004803603810190610417919061230f565b61109f565b005b60007f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104e957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104f957506104f882611248565b5b9050919050565b60606040518060400160405280600c81526020017f41564c616220422d736964650000000000000000000000000000000000000000815250905090565b6000610548826112c2565b610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e906129a5565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105cd8261092f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561063e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610635906129c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661065d61132d565b73ffffffffffffffffffffffffffffffffffffffff16148061068c575061068b8161068661132d565b610f9d565b5b6106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c290612aa5565b60405180910390fd5b6106d5838361133c565b505050565b6000610400905090565b6106f56106ef61132d565b826113f5565b610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90612aa5565b60405180910390fd5b61073f8383836114d3565b505050565b600061074f83610b91565b8210610790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078790612a65565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61080483838360405180602001604052806000815250610eb9565b505050565b61081161132d565b73ffffffffffffffffffffffffffffffffffffffff1661082f610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612a45565b60405180910390fd5b61088d6106da565b81106108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590612a65565b60405180910390fd5b6108d8828261172c565b5050565b60006108e66106da565b8210610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90612a65565b60405180910390fd5b819050919050565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906129a5565b60405180910390fd5b80915050919050565b6109e861132d565b73ffffffffffffffffffffffffffffffffffffffff16610a06610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614610a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5390612a45565b60405180910390fd5b60c882511115610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a98906129e5565b60405180910390fd5b8051825114610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc90612a25565b60405180910390fd5b60005b8251811015610b8c57610b7b838281518110610b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151838381518110610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610809565b80610b8590612d85565b9050610ae8565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990612985565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c5161132d565b73ffffffffffffffffffffffffffffffffffffffff16610c6f610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612a45565b60405180910390fd5b610ccf60006118f8565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f41564c4200000000000000000000000000000000000000000000000000000000815250905090565b610d4061132d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590612965565b60405180910390fd5b8060036000610dbb61132d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e6861132d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ead91906128e8565b60405180910390a35050565b610eca610ec461132d565b836113f5565b610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090612aa5565b60405180910390fd5b610f15848484846119be565b50505050565b6060610f26826112c2565b610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c906129a5565b60405180910390fd5b610f6d611a1a565b610f7683611a3a565b604051602001610f8792919061285d565b6040516020818303038152906040529050919050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016110159190612881565b60206040518083038186803b15801561102d57600080fd5b505afa158015611041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110659190612574565b73ffffffffffffffffffffffffffffffffffffffff16141561108b576001915050611099565b6110958484611be7565b9150505b92915050565b6110a761132d565b73ffffffffffffffffffffffffffffffffffffffff166110c5610cd1565b73ffffffffffffffffffffffffffffffffffffffff161461111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111290612a45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290612945565b60405180910390fd5b611194816118f8565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561124157600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611245565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112bb57506112ba82611c7b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611337611197565b905090565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113af8361092f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611400826112c2565b61143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906129a5565b60405180910390fd5b600061144a8361092f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114b957508373ffffffffffffffffffffffffffffffffffffffff166114a18461053d565b73ffffffffffffffffffffffffffffffffffffffff16145b806114ca57506114c98185610f9d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166114f38261092f565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090612a05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090612985565b60405180910390fd5b6115c4838383611ce5565b6115cf60008261133c565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461161e9190612c58565b9250508190555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116749190612bd1565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390612985565b60405180910390fd5b6117a5816112c2565b156117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90612925565b60405180910390fd5b6117f160008383611ce5565b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118409190612bd1565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119c98484846114d3565b6119d584848484611d67565b611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90612a85565b60405180910390fd5b50505050565b606060405180608001604052806043815260200161314c60439139905090565b60606000821415611a82576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611be2565b600082905060005b60008214611ab4578080611a9d90612d85565b915050600a82611aad9190612c27565b9150611a8a565b60008167ffffffffffffffff811115611af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b285781602001600182028036833780820191505090505b5090505b60008514611bdb57600182611b419190612c58565b9150600a85611b509190612dce565b6030611b5c9190612bd1565b60f81b818381518110611b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bd49190612c27565b9450611b2c565b8093505050505b919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d6257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d5757611d568382611efe565b5b611d61828261206b565b5b505050565b6000611d888473ffffffffffffffffffffffffffffffffffffffff166120ea565b15611ef1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611db161132d565b8786866040518563ffffffff1660e01b8152600401611dd3949392919061289c565b602060405180830381600087803b158015611ded57600080fd5b505af1925050508015611e1e57506040513d601f19601f82011682018060405250810190611e1b919061254b565b60015b611ea1573d8060008114611e4e576040519150601f19603f3d011682016040523d82523d6000602084013e611e53565b606091505b50600081511415611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090612a85565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ef6565b600190505b949350505050565b60006001611f0b84610b91565b611f159190612c58565b9050600060066000848152602001908152602001600020549050818114611ffa576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816006600083815260200190815260200160002081905550505b6006600084815260200190815260200160002060009055600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600061207683610b91565b905081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806006600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600061211061210b84612b05565b612ae0565b9050808382526020820190508285602086028201111561212f57600080fd5b60005b8581101561215f57816121458882612213565b845260208401935060208301925050600181019050612132565b5050509392505050565b600061217c61217784612b31565b612ae0565b9050808382526020820190508285602086028201111561219b57600080fd5b60005b858110156121cb57816121b188826122fa565b84526020840193506020830192505060018101905061219e565b5050509392505050565b60006121e86121e384612b5d565b612ae0565b90508281526020810184848401111561220057600080fd5b61220b848285612d12565b509392505050565b600081359050612222816130d8565b92915050565b600082601f83011261223957600080fd5b81356122498482602086016120fd565b91505092915050565b600082601f83011261226357600080fd5b8135612273848260208601612169565b91505092915050565b60008135905061228b816130ef565b92915050565b6000813590506122a081613106565b92915050565b6000815190506122b581613106565b92915050565b600082601f8301126122cc57600080fd5b81356122dc8482602086016121d5565b91505092915050565b6000815190506122f48161311d565b92915050565b60008135905061230981613134565b92915050565b60006020828403121561232157600080fd5b600061232f84828501612213565b91505092915050565b6000806040838503121561234b57600080fd5b600061235985828601612213565b925050602061236a85828601612213565b9150509250929050565b60008060006060848603121561238957600080fd5b600061239786828701612213565b93505060206123a886828701612213565b92505060406123b9868287016122fa565b9150509250925092565b600080600080608085870312156123d957600080fd5b60006123e787828801612213565b94505060206123f887828801612213565b9350506040612409878288016122fa565b925050606085013567ffffffffffffffff81111561242657600080fd5b612432878288016122bb565b91505092959194509250565b6000806040838503121561245157600080fd5b600061245f85828601612213565b92505060206124708582860161227c565b9150509250929050565b6000806040838503121561248d57600080fd5b600061249b85828601612213565b92505060206124ac858286016122fa565b9150509250929050565b600080604083850312156124c957600080fd5b600083013567ffffffffffffffff8111156124e357600080fd5b6124ef85828601612228565b925050602083013567ffffffffffffffff81111561250c57600080fd5b61251885828601612252565b9150509250929050565b60006020828403121561253457600080fd5b600061254284828501612291565b91505092915050565b60006020828403121561255d57600080fd5b600061256b848285016122a6565b91505092915050565b60006020828403121561258657600080fd5b6000612594848285016122e5565b91505092915050565b6000602082840312156125af57600080fd5b60006125bd848285016122fa565b91505092915050565b6125cf81612c8c565b82525050565b6125de81612c9e565b82525050565b60006125ef82612b8e565b6125f98185612ba4565b9350612609818560208601612d21565b61261281612e8c565b840191505092915050565b600061262882612b99565b6126328185612bb5565b9350612642818560208601612d21565b61264b81612e8c565b840191505092915050565b600061266182612b99565b61266b8185612bc6565b935061267b818560208601612d21565b80840191505092915050565b6000612694600e83612bb5565b915061269f82612e9d565b602082019050919050565b60006126b7602683612bb5565b91506126c282612ec6565b604082019050919050565b60006126da601183612bb5565b91506126e582612f15565b602082019050919050565b60006126fd600c83612bb5565b915061270882612f3e565b602082019050919050565b6000612720601183612bb5565b915061272b82612f67565b602082019050919050565b6000612743601783612bb5565b915061274e82612f90565b602082019050919050565b6000612766600c83612bb5565b915061277182612fb9565b602082019050919050565b6000612789600e83612bb5565b915061279482612fe2565b602082019050919050565b60006127ac600e83612bb5565b91506127b78261300b565b602082019050919050565b60006127cf602083612bb5565b91506127da82613034565b602082019050919050565b60006127f2600d83612bb5565b91506127fd8261305d565b602082019050919050565b6000612815601e83612bb5565b915061282082613086565b602082019050919050565b6000612838600d83612bb5565b9150612843826130af565b602082019050919050565b61285781612d08565b82525050565b60006128698285612656565b91506128758284612656565b91508190509392505050565b600060208201905061289660008301846125c6565b92915050565b60006080820190506128b160008301876125c6565b6128be60208301866125c6565b6128cb604083018561284e565b81810360608301526128dd81846125e4565b905095945050505050565b60006020820190506128fd60008301846125d5565b92915050565b6000602082019050818103600083015261291d818461261d565b905092915050565b6000602082019050818103600083015261293e81612687565b9050919050565b6000602082019050818103600083015261295e816126aa565b9050919050565b6000602082019050818103600083015261297e816126cd565b9050919050565b6000602082019050818103600083015261299e816126f0565b9050919050565b600060208201905081810360008301526129be81612713565b9050919050565b600060208201905081810360008301526129de81612736565b9050919050565b600060208201905081810360008301526129fe81612759565b9050919050565b60006020820190508181036000830152612a1e8161277c565b9050919050565b60006020820190508181036000830152612a3e8161279f565b9050919050565b60006020820190508181036000830152612a5e816127c2565b9050919050565b60006020820190508181036000830152612a7e816127e5565b9050919050565b60006020820190508181036000830152612a9e81612808565b9050919050565b60006020820190508181036000830152612abe8161282b565b9050919050565b6000602082019050612ada600083018461284e565b92915050565b6000612aea612afb565b9050612af68282612d54565b919050565b6000604051905090565b600067ffffffffffffffff821115612b2057612b1f612e5d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b4c57612b4b612e5d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b7857612b77612e5d565b5b612b8182612e8c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612bdc82612d08565b9150612be783612d08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c1c57612c1b612dff565b5b828201905092915050565b6000612c3282612d08565b9150612c3d83612d08565b925082612c4d57612c4c612e2e565b5b828204905092915050565b6000612c6382612d08565b9150612c6e83612d08565b925082821015612c8157612c80612dff565b5b828203905092915050565b6000612c9782612ce8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000612ce182612c8c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612d3f578082015181840152602081019050612d24565b83811115612d4e576000848401525b50505050565b612d5d82612e8c565b810181811067ffffffffffffffff82111715612d7c57612d7b612e5d565b5b80604052505050565b6000612d9082612d08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612dc357612dc2612dff565b5b600182019050919050565b6000612dd982612d08565b9150612de483612d08565b925082612df457612df3612e2e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f417070726f766520746f2063616c6c6572000000000000000000000000000000600082015250565b7f5a65726f20616464726573730000000000000000000000000000000000000000600082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f43616e277420617070726f76616c20746f206f776e6572000000000000000000600082015250565b7f457863656564206c696d69740000000000000000000000000000000000000000600082015250565b7f4e6f7420796f757220746f6b656e000000000000000000000000000000000000600082015250565b7f556e657175616c206c656e677468000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4f7574206f6620626f756e647300000000000000000000000000000000000000600082015250565b7f4e6f6e20455243373231526563656976657220696d706c656d656e7465720000600082015250565b7f4163636573732064656e69656400000000000000000000000000000000000000600082015250565b6130e181612c8c565b81146130ec57600080fd5b50565b6130f881612c9e565b811461310357600080fd5b50565b61310f81612caa565b811461311a57600080fd5b50565b61312681612cd6565b811461313157600080fd5b50565b61313d81612d08565b811461314857600080fd5b5056fe697066733a2f2f62616679626569686a6e72703562657275326d6f3469357a6369626464346f6d696b717936626c746d376e6d69687a336e757266366475776a62712fa2646970667358221220f80d122778c003bb6d3bce622b4a90fcae1853a87fe45847704a468134b42b5264736f6c63430008040033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80636352211e116100b857806395d89b411161007c57806395d89b411461034c578063a22cb4651461036a578063b88d4fde14610386578063c87b56dd146103a2578063e985e9c5146103d2578063f2fde38b1461040257610137565b80636352211e146102a857806367243482146102d857806370a08231146102f4578063715018a6146103245780638da5cb5b1461032e57610137565b806323b872dd116100ff57806323b872dd146101f45780632f745c591461021057806342842e0e14610240578063449a52f81461025c5780634f6ccce71461027857610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806318160ddd146101d6575b600080fd5b61015660048036038101906101519190612522565b61041e565b60405161016391906128e8565b60405180910390f35b610174610500565b6040516101819190612903565b60405180910390f35b6101a4600480360381019061019f919061259d565b61053d565b6040516101b19190612881565b60405180910390f35b6101d460048036038101906101cf919061247a565b6105c2565b005b6101de6106da565b6040516101eb9190612ac5565b60405180910390f35b61020e60048036038101906102099190612374565b6106e4565b005b61022a6004803603810190610225919061247a565b610744565b6040516102379190612ac5565b60405180910390f35b61025a60048036038101906102559190612374565b6107e9565b005b6102766004803603810190610271919061247a565b610809565b005b610292600480360381019061028d919061259d565b6108dc565b60405161029f9190612ac5565b60405180910390f35b6102c260048036038101906102bd919061259d565b61092f565b6040516102cf9190612881565b60405180910390f35b6102f260048036038101906102ed91906124b6565b6109e0565b005b61030e6004803603810190610309919061230f565b610b91565b60405161031b9190612ac5565b60405180910390f35b61032c610c49565b005b610336610cd1565b6040516103439190612881565b60405180910390f35b610354610cfb565b6040516103619190612903565b60405180910390f35b610384600480360381019061037f919061243e565b610d38565b005b6103a0600480360381019061039b91906123c3565b610eb9565b005b6103bc60048036038101906103b7919061259d565b610f1b565b6040516103c99190612903565b60405180910390f35b6103ec60048036038101906103e79190612338565b610f9d565b6040516103f991906128e8565b60405180910390f35b61041c6004803603810190610417919061230f565b61109f565b005b60007f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104e957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104f957506104f882611248565b5b9050919050565b60606040518060400160405280600c81526020017f41564c616220422d736964650000000000000000000000000000000000000000815250905090565b6000610548826112c2565b610587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057e906129a5565b60405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105cd8261092f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561063e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610635906129c5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661065d61132d565b73ffffffffffffffffffffffffffffffffffffffff16148061068c575061068b8161068661132d565b610f9d565b5b6106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c290612aa5565b60405180910390fd5b6106d5838361133c565b505050565b6000610400905090565b6106f56106ef61132d565b826113f5565b610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072b90612aa5565b60405180910390fd5b61073f8383836114d3565b505050565b600061074f83610b91565b8210610790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078790612a65565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61080483838360405180602001604052806000815250610eb9565b505050565b61081161132d565b73ffffffffffffffffffffffffffffffffffffffff1661082f610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612a45565b60405180910390fd5b61088d6106da565b81106108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590612a65565b60405180910390fd5b6108d8828261172c565b5050565b60006108e66106da565b8210610927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091e90612a65565b60405180910390fd5b819050919050565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ce906129a5565b60405180910390fd5b80915050919050565b6109e861132d565b73ffffffffffffffffffffffffffffffffffffffff16610a06610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614610a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5390612a45565b60405180910390fd5b60c882511115610aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a98906129e5565b60405180910390fd5b8051825114610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc90612a25565b60405180910390fd5b60005b8251811015610b8c57610b7b838281518110610b2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151838381518110610b6e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610809565b80610b8590612d85565b9050610ae8565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf990612985565b60405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c5161132d565b73ffffffffffffffffffffffffffffffffffffffff16610c6f610cd1565b73ffffffffffffffffffffffffffffffffffffffff1614610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90612a45565b60405180910390fd5b610ccf60006118f8565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f41564c4200000000000000000000000000000000000000000000000000000000815250905090565b610d4061132d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da590612965565b60405180910390fd5b8060036000610dbb61132d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e6861132d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ead91906128e8565b60405180910390a35050565b610eca610ec461132d565b836113f5565b610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0090612aa5565b60405180910390fd5b610f15848484846119be565b50505050565b6060610f26826112c2565b610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c906129a5565b60405180910390fd5b610f6d611a1a565b610f7683611a3a565b604051602001610f8792919061285d565b6040516020818303038152906040529050919050565b600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016110159190612881565b60206040518083038186803b15801561102d57600080fd5b505afa158015611041573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110659190612574565b73ffffffffffffffffffffffffffffffffffffffff16141561108b576001915050611099565b6110958484611be7565b9150505b92915050565b6110a761132d565b73ffffffffffffffffffffffffffffffffffffffff166110c5610cd1565b73ffffffffffffffffffffffffffffffffffffffff161461111b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111290612a45565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290612945565b60405180910390fd5b611194816118f8565b50565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561124157600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611245565b3390505b90565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806112bb57506112ba82611c7b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000611337611197565b905090565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113af8361092f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611400826112c2565b61143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906129a5565b60405180910390fd5b600061144a8361092f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806114b957508373ffffffffffffffffffffffffffffffffffffffff166114a18461053d565b73ffffffffffffffffffffffffffffffffffffffff16145b806114ca57506114c98185610f9d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166114f38261092f565b73ffffffffffffffffffffffffffffffffffffffff1614611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090612a05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b090612985565b60405180910390fd5b6115c4838383611ce5565b6115cf60008261133c565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461161e9190612c58565b9250508190555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116749190612bd1565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390612985565b60405180910390fd5b6117a5816112c2565b156117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc90612925565b60405180910390fd5b6117f160008383611ce5565b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118409190612bd1565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119c98484846114d3565b6119d584848484611d67565b611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b90612a85565b60405180910390fd5b50505050565b606060405180608001604052806043815260200161314c60439139905090565b60606000821415611a82576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611be2565b600082905060005b60008214611ab4578080611a9d90612d85565b915050600a82611aad9190612c27565b9150611a8a565b60008167ffffffffffffffff811115611af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b285781602001600182028036833780820191505090505b5090505b60008514611bdb57600182611b419190612c58565b9150600a85611b509190612dce565b6030611b5c9190612bd1565b60f81b818381518110611b98577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bd49190612c27565b9450611b2c565b8093505050505b919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d6257600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611d5757611d568382611efe565b5b611d61828261206b565b5b505050565b6000611d888473ffffffffffffffffffffffffffffffffffffffff166120ea565b15611ef1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611db161132d565b8786866040518563ffffffff1660e01b8152600401611dd3949392919061289c565b602060405180830381600087803b158015611ded57600080fd5b505af1925050508015611e1e57506040513d601f19601f82011682018060405250810190611e1b919061254b565b60015b611ea1573d8060008114611e4e576040519150601f19603f3d011682016040523d82523d6000602084013e611e53565b606091505b50600081511415611e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9090612a85565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611ef6565b600190505b949350505050565b60006001611f0b84610b91565b611f159190612c58565b9050600060066000848152602001908152602001600020549050818114611ffa576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816006600083815260200190815260200160002081905550505b6006600084815260200190815260200160002060009055600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600061207683610b91565b905081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806006600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b600061211061210b84612b05565b612ae0565b9050808382526020820190508285602086028201111561212f57600080fd5b60005b8581101561215f57816121458882612213565b845260208401935060208301925050600181019050612132565b5050509392505050565b600061217c61217784612b31565b612ae0565b9050808382526020820190508285602086028201111561219b57600080fd5b60005b858110156121cb57816121b188826122fa565b84526020840193506020830192505060018101905061219e565b5050509392505050565b60006121e86121e384612b5d565b612ae0565b90508281526020810184848401111561220057600080fd5b61220b848285612d12565b509392505050565b600081359050612222816130d8565b92915050565b600082601f83011261223957600080fd5b81356122498482602086016120fd565b91505092915050565b600082601f83011261226357600080fd5b8135612273848260208601612169565b91505092915050565b60008135905061228b816130ef565b92915050565b6000813590506122a081613106565b92915050565b6000815190506122b581613106565b92915050565b600082601f8301126122cc57600080fd5b81356122dc8482602086016121d5565b91505092915050565b6000815190506122f48161311d565b92915050565b60008135905061230981613134565b92915050565b60006020828403121561232157600080fd5b600061232f84828501612213565b91505092915050565b6000806040838503121561234b57600080fd5b600061235985828601612213565b925050602061236a85828601612213565b9150509250929050565b60008060006060848603121561238957600080fd5b600061239786828701612213565b93505060206123a886828701612213565b92505060406123b9868287016122fa565b9150509250925092565b600080600080608085870312156123d957600080fd5b60006123e787828801612213565b94505060206123f887828801612213565b9350506040612409878288016122fa565b925050606085013567ffffffffffffffff81111561242657600080fd5b612432878288016122bb565b91505092959194509250565b6000806040838503121561245157600080fd5b600061245f85828601612213565b92505060206124708582860161227c565b9150509250929050565b6000806040838503121561248d57600080fd5b600061249b85828601612213565b92505060206124ac858286016122fa565b9150509250929050565b600080604083850312156124c957600080fd5b600083013567ffffffffffffffff8111156124e357600080fd5b6124ef85828601612228565b925050602083013567ffffffffffffffff81111561250c57600080fd5b61251885828601612252565b9150509250929050565b60006020828403121561253457600080fd5b600061254284828501612291565b91505092915050565b60006020828403121561255d57600080fd5b600061256b848285016122a6565b91505092915050565b60006020828403121561258657600080fd5b6000612594848285016122e5565b91505092915050565b6000602082840312156125af57600080fd5b60006125bd848285016122fa565b91505092915050565b6125cf81612c8c565b82525050565b6125de81612c9e565b82525050565b60006125ef82612b8e565b6125f98185612ba4565b9350612609818560208601612d21565b61261281612e8c565b840191505092915050565b600061262882612b99565b6126328185612bb5565b9350612642818560208601612d21565b61264b81612e8c565b840191505092915050565b600061266182612b99565b61266b8185612bc6565b935061267b818560208601612d21565b80840191505092915050565b6000612694600e83612bb5565b915061269f82612e9d565b602082019050919050565b60006126b7602683612bb5565b91506126c282612ec6565b604082019050919050565b60006126da601183612bb5565b91506126e582612f15565b602082019050919050565b60006126fd600c83612bb5565b915061270882612f3e565b602082019050919050565b6000612720601183612bb5565b915061272b82612f67565b602082019050919050565b6000612743601783612bb5565b915061274e82612f90565b602082019050919050565b6000612766600c83612bb5565b915061277182612fb9565b602082019050919050565b6000612789600e83612bb5565b915061279482612fe2565b602082019050919050565b60006127ac600e83612bb5565b91506127b78261300b565b602082019050919050565b60006127cf602083612bb5565b91506127da82613034565b602082019050919050565b60006127f2600d83612bb5565b91506127fd8261305d565b602082019050919050565b6000612815601e83612bb5565b915061282082613086565b602082019050919050565b6000612838600d83612bb5565b9150612843826130af565b602082019050919050565b61285781612d08565b82525050565b60006128698285612656565b91506128758284612656565b91508190509392505050565b600060208201905061289660008301846125c6565b92915050565b60006080820190506128b160008301876125c6565b6128be60208301866125c6565b6128cb604083018561284e565b81810360608301526128dd81846125e4565b905095945050505050565b60006020820190506128fd60008301846125d5565b92915050565b6000602082019050818103600083015261291d818461261d565b905092915050565b6000602082019050818103600083015261293e81612687565b9050919050565b6000602082019050818103600083015261295e816126aa565b9050919050565b6000602082019050818103600083015261297e816126cd565b9050919050565b6000602082019050818103600083015261299e816126f0565b9050919050565b600060208201905081810360008301526129be81612713565b9050919050565b600060208201905081810360008301526129de81612736565b9050919050565b600060208201905081810360008301526129fe81612759565b9050919050565b60006020820190508181036000830152612a1e8161277c565b9050919050565b60006020820190508181036000830152612a3e8161279f565b9050919050565b60006020820190508181036000830152612a5e816127c2565b9050919050565b60006020820190508181036000830152612a7e816127e5565b9050919050565b60006020820190508181036000830152612a9e81612808565b9050919050565b60006020820190508181036000830152612abe8161282b565b9050919050565b6000602082019050612ada600083018461284e565b92915050565b6000612aea612afb565b9050612af68282612d54565b919050565b6000604051905090565b600067ffffffffffffffff821115612b2057612b1f612e5d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b4c57612b4b612e5d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612b7857612b77612e5d565b5b612b8182612e8c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612bdc82612d08565b9150612be783612d08565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612c1c57612c1b612dff565b5b828201905092915050565b6000612c3282612d08565b9150612c3d83612d08565b925082612c4d57612c4c612e2e565b5b828204905092915050565b6000612c6382612d08565b9150612c6e83612d08565b925082821015612c8157612c80612dff565b5b828203905092915050565b6000612c9782612ce8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000612ce182612c8c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612d3f578082015181840152602081019050612d24565b83811115612d4e576000848401525b50505050565b612d5d82612e8c565b810181811067ffffffffffffffff82111715612d7c57612d7b612e5d565b5b80604052505050565b6000612d9082612d08565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612dc357612dc2612dff565b5b600182019050919050565b6000612dd982612d08565b9150612de483612d08565b925082612df457612df3612e2e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f417070726f766520746f2063616c6c6572000000000000000000000000000000600082015250565b7f5a65726f20616464726573730000000000000000000000000000000000000000600082015250565b7f4e6f6e6578697374656e7420746f6b656e000000000000000000000000000000600082015250565b7f43616e277420617070726f76616c20746f206f776e6572000000000000000000600082015250565b7f457863656564206c696d69740000000000000000000000000000000000000000600082015250565b7f4e6f7420796f757220746f6b656e000000000000000000000000000000000000600082015250565b7f556e657175616c206c656e677468000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4f7574206f6620626f756e647300000000000000000000000000000000000000600082015250565b7f4e6f6e20455243373231526563656976657220696d706c656d656e7465720000600082015250565b7f4163636573732064656e69656400000000000000000000000000000000000000600082015250565b6130e181612c8c565b81146130ec57600080fd5b50565b6130f881612c9e565b811461310357600080fd5b50565b61310f81612caa565b811461311a57600080fd5b50565b61312681612cd6565b811461313157600080fd5b50565b61313d81612d08565b811461314857600080fd5b5056fe697066733a2f2f62616679626569686a6e72703562657275326d6f3469357a6369626464346f6d696b717936626c746d376e6d69687a336e757266366475776a62712fa2646970667358221220f80d122778c003bb6d3bce622b4a90fcae1853a87fe45847704a468134b42b5264736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
-----Decoded View---------------
Arg [0] : proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Deployed Bytecode Sourcemap
34284:6640:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34884:348;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35299:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25329:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24905:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37087:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26316:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37546:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26637:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36507:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37256:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24578:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36055:384;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24288:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9974:94;;;:::i;:::-;;9323:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35469:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25645:319;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26893:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36742:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40196:464;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10223:229;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34884:348;35014:4;35071:33;35056:48;;;:11;:48;;;;:115;;;;35136:35;35121:50;;;:11;:50;;;;35056:115;:168;;;;35188:36;35212:11;35188:23;:36::i;:::-;35056:168;35036:188;;34884:348;;;:::o;35299:101::-;35345:13;35371:21;;;;;;;;;;;;;;;;;;;35299:101;:::o;25329:244::-;25450:7;25483:16;25491:7;25483;:16::i;:::-;25475:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;25541:15;:24;25557:7;25541:24;;;;;;;;;;;;;;;;;;;;;25534:31;;25329:244;;;:::o;24905:358::-;24986:13;25002:23;25017:7;25002:14;:23::i;:::-;24986:39;;25050:5;25044:11;;:2;:11;;;;25036:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;25134:5;25118:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25143:37;25160:5;25167:12;:10;:12::i;:::-;25143:16;:37::i;:::-;25118:62;25096:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;25234:21;25243:2;25247:7;25234:8;:21::i;:::-;24905:358;;;:::o;37087:92::-;37140:7;37167:4;37160:11;;37087:92;:::o;26316:250::-;26458:41;26477:12;:10;:12::i;:::-;26491:7;26458:18;:41::i;:::-;26450:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26530:28;26540:4;26546:2;26550:7;26530:9;:28::i;:::-;26316:250;;;:::o;37546:259::-;37671:7;37712:23;37729:5;37712:16;:23::i;:::-;37704:5;:31;37696:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37771:12;:19;37784:5;37771:19;;;;;;;;;;;;;;;:26;37791:5;37771:26;;;;;;;;;;;;37764:33;;37546:259;;;;:::o;26637:185::-;26775:39;26792:4;26798:2;26802:7;26775:39;;;;;;;;;;;;:16;:39::i;:::-;26637:185;;;:::o;36507:164::-;9554:12;:10;:12::i;:::-;9543:23;;:7;:5;:7::i;:::-;:23;;;9535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36601:13:::1;:11;:13::i;:::-;36590:8;:24;36582:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36643:20;36649:3;36654:8;36643:5;:20::i;:::-;36507:164:::0;;:::o;37256:206::-;37359:7;37400:13;:11;:13::i;:::-;37392:5;:21;37384:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;37449:5;37442:12;;37256:206;;;:::o;24578:265::-;24695:7;24720:13;24736:7;:16;24744:7;24736:16;;;;;;;;;;;;;;;;;;;;;24720:32;;24788:1;24771:19;;:5;:19;;;;24763:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24830:5;24823:12;;;24578:265;;;:::o;36055:384::-;9554:12;:10;:12::i;:::-;9543:23;;:7;:5;:7::i;:::-;:23;;;9535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36211:3:::1;36189:11;:18;:25;;36181:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;36272:9;:16;36250:11;:18;:38;36242:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36325:9;36320:112;36344:11;:18;36340:1;:22;36320:112;;;36384:36;36391:11;36403:1;36391:14;;;;;;;;;;;;;;;;;;;;;;36407:9;36417:1;36407:12;;;;;;;;;;;;;;;;;;;;;;36384:6;:36::i;:::-;36364:3;;;;:::i;:::-;;;36320:112;;;;36055:384:::0;;:::o;24288:228::-;24405:7;24455:1;24438:19;;:5;:19;;;;24430:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;24492:9;:16;24502:5;24492:16;;;;;;;;;;;;;;;;24485:23;;24288:228;;;:::o;9974:94::-;9554:12;:10;:12::i;:::-;9543:23;;:7;:5;:7::i;:::-;:23;;;9535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10039:21:::1;10057:1;10039:9;:21::i;:::-;9974:94::o:0;9323:87::-;9369:7;9396:6;;;;;;;;;;;9389:13;;9323:87;:::o;35469:95::-;35517:13;35543;;;;;;;;;;;;;;;;;;;35469:95;:::o;25645:319::-;25792:12;:10;:12::i;:::-;25780:24;;:8;:24;;;;25772:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:8;25839:18;:32;25858:12;:10;:12::i;:::-;25839:32;;;;;;;;;;;;;;;:42;25872:8;25839:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25937:8;25908:48;;25923:12;:10;:12::i;:::-;25908:48;;;25947:8;25908:48;;;;;;:::i;:::-;;;;;;;;25645:319;;:::o;26893:292::-;27068:41;27087:12;:10;:12::i;:::-;27101:7;27068:18;:41::i;:::-;27060:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27138:39;27152:4;27158:2;27162:7;27171:5;27138:13;:39::i;:::-;26893:292;;;;:::o;36742:269::-;36843:13;36882:16;36890:7;36882;:16::i;:::-;36874:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36964:10;:8;:10::i;:::-;36976:25;36993:7;36976:16;:25::i;:::-;36947:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36933:70;;36742:269;;;:::o;40196:464::-;40338:4;40423:27;40467:21;;;;;;;;;;;40423:66;;40545:8;40504:49;;40512:13;:21;;;40534:5;40512:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40504:49;;;40500:93;;;40577:4;40570:11;;;;;40500:93;40612:40;40636:5;40643:8;40612:23;:40::i;:::-;40605:47;;;40196:464;;;;;:::o;10223:229::-;9554:12;:10;:12::i;:::-;9543:23;;:7;:5;:7::i;:::-;:23;;;9535:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10346:1:::1;10326:22;;:8;:22;;;;10304:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10425:19;10435:8;10425:9;:19::i;:::-;10223:229:::0;:::o;33492:618::-;33536:22;33597:4;33575:27;;:10;:27;;;33571:508;;;33619:18;33640:8;;33619:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33663:13;33679:8;;:15;;33663:31;;33931:42;33901:5;33894;33890:17;33884:24;33858:134;33848:144;;33718:289;;;;;34056:10;34039:28;;33571:508;33492:618;:::o;23934:290::-;24081:4;24138:25;24123:40;;;:11;:40;;;;:93;;;;24180:36;24204:11;24180:23;:36::i;:::-;24123:93;24103:113;;23934:290;;;:::o;28712:127::-;28777:4;28829:1;28801:30;;:7;:16;28809:7;28801:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28794:37;;28712:127;;;:::o;40801:120::-;40855:14;40889:24;:22;:24::i;:::-;40882:31;;40801:120;:::o;31060:174::-;31162:2;31135:15;:24;31151:7;31135:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31218:7;31214:2;31180:46;;31189:23;31204:7;31189:14;:23::i;:::-;31180:46;;;;;;;;;;;;31060:174;;:::o;29006:388::-;29135:4;29165:16;29173:7;29165;:16::i;:::-;29157:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29214:13;29230:23;29245:7;29230:14;:23::i;:::-;29214:39;;29283:5;29272:16;;:7;:16;;;:64;;;;29329:7;29305:31;;:20;29317:7;29305:11;:20::i;:::-;:31;;;29272:64;:113;;;;29353:32;29370:5;29377:7;29353:16;:32::i;:::-;29272:113;29264:122;;;29006:388;;;;:::o;30415:527::-;30574:4;30547:31;;:23;30562:7;30547:14;:23::i;:::-;:31;;;30539:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:1;30616:16;;:2;:16;;;;30608:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;30662:39;30683:4;30689:2;30693:7;30662:20;:39::i;:::-;30766:29;30783:1;30787:7;30766:8;:29::i;:::-;30827:1;30808:9;:15;30818:4;30808:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30856:1;30839:9;:13;30849:2;30839:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30887:2;30868:7;:16;30876:7;30868:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30926:7;30922:2;30907:27;;30916:4;30907:27;;;;;;;;;;;;30415:527;;;:::o;29730:348::-;29824:1;29810:16;;:2;:16;;;;29802:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;29863:16;29871:7;29863;:16::i;:::-;29862:17;29854:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;29911:45;29940:1;29944:2;29948:7;29911:20;:45::i;:::-;29986:1;29969:9;:13;29979:2;29969:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30017:2;29998:7;:16;30006:7;29998:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30062:7;30058:2;30037:33;;30054:1;30037:33;;;;;;;;;;;;29730:348;;:::o;10460:173::-;10516:16;10535:6;;;;;;;;;;;10516:25;;10561:8;10552:6;;:17;;;;;;;;;;;;;;;;;;10616:8;10585:40;;10606:8;10585:40;;;;;;;;;;;;10460:173;;:::o;28067:332::-;28224:28;28234:4;28240:2;28244:7;28224:9;:28::i;:::-;28285:48;28308:4;28314:2;28318:7;28327:5;28285:22;:48::i;:::-;28263:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;28067:332;;;;:::o;35812:174::-;35863:13;35889:89;;;;;;;;;;;;;;;;;;;35812:174;:::o;20402:723::-;20458:13;20688:1;20679:5;:10;20675:53;;;20706:10;;;;;;;;;;;;;;;;;;;;;20675:53;20738:12;20753:5;20738:20;;20769:14;20794:78;20809:1;20801:4;:9;20794:78;;20827:8;;;;;:::i;:::-;;;;20858:2;20850:10;;;;;:::i;:::-;;;20794:78;;;20882:19;20914:6;20904:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20882:39;;20932:154;20948:1;20939:5;:10;20932:154;;20976:1;20966:11;;;;;:::i;:::-;;;21043:2;21035:5;:10;;;;:::i;:::-;21022:2;:24;;;;:::i;:::-;21009:39;;20992:6;20999;20992:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;21072:2;21063:11;;;;;:::i;:::-;;;20932:154;;;21110:6;21096:21;;;;;20402:723;;;;:::o;26035:214::-;26177:4;26206:18;:25;26225:5;26206:25;;;;;;;;;;;;;;;:35;26232:8;26206:35;;;;;;;;;;;;;;;;;;;;;;;;;26199:42;;26035:214;;;;:::o;22964:207::-;23094:4;23138:25;23123:40;;;:11;:40;;;;23116:47;;22964:207;;;:::o;37891:346::-;38039:2;38031:10;;:4;:10;;;38027:203;;38078:1;38062:18;;:4;:18;;;38058:106;;38101:47;38134:4;38140:7;38101:32;:47::i;:::-;38058:106;38178:40;38206:2;38210:7;38178:27;:40::i;:::-;38027:203;37891:346;;;:::o;31799:912::-;31954:4;31975:15;:2;:13;;;:15::i;:::-;31971:733;;;32044:2;32028:36;;;32087:12;:10;:12::i;:::-;32122:4;32149:7;32179:5;32028:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32007:642;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32403:1;32386:6;:13;:18;32382:252;;;32429:40;;;;;;;;;;:::i;:::-;;;;;;;;32382:252;32584:6;32578:13;32569:6;32565:2;32561:15;32554:38;32007:642;32277:41;;;32267:51;;;:6;:51;;;;32260:58;;;;;31971:733;32688:4;32681:11;;31799:912;;;;;;;:::o;39299:751::-;39405:22;39455:1;39430:22;39447:4;39430:16;:22::i;:::-;:26;;;;:::i;:::-;39405:51;;39467:18;39488:17;:26;39506:7;39488:26;;;;;;;;;;;;39467:47;;39635:14;39621:10;:28;39617:328;;39666:19;39688:12;:18;39701:4;39688:18;;;;;;;;;;;;;;;:34;39707:14;39688:34;;;;;;;;;;;;39666:56;;39772:11;39739:12;:18;39752:4;39739:18;;;;;;;;;;;;;;;:30;39758:10;39739:30;;;;;;;;;;;:44;;;;39889:10;39856:17;:30;39874:11;39856:30;;;;;;;;;;;:43;;;;39617:328;;39964:17;:26;39982:7;39964:26;;;;;;;;;;;39957:33;;;40008:12;:18;40021:4;40008:18;;;;;;;;;;;;;;;:34;40027:14;40008:34;;;;;;;;;;;40001:41;;;39299:751;;;;:::o;38538:221::-;38623:14;38640:20;38657:2;38640:16;:20::i;:::-;38623:37;;38698:7;38671:12;:16;38684:2;38671:16;;;;;;;;;;;;;;;:24;38688:6;38671:24;;;;;;;;;;;:34;;;;38745:6;38716:17;:26;38734:7;38716:26;;;;;;;;;;;:35;;;;38538:221;;;:::o;12318:387::-;12378:4;12586:12;12653:7;12641:20;12633:28;;12696:1;12689:4;:8;12682:15;;;12318:387;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:139::-;1758:5;1796:6;1783:20;1774:29;;1812:33;1839:5;1812:33;:::i;:::-;1764:87;;;;:::o;1874:303::-;1945:5;1994:3;1987:4;1979:6;1975:17;1971:27;1961:2;;2012:1;2009;2002:12;1961:2;2052:6;2039:20;2077:94;2167:3;2159:6;2152:4;2144:6;2140:17;2077:94;:::i;:::-;2068:103;;1951:226;;;;;:::o;2200:303::-;2271:5;2320:3;2313:4;2305:6;2301:17;2297:27;2287:2;;2338:1;2335;2328:12;2287:2;2378:6;2365:20;2403:94;2493:3;2485:6;2478:4;2470:6;2466:17;2403:94;:::i;:::-;2394:103;;2277:226;;;;;:::o;2509:133::-;2552:5;2590:6;2577:20;2568:29;;2606:30;2630:5;2606:30;:::i;:::-;2558:84;;;;:::o;2648:137::-;2693:5;2731:6;2718:20;2709:29;;2747:32;2773:5;2747:32;:::i;:::-;2699:86;;;;:::o;2791:141::-;2847:5;2878:6;2872:13;2863:22;;2894:32;2920:5;2894:32;:::i;:::-;2853:79;;;;:::o;2951:271::-;3006:5;3055:3;3048:4;3040:6;3036:17;3032:27;3022:2;;3073:1;3070;3063:12;3022:2;3113:6;3100:20;3138:78;3212:3;3204:6;3197:4;3189:6;3185:17;3138:78;:::i;:::-;3129:87;;3012:210;;;;;:::o;3228:201::-;3314:5;3345:6;3339:13;3330:22;;3361:62;3417:5;3361:62;:::i;:::-;3320:109;;;;:::o;3435:139::-;3481:5;3519:6;3506:20;3497:29;;3535:33;3562:5;3535:33;:::i;:::-;3487:87;;;;:::o;3580:262::-;3639:6;3688:2;3676:9;3667:7;3663:23;3659:32;3656:2;;;3704:1;3701;3694:12;3656:2;3747:1;3772:53;3817:7;3808:6;3797:9;3793:22;3772:53;:::i;:::-;3762:63;;3718:117;3646:196;;;;:::o;3848:407::-;3916:6;3924;3973:2;3961:9;3952:7;3948:23;3944:32;3941:2;;;3989:1;3986;3979:12;3941:2;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3931:324;;;;;:::o;4261:552::-;4338:6;4346;4354;4403:2;4391:9;4382:7;4378:23;4374:32;4371:2;;;4419:1;4416;4409:12;4371:2;4462:1;4487:53;4532:7;4523:6;4512:9;4508:22;4487:53;:::i;:::-;4477:63;;4433:117;4589:2;4615:53;4660:7;4651:6;4640:9;4636:22;4615:53;:::i;:::-;4605:63;;4560:118;4717:2;4743:53;4788:7;4779:6;4768:9;4764:22;4743:53;:::i;:::-;4733:63;;4688:118;4361:452;;;;;:::o;4819:809::-;4914:6;4922;4930;4938;4987:3;4975:9;4966:7;4962:23;4958:33;4955:2;;;5004:1;5001;4994:12;4955:2;5047:1;5072:53;5117:7;5108:6;5097:9;5093:22;5072:53;:::i;:::-;5062:63;;5018:117;5174:2;5200:53;5245:7;5236:6;5225:9;5221:22;5200:53;:::i;:::-;5190:63;;5145:118;5302:2;5328:53;5373:7;5364:6;5353:9;5349:22;5328:53;:::i;:::-;5318:63;;5273:118;5458:2;5447:9;5443:18;5430:32;5489:18;5481:6;5478:30;5475:2;;;5521:1;5518;5511:12;5475:2;5549:62;5603:7;5594:6;5583:9;5579:22;5549:62;:::i;:::-;5539:72;;5401:220;4945:683;;;;;;;:::o;5634:401::-;5699:6;5707;5756:2;5744:9;5735:7;5731:23;5727:32;5724:2;;;5772:1;5769;5762:12;5724:2;5815:1;5840:53;5885:7;5876:6;5865:9;5861:22;5840:53;:::i;:::-;5830:63;;5786:117;5942:2;5968:50;6010:7;6001:6;5990:9;5986:22;5968:50;:::i;:::-;5958:60;;5913:115;5714:321;;;;;:::o;6041:407::-;6109:6;6117;6166:2;6154:9;6145:7;6141:23;6137:32;6134:2;;;6182:1;6179;6172:12;6134:2;6225:1;6250:53;6295:7;6286:6;6275:9;6271:22;6250:53;:::i;:::-;6240:63;;6196:117;6352:2;6378:53;6423:7;6414:6;6403:9;6399:22;6378:53;:::i;:::-;6368:63;;6323:118;6124:324;;;;;:::o;6454:693::-;6572:6;6580;6629:2;6617:9;6608:7;6604:23;6600:32;6597:2;;;6645:1;6642;6635:12;6597:2;6716:1;6705:9;6701:17;6688:31;6746:18;6738:6;6735:30;6732:2;;;6778:1;6775;6768:12;6732:2;6806:78;6876:7;6867:6;6856:9;6852:22;6806:78;:::i;:::-;6796:88;;6659:235;6961:2;6950:9;6946:18;6933:32;6992:18;6984:6;6981:30;6978:2;;;7024:1;7021;7014:12;6978:2;7052:78;7122:7;7113:6;7102:9;7098:22;7052:78;:::i;:::-;7042:88;;6904:236;6587:560;;;;;:::o;7153:260::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:2;;;7276:1;7273;7266:12;7228:2;7319:1;7344:52;7388:7;7379:6;7368:9;7364:22;7344:52;:::i;:::-;7334:62;;7290:116;7218:195;;;;:::o;7419:282::-;7488:6;7537:2;7525:9;7516:7;7512:23;7508:32;7505:2;;;7553:1;7550;7543:12;7505:2;7596:1;7621:63;7676:7;7667:6;7656:9;7652:22;7621:63;:::i;:::-;7611:73;;7567:127;7495:206;;;;:::o;7707:342::-;7806:6;7855:2;7843:9;7834:7;7830:23;7826:32;7823:2;;;7871:1;7868;7861:12;7823:2;7914:1;7939:93;8024:7;8015:6;8004:9;8000:22;7939:93;:::i;:::-;7929:103;;7885:157;7813:236;;;;:::o;8055:262::-;8114:6;8163:2;8151:9;8142:7;8138:23;8134:32;8131:2;;;8179:1;8176;8169:12;8131:2;8222:1;8247:53;8292:7;8283:6;8272:9;8268:22;8247:53;:::i;:::-;8237:63;;8193:117;8121:196;;;;:::o;8323:118::-;8410:24;8428:5;8410:24;:::i;:::-;8405:3;8398:37;8388:53;;:::o;8447:109::-;8528:21;8543:5;8528:21;:::i;:::-;8523:3;8516:34;8506:50;;:::o;8562:360::-;8648:3;8676:38;8708:5;8676:38;:::i;:::-;8730:70;8793:6;8788:3;8730:70;:::i;:::-;8723:77;;8809:52;8854:6;8849:3;8842:4;8835:5;8831:16;8809:52;:::i;:::-;8886:29;8908:6;8886:29;:::i;:::-;8881:3;8877:39;8870:46;;8652:270;;;;;:::o;8928:364::-;9016:3;9044:39;9077:5;9044:39;:::i;:::-;9099:71;9163:6;9158:3;9099:71;:::i;:::-;9092:78;;9179:52;9224:6;9219:3;9212:4;9205:5;9201:16;9179:52;:::i;:::-;9256:29;9278:6;9256:29;:::i;:::-;9251:3;9247:39;9240:46;;9020:272;;;;;:::o;9298:377::-;9404:3;9432:39;9465:5;9432:39;:::i;:::-;9487:89;9569:6;9564:3;9487:89;:::i;:::-;9480:96;;9585:52;9630:6;9625:3;9618:4;9611:5;9607:16;9585:52;:::i;:::-;9662:6;9657:3;9653:16;9646:23;;9408:267;;;;;:::o;9681:366::-;9823:3;9844:67;9908:2;9903:3;9844:67;:::i;:::-;9837:74;;9920:93;10009:3;9920:93;:::i;:::-;10038:2;10033:3;10029:12;10022:19;;9827:220;;;:::o;10053:366::-;10195:3;10216:67;10280:2;10275:3;10216:67;:::i;:::-;10209:74;;10292:93;10381:3;10292:93;:::i;:::-;10410:2;10405:3;10401:12;10394:19;;10199:220;;;:::o;10425:366::-;10567:3;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10664:93;10753:3;10664:93;:::i;:::-;10782:2;10777:3;10773:12;10766:19;;10571:220;;;:::o;10797:366::-;10939:3;10960:67;11024:2;11019:3;10960:67;:::i;:::-;10953:74;;11036:93;11125:3;11036:93;:::i;:::-;11154:2;11149:3;11145:12;11138:19;;10943:220;;;:::o;11169:366::-;11311:3;11332:67;11396:2;11391:3;11332:67;:::i;:::-;11325:74;;11408:93;11497:3;11408:93;:::i;:::-;11526:2;11521:3;11517:12;11510:19;;11315:220;;;:::o;11541:366::-;11683:3;11704:67;11768:2;11763:3;11704:67;:::i;:::-;11697:74;;11780:93;11869:3;11780:93;:::i;:::-;11898:2;11893:3;11889:12;11882:19;;11687:220;;;:::o;11913:366::-;12055:3;12076:67;12140:2;12135:3;12076:67;:::i;:::-;12069:74;;12152:93;12241:3;12152:93;:::i;:::-;12270:2;12265:3;12261:12;12254:19;;12059:220;;;:::o;12285:366::-;12427:3;12448:67;12512:2;12507:3;12448:67;:::i;:::-;12441:74;;12524:93;12613:3;12524:93;:::i;:::-;12642:2;12637:3;12633:12;12626:19;;12431:220;;;:::o;12657:366::-;12799:3;12820:67;12884:2;12879:3;12820:67;:::i;:::-;12813:74;;12896:93;12985:3;12896:93;:::i;:::-;13014:2;13009:3;13005:12;12998:19;;12803:220;;;:::o;13029:366::-;13171:3;13192:67;13256:2;13251:3;13192:67;:::i;:::-;13185:74;;13268:93;13357:3;13268:93;:::i;:::-;13386:2;13381:3;13377:12;13370:19;;13175:220;;;:::o;13401:366::-;13543:3;13564:67;13628:2;13623:3;13564:67;:::i;:::-;13557:74;;13640:93;13729:3;13640:93;:::i;:::-;13758:2;13753:3;13749:12;13742:19;;13547:220;;;:::o;13773:366::-;13915:3;13936:67;14000:2;13995:3;13936:67;:::i;:::-;13929:74;;14012:93;14101:3;14012:93;:::i;:::-;14130:2;14125:3;14121:12;14114:19;;13919:220;;;:::o;14145:366::-;14287:3;14308:67;14372:2;14367:3;14308:67;:::i;:::-;14301:74;;14384:93;14473:3;14384:93;:::i;:::-;14502:2;14497:3;14493:12;14486:19;;14291:220;;;:::o;14517:118::-;14604:24;14622:5;14604:24;:::i;:::-;14599:3;14592:37;14582:53;;:::o;14641:435::-;14821:3;14843:95;14934:3;14925:6;14843:95;:::i;:::-;14836:102;;14955:95;15046:3;15037:6;14955:95;:::i;:::-;14948:102;;15067:3;15060:10;;14825:251;;;;;:::o;15082:222::-;15175:4;15213:2;15202:9;15198:18;15190:26;;15226:71;15294:1;15283:9;15279:17;15270:6;15226:71;:::i;:::-;15180:124;;;;:::o;15310:640::-;15505:4;15543:3;15532:9;15528:19;15520:27;;15557:71;15625:1;15614:9;15610:17;15601:6;15557:71;:::i;:::-;15638:72;15706:2;15695:9;15691:18;15682:6;15638:72;:::i;:::-;15720;15788:2;15777:9;15773:18;15764:6;15720:72;:::i;:::-;15839:9;15833:4;15829:20;15824:2;15813:9;15809:18;15802:48;15867:76;15938:4;15929:6;15867:76;:::i;:::-;15859:84;;15510:440;;;;;;;:::o;15956:210::-;16043:4;16081:2;16070:9;16066:18;16058:26;;16094:65;16156:1;16145:9;16141:17;16132:6;16094:65;:::i;:::-;16048:118;;;;:::o;16172:313::-;16285:4;16323:2;16312:9;16308:18;16300:26;;16372:9;16366:4;16362:20;16358:1;16347:9;16343:17;16336:47;16400:78;16473:4;16464:6;16400:78;:::i;:::-;16392:86;;16290:195;;;;:::o;16491:419::-;16657:4;16695:2;16684:9;16680:18;16672:26;;16744:9;16738:4;16734:20;16730:1;16719:9;16715:17;16708:47;16772:131;16898:4;16772:131;:::i;:::-;16764:139;;16662:248;;;:::o;16916:419::-;17082:4;17120:2;17109:9;17105:18;17097:26;;17169:9;17163:4;17159:20;17155:1;17144:9;17140:17;17133:47;17197:131;17323:4;17197:131;:::i;:::-;17189:139;;17087:248;;;:::o;17341:419::-;17507:4;17545:2;17534:9;17530:18;17522:26;;17594:9;17588:4;17584:20;17580:1;17569:9;17565:17;17558:47;17622:131;17748:4;17622:131;:::i;:::-;17614:139;;17512:248;;;:::o;17766:419::-;17932:4;17970:2;17959:9;17955:18;17947:26;;18019:9;18013:4;18009:20;18005:1;17994:9;17990:17;17983:47;18047:131;18173:4;18047:131;:::i;:::-;18039:139;;17937:248;;;:::o;18191:419::-;18357:4;18395:2;18384:9;18380:18;18372:26;;18444:9;18438:4;18434:20;18430:1;18419:9;18415:17;18408:47;18472:131;18598:4;18472:131;:::i;:::-;18464:139;;18362:248;;;:::o;18616:419::-;18782:4;18820:2;18809:9;18805:18;18797:26;;18869:9;18863:4;18859:20;18855:1;18844:9;18840:17;18833:47;18897:131;19023:4;18897:131;:::i;:::-;18889:139;;18787:248;;;:::o;19041:419::-;19207:4;19245:2;19234:9;19230:18;19222:26;;19294:9;19288:4;19284:20;19280:1;19269:9;19265:17;19258:47;19322:131;19448:4;19322:131;:::i;:::-;19314:139;;19212:248;;;:::o;19466:419::-;19632:4;19670:2;19659:9;19655:18;19647:26;;19719:9;19713:4;19709:20;19705:1;19694:9;19690:17;19683:47;19747:131;19873:4;19747:131;:::i;:::-;19739:139;;19637:248;;;:::o;19891:419::-;20057:4;20095:2;20084:9;20080:18;20072:26;;20144:9;20138:4;20134:20;20130:1;20119:9;20115:17;20108:47;20172:131;20298:4;20172:131;:::i;:::-;20164:139;;20062:248;;;:::o;20316:419::-;20482:4;20520:2;20509:9;20505:18;20497:26;;20569:9;20563:4;20559:20;20555:1;20544:9;20540:17;20533:47;20597:131;20723:4;20597:131;:::i;:::-;20589:139;;20487:248;;;:::o;20741:419::-;20907:4;20945:2;20934:9;20930:18;20922:26;;20994:9;20988:4;20984:20;20980:1;20969:9;20965:17;20958:47;21022:131;21148:4;21022:131;:::i;:::-;21014:139;;20912:248;;;:::o;21166:419::-;21332:4;21370:2;21359:9;21355:18;21347:26;;21419:9;21413:4;21409:20;21405:1;21394:9;21390:17;21383:47;21447:131;21573:4;21447:131;:::i;:::-;21439:139;;21337:248;;;:::o;21591:419::-;21757:4;21795:2;21784:9;21780:18;21772:26;;21844:9;21838:4;21834:20;21830:1;21819:9;21815:17;21808:47;21872:131;21998:4;21872:131;:::i;:::-;21864:139;;21762:248;;;:::o;22016:222::-;22109:4;22147:2;22136:9;22132:18;22124:26;;22160:71;22228:1;22217:9;22213:17;22204:6;22160:71;:::i;:::-;22114:124;;;;:::o;22244:129::-;22278:6;22305:20;;:::i;:::-;22295:30;;22334:33;22362:4;22354:6;22334:33;:::i;:::-;22285:88;;;:::o;22379:75::-;22412:6;22445:2;22439:9;22429:19;;22419:35;:::o;22460:311::-;22537:4;22627:18;22619:6;22616:30;22613:2;;;22649:18;;:::i;:::-;22613:2;22699:4;22691:6;22687:17;22679:25;;22759:4;22753;22749:15;22741:23;;22542:229;;;:::o;22777:311::-;22854:4;22944:18;22936:6;22933:30;22930:2;;;22966:18;;:::i;:::-;22930:2;23016:4;23008:6;23004:17;22996:25;;23076:4;23070;23066:15;23058:23;;22859:229;;;:::o;23094:307::-;23155:4;23245:18;23237:6;23234:30;23231:2;;;23267:18;;:::i;:::-;23231:2;23305:29;23327:6;23305:29;:::i;:::-;23297:37;;23389:4;23383;23379:15;23371:23;;23160:241;;;:::o;23407:98::-;23458:6;23492:5;23486:12;23476:22;;23465:40;;;:::o;23511:99::-;23563:6;23597:5;23591:12;23581:22;;23570:40;;;:::o;23616:168::-;23699:11;23733:6;23728:3;23721:19;23773:4;23768:3;23764:14;23749:29;;23711:73;;;;:::o;23790:169::-;23874:11;23908:6;23903:3;23896:19;23948:4;23943:3;23939:14;23924:29;;23886:73;;;;:::o;23965:148::-;24067:11;24104:3;24089:18;;24079:34;;;;:::o;24119:305::-;24159:3;24178:20;24196:1;24178:20;:::i;:::-;24173:25;;24212:20;24230:1;24212:20;:::i;:::-;24207:25;;24366:1;24298:66;24294:74;24291:1;24288:81;24285:2;;;24372:18;;:::i;:::-;24285:2;24416:1;24413;24409:9;24402:16;;24163:261;;;;:::o;24430:185::-;24470:1;24487:20;24505:1;24487:20;:::i;:::-;24482:25;;24521:20;24539:1;24521:20;:::i;:::-;24516:25;;24560:1;24550:2;;24565:18;;:::i;:::-;24550:2;24607:1;24604;24600:9;24595:14;;24472:143;;;;:::o;24621:191::-;24661:4;24681:20;24699:1;24681:20;:::i;:::-;24676:25;;24715:20;24733:1;24715:20;:::i;:::-;24710:25;;24754:1;24751;24748:8;24745:2;;;24759:18;;:::i;:::-;24745:2;24804:1;24801;24797:9;24789:17;;24666:146;;;;:::o;24818:96::-;24855:7;24884:24;24902:5;24884:24;:::i;:::-;24873:35;;24863:51;;;:::o;24920:90::-;24954:7;24997:5;24990:13;24983:21;24972:32;;24962:48;;;:::o;25016:149::-;25052:7;25092:66;25085:5;25081:78;25070:89;;25060:105;;;:::o;25171:125::-;25237:7;25266:24;25284:5;25266:24;:::i;:::-;25255:35;;25245:51;;;:::o;25302:126::-;25339:7;25379:42;25372:5;25368:54;25357:65;;25347:81;;;:::o;25434:77::-;25471:7;25500:5;25489:16;;25479:32;;;:::o;25517:154::-;25601:6;25596:3;25591;25578:30;25663:1;25654:6;25649:3;25645:16;25638:27;25568:103;;;:::o;25677:307::-;25745:1;25755:113;25769:6;25766:1;25763:13;25755:113;;;25854:1;25849:3;25845:11;25839:18;25835:1;25830:3;25826:11;25819:39;25791:2;25788:1;25784:10;25779:15;;25755:113;;;25886:6;25883:1;25880:13;25877:2;;;25966:1;25957:6;25952:3;25948:16;25941:27;25877:2;25726:258;;;;:::o;25990:281::-;26073:27;26095:4;26073:27;:::i;:::-;26065:6;26061:40;26203:6;26191:10;26188:22;26167:18;26155:10;26152:34;26149:62;26146:2;;;26214:18;;:::i;:::-;26146:2;26254:10;26250:2;26243:22;26033:238;;;:::o;26277:233::-;26316:3;26339:24;26357:5;26339:24;:::i;:::-;26330:33;;26385:66;26378:5;26375:77;26372:2;;;26455:18;;:::i;:::-;26372:2;26502:1;26495:5;26491:13;26484:20;;26320:190;;;:::o;26516:176::-;26548:1;26565:20;26583:1;26565:20;:::i;:::-;26560:25;;26599:20;26617:1;26599:20;:::i;:::-;26594:25;;26638:1;26628:2;;26643:18;;:::i;:::-;26628:2;26684:1;26681;26677:9;26672:14;;26550:142;;;;:::o;26698:180::-;26746:77;26743:1;26736:88;26843:4;26840:1;26833:15;26867:4;26864:1;26857:15;26884:180;26932:77;26929:1;26922:88;27029:4;27026:1;27019:15;27053:4;27050:1;27043:15;27070:180;27118:77;27115:1;27108:88;27215:4;27212:1;27205:15;27239:4;27236:1;27229:15;27256:102;27297:6;27348:2;27344:7;27339:2;27332:5;27328:14;27324:28;27314:38;;27304:54;;;:::o;27364:164::-;27504:16;27500:1;27492:6;27488:14;27481:40;27470:58;:::o;27534:225::-;27674:34;27670:1;27662:6;27658:14;27651:58;27743:8;27738:2;27730:6;27726:15;27719:33;27640:119;:::o;27765:167::-;27905:19;27901:1;27893:6;27889:14;27882:43;27871:61;:::o;27938:162::-;28078:14;28074:1;28066:6;28062:14;28055:38;28044:56;:::o;28106:167::-;28246:19;28242:1;28234:6;28230:14;28223:43;28212:61;:::o;28279:173::-;28419:25;28415:1;28407:6;28403:14;28396:49;28385:67;:::o;28458:162::-;28598:14;28594:1;28586:6;28582:14;28575:38;28564:56;:::o;28626:164::-;28766:16;28762:1;28754:6;28750:14;28743:40;28732:58;:::o;28796:164::-;28936:16;28932:1;28924:6;28920:14;28913:40;28902:58;:::o;28966:182::-;29106:34;29102:1;29094:6;29090:14;29083:58;29072:76;:::o;29154:163::-;29294:15;29290:1;29282:6;29278:14;29271:39;29260:57;:::o;29323:180::-;29463:32;29459:1;29451:6;29447:14;29440:56;29429:74;:::o;29509:163::-;29649:15;29645:1;29637:6;29633:14;29626:39;29615:57;:::o;29678:122::-;29751:24;29769:5;29751:24;:::i;:::-;29744:5;29741:35;29731:2;;29790:1;29787;29780:12;29731:2;29721:79;:::o;29806:116::-;29876:21;29891:5;29876:21;:::i;:::-;29869:5;29866:32;29856:2;;29912:1;29909;29902:12;29856:2;29846:76;:::o;29928:120::-;30000:23;30017:5;30000:23;:::i;:::-;29993:5;29990:34;29980:2;;30038:1;30035;30028:12;29980:2;29970:78;:::o;30054:180::-;30156:53;30203:5;30156:53;:::i;:::-;30149:5;30146:64;30136:2;;30224:1;30221;30214:12;30136:2;30126:108;:::o;30240:122::-;30313:24;30331:5;30313:24;:::i;:::-;30306:5;30303:35;30293:2;;30352:1;30349;30342:12;30293:2;30283:79;:::o
Swarm Source
ipfs://f80d122778c003bb6d3bce622b4a90fcae1853a87fe45847704a468134b42b52
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.