Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
626 BD
Holders
373
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Brainoids
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-18 */ /** *Submitted for verification at Etherscan.io on 2021-12-16 */ /** *Submitted for verification at Etherscan.io on 2021-10-01 */ 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); } /** * @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; } /** * @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); } } /* * @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; } } /** * @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); } } /** * @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); } /** * @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); } /** * @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); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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); } } } } /** * @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; } } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: 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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @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); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } pragma solidity ^0.8.0; contract Brainoids is ERC721Enumerable, Ownable { string baseURI; uint256 public constant MAX_BRAIN = 5555; uint256 public price = 55000000000000000; //0.055 ETH uint256 public prePrice = 45000000000000000; //0.045 ETH bool public publicSale = false; bool public preSale = false; mapping (address => uint256) public preMintAddrs; uint256 public preMintNums; address benefitAddr = 0x5eD624152EA66eE99fC50521430bf96Db69e1dfC; address devAddr = 0x3d0c83F3ABdEf9D19E2421Ed119A6C4557178c3B; constructor(string memory name, string memory symbol) ERC721(name, symbol) { } function getPreMintAddrNums() public view returns (uint256){ return preMintAddrs[_msgSender()]; } function getPrice() public view returns (uint256){ return price; } function getPrePrice() public view returns (uint256){ return prePrice; } function getSoldNum() public view returns (uint256){ return totalSupply(); } function withdraw() public onlyOwner { payable(devAddr).transfer(address(this).balance*5/100); payable(benefitAddr).transfer(address(this).balance); } function flipSaleState() public onlyOwner { publicSale = !publicSale; } function flipPreSaleState() public onlyOwner { preSale = !preSale; } function changePrice(uint256 newPrice) public onlyOwner { price = newPrice; } function changePrePrice(uint256 newPrice) public onlyOwner { prePrice = newPrice; } function setBaseURI(string memory _uri) public onlyOwner { baseURI = _uri; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function ownerMint(uint nums) public onlyOwner{ require(totalSupply() + nums < MAX_BRAIN, "sold out."); for(uint i = 0; i < nums; i++){ uint id = totalSupply(); if(id < MAX_BRAIN){ _safeMint(0xe6519aB01cEc48F59465E65d18619737e6697D11, id); } } } function setPreMintAddr(address[] memory addr) public onlyOwner{ require(preSale, "Pre Sale not started."); uint addrLength = addr.length; for(uint i = 0; i < addrLength; i++){ preMintAddrs[addr[i]] = preMintAddrs[addr[i]] + 5; } } function preMint(uint nums) external payable { require(preSale, "Pre Sale not started."); require(preMintAddrs[_msgSender()] >= nums, "can not pre mint more than you own."); require(preMintNums < 400, "ony 400 address can pre mint."); require(totalSupply() < MAX_BRAIN, "sold out."); require(totalSupply() + nums <= MAX_BRAIN, "not enough left."); uint salePrice = prePrice * nums; require(msg.value >= salePrice, "not enough funds to purchase."); for(uint i = 0; i < nums; i++){ uint id = totalSupply(); if(id < MAX_BRAIN){ _safeMint(_msgSender(), id); } } preMintAddrs[_msgSender()] = preMintAddrs[_msgSender()] - nums; preMintNums = preMintNums + 1; } function mint(uint nums) external payable { require(publicSale, "Sale not started."); require(nums <= 20, "nums not more than 20."); require(totalSupply() < MAX_BRAIN, "sold out."); require(totalSupply() + nums <= MAX_BRAIN, "not enough left."); uint salePrice = price * nums; require(msg.value >= salePrice, "not enough funds to purchase."); for(uint i = 0; i < nums; i++){ uint id = totalSupply(); if(id < MAX_BRAIN){ _safeMint(_msgSender(), id); } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_BRAIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPreSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreMintAddrNums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSoldNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"nums","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nums","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nums","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMintAddrs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintNums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"string","name":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"setPreMintAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266c3663566a58000600c55669fdf42f6e48000600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff021916908315150217905550735ed624152ea66ee99fc50521430bf96db69e1dfc601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733d0c83f3abdef9d19e2421ed119a6c4557178c3b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200010757600080fd5b50604051620051473803806200514783398181016040528101906200012d919062000387565b818181600090805190602001906200014792919062000259565b5080600190805190602001906200016092919062000259565b50505062000183620001776200018b60201b60201c565b6200019360201b60201c565b505062000590565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200026790620004a1565b90600052602060002090601f0160209004810192826200028b5760008555620002d7565b82601f10620002a657805160ff1916838001178555620002d7565b82800160010185558215620002d7579182015b82811115620002d6578251825591602001919060010190620002b9565b5b509050620002e69190620002ea565b5090565b5b8082111562000305576000816000905550600101620002eb565b5090565b6000620003206200031a8462000435565b6200040c565b9050828152602081018484840111156200033f576200033e62000570565b5b6200034c8482856200046b565b509392505050565b600082601f8301126200036c576200036b6200056b565b5b81516200037e84826020860162000309565b91505092915050565b60008060408385031215620003a157620003a06200057a565b5b600083015167ffffffffffffffff811115620003c257620003c162000575565b5b620003d08582860162000354565b925050602083015167ffffffffffffffff811115620003f457620003f362000575565b5b620004028582860162000354565b9150509250929050565b6000620004186200042b565b9050620004268282620004d7565b919050565b6000604051905090565b600067ffffffffffffffff8211156200045357620004526200053c565b5b6200045e826200057f565b9050602081019050919050565b60005b838110156200048b5780820151818401526020810190506200046e565b838111156200049b576000848401525b50505050565b60006002820490506001821680620004ba57607f821691505b60208210811415620004d157620004d06200050d565b5b50919050565b620004e2826200057f565b810181811067ffffffffffffffff821117156200050457620005036200053c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614ba780620005a06000396000f3fe60806040526004361061023b5760003560e01c806370a082311161012e578063a2b40d19116100ab578063e567cad61161006f578063e567cad614610845578063e985e9c514610870578063f0325549146108ad578063f19e75d4146108c4578063f2fde38b146108ed5761023b565b8063a2b40d1914610760578063a73c9ee014610789578063b88d4fde146107b4578063c87b56dd146107dd578063cd8dda301461081a5761023b565b806398d5fdca116100f257806398d5fdca1461069a5780639c6ba991146106c5578063a035b1fe146106f0578063a0712d681461071b578063a22cb465146107375761023b565b806370a08231146105d4578063715018a6146106115780638ad433ac146106285780638da5cb5b1461064457806395d89b411461066f5761023b565b806334918dfd116101bc57806355f804b31161018057806355f804b3146104f15780635743b25c1461051a5780635a7adf7f146105435780636352211e1461056e5780636aab8e71146105ab5761023b565b806334918dfd146104325780633ccfd60b1461044957806342842e0e146104605780634d9ac681146104895780634f6ccce7146104b45761023b565b806318160ddd1161020357806318160ddd1461034b57806323b872dd146103765780632f745c591461039f57806333bc1c5c146103dc57806334349eab146104075761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806317efc25b1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061367e565b610916565b6040516102749190613c37565b60405180910390f35b34801561028957600080fd5b50610292610990565b60405161029f9190613c52565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613721565b610a22565b6040516102dc9190613bd0565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906135f5565b610aa7565b005b34801561031a57600080fd5b5061033560048036038101906103309190613472565b610bbf565b6040516103429190613fb4565b60405180910390f35b34801561035757600080fd5b50610360610bd7565b60405161036d9190613fb4565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906134df565b610be4565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906135f5565b610c44565b6040516103d39190613fb4565b60405180910390f35b3480156103e857600080fd5b506103f1610ce9565b6040516103fe9190613c37565b60405180910390f35b34801561041357600080fd5b5061041c610cfc565b6040516104299190613fb4565b60405180910390f35b34801561043e57600080fd5b50610447610d02565b005b34801561045557600080fd5b5061045e610daa565b005b34801561046c57600080fd5b50610487600480360381019061048291906134df565b610f12565b005b34801561049557600080fd5b5061049e610f32565b6040516104ab9190613fb4565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190613721565b610f41565b6040516104e89190613fb4565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906136d8565b610fb2565b005b34801561052657600080fd5b50610541600480360381019061053c9190613721565b611048565b005b34801561054f57600080fd5b506105586110ce565b6040516105659190613c37565b60405180910390f35b34801561057a57600080fd5b5061059560048036038101906105909190613721565b6110e1565b6040516105a29190613bd0565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613635565b611193565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190613472565b61134a565b6040516106089190613fb4565b60405180910390f35b34801561061d57600080fd5b50610626611402565b005b610642600480360381019061063d9190613721565b61148a565b005b34801561065057600080fd5b5061065961179c565b6040516106669190613bd0565b60405180910390f35b34801561067b57600080fd5b506106846117c6565b6040516106919190613c52565b60405180910390f35b3480156106a657600080fd5b506106af611858565b6040516106bc9190613fb4565b60405180910390f35b3480156106d157600080fd5b506106da611862565b6040516106e79190613fb4565b60405180910390f35b3480156106fc57600080fd5b50610705611868565b6040516107129190613fb4565b60405180910390f35b61073560048036038101906107309190613721565b61186e565b005b34801561074357600080fd5b5061075e600480360381019061075991906135b5565b611a44565b005b34801561076c57600080fd5b5061078760048036038101906107829190613721565b611bc5565b005b34801561079557600080fd5b5061079e611c4b565b6040516107ab9190613fb4565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613532565b611c55565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613721565b611cb7565b6040516108119190613c52565b60405180910390f35b34801561082657600080fd5b5061082f611d5e565b60405161083c9190613fb4565b60405180910390f35b34801561085157600080fd5b5061085a611dac565b6040516108679190613fb4565b60405180910390f35b34801561087c57600080fd5b506108976004803603810190610892919061349f565b611db2565b6040516108a49190613c37565b60405180910390f35b3480156108b957600080fd5b506108c2611e46565b005b3480156108d057600080fd5b506108eb60048036038101906108e69190613721565b611eee565b005b3480156108f957600080fd5b50610914600480360381019061090f9190613472565b612018565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610989575061098882612110565b5b9050919050565b60606000805461099f90614290565b80601f01602080910402602001604051908101604052809291908181526020018280546109cb90614290565b8015610a185780601f106109ed57610100808354040283529160200191610a18565b820191906000526020600020905b8154815290600101906020018083116109fb57829003601f168201915b5050505050905090565b6000610a2d826121f2565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613e74565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab2826110e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613f34565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4261225e565b73ffffffffffffffffffffffffffffffffffffffff161480610b715750610b7081610b6b61225e565b611db2565b5b610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613db4565b60405180910390fd5b610bba8383612266565b505050565b600f6020528060005260406000206000915090505481565b6000600880549050905090565b610bf5610bef61225e565b8261231f565b610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90613f54565b60405180910390fd5b610c3f8383836123fd565b505050565b6000610c4f8361134a565b8210610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613c94565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e60009054906101000a900460ff1681565b60105481565b610d0a61225e565b73ffffffffffffffffffffffffffffffffffffffff16610d2861179c565b73ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590613e94565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610db261225e565b73ffffffffffffffffffffffffffffffffffffffff16610dd061179c565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613e94565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600547610e71919061414c565b610e7b919061411b565b9081150290604051600060405180830381858888f19350505050158015610ea6573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f0f573d6000803e3d6000fd5b50565b610f2d83838360405180602001604052806000815250611c55565b505050565b6000610f3c610bd7565b905090565b6000610f4b610bd7565b8210610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613f74565b60405180910390fd5b60088281548110610fa057610f9f614429565b5b90600052602060002001549050919050565b610fba61225e565b73ffffffffffffffffffffffffffffffffffffffff16610fd861179c565b73ffffffffffffffffffffffffffffffffffffffff161461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613e94565b60405180910390fd5b80600b90805190602001906110449291906131e8565b5050565b61105061225e565b73ffffffffffffffffffffffffffffffffffffffff1661106e61179c565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90613e94565b60405180910390fd5b80600d8190555050565b600e60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613df4565b60405180910390fd5b80915050919050565b61119b61225e565b73ffffffffffffffffffffffffffffffffffffffff166111b961179c565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690613e94565b60405180910390fd5b600e60019054906101000a900460ff1661125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613d74565b60405180910390fd5b60008151905060005b81811015611345576005600f600085848151811061128857611287614429565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d591906140c5565b600f60008584815181106112ec576112eb614429565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061133d906142f3565b915050611267565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613dd4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61140a61225e565b73ffffffffffffffffffffffffffffffffffffffff1661142861179c565b73ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613e94565b60405180910390fd5b6114886000612659565b565b600e60019054906101000a900460ff166114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613d74565b60405180910390fd5b80600f60006114e661225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990613c74565b60405180910390fd5b610190601054106115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613e34565b60405180910390fd5b6115b36115b3610bd7565b106115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90613f14565b60405180910390fd5b6115b3816115ff610bd7565b61160991906140c5565b111561164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613e14565b60405180910390fd5b600081600d5461165a919061414c565b90508034101561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690613f94565b60405180910390fd5b60005b828110156116e65760006116b4610bd7565b90506115b38110156116d2576116d16116cb61225e565b8261271f565b5b5080806116de906142f3565b9150506116a2565b5081600f60006116f461225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461173991906141a6565b600f600061174561225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160105461179291906140c5565b6010819055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117d590614290565b80601f016020809104026020016040519081016040528092919081815260200182805461180190614290565b801561184e5780601f106118235761010080835404028352916020019161184e565b820191906000526020600020905b81548152906001019060200180831161183157829003601f168201915b5050505050905090565b6000600c54905090565b6115b381565b600c5481565b600e60009054906101000a900460ff166118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613cf4565b60405180910390fd5b6014811115611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890613eb4565b60405180910390fd5b6115b361190c610bd7565b1061194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613f14565b60405180910390fd5b6115b381611958610bd7565b61196291906140c5565b11156119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613e14565b60405180910390fd5b600081600c546119b3919061414c565b9050803410156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90613f94565b60405180910390fd5b60005b82811015611a3f576000611a0d610bd7565b90506115b3811015611a2b57611a2a611a2461225e565b8261271f565b5b508080611a37906142f3565b9150506119fb565b505050565b611a4c61225e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190613d54565b60405180910390fd5b8060056000611ac761225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7461225e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bb99190613c37565b60405180910390a35050565b611bcd61225e565b73ffffffffffffffffffffffffffffffffffffffff16611beb61179c565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613e94565b60405180910390fd5b80600c8190555050565b6000600d54905090565b611c66611c6061225e565b8361231f565b611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613f54565b60405180910390fd5b611cb18484848461273d565b50505050565b6060611cc2826121f2565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613ef4565b60405180910390fd5b6000611d0b612799565b90506000815111611d2b5760405180602001604052806000815250611d56565b80611d358461282b565b604051602001611d46929190613bac565b6040516020818303038152906040525b915050919050565b6000600f6000611d6c61225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4e61225e565b73ffffffffffffffffffffffffffffffffffffffff16611e6c61179c565b73ffffffffffffffffffffffffffffffffffffffff1614611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613e94565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611ef661225e565b73ffffffffffffffffffffffffffffffffffffffff16611f1461179c565b73ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190613e94565b60405180910390fd5b6115b381611f76610bd7565b611f8091906140c5565b10611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790613f14565b60405180910390fd5b60005b81811015612014576000611fd5610bd7565b90506115b381101561200057611fff73e6519ab01cec48f59465e65d18619737e6697d118261271f565b5b50808061200c906142f3565b915050611fc3565b5050565b61202061225e565b73ffffffffffffffffffffffffffffffffffffffff1661203e61179c565b73ffffffffffffffffffffffffffffffffffffffff1614612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90613e94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb90613cd4565b60405180910390fd5b61210d81612659565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121db57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121eb57506121ea8261298c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122d9836110e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061232a826121f2565b612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090613d94565b60405180910390fd5b6000612374836110e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123e357508373ffffffffffffffffffffffffffffffffffffffff166123cb84610a22565b73ffffffffffffffffffffffffffffffffffffffff16145b806123f457506123f38185611db2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661241d826110e1565b73ffffffffffffffffffffffffffffffffffffffff1614612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a90613ed4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90613d34565b60405180910390fd5b6124ee8383836129f6565b6124f9600082612266565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254991906141a6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a091906140c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612739828260405180602001604052806000815250612b0a565b5050565b6127488484846123fd565b61275484848484612b65565b612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90613cb4565b60405180910390fd5b50505050565b6060600b80546127a890614290565b80601f01602080910402602001604051908101604052809291908181526020018280546127d490614290565b80156128215780601f106127f657610100808354040283529160200191612821565b820191906000526020600020905b81548152906001019060200180831161280457829003601f168201915b5050505050905090565b60606000821415612873576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612987565b600082905060005b600082146128a557808061288e906142f3565b915050600a8261289e919061411b565b915061287b565b60008167ffffffffffffffff8111156128c1576128c0614458565b5b6040519080825280601f01601f1916602001820160405280156128f35781602001600182028036833780820191505090505b5090505b600085146129805760018261290c91906141a6565b9150600a8561291b919061433c565b603061292791906140c5565b60f81b81838151811061293d5761293c614429565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612979919061411b565b94506128f7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a01838383612cfc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4457612a3f81612d01565b612a83565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a8257612a818382612d4a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac657612ac181612eb7565b612b05565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b0457612b038282612f88565b5b5b505050565b612b148383613007565b612b216000848484612b65565b612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5790613cb4565b60405180910390fd5b505050565b6000612b868473ffffffffffffffffffffffffffffffffffffffff166131d5565b15612cef578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612baf61225e565b8786866040518563ffffffff1660e01b8152600401612bd19493929190613beb565b602060405180830381600087803b158015612beb57600080fd5b505af1925050508015612c1c57506040513d601f19601f82011682018060405250810190612c1991906136ab565b60015b612c9f573d8060008114612c4c576040519150601f19603f3d011682016040523d82523d6000602084013e612c51565b606091505b50600081511415612c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8e90613cb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cf4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d578461134a565b612d6191906141a6565b9050600060076000848152602001908152602001600020549050818114612e46576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ecb91906141a6565b9050600060096000848152602001908152602001600020549050600060088381548110612efb57612efa614429565b5b906000526020600020015490508060088381548110612f1d57612f1c614429565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f6c57612f6b6143fa565b5b6001900381819060005260206000200160009055905550505050565b6000612f938361134a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306e90613e54565b60405180910390fd5b613080816121f2565b156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b790613d14565b60405180910390fd5b6130cc600083836129f6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311c91906140c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546131f490614290565b90600052602060002090601f016020900481019282613216576000855561325d565b82601f1061322f57805160ff191683800117855561325d565b8280016001018555821561325d579182015b8281111561325c578251825591602001919060010190613241565b5b50905061326a919061326e565b5090565b5b8082111561328757600081600090555060010161326f565b5090565b600061329e61329984613ff4565b613fcf565b905080838252602082019050828560208602820111156132c1576132c061448c565b5b60005b858110156132f157816132d7888261337f565b8452602084019350602083019250506001810190506132c4565b5050509392505050565b600061330e61330984614020565b613fcf565b90508281526020810184848401111561332a57613329614491565b5b61333584828561424e565b509392505050565b600061335061334b84614051565b613fcf565b90508281526020810184848401111561336c5761336b614491565b5b61337784828561424e565b509392505050565b60008135905061338e81614b15565b92915050565b600082601f8301126133a9576133a8614487565b5b81356133b984826020860161328b565b91505092915050565b6000813590506133d181614b2c565b92915050565b6000813590506133e681614b43565b92915050565b6000815190506133fb81614b43565b92915050565b600082601f83011261341657613415614487565b5b81356134268482602086016132fb565b91505092915050565b600082601f83011261344457613443614487565b5b813561345484826020860161333d565b91505092915050565b60008135905061346c81614b5a565b92915050565b6000602082840312156134885761348761449b565b5b60006134968482850161337f565b91505092915050565b600080604083850312156134b6576134b561449b565b5b60006134c48582860161337f565b92505060206134d58582860161337f565b9150509250929050565b6000806000606084860312156134f8576134f761449b565b5b60006135068682870161337f565b93505060206135178682870161337f565b92505060406135288682870161345d565b9150509250925092565b6000806000806080858703121561354c5761354b61449b565b5b600061355a8782880161337f565b945050602061356b8782880161337f565b935050604061357c8782880161345d565b925050606085013567ffffffffffffffff81111561359d5761359c614496565b5b6135a987828801613401565b91505092959194509250565b600080604083850312156135cc576135cb61449b565b5b60006135da8582860161337f565b92505060206135eb858286016133c2565b9150509250929050565b6000806040838503121561360c5761360b61449b565b5b600061361a8582860161337f565b925050602061362b8582860161345d565b9150509250929050565b60006020828403121561364b5761364a61449b565b5b600082013567ffffffffffffffff81111561366957613668614496565b5b61367584828501613394565b91505092915050565b6000602082840312156136945761369361449b565b5b60006136a2848285016133d7565b91505092915050565b6000602082840312156136c1576136c061449b565b5b60006136cf848285016133ec565b91505092915050565b6000602082840312156136ee576136ed61449b565b5b600082013567ffffffffffffffff81111561370c5761370b614496565b5b6137188482850161342f565b91505092915050565b6000602082840312156137375761373661449b565b5b60006137458482850161345d565b91505092915050565b613757816141da565b82525050565b613766816141ec565b82525050565b600061377782614082565b6137818185614098565b935061379181856020860161425d565b61379a816144a0565b840191505092915050565b60006137b08261408d565b6137ba81856140a9565b93506137ca81856020860161425d565b6137d3816144a0565b840191505092915050565b60006137e98261408d565b6137f381856140ba565b935061380381856020860161425d565b80840191505092915050565b600061381c6023836140a9565b9150613827826144b1565b604082019050919050565b600061383f602b836140a9565b915061384a82614500565b604082019050919050565b60006138626032836140a9565b915061386d8261454f565b604082019050919050565b60006138856026836140a9565b91506138908261459e565b604082019050919050565b60006138a86011836140a9565b91506138b3826145ed565b602082019050919050565b60006138cb601c836140a9565b91506138d682614616565b602082019050919050565b60006138ee6024836140a9565b91506138f98261463f565b604082019050919050565b60006139116019836140a9565b915061391c8261468e565b602082019050919050565b60006139346015836140a9565b915061393f826146b7565b602082019050919050565b6000613957602c836140a9565b9150613962826146e0565b604082019050919050565b600061397a6038836140a9565b91506139858261472f565b604082019050919050565b600061399d602a836140a9565b91506139a88261477e565b604082019050919050565b60006139c06029836140a9565b91506139cb826147cd565b604082019050919050565b60006139e36010836140a9565b91506139ee8261481c565b602082019050919050565b6000613a06601d836140a9565b9150613a1182614845565b602082019050919050565b6000613a296020836140a9565b9150613a348261486e565b602082019050919050565b6000613a4c602c836140a9565b9150613a5782614897565b604082019050919050565b6000613a6f6020836140a9565b9150613a7a826148e6565b602082019050919050565b6000613a926016836140a9565b9150613a9d8261490f565b602082019050919050565b6000613ab56029836140a9565b9150613ac082614938565b604082019050919050565b6000613ad8602f836140a9565b9150613ae382614987565b604082019050919050565b6000613afb6009836140a9565b9150613b06826149d6565b602082019050919050565b6000613b1e6021836140a9565b9150613b29826149ff565b604082019050919050565b6000613b416031836140a9565b9150613b4c82614a4e565b604082019050919050565b6000613b64602c836140a9565b9150613b6f82614a9d565b604082019050919050565b6000613b87601d836140a9565b9150613b9282614aec565b602082019050919050565b613ba681614244565b82525050565b6000613bb882856137de565b9150613bc482846137de565b91508190509392505050565b6000602082019050613be5600083018461374e565b92915050565b6000608082019050613c00600083018761374e565b613c0d602083018661374e565b613c1a6040830185613b9d565b8181036060830152613c2c818461376c565b905095945050505050565b6000602082019050613c4c600083018461375d565b92915050565b60006020820190508181036000830152613c6c81846137a5565b905092915050565b60006020820190508181036000830152613c8d8161380f565b9050919050565b60006020820190508181036000830152613cad81613832565b9050919050565b60006020820190508181036000830152613ccd81613855565b9050919050565b60006020820190508181036000830152613ced81613878565b9050919050565b60006020820190508181036000830152613d0d8161389b565b9050919050565b60006020820190508181036000830152613d2d816138be565b9050919050565b60006020820190508181036000830152613d4d816138e1565b9050919050565b60006020820190508181036000830152613d6d81613904565b9050919050565b60006020820190508181036000830152613d8d81613927565b9050919050565b60006020820190508181036000830152613dad8161394a565b9050919050565b60006020820190508181036000830152613dcd8161396d565b9050919050565b60006020820190508181036000830152613ded81613990565b9050919050565b60006020820190508181036000830152613e0d816139b3565b9050919050565b60006020820190508181036000830152613e2d816139d6565b9050919050565b60006020820190508181036000830152613e4d816139f9565b9050919050565b60006020820190508181036000830152613e6d81613a1c565b9050919050565b60006020820190508181036000830152613e8d81613a3f565b9050919050565b60006020820190508181036000830152613ead81613a62565b9050919050565b60006020820190508181036000830152613ecd81613a85565b9050919050565b60006020820190508181036000830152613eed81613aa8565b9050919050565b60006020820190508181036000830152613f0d81613acb565b9050919050565b60006020820190508181036000830152613f2d81613aee565b9050919050565b60006020820190508181036000830152613f4d81613b11565b9050919050565b60006020820190508181036000830152613f6d81613b34565b9050919050565b60006020820190508181036000830152613f8d81613b57565b9050919050565b60006020820190508181036000830152613fad81613b7a565b9050919050565b6000602082019050613fc96000830184613b9d565b92915050565b6000613fd9613fea565b9050613fe582826142c2565b919050565b6000604051905090565b600067ffffffffffffffff82111561400f5761400e614458565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561403b5761403a614458565b5b614044826144a0565b9050602081019050919050565b600067ffffffffffffffff82111561406c5761406b614458565b5b614075826144a0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d082614244565b91506140db83614244565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141105761410f61436d565b5b828201905092915050565b600061412682614244565b915061413183614244565b9250826141415761414061439c565b5b828204905092915050565b600061415782614244565b915061416283614244565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561419b5761419a61436d565b5b828202905092915050565b60006141b182614244565b91506141bc83614244565b9250828210156141cf576141ce61436d565b5b828203905092915050565b60006141e582614224565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561427b578082015181840152602081019050614260565b8381111561428a576000848401525b50505050565b600060028204905060018216806142a857607f821691505b602082108114156142bc576142bb6143cb565b5b50919050565b6142cb826144a0565b810181811067ffffffffffffffff821117156142ea576142e9614458565b5b80604052505050565b60006142fe82614244565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143315761433061436d565b5b600182019050919050565b600061434782614244565b915061435283614244565b9250826143625761436161439c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f63616e206e6f7420707265206d696e74206d6f7265207468616e20796f75206f60008201527f776e2e0000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420737461727465642e000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5072652053616c65206e6f7420737461727465642e0000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206c6566742e00000000000000000000000000000000600082015250565b7f6f6e792034303020616464726573732063616e20707265206d696e742e000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e756d73206e6f74206d6f7265207468616e2032302e00000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f736f6c64206f75742e0000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682066756e647320746f2070757263686173652e000000600082015250565b614b1e816141da565b8114614b2957600080fd5b50565b614b35816141ec565b8114614b4057600080fd5b50565b614b4c816141f8565b8114614b5757600080fd5b50565b614b6381614244565b8114614b6e57600080fd5b5056fea26469706673582212204276903b36b5196f267a1f620d62be2259e1c57713c61b9b7bc5ae90a719762a64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009427261696e6f696473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024244000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061023b5760003560e01c806370a082311161012e578063a2b40d19116100ab578063e567cad61161006f578063e567cad614610845578063e985e9c514610870578063f0325549146108ad578063f19e75d4146108c4578063f2fde38b146108ed5761023b565b8063a2b40d1914610760578063a73c9ee014610789578063b88d4fde146107b4578063c87b56dd146107dd578063cd8dda301461081a5761023b565b806398d5fdca116100f257806398d5fdca1461069a5780639c6ba991146106c5578063a035b1fe146106f0578063a0712d681461071b578063a22cb465146107375761023b565b806370a08231146105d4578063715018a6146106115780638ad433ac146106285780638da5cb5b1461064457806395d89b411461066f5761023b565b806334918dfd116101bc57806355f804b31161018057806355f804b3146104f15780635743b25c1461051a5780635a7adf7f146105435780636352211e1461056e5780636aab8e71146105ab5761023b565b806334918dfd146104325780633ccfd60b1461044957806342842e0e146104605780634d9ac681146104895780634f6ccce7146104b45761023b565b806318160ddd1161020357806318160ddd1461034b57806323b872dd146103765780632f745c591461039f57806333bc1c5c146103dc57806334349eab146104075761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806317efc25b1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061367e565b610916565b6040516102749190613c37565b60405180910390f35b34801561028957600080fd5b50610292610990565b60405161029f9190613c52565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613721565b610a22565b6040516102dc9190613bd0565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906135f5565b610aa7565b005b34801561031a57600080fd5b5061033560048036038101906103309190613472565b610bbf565b6040516103429190613fb4565b60405180910390f35b34801561035757600080fd5b50610360610bd7565b60405161036d9190613fb4565b60405180910390f35b34801561038257600080fd5b5061039d600480360381019061039891906134df565b610be4565b005b3480156103ab57600080fd5b506103c660048036038101906103c191906135f5565b610c44565b6040516103d39190613fb4565b60405180910390f35b3480156103e857600080fd5b506103f1610ce9565b6040516103fe9190613c37565b60405180910390f35b34801561041357600080fd5b5061041c610cfc565b6040516104299190613fb4565b60405180910390f35b34801561043e57600080fd5b50610447610d02565b005b34801561045557600080fd5b5061045e610daa565b005b34801561046c57600080fd5b50610487600480360381019061048291906134df565b610f12565b005b34801561049557600080fd5b5061049e610f32565b6040516104ab9190613fb4565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190613721565b610f41565b6040516104e89190613fb4565b60405180910390f35b3480156104fd57600080fd5b50610518600480360381019061051391906136d8565b610fb2565b005b34801561052657600080fd5b50610541600480360381019061053c9190613721565b611048565b005b34801561054f57600080fd5b506105586110ce565b6040516105659190613c37565b60405180910390f35b34801561057a57600080fd5b5061059560048036038101906105909190613721565b6110e1565b6040516105a29190613bd0565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190613635565b611193565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190613472565b61134a565b6040516106089190613fb4565b60405180910390f35b34801561061d57600080fd5b50610626611402565b005b610642600480360381019061063d9190613721565b61148a565b005b34801561065057600080fd5b5061065961179c565b6040516106669190613bd0565b60405180910390f35b34801561067b57600080fd5b506106846117c6565b6040516106919190613c52565b60405180910390f35b3480156106a657600080fd5b506106af611858565b6040516106bc9190613fb4565b60405180910390f35b3480156106d157600080fd5b506106da611862565b6040516106e79190613fb4565b60405180910390f35b3480156106fc57600080fd5b50610705611868565b6040516107129190613fb4565b60405180910390f35b61073560048036038101906107309190613721565b61186e565b005b34801561074357600080fd5b5061075e600480360381019061075991906135b5565b611a44565b005b34801561076c57600080fd5b5061078760048036038101906107829190613721565b611bc5565b005b34801561079557600080fd5b5061079e611c4b565b6040516107ab9190613fb4565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613532565b611c55565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613721565b611cb7565b6040516108119190613c52565b60405180910390f35b34801561082657600080fd5b5061082f611d5e565b60405161083c9190613fb4565b60405180910390f35b34801561085157600080fd5b5061085a611dac565b6040516108679190613fb4565b60405180910390f35b34801561087c57600080fd5b506108976004803603810190610892919061349f565b611db2565b6040516108a49190613c37565b60405180910390f35b3480156108b957600080fd5b506108c2611e46565b005b3480156108d057600080fd5b506108eb60048036038101906108e69190613721565b611eee565b005b3480156108f957600080fd5b50610914600480360381019061090f9190613472565b612018565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610989575061098882612110565b5b9050919050565b60606000805461099f90614290565b80601f01602080910402602001604051908101604052809291908181526020018280546109cb90614290565b8015610a185780601f106109ed57610100808354040283529160200191610a18565b820191906000526020600020905b8154815290600101906020018083116109fb57829003601f168201915b5050505050905090565b6000610a2d826121f2565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613e74565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ab2826110e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1a90613f34565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b4261225e565b73ffffffffffffffffffffffffffffffffffffffff161480610b715750610b7081610b6b61225e565b611db2565b5b610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790613db4565b60405180910390fd5b610bba8383612266565b505050565b600f6020528060005260406000206000915090505481565b6000600880549050905090565b610bf5610bef61225e565b8261231f565b610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b90613f54565b60405180910390fd5b610c3f8383836123fd565b505050565b6000610c4f8361134a565b8210610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790613c94565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e60009054906101000a900460ff1681565b60105481565b610d0a61225e565b73ffffffffffffffffffffffffffffffffffffffff16610d2861179c565b73ffffffffffffffffffffffffffffffffffffffff1614610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7590613e94565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610db261225e565b73ffffffffffffffffffffffffffffffffffffffff16610dd061179c565b73ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613e94565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064600547610e71919061414c565b610e7b919061411b565b9081150290604051600060405180830381858888f19350505050158015610ea6573d6000803e3d6000fd5b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f0f573d6000803e3d6000fd5b50565b610f2d83838360405180602001604052806000815250611c55565b505050565b6000610f3c610bd7565b905090565b6000610f4b610bd7565b8210610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613f74565b60405180910390fd5b60088281548110610fa057610f9f614429565b5b90600052602060002001549050919050565b610fba61225e565b73ffffffffffffffffffffffffffffffffffffffff16610fd861179c565b73ffffffffffffffffffffffffffffffffffffffff161461102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590613e94565b60405180910390fd5b80600b90805190602001906110449291906131e8565b5050565b61105061225e565b73ffffffffffffffffffffffffffffffffffffffff1661106e61179c565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90613e94565b60405180910390fd5b80600d8190555050565b600e60019054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190613df4565b60405180910390fd5b80915050919050565b61119b61225e565b73ffffffffffffffffffffffffffffffffffffffff166111b961179c565b73ffffffffffffffffffffffffffffffffffffffff161461120f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120690613e94565b60405180910390fd5b600e60019054906101000a900460ff1661125e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125590613d74565b60405180910390fd5b60008151905060005b81811015611345576005600f600085848151811061128857611287614429565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d591906140c5565b600f60008584815181106112ec576112eb614429565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061133d906142f3565b915050611267565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290613dd4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61140a61225e565b73ffffffffffffffffffffffffffffffffffffffff1661142861179c565b73ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613e94565b60405180910390fd5b6114886000612659565b565b600e60019054906101000a900460ff166114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613d74565b60405180910390fd5b80600f60006114e661225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155990613c74565b60405180910390fd5b610190601054106115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90613e34565b60405180910390fd5b6115b36115b3610bd7565b106115f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ea90613f14565b60405180910390fd5b6115b3816115ff610bd7565b61160991906140c5565b111561164a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164190613e14565b60405180910390fd5b600081600d5461165a919061414c565b90508034101561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690613f94565b60405180910390fd5b60005b828110156116e65760006116b4610bd7565b90506115b38110156116d2576116d16116cb61225e565b8261271f565b5b5080806116de906142f3565b9150506116a2565b5081600f60006116f461225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461173991906141a6565b600f600061174561225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160105461179291906140c5565b6010819055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117d590614290565b80601f016020809104026020016040519081016040528092919081815260200182805461180190614290565b801561184e5780601f106118235761010080835404028352916020019161184e565b820191906000526020600020905b81548152906001019060200180831161183157829003601f168201915b5050505050905090565b6000600c54905090565b6115b381565b600c5481565b600e60009054906101000a900460ff166118bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b490613cf4565b60405180910390fd5b6014811115611901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f890613eb4565b60405180910390fd5b6115b361190c610bd7565b1061194c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194390613f14565b60405180910390fd5b6115b381611958610bd7565b61196291906140c5565b11156119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90613e14565b60405180910390fd5b600081600c546119b3919061414c565b9050803410156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90613f94565b60405180910390fd5b60005b82811015611a3f576000611a0d610bd7565b90506115b3811015611a2b57611a2a611a2461225e565b8261271f565b5b508080611a37906142f3565b9150506119fb565b505050565b611a4c61225e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab190613d54565b60405180910390fd5b8060056000611ac761225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b7461225e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bb99190613c37565b60405180910390a35050565b611bcd61225e565b73ffffffffffffffffffffffffffffffffffffffff16611beb61179c565b73ffffffffffffffffffffffffffffffffffffffff1614611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613e94565b60405180910390fd5b80600c8190555050565b6000600d54905090565b611c66611c6061225e565b8361231f565b611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613f54565b60405180910390fd5b611cb18484848461273d565b50505050565b6060611cc2826121f2565b611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890613ef4565b60405180910390fd5b6000611d0b612799565b90506000815111611d2b5760405180602001604052806000815250611d56565b80611d358461282b565b604051602001611d46929190613bac565b6040516020818303038152906040525b915050919050565b6000600f6000611d6c61225e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e4e61225e565b73ffffffffffffffffffffffffffffffffffffffff16611e6c61179c565b73ffffffffffffffffffffffffffffffffffffffff1614611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990613e94565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611ef661225e565b73ffffffffffffffffffffffffffffffffffffffff16611f1461179c565b73ffffffffffffffffffffffffffffffffffffffff1614611f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6190613e94565b60405180910390fd5b6115b381611f76610bd7565b611f8091906140c5565b10611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb790613f14565b60405180910390fd5b60005b81811015612014576000611fd5610bd7565b90506115b381101561200057611fff73e6519ab01cec48f59465e65d18619737e6697d118261271f565b5b50808061200c906142f3565b915050611fc3565b5050565b61202061225e565b73ffffffffffffffffffffffffffffffffffffffff1661203e61179c565b73ffffffffffffffffffffffffffffffffffffffff1614612094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208b90613e94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fb90613cd4565b60405180910390fd5b61210d81612659565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806121db57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121eb57506121ea8261298c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122d9836110e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061232a826121f2565b612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090613d94565b60405180910390fd5b6000612374836110e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123e357508373ffffffffffffffffffffffffffffffffffffffff166123cb84610a22565b73ffffffffffffffffffffffffffffffffffffffff16145b806123f457506123f38185611db2565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661241d826110e1565b73ffffffffffffffffffffffffffffffffffffffff1614612473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246a90613ed4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90613d34565b60405180910390fd5b6124ee8383836129f6565b6124f9600082612266565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461254991906141a6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a091906140c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612739828260405180602001604052806000815250612b0a565b5050565b6127488484846123fd565b61275484848484612b65565b612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90613cb4565b60405180910390fd5b50505050565b6060600b80546127a890614290565b80601f01602080910402602001604051908101604052809291908181526020018280546127d490614290565b80156128215780601f106127f657610100808354040283529160200191612821565b820191906000526020600020905b81548152906001019060200180831161280457829003601f168201915b5050505050905090565b60606000821415612873576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612987565b600082905060005b600082146128a557808061288e906142f3565b915050600a8261289e919061411b565b915061287b565b60008167ffffffffffffffff8111156128c1576128c0614458565b5b6040519080825280601f01601f1916602001820160405280156128f35781602001600182028036833780820191505090505b5090505b600085146129805760018261290c91906141a6565b9150600a8561291b919061433c565b603061292791906140c5565b60f81b81838151811061293d5761293c614429565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612979919061411b565b94506128f7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612a01838383612cfc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a4457612a3f81612d01565b612a83565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612a8257612a818382612d4a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac657612ac181612eb7565b612b05565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612b0457612b038282612f88565b5b5b505050565b612b148383613007565b612b216000848484612b65565b612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5790613cb4565b60405180910390fd5b505050565b6000612b868473ffffffffffffffffffffffffffffffffffffffff166131d5565b15612cef578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612baf61225e565b8786866040518563ffffffff1660e01b8152600401612bd19493929190613beb565b602060405180830381600087803b158015612beb57600080fd5b505af1925050508015612c1c57506040513d601f19601f82011682018060405250810190612c1991906136ab565b60015b612c9f573d8060008114612c4c576040519150601f19603f3d011682016040523d82523d6000602084013e612c51565b606091505b50600081511415612c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8e90613cb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cf4565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d578461134a565b612d6191906141a6565b9050600060076000848152602001908152602001600020549050818114612e46576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ecb91906141a6565b9050600060096000848152602001908152602001600020549050600060088381548110612efb57612efa614429565b5b906000526020600020015490508060088381548110612f1d57612f1c614429565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612f6c57612f6b6143fa565b5b6001900381819060005260206000200160009055905550505050565b6000612f938361134a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306e90613e54565b60405180910390fd5b613080816121f2565b156130c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b790613d14565b60405180910390fd5b6130cc600083836129f6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461311c91906140c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546131f490614290565b90600052602060002090601f016020900481019282613216576000855561325d565b82601f1061322f57805160ff191683800117855561325d565b8280016001018555821561325d579182015b8281111561325c578251825591602001919060010190613241565b5b50905061326a919061326e565b5090565b5b8082111561328757600081600090555060010161326f565b5090565b600061329e61329984613ff4565b613fcf565b905080838252602082019050828560208602820111156132c1576132c061448c565b5b60005b858110156132f157816132d7888261337f565b8452602084019350602083019250506001810190506132c4565b5050509392505050565b600061330e61330984614020565b613fcf565b90508281526020810184848401111561332a57613329614491565b5b61333584828561424e565b509392505050565b600061335061334b84614051565b613fcf565b90508281526020810184848401111561336c5761336b614491565b5b61337784828561424e565b509392505050565b60008135905061338e81614b15565b92915050565b600082601f8301126133a9576133a8614487565b5b81356133b984826020860161328b565b91505092915050565b6000813590506133d181614b2c565b92915050565b6000813590506133e681614b43565b92915050565b6000815190506133fb81614b43565b92915050565b600082601f83011261341657613415614487565b5b81356134268482602086016132fb565b91505092915050565b600082601f83011261344457613443614487565b5b813561345484826020860161333d565b91505092915050565b60008135905061346c81614b5a565b92915050565b6000602082840312156134885761348761449b565b5b60006134968482850161337f565b91505092915050565b600080604083850312156134b6576134b561449b565b5b60006134c48582860161337f565b92505060206134d58582860161337f565b9150509250929050565b6000806000606084860312156134f8576134f761449b565b5b60006135068682870161337f565b93505060206135178682870161337f565b92505060406135288682870161345d565b9150509250925092565b6000806000806080858703121561354c5761354b61449b565b5b600061355a8782880161337f565b945050602061356b8782880161337f565b935050604061357c8782880161345d565b925050606085013567ffffffffffffffff81111561359d5761359c614496565b5b6135a987828801613401565b91505092959194509250565b600080604083850312156135cc576135cb61449b565b5b60006135da8582860161337f565b92505060206135eb858286016133c2565b9150509250929050565b6000806040838503121561360c5761360b61449b565b5b600061361a8582860161337f565b925050602061362b8582860161345d565b9150509250929050565b60006020828403121561364b5761364a61449b565b5b600082013567ffffffffffffffff81111561366957613668614496565b5b61367584828501613394565b91505092915050565b6000602082840312156136945761369361449b565b5b60006136a2848285016133d7565b91505092915050565b6000602082840312156136c1576136c061449b565b5b60006136cf848285016133ec565b91505092915050565b6000602082840312156136ee576136ed61449b565b5b600082013567ffffffffffffffff81111561370c5761370b614496565b5b6137188482850161342f565b91505092915050565b6000602082840312156137375761373661449b565b5b60006137458482850161345d565b91505092915050565b613757816141da565b82525050565b613766816141ec565b82525050565b600061377782614082565b6137818185614098565b935061379181856020860161425d565b61379a816144a0565b840191505092915050565b60006137b08261408d565b6137ba81856140a9565b93506137ca81856020860161425d565b6137d3816144a0565b840191505092915050565b60006137e98261408d565b6137f381856140ba565b935061380381856020860161425d565b80840191505092915050565b600061381c6023836140a9565b9150613827826144b1565b604082019050919050565b600061383f602b836140a9565b915061384a82614500565b604082019050919050565b60006138626032836140a9565b915061386d8261454f565b604082019050919050565b60006138856026836140a9565b91506138908261459e565b604082019050919050565b60006138a86011836140a9565b91506138b3826145ed565b602082019050919050565b60006138cb601c836140a9565b91506138d682614616565b602082019050919050565b60006138ee6024836140a9565b91506138f98261463f565b604082019050919050565b60006139116019836140a9565b915061391c8261468e565b602082019050919050565b60006139346015836140a9565b915061393f826146b7565b602082019050919050565b6000613957602c836140a9565b9150613962826146e0565b604082019050919050565b600061397a6038836140a9565b91506139858261472f565b604082019050919050565b600061399d602a836140a9565b91506139a88261477e565b604082019050919050565b60006139c06029836140a9565b91506139cb826147cd565b604082019050919050565b60006139e36010836140a9565b91506139ee8261481c565b602082019050919050565b6000613a06601d836140a9565b9150613a1182614845565b602082019050919050565b6000613a296020836140a9565b9150613a348261486e565b602082019050919050565b6000613a4c602c836140a9565b9150613a5782614897565b604082019050919050565b6000613a6f6020836140a9565b9150613a7a826148e6565b602082019050919050565b6000613a926016836140a9565b9150613a9d8261490f565b602082019050919050565b6000613ab56029836140a9565b9150613ac082614938565b604082019050919050565b6000613ad8602f836140a9565b9150613ae382614987565b604082019050919050565b6000613afb6009836140a9565b9150613b06826149d6565b602082019050919050565b6000613b1e6021836140a9565b9150613b29826149ff565b604082019050919050565b6000613b416031836140a9565b9150613b4c82614a4e565b604082019050919050565b6000613b64602c836140a9565b9150613b6f82614a9d565b604082019050919050565b6000613b87601d836140a9565b9150613b9282614aec565b602082019050919050565b613ba681614244565b82525050565b6000613bb882856137de565b9150613bc482846137de565b91508190509392505050565b6000602082019050613be5600083018461374e565b92915050565b6000608082019050613c00600083018761374e565b613c0d602083018661374e565b613c1a6040830185613b9d565b8181036060830152613c2c818461376c565b905095945050505050565b6000602082019050613c4c600083018461375d565b92915050565b60006020820190508181036000830152613c6c81846137a5565b905092915050565b60006020820190508181036000830152613c8d8161380f565b9050919050565b60006020820190508181036000830152613cad81613832565b9050919050565b60006020820190508181036000830152613ccd81613855565b9050919050565b60006020820190508181036000830152613ced81613878565b9050919050565b60006020820190508181036000830152613d0d8161389b565b9050919050565b60006020820190508181036000830152613d2d816138be565b9050919050565b60006020820190508181036000830152613d4d816138e1565b9050919050565b60006020820190508181036000830152613d6d81613904565b9050919050565b60006020820190508181036000830152613d8d81613927565b9050919050565b60006020820190508181036000830152613dad8161394a565b9050919050565b60006020820190508181036000830152613dcd8161396d565b9050919050565b60006020820190508181036000830152613ded81613990565b9050919050565b60006020820190508181036000830152613e0d816139b3565b9050919050565b60006020820190508181036000830152613e2d816139d6565b9050919050565b60006020820190508181036000830152613e4d816139f9565b9050919050565b60006020820190508181036000830152613e6d81613a1c565b9050919050565b60006020820190508181036000830152613e8d81613a3f565b9050919050565b60006020820190508181036000830152613ead81613a62565b9050919050565b60006020820190508181036000830152613ecd81613a85565b9050919050565b60006020820190508181036000830152613eed81613aa8565b9050919050565b60006020820190508181036000830152613f0d81613acb565b9050919050565b60006020820190508181036000830152613f2d81613aee565b9050919050565b60006020820190508181036000830152613f4d81613b11565b9050919050565b60006020820190508181036000830152613f6d81613b34565b9050919050565b60006020820190508181036000830152613f8d81613b57565b9050919050565b60006020820190508181036000830152613fad81613b7a565b9050919050565b6000602082019050613fc96000830184613b9d565b92915050565b6000613fd9613fea565b9050613fe582826142c2565b919050565b6000604051905090565b600067ffffffffffffffff82111561400f5761400e614458565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561403b5761403a614458565b5b614044826144a0565b9050602081019050919050565b600067ffffffffffffffff82111561406c5761406b614458565b5b614075826144a0565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140d082614244565b91506140db83614244565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141105761410f61436d565b5b828201905092915050565b600061412682614244565b915061413183614244565b9250826141415761414061439c565b5b828204905092915050565b600061415782614244565b915061416283614244565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561419b5761419a61436d565b5b828202905092915050565b60006141b182614244565b91506141bc83614244565b9250828210156141cf576141ce61436d565b5b828203905092915050565b60006141e582614224565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561427b578082015181840152602081019050614260565b8381111561428a576000848401525b50505050565b600060028204905060018216806142a857607f821691505b602082108114156142bc576142bb6143cb565b5b50919050565b6142cb826144a0565b810181811067ffffffffffffffff821117156142ea576142e9614458565b5b80604052505050565b60006142fe82614244565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143315761433061436d565b5b600182019050919050565b600061434782614244565b915061435283614244565b9250826143625761436161439c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f63616e206e6f7420707265206d696e74206d6f7265207468616e20796f75206f60008201527f776e2e0000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420737461727465642e000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5072652053616c65206e6f7420737461727465642e0000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206c6566742e00000000000000000000000000000000600082015250565b7f6f6e792034303020616464726573732063616e20707265206d696e742e000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6e756d73206e6f74206d6f7265207468616e2032302e00000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f736f6c64206f75742e0000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f7567682066756e647320746f2070757263686173652e000000600082015250565b614b1e816141da565b8114614b2957600080fd5b50565b614b35816141ec565b8114614b4057600080fd5b50565b614b4c816141f8565b8114614b5757600080fd5b50565b614b6381614244565b8114614b6e57600080fd5b5056fea26469706673582212204276903b36b5196f267a1f620d62be2259e1c57713c61b9b7bc5ae90a719762a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000009427261696e6f696473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024244000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Brainoids
Arg [1] : symbol (string): BD
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 427261696e6f6964730000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 4244000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42032:3987:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35853:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22967:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24526:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24049:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42349:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36493:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25416:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36161:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42278:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42404:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43272:85;;;;;;;;;;;;;:::i;:::-;;43091:173;;;;;;;;;;;;;:::i;:::-;;25826:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42989:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36683:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43675:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43566:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42315:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22661:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44252:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22391:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9963:94;;;;;;;;;;;;;:::i;:::-;;44553:844;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9312:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23136:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42799:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42108:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42155;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45409:607;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24819:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43463:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42891:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26082:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23311:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42676:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42215:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25185:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43369:82;;;;;;;;;;;;;:::i;:::-;;43897:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10212:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35853:224;35955:4;35994:35;35979:50;;;:11;:50;;;;:90;;;;36033:36;36057:11;36033:23;:36::i;:::-;35979:90;35972:97;;35853:224;;;:::o;22967:100::-;23021:13;23054:5;23047:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22967:100;:::o;24526:221::-;24602:7;24630:16;24638:7;24630;:16::i;:::-;24622:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24715:15;:24;24731:7;24715:24;;;;;;;;;;;;;;;;;;;;;24708:31;;24526:221;;;:::o;24049:411::-;24130:13;24146:23;24161:7;24146:14;:23::i;:::-;24130:39;;24194:5;24188:11;;:2;:11;;;;24180:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24288:5;24272:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24297:37;24314:5;24321:12;:10;:12::i;:::-;24297:16;:37::i;:::-;24272:62;24250:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24431:21;24440:2;24444:7;24431:8;:21::i;:::-;24119:341;24049:411;;:::o;42349:48::-;;;;;;;;;;;;;;;;;:::o;36493:113::-;36554:7;36581:10;:17;;;;36574:24;;36493:113;:::o;25416:339::-;25611:41;25630:12;:10;:12::i;:::-;25644:7;25611:18;:41::i;:::-;25603:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25719:28;25729:4;25735:2;25739:7;25719:9;:28::i;:::-;25416:339;;;:::o;36161:256::-;36258:7;36294:23;36311:5;36294:16;:23::i;:::-;36286:5;:31;36278:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36383:12;:19;36396:5;36383:19;;;;;;;;;;;;;;;:26;36403:5;36383:26;;;;;;;;;;;;36376:33;;36161:256;;;;:::o;42278:30::-;;;;;;;;;;;;;:::o;42404:26::-;;;;:::o;43272:85::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43339:10:::1;;;;;;;;;;;43338:11;43325:10;;:24;;;;;;;;;;;;;;;;;;43272:85::o:0;43091:173::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43147:7:::1;;;;;;;;;;;43139:25;;:54;43189:3;43187:1;43165:21;:23;;;;:::i;:::-;:27;;;;:::i;:::-;43139:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43212:11;;;;;;;;;;;43204:29;;:52;43234:21;43204:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43091:173::o:0;25826:185::-;25964:39;25981:4;25987:2;25991:7;25964:39;;;;;;;;;;;;:16;:39::i;:::-;25826:185;;;:::o;42989:90::-;43032:7;43058:13;:11;:13::i;:::-;43051:20;;42989:90;:::o;36683:233::-;36758:7;36794:30;:28;:30::i;:::-;36786:5;:38;36778:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36891:10;36902:5;36891:17;;;;;;;;:::i;:::-;;;;;;;;;;36884:24;;36683:233;;;:::o;43675:90::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43753:4:::1;43743:7;:14;;;;;;;;;;;;:::i;:::-;;43675:90:::0;:::o;43566:97::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43647:8:::1;43636;:19;;;;43566:97:::0;:::o;42315:27::-;;;;;;;;;;;;;:::o;22661:239::-;22733:7;22753:13;22769:7;:16;22777:7;22769:16;;;;;;;;;;;;;;;;;;;;;22753:32;;22821:1;22804:19;;:5;:19;;;;22796:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22887:5;22880:12;;;22661:239;;;:::o;44252:289::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44334:7:::1;;;;;;;;;;;44326:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;44380:15;44398:4;:11;44380:29;;44426:6;44422:112;44442:10;44438:1;:14;44422:112;;;44521:1;44497:12;:21;44510:4;44515:1;44510:7;;;;;;;;:::i;:::-;;;;;;;;44497:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;44473:12;:21;44486:4;44491:1;44486:7;;;;;;;;:::i;:::-;;;;;;;;44473:21;;;;;;;;;;;;;;;:49;;;;44454:3;;;;;:::i;:::-;;;;44422:112;;;;44315:226;44252:289:::0;:::o;22391:208::-;22463:7;22508:1;22491:19;;:5;:19;;;;22483:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22575:9;:16;22585:5;22575:16;;;;;;;;;;;;;;;;22568:23;;22391:208;;;:::o;9963:94::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10028:21:::1;10046:1;10028:9;:21::i;:::-;9963:94::o:0;44553:844::-;44617:7;;;;;;;;;;;44609:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;44699:4;44669:12;:26;44682:12;:10;:12::i;:::-;44669:26;;;;;;;;;;;;;;;;:34;;44661:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;44776:3;44762:11;;:17;44754:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:4;44832:13;:11;:13::i;:::-;:25;44824:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:4;44906;44890:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:33;;44882:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;44965:14;44993:4;44982:8;;:15;;;;:::i;:::-;44965:32;;45029:9;45016;:22;;45008:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45097:6;45093:174;45113:4;45109:1;:8;45093:174;;;45138:7;45148:13;:11;:13::i;:::-;45138:23;;42144:4;45179:2;:14;45176:80;;;45213:27;45223:12;:10;:12::i;:::-;45237:2;45213:9;:27::i;:::-;45176:80;45123:144;45119:3;;;;;:::i;:::-;;;;45093:174;;;;45345:4;45316:12;:26;45329:12;:10;:12::i;:::-;45316:26;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;45287:12;:26;45300:12;:10;:12::i;:::-;45287:26;;;;;;;;;;;;;;;:62;;;;45388:1;45374:11;;:15;;;;:::i;:::-;45360:11;:29;;;;44598:799;44553:844;:::o;9312:87::-;9358:7;9385:6;;;;;;;;;;;9378:13;;9312:87;:::o;23136:104::-;23192:13;23225:7;23218:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23136:104;:::o;42799:80::-;42840:7;42866:5;;42859:12;;42799:80;:::o;42108:40::-;42144:4;42108:40;:::o;42155:::-;;;;:::o;45409:607::-;45470:10;;;;;;;;;;;45462:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45529:2;45521:4;:10;;45513:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:4;45577:13;:11;:13::i;:::-;:25;45569:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:4;45651;45635:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:33;;45627:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45710:14;45735:4;45727:5;;:12;;;;:::i;:::-;45710:29;;45771:9;45758;:22;;45750:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;45839:6;45835:174;45855:4;45851:1;:8;45835:174;;;45880:7;45890:13;:11;:13::i;:::-;45880:23;;42144:4;45921:2;:14;45918:80;;;45955:27;45965:12;:10;:12::i;:::-;45979:2;45955:9;:27::i;:::-;45918:80;45865:144;45861:3;;;;;:::i;:::-;;;;45835:174;;;;45451:565;45409:607;:::o;24819:295::-;24934:12;:10;:12::i;:::-;24922:24;;:8;:24;;;;24914:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25034:8;24989:18;:32;25008:12;:10;:12::i;:::-;24989:32;;;;;;;;;;;;;;;:42;25022:8;24989:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25087:8;25058:48;;25073:12;:10;:12::i;:::-;25058:48;;;25097:8;25058:48;;;;;;:::i;:::-;;;;;;;;24819:295;;:::o;43463:91::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43538:8:::1;43530:5;:16;;;;43463:91:::0;:::o;42891:86::-;42935:7;42961:8;;42954:15;;42891:86;:::o;26082:328::-;26257:41;26276:12;:10;:12::i;:::-;26290:7;26257:18;:41::i;:::-;26249:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26363:39;26377:4;26383:2;26387:7;26396:5;26363:13;:39::i;:::-;26082:328;;;;:::o;23311:334::-;23384:13;23418:16;23426:7;23418;:16::i;:::-;23410:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23499:21;23523:10;:8;:10::i;:::-;23499:34;;23575:1;23557:7;23551:21;:25;:86;;;;;;;;;;;;;;;;;23603:7;23612:18;:7;:16;:18::i;:::-;23586:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23551:86;23544:93;;;23311:334;;;:::o;42676:111::-;42727:7;42753:12;:26;42766:12;:10;:12::i;:::-;42753:26;;;;;;;;;;;;;;;;42746:33;;42676:111;:::o;42215:43::-;;;;:::o;25185:164::-;25282:4;25306:18;:25;25325:5;25306:25;;;;;;;;;;;;;;;:35;25332:8;25306:35;;;;;;;;;;;;;;;;;;;;;;;;;25299:42;;25185:164;;;;:::o;43369:82::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43436:7:::1;;;;;;;;;;;43435:8;43425:7;;:18;;;;;;;;;;;;;;;;;;43369:82::o:0;43897:343::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42144:4:::1;43978;43962:13;:11;:13::i;:::-;:20;;;;:::i;:::-;:32;43954:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44033:6;44029:204;44049:4;44045:1;:8;44029:204;;;44074:7;44084:13;:11;:13::i;:::-;44074:23;;42144:4;44115:2;:14;44112:110;;;44149:57;44159:42;44203:2;44149:9;:57::i;:::-;44112:110;44059:174;44055:3;;;;;:::i;:::-;;;;44029:204;;;;43897:343:::0;:::o;10212:192::-;9543:12;:10;:12::i;:::-;9532:23;;:7;:5;:7::i;:::-;:23;;;9524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10321:1:::1;10301:22;;:8;:22;;;;10293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10377:19;10387:8;10377:9;:19::i;:::-;10212:192:::0;:::o;22022:305::-;22124:4;22176:25;22161:40;;;:11;:40;;;;:105;;;;22233:33;22218:48;;;:11;:48;;;;22161:105;:158;;;;22283:36;22307:11;22283:23;:36::i;:::-;22161:158;22141:178;;22022:305;;;:::o;27920:127::-;27985:4;28037:1;28009:30;;:7;:16;28017:7;28009:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28002:37;;27920:127;;;:::o;8172:98::-;8225:7;8252:10;8245:17;;8172:98;:::o;31902:174::-;32004:2;31977:15;:24;31993:7;31977:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32060:7;32056:2;32022:46;;32031:23;32046:7;32031:14;:23::i;:::-;32022:46;;;;;;;;;;;;31902:174;;:::o;28214:348::-;28307:4;28332:16;28340:7;28332;:16::i;:::-;28324:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28408:13;28424:23;28439:7;28424:14;:23::i;:::-;28408:39;;28477:5;28466:16;;:7;:16;;;:51;;;;28510:7;28486:31;;:20;28498:7;28486:11;:20::i;:::-;:31;;;28466:51;:87;;;;28521:32;28538:5;28545:7;28521:16;:32::i;:::-;28466:87;28458:96;;;28214:348;;;;:::o;31206:578::-;31365:4;31338:31;;:23;31353:7;31338:14;:23::i;:::-;:31;;;31330:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31448:1;31434:16;;:2;:16;;;;31426:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31504:39;31525:4;31531:2;31535:7;31504:20;:39::i;:::-;31608:29;31625:1;31629:7;31608:8;:29::i;:::-;31669:1;31650:9;:15;31660:4;31650:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31698:1;31681:9;:13;31691:2;31681:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31729:2;31710:7;:16;31718:7;31710:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31768:7;31764:2;31749:27;;31758:4;31749:27;;;;;;;;;;;;31206:578;;;:::o;10412:173::-;10468:16;10487:6;;;;;;;;;;;10468:25;;10513:8;10504:6;;:17;;;;;;;;;;;;;;;;;;10568:8;10537:40;;10558:8;10537:40;;;;;;;;;;;;10457:128;10412:173;:::o;28904:110::-;28980:26;28990:2;28994:7;28980:26;;;;;;;;;;;;:9;:26::i;:::-;28904:110;;:::o;27292:315::-;27449:28;27459:4;27465:2;27469:7;27449:9;:28::i;:::-;27496:48;27519:4;27525:2;27529:7;27538:5;27496:22;:48::i;:::-;27488:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27292:315;;;;:::o;43777:108::-;43837:13;43870:7;43863:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43777:108;:::o;5868:723::-;5924:13;6154:1;6145:5;:10;6141:53;;;6172:10;;;;;;;;;;;;;;;;;;;;;6141:53;6204:12;6219:5;6204:20;;6235:14;6260:78;6275:1;6267:4;:9;6260:78;;6293:8;;;;;:::i;:::-;;;;6324:2;6316:10;;;;;:::i;:::-;;;6260:78;;;6348:19;6380:6;6370:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6348:39;;6398:154;6414:1;6405:5;:10;6398:154;;6442:1;6432:11;;;;;:::i;:::-;;;6509:2;6501:5;:10;;;;:::i;:::-;6488:2;:24;;;;:::i;:::-;6475:39;;6458:6;6465;6458:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6538:2;6529:11;;;;;:::i;:::-;;;6398:154;;;6576:6;6562:21;;;;;5868:723;;;;:::o;20629:157::-;20714:4;20753:25;20738:40;;;:11;:40;;;;20731:47;;20629:157;;;:::o;37529:589::-;37673:45;37700:4;37706:2;37710:7;37673:26;:45::i;:::-;37751:1;37735:18;;:4;:18;;;37731:187;;;37770:40;37802:7;37770:31;:40::i;:::-;37731:187;;;37840:2;37832:10;;:4;:10;;;37828:90;;37859:47;37892:4;37898:7;37859:32;:47::i;:::-;37828:90;37731:187;37946:1;37932:16;;:2;:16;;;37928:183;;;37965:45;38002:7;37965:36;:45::i;:::-;37928:183;;;38038:4;38032:10;;:2;:10;;;38028:83;;38059:40;38087:2;38091:7;38059:27;:40::i;:::-;38028:83;37928:183;37529:589;;;:::o;29241:321::-;29371:18;29377:2;29381:7;29371:5;:18::i;:::-;29422:54;29453:1;29457:2;29461:7;29470:5;29422:22;:54::i;:::-;29400:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29241:321;;;:::o;32641:803::-;32796:4;32817:15;:2;:13;;;:15::i;:::-;32813:624;;;32869:2;32853:36;;;32890:12;:10;:12::i;:::-;32904:4;32910:7;32919:5;32853:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32849:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33116:1;33099:6;:13;:18;33095:272;;;33142:60;;;;;;;;;;:::i;:::-;;;;;;;;33095:272;33317:6;33311:13;33302:6;33298:2;33294:15;33287:38;32849:533;32986:45;;;32976:55;;;:6;:55;;;;32969:62;;;;;32813:624;33421:4;33414:11;;32641:803;;;;;;;:::o;34016:126::-;;;;:::o;38841:164::-;38945:10;:17;;;;38918:15;:24;38934:7;38918:24;;;;;;;;;;;:44;;;;38973:10;38989:7;38973:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38841:164;:::o;39632:988::-;39898:22;39948:1;39923:22;39940:4;39923:16;:22::i;:::-;:26;;;;:::i;:::-;39898:51;;39960:18;39981:17;:26;39999:7;39981:26;;;;;;;;;;;;39960:47;;40128:14;40114:10;:28;40110:328;;40159:19;40181:12;:18;40194:4;40181:18;;;;;;;;;;;;;;;:34;40200:14;40181:34;;;;;;;;;;;;40159:56;;40265:11;40232:12;:18;40245:4;40232:18;;;;;;;;;;;;;;;:30;40251:10;40232:30;;;;;;;;;;;:44;;;;40382:10;40349:17;:30;40367:11;40349:30;;;;;;;;;;;:43;;;;40144:294;40110:328;40534:17;:26;40552:7;40534:26;;;;;;;;;;;40527:33;;;40578:12;:18;40591:4;40578:18;;;;;;;;;;;;;;;:34;40597:14;40578:34;;;;;;;;;;;40571:41;;;39713:907;;39632:988;;:::o;40915:1079::-;41168:22;41213:1;41193:10;:17;;;;:21;;;;:::i;:::-;41168:46;;41225:18;41246:15;:24;41262:7;41246:24;;;;;;;;;;;;41225:45;;41597:19;41619:10;41630:14;41619:26;;;;;;;;:::i;:::-;;;;;;;;;;41597:48;;41683:11;41658:10;41669;41658:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;41794:10;41763:15;:28;41779:11;41763:28;;;;;;;;;;;:41;;;;41935:15;:24;41951:7;41935:24;;;;;;;;;;;41928:31;;;41970:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40986:1008;;;40915:1079;:::o;38419:221::-;38504:14;38521:20;38538:2;38521:16;:20::i;:::-;38504:37;;38579:7;38552:12;:16;38565:2;38552:16;;;;;;;;;;;;;;;:24;38569:6;38552:24;;;;;;;;;;;:34;;;;38626:6;38597:17;:26;38615:7;38597:26;;;;;;;;;;;:35;;;;38493:147;38419:221;;:::o;29898:382::-;29992:1;29978:16;;:2;:16;;;;29970:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30051:16;30059:7;30051;:16::i;:::-;30050:17;30042:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30113:45;30142:1;30146:2;30150:7;30113:20;:45::i;:::-;30188:1;30171:9;:13;30181:2;30171:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30219:2;30200:7;:16;30208:7;30200:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30264:7;30260:2;30239:33;;30256:1;30239:33;;;;;;;;;;;;29898:382;;:::o;12801:387::-;12861:4;13069:12;13136:7;13124:20;13116:28;;13179:1;13172:4;:8;13165:15;;;12801:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722: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:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:377::-;9922:3;9950:39;9983:5;9950:39;:::i;:::-;10005:89;10087:6;10082:3;10005:89;:::i;:::-;9998:96;;10103:52;10148:6;10143:3;10136:4;10129:5;10125:16;10103:52;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9926:267;9816:377;;;;:::o;10199:366::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:::-;11829:3;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11926:93;12015:3;11926:93;:::i;:::-;12044:2;12039:3;12035:12;12028:19;;11687:366;;;:::o;12059:::-;12201:3;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12298:93;12387:3;12298:93;:::i;:::-;12416:2;12411:3;12407:12;12400:19;;12059:366;;;:::o;12431:::-;12573:3;12594:67;12658:2;12653:3;12594:67;:::i;:::-;12587:74;;12670:93;12759:3;12670:93;:::i;:::-;12788:2;12783:3;12779:12;12772:19;;12431:366;;;:::o;12803:::-;12945:3;12966:67;13030:2;13025:3;12966:67;:::i;:::-;12959:74;;13042:93;13131:3;13042:93;:::i;:::-;13160:2;13155:3;13151:12;13144:19;;12803:366;;;:::o;13175:::-;13317:3;13338:67;13402:2;13397:3;13338:67;:::i;:::-;13331:74;;13414:93;13503:3;13414:93;:::i;:::-;13532:2;13527:3;13523:12;13516:19;;13175:366;;;:::o;13547:::-;13689:3;13710:67;13774:2;13769:3;13710:67;:::i;:::-;13703:74;;13786:93;13875:3;13786:93;:::i;:::-;13904:2;13899:3;13895:12;13888:19;;13547:366;;;:::o;13919:::-;14061:3;14082:67;14146:2;14141:3;14082:67;:::i;:::-;14075:74;;14158:93;14247:3;14158:93;:::i;:::-;14276:2;14271:3;14267:12;14260:19;;13919:366;;;:::o;14291:::-;14433:3;14454:67;14518:2;14513:3;14454:67;:::i;:::-;14447:74;;14530:93;14619:3;14530:93;:::i;:::-;14648:2;14643:3;14639:12;14632:19;;14291:366;;;:::o;14663:::-;14805:3;14826:67;14890:2;14885:3;14826:67;:::i;:::-;14819:74;;14902:93;14991:3;14902:93;:::i;:::-;15020:2;15015:3;15011:12;15004:19;;14663:366;;;:::o;15035:::-;15177:3;15198:67;15262:2;15257:3;15198:67;:::i;:::-;15191:74;;15274:93;15363:3;15274:93;:::i;:::-;15392:2;15387:3;15383:12;15376:19;;15035:366;;;:::o;15407:::-;15549:3;15570:67;15634:2;15629:3;15570:67;:::i;:::-;15563:74;;15646:93;15735:3;15646:93;:::i;:::-;15764:2;15759:3;15755:12;15748:19;;15407:366;;;:::o;15779:::-;15921:3;15942:67;16006:2;16001:3;15942:67;:::i;:::-;15935:74;;16018:93;16107:3;16018:93;:::i;:::-;16136:2;16131:3;16127:12;16120:19;;15779:366;;;:::o;16151:::-;16293:3;16314:67;16378:2;16373:3;16314:67;:::i;:::-;16307:74;;16390:93;16479:3;16390:93;:::i;:::-;16508:2;16503:3;16499:12;16492:19;;16151:366;;;:::o;16523:::-;16665:3;16686:67;16750:2;16745:3;16686:67;:::i;:::-;16679:74;;16762:93;16851:3;16762:93;:::i;:::-;16880:2;16875:3;16871:12;16864:19;;16523:366;;;:::o;16895:::-;17037:3;17058:67;17122:2;17117:3;17058:67;:::i;:::-;17051:74;;17134:93;17223:3;17134:93;:::i;:::-;17252:2;17247:3;17243:12;17236:19;;16895:366;;;:::o;17267:::-;17409:3;17430:67;17494:2;17489:3;17430:67;:::i;:::-;17423:74;;17506:93;17595:3;17506:93;:::i;:::-;17624:2;17619:3;17615:12;17608:19;;17267:366;;;:::o;17639:::-;17781:3;17802:67;17866:2;17861:3;17802:67;:::i;:::-;17795:74;;17878:93;17967:3;17878:93;:::i;:::-;17996:2;17991:3;17987:12;17980:19;;17639:366;;;:::o;18011:365::-;18153:3;18174:66;18238:1;18233:3;18174:66;:::i;:::-;18167:73;;18249:93;18338:3;18249:93;:::i;:::-;18367:2;18362:3;18358:12;18351:19;;18011:365;;;:::o;18382:366::-;18524:3;18545:67;18609:2;18604:3;18545:67;:::i;:::-;18538:74;;18621:93;18710:3;18621:93;:::i;:::-;18739:2;18734:3;18730:12;18723:19;;18382:366;;;:::o;18754:::-;18896:3;18917:67;18981:2;18976:3;18917:67;:::i;:::-;18910:74;;18993:93;19082:3;18993:93;:::i;:::-;19111:2;19106:3;19102:12;19095:19;;18754:366;;;:::o;19126:::-;19268:3;19289:67;19353:2;19348:3;19289:67;:::i;:::-;19282:74;;19365:93;19454:3;19365:93;:::i;:::-;19483:2;19478:3;19474:12;19467:19;;19126:366;;;:::o;19498:::-;19640:3;19661:67;19725:2;19720:3;19661:67;:::i;:::-;19654:74;;19737:93;19826:3;19737:93;:::i;:::-;19855:2;19850:3;19846:12;19839:19;;19498:366;;;:::o;19870:118::-;19957:24;19975:5;19957:24;:::i;:::-;19952:3;19945:37;19870:118;;:::o;19994:435::-;20174:3;20196:95;20287:3;20278:6;20196:95;:::i;:::-;20189:102;;20308:95;20399:3;20390:6;20308:95;:::i;:::-;20301:102;;20420:3;20413:10;;19994:435;;;;;:::o;20435:222::-;20528:4;20566:2;20555:9;20551:18;20543:26;;20579:71;20647:1;20636:9;20632:17;20623:6;20579:71;:::i;:::-;20435:222;;;;:::o;20663:640::-;20858:4;20896:3;20885:9;20881:19;20873:27;;20910:71;20978:1;20967:9;20963:17;20954:6;20910:71;:::i;:::-;20991:72;21059:2;21048:9;21044:18;21035:6;20991:72;:::i;:::-;21073;21141:2;21130:9;21126:18;21117:6;21073:72;:::i;:::-;21192:9;21186:4;21182:20;21177:2;21166:9;21162:18;21155:48;21220:76;21291:4;21282:6;21220:76;:::i;:::-;21212:84;;20663:640;;;;;;;:::o;21309:210::-;21396:4;21434:2;21423:9;21419:18;21411:26;;21447:65;21509:1;21498:9;21494:17;21485:6;21447:65;:::i;:::-;21309:210;;;;:::o;21525:313::-;21638:4;21676:2;21665:9;21661:18;21653:26;;21725:9;21719:4;21715:20;21711:1;21700:9;21696:17;21689:47;21753:78;21826:4;21817:6;21753:78;:::i;:::-;21745:86;;21525:313;;;;:::o;21844:419::-;22010:4;22048:2;22037:9;22033:18;22025:26;;22097:9;22091:4;22087:20;22083:1;22072:9;22068:17;22061:47;22125:131;22251:4;22125:131;:::i;:::-;22117:139;;21844:419;;;:::o;22269:::-;22435:4;22473:2;22462:9;22458:18;22450:26;;22522:9;22516:4;22512:20;22508:1;22497:9;22493:17;22486:47;22550:131;22676:4;22550:131;:::i;:::-;22542:139;;22269:419;;;:::o;22694:::-;22860:4;22898:2;22887:9;22883:18;22875:26;;22947:9;22941:4;22937:20;22933:1;22922:9;22918:17;22911:47;22975:131;23101:4;22975:131;:::i;:::-;22967:139;;22694:419;;;:::o;23119:::-;23285:4;23323:2;23312:9;23308:18;23300:26;;23372:9;23366:4;23362:20;23358:1;23347:9;23343:17;23336:47;23400:131;23526:4;23400:131;:::i;:::-;23392:139;;23119:419;;;:::o;23544:::-;23710:4;23748:2;23737:9;23733:18;23725:26;;23797:9;23791:4;23787:20;23783:1;23772:9;23768:17;23761:47;23825:131;23951:4;23825:131;:::i;:::-;23817:139;;23544:419;;;:::o;23969:::-;24135:4;24173:2;24162:9;24158:18;24150:26;;24222:9;24216:4;24212:20;24208:1;24197:9;24193:17;24186:47;24250:131;24376:4;24250:131;:::i;:::-;24242:139;;23969:419;;;:::o;24394:::-;24560:4;24598:2;24587:9;24583:18;24575:26;;24647:9;24641:4;24637:20;24633:1;24622:9;24618:17;24611:47;24675:131;24801:4;24675:131;:::i;:::-;24667:139;;24394:419;;;:::o;24819:::-;24985:4;25023:2;25012:9;25008:18;25000:26;;25072:9;25066:4;25062:20;25058:1;25047:9;25043:17;25036:47;25100:131;25226:4;25100:131;:::i;:::-;25092:139;;24819:419;;;:::o;25244:::-;25410:4;25448:2;25437:9;25433:18;25425:26;;25497:9;25491:4;25487:20;25483:1;25472:9;25468:17;25461:47;25525:131;25651:4;25525:131;:::i;:::-;25517:139;;25244:419;;;:::o;25669:::-;25835:4;25873:2;25862:9;25858:18;25850:26;;25922:9;25916:4;25912:20;25908:1;25897:9;25893:17;25886:47;25950:131;26076:4;25950:131;:::i;:::-;25942:139;;25669:419;;;:::o;26094:::-;26260:4;26298:2;26287:9;26283:18;26275:26;;26347:9;26341:4;26337:20;26333:1;26322:9;26318:17;26311:47;26375:131;26501:4;26375:131;:::i;:::-;26367:139;;26094:419;;;:::o;26519:::-;26685:4;26723:2;26712:9;26708:18;26700:26;;26772:9;26766:4;26762:20;26758:1;26747:9;26743:17;26736:47;26800:131;26926:4;26800:131;:::i;:::-;26792:139;;26519:419;;;:::o;26944:::-;27110:4;27148:2;27137:9;27133:18;27125:26;;27197:9;27191:4;27187:20;27183:1;27172:9;27168:17;27161:47;27225:131;27351:4;27225:131;:::i;:::-;27217:139;;26944:419;;;:::o;27369:::-;27535:4;27573:2;27562:9;27558:18;27550:26;;27622:9;27616:4;27612:20;27608:1;27597:9;27593:17;27586:47;27650:131;27776:4;27650:131;:::i;:::-;27642:139;;27369:419;;;:::o;27794:::-;27960:4;27998:2;27987:9;27983:18;27975:26;;28047:9;28041:4;28037:20;28033:1;28022:9;28018:17;28011:47;28075:131;28201:4;28075:131;:::i;:::-;28067:139;;27794:419;;;:::o;28219:::-;28385:4;28423:2;28412:9;28408:18;28400:26;;28472:9;28466:4;28462:20;28458:1;28447:9;28443:17;28436:47;28500:131;28626:4;28500:131;:::i;:::-;28492:139;;28219:419;;;:::o;28644:::-;28810:4;28848:2;28837:9;28833:18;28825:26;;28897:9;28891:4;28887:20;28883:1;28872:9;28868:17;28861:47;28925:131;29051:4;28925:131;:::i;:::-;28917:139;;28644:419;;;:::o;29069:::-;29235:4;29273:2;29262:9;29258:18;29250:26;;29322:9;29316:4;29312:20;29308:1;29297:9;29293:17;29286:47;29350:131;29476:4;29350:131;:::i;:::-;29342:139;;29069:419;;;:::o;29494:::-;29660:4;29698:2;29687:9;29683:18;29675:26;;29747:9;29741:4;29737:20;29733:1;29722:9;29718:17;29711:47;29775:131;29901:4;29775:131;:::i;:::-;29767:139;;29494:419;;;:::o;29919:::-;30085:4;30123:2;30112:9;30108:18;30100:26;;30172:9;30166:4;30162:20;30158:1;30147:9;30143:17;30136:47;30200:131;30326:4;30200:131;:::i;:::-;30192:139;;29919:419;;;:::o;30344:::-;30510:4;30548:2;30537:9;30533:18;30525:26;;30597:9;30591:4;30587:20;30583:1;30572:9;30568:17;30561:47;30625:131;30751:4;30625:131;:::i;:::-;30617:139;;30344:419;;;:::o;30769:::-;30935:4;30973:2;30962:9;30958:18;30950:26;;31022:9;31016:4;31012:20;31008:1;30997:9;30993:17;30986:47;31050:131;31176:4;31050:131;:::i;:::-;31042:139;;30769:419;;;:::o;31194:::-;31360:4;31398:2;31387:9;31383:18;31375:26;;31447:9;31441:4;31437:20;31433:1;31422:9;31418:17;31411:47;31475:131;31601:4;31475:131;:::i;:::-;31467:139;;31194:419;;;:::o;31619:::-;31785:4;31823:2;31812:9;31808:18;31800:26;;31872:9;31866:4;31862:20;31858:1;31847:9;31843:17;31836:47;31900:131;32026:4;31900:131;:::i;:::-;31892:139;;31619:419;;;:::o;32044:::-;32210:4;32248:2;32237:9;32233:18;32225:26;;32297:9;32291:4;32287:20;32283:1;32272:9;32268:17;32261:47;32325:131;32451:4;32325:131;:::i;:::-;32317:139;;32044:419;;;:::o;32469:::-;32635:4;32673:2;32662:9;32658:18;32650:26;;32722:9;32716:4;32712:20;32708:1;32697:9;32693:17;32686:47;32750:131;32876:4;32750:131;:::i;:::-;32742:139;;32469:419;;;:::o;32894:222::-;32987:4;33025:2;33014:9;33010:18;33002:26;;33038:71;33106:1;33095:9;33091:17;33082:6;33038:71;:::i;:::-;32894:222;;;;:::o;33122:129::-;33156:6;33183:20;;:::i;:::-;33173:30;;33212:33;33240:4;33232:6;33212:33;:::i;:::-;33122:129;;;:::o;33257:75::-;33290:6;33323:2;33317:9;33307:19;;33257:75;:::o;33338:311::-;33415:4;33505:18;33497:6;33494:30;33491:56;;;33527:18;;:::i;:::-;33491:56;33577:4;33569:6;33565:17;33557:25;;33637:4;33631;33627:15;33619:23;;33338:311;;;:::o;33655:307::-;33716:4;33806:18;33798:6;33795:30;33792:56;;;33828:18;;:::i;:::-;33792:56;33866:29;33888:6;33866:29;:::i;:::-;33858:37;;33950:4;33944;33940:15;33932:23;;33655:307;;;:::o;33968:308::-;34030:4;34120:18;34112:6;34109:30;34106:56;;;34142:18;;:::i;:::-;34106:56;34180:29;34202:6;34180:29;:::i;:::-;34172:37;;34264:4;34258;34254:15;34246:23;;33968:308;;;:::o;34282:98::-;34333:6;34367:5;34361:12;34351:22;;34282:98;;;:::o;34386:99::-;34438:6;34472:5;34466:12;34456:22;;34386:99;;;:::o;34491:168::-;34574:11;34608:6;34603:3;34596:19;34648:4;34643:3;34639:14;34624:29;;34491:168;;;;:::o;34665:169::-;34749:11;34783:6;34778:3;34771:19;34823:4;34818:3;34814:14;34799:29;;34665:169;;;;:::o;34840:148::-;34942:11;34979:3;34964:18;;34840:148;;;;:::o;34994:305::-;35034:3;35053:20;35071:1;35053:20;:::i;:::-;35048:25;;35087:20;35105:1;35087:20;:::i;:::-;35082:25;;35241:1;35173:66;35169:74;35166:1;35163:81;35160:107;;;35247:18;;:::i;:::-;35160:107;35291:1;35288;35284:9;35277:16;;34994:305;;;;:::o;35305:185::-;35345:1;35362:20;35380:1;35362:20;:::i;:::-;35357:25;;35396:20;35414:1;35396:20;:::i;:::-;35391:25;;35435:1;35425:35;;35440:18;;:::i;:::-;35425:35;35482:1;35479;35475:9;35470:14;;35305:185;;;;:::o;35496:348::-;35536:7;35559:20;35577:1;35559:20;:::i;:::-;35554:25;;35593:20;35611:1;35593:20;:::i;:::-;35588:25;;35781:1;35713:66;35709:74;35706:1;35703:81;35698:1;35691:9;35684:17;35680:105;35677:131;;;35788:18;;:::i;:::-;35677:131;35836:1;35833;35829:9;35818:20;;35496:348;;;;:::o;35850:191::-;35890:4;35910:20;35928:1;35910:20;:::i;:::-;35905:25;;35944:20;35962:1;35944:20;:::i;:::-;35939:25;;35983:1;35980;35977:8;35974:34;;;35988:18;;:::i;:::-;35974:34;36033:1;36030;36026:9;36018:17;;35850:191;;;;:::o;36047:96::-;36084:7;36113:24;36131:5;36113:24;:::i;:::-;36102:35;;36047:96;;;:::o;36149:90::-;36183:7;36226:5;36219:13;36212:21;36201:32;;36149:90;;;:::o;36245:149::-;36281:7;36321:66;36314:5;36310:78;36299:89;;36245:149;;;:::o;36400:126::-;36437:7;36477:42;36470:5;36466:54;36455:65;;36400:126;;;:::o;36532:77::-;36569:7;36598:5;36587:16;;36532:77;;;:::o;36615:154::-;36699:6;36694:3;36689;36676:30;36761:1;36752:6;36747:3;36743:16;36736:27;36615:154;;;:::o;36775:307::-;36843:1;36853:113;36867:6;36864:1;36861:13;36853:113;;;36952:1;36947:3;36943:11;36937:18;36933:1;36928:3;36924:11;36917:39;36889:2;36886:1;36882:10;36877:15;;36853:113;;;36984:6;36981:1;36978:13;36975:101;;;37064:1;37055:6;37050:3;37046:16;37039:27;36975:101;36824:258;36775:307;;;:::o;37088:320::-;37132:6;37169:1;37163:4;37159:12;37149:22;;37216:1;37210:4;37206:12;37237:18;37227:81;;37293:4;37285:6;37281:17;37271:27;;37227:81;37355:2;37347:6;37344:14;37324:18;37321:38;37318:84;;;37374:18;;:::i;:::-;37318:84;37139:269;37088:320;;;:::o;37414:281::-;37497:27;37519:4;37497:27;:::i;:::-;37489:6;37485:40;37627:6;37615:10;37612:22;37591:18;37579:10;37576:34;37573:62;37570:88;;;37638:18;;:::i;:::-;37570:88;37678:10;37674:2;37667:22;37457:238;37414:281;;:::o;37701:233::-;37740:3;37763:24;37781:5;37763:24;:::i;:::-;37754:33;;37809:66;37802:5;37799:77;37796:103;;;37879:18;;:::i;:::-;37796:103;37926:1;37919:5;37915:13;37908:20;;37701:233;;;:::o;37940:176::-;37972:1;37989:20;38007:1;37989:20;:::i;:::-;37984:25;;38023:20;38041:1;38023:20;:::i;:::-;38018:25;;38062:1;38052:35;;38067:18;;:::i;:::-;38052:35;38108:1;38105;38101:9;38096:14;;37940:176;;;;:::o;38122:180::-;38170:77;38167:1;38160:88;38267:4;38264:1;38257:15;38291:4;38288:1;38281:15;38308:180;38356:77;38353:1;38346:88;38453:4;38450:1;38443:15;38477:4;38474:1;38467:15;38494:180;38542:77;38539:1;38532:88;38639:4;38636:1;38629:15;38663:4;38660:1;38653:15;38680:180;38728:77;38725:1;38718:88;38825:4;38822:1;38815:15;38849:4;38846:1;38839:15;38866:180;38914:77;38911:1;38904:88;39011:4;39008:1;39001:15;39035:4;39032:1;39025:15;39052:180;39100:77;39097:1;39090:88;39197:4;39194:1;39187:15;39221:4;39218:1;39211:15;39238:117;39347:1;39344;39337:12;39361:117;39470:1;39467;39460:12;39484:117;39593:1;39590;39583:12;39607:117;39716:1;39713;39706:12;39730:117;39839:1;39836;39829:12;39853:102;39894:6;39945:2;39941:7;39936:2;39929:5;39925:14;39921:28;39911:38;;39853:102;;;:::o;39961:222::-;40101:34;40097:1;40089:6;40085:14;40078:58;40170:5;40165:2;40157:6;40153:15;40146:30;39961:222;:::o;40189:230::-;40329:34;40325:1;40317:6;40313:14;40306:58;40398:13;40393:2;40385:6;40381:15;40374:38;40189:230;:::o;40425:237::-;40565:34;40561:1;40553:6;40549:14;40542:58;40634:20;40629:2;40621:6;40617:15;40610:45;40425:237;:::o;40668:225::-;40808:34;40804:1;40796:6;40792:14;40785:58;40877:8;40872:2;40864:6;40860:15;40853:33;40668:225;:::o;40899:167::-;41039:19;41035:1;41027:6;41023:14;41016:43;40899:167;:::o;41072:178::-;41212:30;41208:1;41200:6;41196:14;41189:54;41072:178;:::o;41256:223::-;41396:34;41392:1;41384:6;41380:14;41373:58;41465:6;41460:2;41452:6;41448:15;41441:31;41256:223;:::o;41485:175::-;41625:27;41621:1;41613:6;41609:14;41602:51;41485:175;:::o;41666:171::-;41806:23;41802:1;41794:6;41790:14;41783:47;41666:171;:::o;41843:231::-;41983:34;41979:1;41971:6;41967:14;41960:58;42052:14;42047:2;42039:6;42035:15;42028:39;41843:231;:::o;42080:243::-;42220:34;42216:1;42208:6;42204:14;42197:58;42289:26;42284:2;42276:6;42272:15;42265:51;42080:243;:::o;42329:229::-;42469:34;42465:1;42457:6;42453:14;42446:58;42538:12;42533:2;42525:6;42521:15;42514:37;42329:229;:::o;42564:228::-;42704:34;42700:1;42692:6;42688:14;42681:58;42773:11;42768:2;42760:6;42756:15;42749:36;42564:228;:::o;42798:166::-;42938:18;42934:1;42926:6;42922:14;42915:42;42798:166;:::o;42970:179::-;43110:31;43106:1;43098:6;43094:14;43087:55;42970:179;:::o;43155:182::-;43295:34;43291:1;43283:6;43279:14;43272:58;43155:182;:::o;43343:231::-;43483:34;43479:1;43471:6;43467:14;43460:58;43552:14;43547:2;43539:6;43535:15;43528:39;43343:231;:::o;43580:182::-;43720:34;43716:1;43708:6;43704:14;43697:58;43580:182;:::o;43768:172::-;43908:24;43904:1;43896:6;43892:14;43885:48;43768:172;:::o;43946:228::-;44086:34;44082:1;44074:6;44070:14;44063:58;44155:11;44150:2;44142:6;44138:15;44131:36;43946:228;:::o;44180:234::-;44320:34;44316:1;44308:6;44304:14;44297:58;44389:17;44384:2;44376:6;44372:15;44365:42;44180:234;:::o;44420:159::-;44560:11;44556:1;44548:6;44544:14;44537:35;44420:159;:::o;44585:220::-;44725:34;44721:1;44713:6;44709:14;44702:58;44794:3;44789:2;44781:6;44777:15;44770:28;44585:220;:::o;44811:236::-;44951:34;44947:1;44939:6;44935:14;44928:58;45020:19;45015:2;45007:6;45003:15;44996:44;44811:236;:::o;45053:231::-;45193:34;45189:1;45181:6;45177:14;45170:58;45262:14;45257:2;45249:6;45245:15;45238:39;45053:231;:::o;45290:179::-;45430:31;45426:1;45418:6;45414:14;45407:55;45290:179;:::o;45475:122::-;45548:24;45566:5;45548:24;:::i;:::-;45541:5;45538:35;45528:63;;45587:1;45584;45577:12;45528:63;45475:122;:::o;45603:116::-;45673:21;45688:5;45673:21;:::i;:::-;45666:5;45663:32;45653:60;;45709:1;45706;45699:12;45653:60;45603:116;:::o;45725:120::-;45797:23;45814:5;45797:23;:::i;:::-;45790:5;45787:34;45777:62;;45835:1;45832;45825:12;45777:62;45725:120;:::o;45851:122::-;45924:24;45942:5;45924:24;:::i;:::-;45917:5;45914:35;45904:63;;45963:1;45960;45953:12;45904:63;45851:122;:::o
Swarm Source
ipfs://4276903b36b5196f267a1f620d62be2259e1c57713c61b9b7bc5ae90a719762a
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.