More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,091 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21413483 | 12 days ago | IN | 0 ETH | 0.00020305 | ||||
Safe Transfer Fr... | 21293102 | 29 days ago | IN | 0 ETH | 0.00124644 | ||||
Set Approval For... | 21282048 | 31 days ago | IN | 0 ETH | 0.00089151 | ||||
Set Approval For... | 21239902 | 37 days ago | IN | 0 ETH | 0.00050046 | ||||
Set Approval For... | 21074630 | 60 days ago | IN | 0 ETH | 0.00032454 | ||||
Set Approval For... | 20980846 | 73 days ago | IN | 0 ETH | 0.0003076 | ||||
Set Approval For... | 20980845 | 73 days ago | IN | 0 ETH | 0.00030815 | ||||
Set Approval For... | 20743177 | 106 days ago | IN | 0 ETH | 0.00010241 | ||||
Set Approval For... | 20600890 | 126 days ago | IN | 0 ETH | 0.00001778 | ||||
Set Approval For... | 20349826 | 161 days ago | IN | 0 ETH | 0.00006125 | ||||
Set Approval For... | 20234051 | 177 days ago | IN | 0 ETH | 0.00056982 | ||||
Set Approval For... | 19912962 | 222 days ago | IN | 0 ETH | 0.00051406 | ||||
Set Approval For... | 19662269 | 257 days ago | IN | 0 ETH | 0.00092972 | ||||
Set Approval For... | 19617683 | 263 days ago | IN | 0 ETH | 0.00056553 | ||||
Set Approval For... | 19577230 | 269 days ago | IN | 0 ETH | 0.0017389 | ||||
Set Approval For... | 19494250 | 280 days ago | IN | 0 ETH | 0.00081012 | ||||
Set Approval For... | 19296927 | 308 days ago | IN | 0 ETH | 0.00062955 | ||||
Set Approval For... | 19269851 | 312 days ago | IN | 0 ETH | 0.0028798 | ||||
Set Approval For... | 18917595 | 361 days ago | IN | 0 ETH | 0.00034365 | ||||
Set Approval For... | 18898663 | 364 days ago | IN | 0 ETH | 0.00076587 | ||||
Set Approval For... | 18875264 | 367 days ago | IN | 0 ETH | 0.00052061 | ||||
Set Approval For... | 18875263 | 367 days ago | IN | 0 ETH | 0.00092241 | ||||
Set Approval For... | 18869510 | 368 days ago | IN | 0 ETH | 0.00079991 | ||||
Set Approval For... | 18824769 | 374 days ago | IN | 0 ETH | 0.00085216 | ||||
Set Approval For... | 18741247 | 386 days ago | IN | 0 ETH | 0.00178909 |
Latest 12 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14955839 | 929 days ago | 1 ETH | ||||
14736836 | 965 days ago | 1 ETH | ||||
14596176 | 987 days ago | 1 ETH | ||||
14530538 | 997 days ago | 4 ETH | ||||
14530529 | 997 days ago | 1 ETH | ||||
14249366 | 1041 days ago | 23.63 ETH | ||||
14226719 | 1045 days ago | 38 ETH | ||||
14203663 | 1048 days ago | 2 ETH | ||||
14168679 | 1054 days ago | 10 ETH | ||||
14128416 | 1060 days ago | 45 ETH | ||||
14115272 | 1062 days ago | 50 ETH | ||||
14112303 | 1062 days ago | 10 ETH |
Loading...
Loading
Contract Name:
Cybernites
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-30 */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } 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; } 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); } 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); } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } 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(); } } library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract Cybernites is Ownable, ERC721Enumerable { using Strings for uint256; enum MintState {Inactive, Private, Public} string private _token_baseExtension = ".json"; string private _token_baseUri = "https://cybernites1sa.blob.core.windows.net/tokens/"; string private _token_metadataUri = "https://cybernites1sa.blob.core.windows.net/tokens/cybernites-metadata.json"; mapping(address => uint256) _token_shareholders; MintState private _mint_state = MintState.Inactive; uint256 private _mint_price = 0.1 ether; uint256 private _mint_maxSupply = 11111; uint256 private _mint_maxSupplyTemporary = 8100; //to restrict minting temporarily (e.g., to change minting parameters) uint256 private _mint_maxPerMint = 6; uint256 private _mint_maxPerWallet = 6; bytes32 private _mint_merkleRoot; uint256 private _mint_globalCode; uint256[] private _mint_requested2Minted = [0,1,3,4,6]; mapping(uint256 => address) _mint_tokenId2Authors; mapping(address => uint256) _mint_privileged; address private _transfer_poolAddress; constructor() payable ERC721("Cybernites", "CYBERNITES") { mint(msg.sender, 25, 0, new bytes32[](0)); } receive() external payable {} // default receive, so ether can be sent to the contract account function verifyMerkle(bytes32 root, bytes32 leaf, bytes32[] memory proof) internal pure returns (bool) { return MerkleProof.verify(proof, root, leaf); } function pay(uint256 amount) public payable { if (msg.sender != owner() && _mint_privileged[msg.sender] == 0) { require( msg.value >= amount, "Not enough ether." ); } } function mint(address to, uint256 mintAmount, uint256 code, bytes32[] memory proof) public payable { uint256 mintedWithBonuses = calculateBonuses(mintAmount); checkMintPreConditions(to, code, mintedWithBonuses, proof); uint256 totalCost = _mint_price * mintAmount; pay(totalCost); uint256 supply = totalSupply(); for (uint256 i = 1; i <= mintedWithBonuses; i++) { _mint_tokenId2Authors[supply + i]=to; _safeMint(to, supply + i); } } function tokenAuthor(uint tokenId) public view returns(address) { return _mint_tokenId2Authors[tokenId]; } function walletOfAccount(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "Invalid token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), _token_baseExtension ) ) : ""; } // private function calculateBonuses(uint256 mintedAmount) private view returns(uint256 result){ if(msg.sender == owner() || _mint_privileged[msg.sender] > 0) { return mintedAmount; } require( mintedAmount < _mint_requested2Minted.length , "Too many" ); uint256 mintedWithBonuses = _mint_requested2Minted[mintedAmount]; return mintedWithBonuses; } function isProofOk(bytes32[] memory proof) private view returns (bool result) { bytes32 sender = keccak256(abi.encodePacked(msg.sender)); return verifyMerkle(_mint_merkleRoot, sender, proof); } function checkMintPreConditions(address buyer, uint256 code, uint256 mintedAmount, bytes32[] memory proof) private view { checkTokenAmount(mintedAmount); checkMintMode(code, proof); checkMaxPerMint(mintedAmount); checkMaxPerWallet(buyer, mintedAmount); } function checkAuthorization(uint256 code, bytes32[] memory proof) private view { require( msg.sender == owner() || _mint_privileged[msg.sender] > 0 || (code == _mint_globalCode && _mint_globalCode != 0) || isProofOk(proof), "Unauthorized"); } function checkMintMode(uint256 code, bytes32[] memory proof) private view { require( msg.sender == owner() || _mint_state != MintState.Inactive, "Minting closed" ); if(_mint_state == MintState.Private){ checkAuthorization(code, proof); } } function checkMaxPerMint(uint256 mintedAmount) private view { require( msg.sender == owner() || mintedAmount <= _mint_maxPerMint, "Max per mint" ); } function checkMaxPerWallet(address buyer, uint256 mintedAmount) private view { require( msg.sender == owner() || _mint_privileged[msg.sender] > 0 || balanceOf(buyer) + mintedAmount <= _mint_maxPerWallet, "Max per wallet" ); } function checkTokenAmount(uint256 mintedAmount) private view { require(mintedAmount > 0, "Only >0 can be minted"); require(totalSupply() + mintedAmount <= _mint_maxSupply, "Max tokens"); require(totalSupply() + mintedAmount <= _mint_maxSupplyTemporary, "Minting paused"); } // public getters and setters (only owner) function getBalance() public view returns (uint256) { return address(this).balance; } function getBalanceOfAny(address any_account) public view returns (uint256) { return any_account.balance; } function baseExtension() public view virtual returns (string memory) { return _token_baseExtension; } function setBaseExtension(string memory newExtension) public onlyOwner { _token_baseExtension = newExtension; } function _baseURI() internal view virtual override returns (string memory) { return _token_baseUri; } function setBaseURI(string memory newUri) public onlyOwner { _token_baseUri = newUri; } function metadataUri() public view virtual returns (string memory) { return _token_metadataUri; } function setMetadataUri(string memory newUri) public onlyOwner { _token_metadataUri = newUri; } function mintState() public view virtual returns (MintState) { return _mint_state; } function setMintState(MintState newState) public onlyOwner { _mint_state = newState; } function price() public view virtual returns (uint256) { return _mint_price; } function setPrice(uint256 newPrice) public onlyOwner { _mint_price = newPrice; } function maxSupply() public view virtual returns (uint256) { return _mint_maxSupply; } function setMaxSupply(uint256 newSupply) public onlyOwner { _mint_maxSupply = newSupply; } function maxSupplyTemporary() public view virtual returns (uint256) { return _mint_maxSupplyTemporary; } function setMaxSupplyTemporary(uint256 newTemporarySupply) public onlyOwner { _mint_maxSupplyTemporary = newTemporarySupply; } function maxPerMint() public view virtual returns (uint256) { return _mint_maxPerMint; } function setMaxPerMint(uint256 newMax) public onlyOwner { _mint_maxPerMint = newMax; } function maxPerWallet() public view virtual returns (uint256) { return _mint_maxPerWallet; } function setMaxPerWallet(uint256 newMax) public onlyOwner { _mint_maxPerWallet = newMax; } function merkleRoot() public view virtual returns (bytes32) { return _mint_merkleRoot; } function setMerkleRoot(bytes32 newRoot) public onlyOwner { _mint_merkleRoot = newRoot; } function globalCode() public view virtual returns (uint256 code) { return _mint_globalCode; } function setGlobalCode(uint256 newCode) public onlyOwner { _mint_globalCode = newCode; } function requested2Minted() public view virtual returns (uint256[] memory) { return _mint_requested2Minted; } function setRequested2Minted(uint256[] calldata newArray) public onlyOwner { _mint_requested2Minted = newArray; } function getShare(address shareholder) public view returns (uint256 promile) { return _token_shareholders[shareholder]; } // other public - only owner function updateShareholder(address shareholder, uint256 promile) public onlyOwner { _token_shareholders[shareholder]=promile; } function getPrivileged(address privileged) public onlyOwner view returns (uint256 privileges) { return _mint_privileged[privileged]; } function updatePrivileged(address privileged, uint256 privileges) public onlyOwner { _mint_privileged[privileged] = privileges; } function withdraw() public onlyOwner { require( payable(msg.sender).send(address(this).balance), "Withdraw failed" ); } function withdrawAmount(uint256 amount) public onlyOwner { (bool success, ) = msg.sender.call{value: amount}(""); require(success, "Transfer failed"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"any_account","type":"address"}],"name":"getBalanceOfAny","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"privileged","type":"address"}],"name":"getPrivileged","outputs":[{"internalType":"uint256","name":"privileges","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getShare","outputs":[{"internalType":"uint256","name":"promile","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalCode","outputs":[{"internalType":"uint256","name":"code","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":[],"name":"maxPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyTemporary","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"mintAmount","type":"uint256"},{"internalType":"uint256","name":"code","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintState","outputs":[{"internalType":"enum Cybernites.MintState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requested2Minted","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCode","type":"uint256"}],"name":"setGlobalCode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxPerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTemporarySupply","type":"uint256"}],"name":"setMaxSupplyTemporary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"newRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Cybernites.MintState","name":"newState","type":"uint8"}],"name":"setMintState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newArray","type":"uint256[]"}],"name":"setRequested2Minted","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":"tokenId","type":"uint256"}],"name":"tokenAuthor","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"privileged","type":"address"},{"internalType":"uint256","name":"privileges","type":"uint256"}],"name":"updatePrivileged","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"uint256","name":"promile","type":"uint256"}],"name":"updateShareholder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfAccount","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b908051906020019062000051929190620016be565b50604051806060016040528060338152602001620082ab60339139600c908051906020019062000083929190620016be565b506040518060800160405280604b815260200162008260604b9139600d9080519060200190620000b5929190620016be565b506000600f60006101000a81548160ff02191690836002811115620000df57620000de62001fb2565b5b021790555067016345785d8a0000601055612b67601155611fa4601255600660135560066014556040518060a00160405280600060ff168152602001600160ff168152602001600360ff168152602001600460ff168152602001600660ff168152506017906005620001539291906200174f565b506040518060400160405280600a81526020017f43796265726e69746573000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f43594245524e4954455300000000000000000000000000000000000000000000815250620001e0620001d46200027c60201b60201c565b6200028460201b60201c565b8160019080519060200190620001f8929190620016be565b50806002908051906020019062000211929190620016be565b5050506200027633601960008067ffffffffffffffff8111156200023a57620002396200206e565b5b604051908082528060200260200182016040528015620002695781602001602082028036833780820191505090505b506200034860201b60201c565b6200233b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006200035b846200045760201b60201c565b905062000371858483856200056b60201b60201c565b60008460105462000383919062001d87565b90506200039681620005b760201b60201c565b6000620003a86200069260201b60201c565b90506000600190505b8381116200044d5787601860008385620003cc919062001d2a565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004378882846200042b919062001d2a565b6200069f60201b60201c565b8080620004449062001f03565b915050620003b1565b5050505050505050565b600062000469620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480620004e257506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15620004f15781905062000566565b60178054905082106200053b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005329062001cb9565b60405180910390fd5b6000601783815481106200055457620005536200203f565b5b90600052602060002001549050809150505b919050565b6200057c82620006ee60201b60201c565b6200058e8382620007ff60201b60201c565b6200059f826200091f60201b60201c565b620005b18483620009b060201b60201c565b50505050565b620005c7620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156200064257506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156200068f57803410156200068e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006859062001c0f565b60405180910390fd5b5b50565b6000600980549050905090565b620006c182826040518060200160405280600081525062000aaa60201b60201c565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000811162000734576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072b9062001bcb565b60405180910390fd5b60115481620007486200069260201b60201c565b62000754919062001d2a565b111562000798576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078f9062001c97565b60405180910390fd5b60125481620007ac6200069260201b60201c565b620007b8919062001d2a565b1115620007fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f39062001ba9565b60405180910390fd5b50565b6200080f620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480620008835750600060028111156200085b576200085a62001fb2565b5b600f60009054906101000a900460ff16600281111562000880576200087f62001fb2565b5b14155b620008c5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008bc9062001b43565b60405180910390fd5b60016002811115620008dc57620008db62001fb2565b5b600f60009054906101000a900460ff16600281111562000901576200090062001fb2565b5b14156200091b576200091a828262000b1860201b60201c565b5b5050565b6200092f620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806200096b57506013548111155b620009ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a49062001cdb565b60405180910390fd5b50565b620009c0620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148062000a3957506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b8062000a6457506014548162000a558462000c1d60201b60201c565b62000a61919062001d2a565b11155b62000aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a9d9062001c31565b60405180910390fd5b5050565b62000abc838362000cd860201b60201c565b62000ad1600084848462000ebe60201b60201c565b62000b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b0a9062001b87565b60405180910390fd5b505050565b62000b28620006c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148062000ba157506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b8062000bbe57506016548214801562000bbd5750600060165414155b5b8062000bd7575062000bd6816200107860201b60201c565b5b62000c19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c109062001b65565b60405180910390fd5b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c889062001c53565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d429062001c75565b60405180910390fd5b62000d5c81620010c360201b60201c565b1562000d9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d969062001bed565b60405180910390fd5b62000db3600083836200112f60201b60201c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000e05919062001d2a565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000eec8473ffffffffffffffffffffffffffffffffffffffff166200127660201b6200266b1760201c565b156200106b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000f1e6200027c60201b60201c565b8786866040518563ffffffff1660e01b815260040162000f42949392919062001aef565b602060405180830381600087803b15801562000f5d57600080fd5b505af192505050801562000f9157506040513d601f19601f8201168201806040525081019062000f8e9190620017dc565b60015b6200101a573d806000811462000fc4576040519150601f19603f3d011682016040523d82523d6000602084013e62000fc9565b606091505b5060008151141562001012576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010099062001b87565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062001070565b600190505b949350505050565b600080336040516020016200108e919062001aa2565b604051602081830303815290604052805190602001209050620010bb60155482856200128960201b60201c565b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62001147838383620012ac60201b6200267e1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562001194576200118e81620012b160201b60201c565b620011dc565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620011db57620011da8382620012fa60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620012295762001223816200147760201b60201c565b62001271565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462001270576200126f82826200155360201b60201c565b5b5b505050565b600080823b905060008111915050919050565b6000620012a3828585620015df60201b620026831760201c565b90509392505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620013148462000c1d60201b620018401760201c565b62001320919062001de8565b905060006008600084815260200190815260200160002054905081811462001406576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506200148d919062001de8565b90506000600a6000848152602001908152602001600020549050600060098381548110620014c057620014bf6200203f565b5b906000526020600020015490508060098381548110620014e557620014e46200203f565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548062001537576200153662002010565b5b6001900381819060005260206000200160009055905550505050565b60006200156b8362000c1d60201b620018401760201c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b600082620015f48584620015fe60201b60201c565b1490509392505050565b60008082905060005b8451811015620016b35760008582815181106200162957620016286200203f565b5b602002602001015190508083116200166e5782816040516020016200165092919062001abf565b6040516020818303038152906040528051906020012092506200169c565b80836040516020016200168392919062001abf565b6040516020818303038152906040528051906020012092505b508080620016aa9062001f03565b91505062001607565b508091505092915050565b828054620016cc9062001ecd565b90600052602060002090601f016020900481019282620016f057600085556200173c565b82601f106200170b57805160ff19168380011785556200173c565b828001600101855582156200173c579182015b828111156200173b5782518255916020019190600101906200171e565b5b5090506200174b9190620017a6565b5090565b82805482825590600052602060002090810192821562001793579160200282015b8281111562001792578251829060ff1690559160200191906001019062001770565b5b509050620017a29190620017a6565b5090565b5b80821115620017c1576000816000905550600101620017a7565b5090565b600081519050620017d68162002321565b92915050565b600060208284031215620017f557620017f46200209d565b5b60006200180584828501620017c5565b91505092915050565b620018198162001e23565b82525050565b620018346200182e8262001e23565b62001f51565b82525050565b6200184f620018498262001e37565b62001f65565b82525050565b6000620018628262001cfd565b6200186e818562001d08565b93506200188081856020860162001e97565b6200188b81620020a2565b840191505092915050565b6000620018a5600e8362001d19565b9150620018b282620020c0565b602082019050919050565b6000620018cc600c8362001d19565b9150620018d982620020e9565b602082019050919050565b6000620018f360328362001d19565b9150620019008262002112565b604082019050919050565b60006200191a600e8362001d19565b9150620019278262002161565b602082019050919050565b60006200194160158362001d19565b91506200194e826200218a565b602082019050919050565b600062001968601c8362001d19565b91506200197582620021b3565b602082019050919050565b60006200198f60118362001d19565b91506200199c82620021dc565b602082019050919050565b6000620019b6600e8362001d19565b9150620019c38262002205565b602082019050919050565b6000620019dd602a8362001d19565b9150620019ea826200222e565b604082019050919050565b600062001a0460208362001d19565b915062001a11826200227d565b602082019050919050565b600062001a2b600a8362001d19565b915062001a3882620022a6565b602082019050919050565b600062001a5260088362001d19565b915062001a5f82620022cf565b602082019050919050565b600062001a79600c8362001d19565b915062001a8682620022f8565b602082019050919050565b62001a9c8162001e8d565b82525050565b600062001ab082846200181f565b60148201915081905092915050565b600062001acd82856200183a565b60208201915062001adf82846200183a565b6020820191508190509392505050565b600060808201905062001b0660008301876200180e565b62001b1560208301866200180e565b62001b24604083018562001a91565b818103606083015262001b38818462001855565b905095945050505050565b6000602082019050818103600083015262001b5e8162001896565b9050919050565b6000602082019050818103600083015262001b8081620018bd565b9050919050565b6000602082019050818103600083015262001ba281620018e4565b9050919050565b6000602082019050818103600083015262001bc4816200190b565b9050919050565b6000602082019050818103600083015262001be68162001932565b9050919050565b6000602082019050818103600083015262001c088162001959565b9050919050565b6000602082019050818103600083015262001c2a8162001980565b9050919050565b6000602082019050818103600083015262001c4c81620019a7565b9050919050565b6000602082019050818103600083015262001c6e81620019ce565b9050919050565b6000602082019050818103600083015262001c9081620019f5565b9050919050565b6000602082019050818103600083015262001cb28162001a1c565b9050919050565b6000602082019050818103600083015262001cd48162001a43565b9050919050565b6000602082019050818103600083015262001cf68162001a6a565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062001d378262001e8d565b915062001d448362001e8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001d7c5762001d7b62001f83565b5b828201905092915050565b600062001d948262001e8d565b915062001da18362001e8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001ddd5762001ddc62001f83565b5b828202905092915050565b600062001df58262001e8d565b915062001e028362001e8d565b92508282101562001e185762001e1762001f83565b5b828203905092915050565b600062001e308262001e6d565b9050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001eb757808201518184015260208101905062001e9a565b8381111562001ec7576000848401525b50505050565b6000600282049050600182168062001ee657607f821691505b6020821081141562001efd5762001efc62001fe1565b5b50919050565b600062001f108262001e8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001f465762001f4562001f83565b5b600182019050919050565b600062001f5e8262001f6f565b9050919050565b6000819050919050565b600062001f7c82620020b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74696e6720636c6f736564000000000000000000000000000000000000600082015250565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74696e6720706175736564000000000000000000000000000000000000600082015250565b7f4f6e6c79203e302063616e206265206d696e7465640000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f4d6178207065722077616c6c6574000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d617820746f6b656e7300000000000000000000000000000000000000000000600082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4d617820706572206d696e740000000000000000000000000000000000000000600082015250565b6200232c8162001e41565b81146200233857600080fd5b50565b615f15806200234b6000396000f3fe6080604052600436106103395760003560e01c80637cb64759116101ab578063b88d4fde116100f7578063db6242c311610095578063e99548bf1161006f578063e99548bf14610c05578063f11cb0af14610c42578063f1e9ff9f14610c6b578063f2fde38b14610ca857610340565b8063db6242c314610b76578063e268e4d314610b9f578063e985e9c514610bc857610340565b8063c6682862116100d1578063c668286214610aba578063c87b56dd14610ae5578063d5abeb0114610b22578063da3ef23f14610b4d57610340565b8063b88d4fde14610a4a578063c051e38a14610a73578063c290d69114610a9e57610340565b8063a035b1fe11610164578063a4dc9a801161013e578063a4dc9a8014610990578063b463e0c6146109cd578063b53c357e146109f6578063b804760414610a1f57610340565b8063a035b1fe14610913578063a22cb4651461093e578063a4451df11461096757610340565b80637cb64759146108175780638da5cb5b146108405780638e69b0b81461086b57806391b7f5ed1461089657806395d89b41146108bf5780639692768a146108ea57610340565b80633ccfd60b1161028557806355f804b3116102235780636f8b44b0116101fd5780636f8b44b01461076f57806370a0823114610798578063715018a6146107d557806377a4d559146107ec57610340565b806355f804b3146106ed578063597d78e1146107165780636352211e1461073257610340565b8063453c23101161025f578063453c23101461061d5780634b3ab9c5146106485780634f6ccce714610685578063507e094f146106c257610340565b80633ccfd60b146105b45780633e1d80fb146105cb57806342842e0e146105f457610340565b806312065fe0116102f257806325ee23be116102cc57806325ee23be146104e4578063297420141461050f5780632eb4a7ab1461054c5780632f745c591461057757610340565b806312065fe01461046557806318160ddd1461049057806323b872dd146104bb57610340565b806301ffc9a7146103455780630562b9f71461038257806306fdde03146103ab578063081812fc146103d6578063095ea7b3146104135780631130630c1461043c57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c6004803603810190610367919061455e565b610cd1565b6040516103799190614dab565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061462e565b610d4b565b005b3480156103b757600080fd5b506103c0610e77565b6040516103cd9190614dfc565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f8919061462e565b610f09565b60405161040a9190614d22565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190614421565b610f8e565b005b34801561044857600080fd5b50610463600480360381019061045e91906145e5565b6110a6565b005b34801561047157600080fd5b5061047a61113c565b60405161048791906151be565b60405180910390f35b34801561049c57600080fd5b506104a5611144565b6040516104b291906151be565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd919061430b565b611151565b005b3480156104f057600080fd5b506104f96111b1565b60405161050691906151be565b60405180910390f35b34801561051b57600080fd5b506105366004803603810190610531919061429e565b6111bb565b60405161054391906151be565b60405180910390f35b34801561055857600080fd5b50610561611280565b60405161056e9190614dc6565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190614421565b61128a565b6040516105ab91906151be565b60405180910390f35b3480156105c057600080fd5b506105c961132f565b005b3480156105d757600080fd5b506105f260048036038101906105ed919061462e565b611421565b005b34801561060057600080fd5b5061061b6004803603810190610616919061430b565b6114a7565b005b34801561062957600080fd5b506106326114c7565b60405161063f91906151be565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a919061429e565b6114d1565b60405161067c91906151be565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a7919061462e565b61151a565b6040516106b991906151be565b60405180910390f35b3480156106ce57600080fd5b506106d761158b565b6040516106e491906151be565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f91906145e5565b611595565b005b610730600480360381019061072b9190614461565b61162b565b005b34801561073e57600080fd5b506107596004803603810190610754919061462e565b611708565b6040516107669190614d22565b60405180910390f35b34801561077b57600080fd5b506107966004803603810190610791919061462e565b6117ba565b005b3480156107a457600080fd5b506107bf60048036038101906107ba919061429e565b611840565b6040516107cc91906151be565b60405180910390f35b3480156107e157600080fd5b506107ea6118f8565b005b3480156107f857600080fd5b50610801611980565b60405161080e9190614dfc565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190614531565b611a12565b005b34801561084c57600080fd5b50610855611a98565b6040516108629190614d22565b60405180910390f35b34801561087757600080fd5b50610880611ac1565b60405161088d9190614d89565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b8919061462e565b611b19565b005b3480156108cb57600080fd5b506108d4611b9f565b6040516108e19190614dfc565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061462e565b611c31565b005b34801561091f57600080fd5b50610928611cb7565b60405161093591906151be565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906143e1565b611cc1565b005b34801561097357600080fd5b5061098e60048036038101906109899190614421565b611cd7565b005b34801561099c57600080fd5b506109b760048036038101906109b2919061429e565b611d9b565b6040516109c49190614d89565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef91906144e4565b611e49565b005b348015610a0257600080fd5b50610a1d6004803603810190610a189190614421565b611edb565b005b348015610a2b57600080fd5b50610a34611f9f565b604051610a4191906151be565b60405180910390f35b348015610a5657600080fd5b50610a716004803603810190610a6c919061435e565b611fa9565b005b348015610a7f57600080fd5b50610a8861200b565b604051610a959190614de1565b60405180910390f35b610ab86004803603810190610ab3919061462e565b612022565b005b348015610ac657600080fd5b50610acf6120f0565b604051610adc9190614dfc565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b07919061462e565b612182565b604051610b199190614dfc565b60405180910390f35b348015610b2e57600080fd5b50610b3761222c565b604051610b4491906151be565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f91906145e5565b612236565b005b348015610b8257600080fd5b50610b9d6004803603810190610b98919061462e565b6122cc565b005b348015610bab57600080fd5b50610bc66004803603810190610bc1919061462e565b612352565b005b348015610bd457600080fd5b50610bef6004803603810190610bea91906142cb565b6123d8565b604051610bfc9190614dab565b60405180910390f35b348015610c1157600080fd5b50610c2c6004803603810190610c27919061429e565b61246c565b604051610c3991906151be565b60405180910390f35b348015610c4e57600080fd5b50610c696004803603810190610c6491906145b8565b61248d565b005b348015610c7757600080fd5b50610c926004803603810190610c8d919061462e565b612536565b604051610c9f9190614d22565b60405180910390f35b348015610cb457600080fd5b50610ccf6004803603810190610cca919061429e565b612573565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d445750610d438261269a565b5b9050919050565b610d5361277c565b73ffffffffffffffffffffffffffffffffffffffff16610d71611a98565b73ffffffffffffffffffffffffffffffffffffffff1614610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe906150fe565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1682604051610ded90614d0d565b60006040518083038185875af1925050503d8060008114610e2a576040519150601f19603f3d011682016040523d82523d6000602084013e610e2f565b606091505b5050905080610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614efe565b60405180910390fd5b5050565b606060018054610e8690615522565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb290615522565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b5050505050905090565b6000610f1482612784565b610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906150be565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f9982611708565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110019061513e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661102961277c565b73ffffffffffffffffffffffffffffffffffffffff16148061105857506110578161105261277c565b6123d8565b5b611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90614ffe565b60405180910390fd5b6110a183836127f0565b505050565b6110ae61277c565b73ffffffffffffffffffffffffffffffffffffffff166110cc611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611119906150fe565b60405180910390fd5b80600d9080519060200190611138929190613f47565b5050565b600047905090565b6000600980549050905090565b61116261115c61277c565b826128a9565b6111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111989061515e565b60405180910390fd5b6111ac838383612987565b505050565b6000601654905090565b60006111c561277c565b73ffffffffffffffffffffffffffffffffffffffff166111e3611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906150fe565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601554905090565b600061129583611840565b82106112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90614e5e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61133761277c565b73ffffffffffffffffffffffffffffffffffffffff16611355611a98565b73ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a2906150fe565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690614f3e565b60405180910390fd5b565b61142961277c565b73ffffffffffffffffffffffffffffffffffffffff16611447611a98565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611494906150fe565b60405180910390fd5b8060128190555050565b6114c283838360405180602001604052806000815250611fa9565b505050565b6000601454905090565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611524611144565b8210611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c9061519e565b60405180910390fd5b6009828154811061157957611578615718565b5b90600052602060002001549050919050565b6000601354905090565b61159d61277c565b73ffffffffffffffffffffffffffffffffffffffff166115bb611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611608906150fe565b60405180910390fd5b80600c9080519060200190611627929190613f47565b5050565b600061163684612be3565b905061164485848385612ce6565b60008460105461165491906153af565b905061165f81612022565b6000611669611144565b90506000600190505b8381116116fe578760186000838561168a9190615328565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116eb8882846116e69190615328565b612d12565b80806116f690615585565b915050611672565b5050505050505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a89061505e565b60405180910390fd5b80915050919050565b6117c261277c565b73ffffffffffffffffffffffffffffffffffffffff166117e0611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906150fe565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a89061503e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61190061277c565b73ffffffffffffffffffffffffffffffffffffffff1661191e611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b906150fe565b60405180910390fd5b61197e6000612d30565b565b6060600d805461198f90615522565b80601f01602080910402602001604051908101604052809291908181526020018280546119bb90615522565b8015611a085780601f106119dd57610100808354040283529160200191611a08565b820191906000526020600020905b8154815290600101906020018083116119eb57829003601f168201915b5050505050905090565b611a1a61277c565b73ffffffffffffffffffffffffffffffffffffffff16611a38611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a85906150fe565b60405180910390fd5b8060158190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611b0f57602002820191906000526020600020905b815481526020019060010190808311611afb575b5050505050905090565b611b2161277c565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906150fe565b60405180910390fd5b8060108190555050565b606060028054611bae90615522565b80601f0160208091040260200160405190810160405280929190818152602001828054611bda90615522565b8015611c275780601f10611bfc57610100808354040283529160200191611c27565b820191906000526020600020905b815481529060010190602001808311611c0a57829003601f168201915b5050505050905090565b611c3961277c565b73ffffffffffffffffffffffffffffffffffffffff16611c57611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906150fe565b60405180910390fd5b8060168190555050565b6000601054905090565b611cd3611ccc61277c565b8383612df4565b5050565b611cdf61277c565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a906150fe565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60606000611da883611840565b905060008167ffffffffffffffff811115611dc657611dc5615747565b5b604051908082528060200260200182016040528015611df45781602001602082028036833780820191505090505b50905060005b82811015611e3e57611e0c858261128a565b828281518110611e1f57611e1e615718565b5b6020026020010181815250508080611e3690615585565b915050611dfa565b508092505050919050565b611e5161277c565b73ffffffffffffffffffffffffffffffffffffffff16611e6f611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc906150fe565b60405180910390fd5b818160179190611ed6929190613fcd565b505050565b611ee361277c565b73ffffffffffffffffffffffffffffffffffffffff16611f01611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e906150fe565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000601254905090565b611fba611fb461277c565b836128a9565b611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff09061515e565b60405180910390fd5b61200584848484612f61565b50505050565b6000600f60009054906101000a900460ff16905090565b61202a611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156120a457506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156120ed57803410156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390614fde565b60405180910390fd5b5b50565b6060600b80546120ff90615522565b80601f016020809104026020016040519081016040528092919081815260200182805461212b90615522565b80156121785780601f1061214d57610100808354040283529160200191612178565b820191906000526020600020905b81548152906001019060200180831161215b57829003601f168201915b5050505050905090565b606061218d82612784565b6121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614fbe565b60405180910390fd5b60006121d6612fbd565b905060008151116121f65760405180602001604052806000815250612224565b806122008461304f565b600b60405160200161221493929190614cdc565b6040516020818303038152906040525b915050919050565b6000601154905090565b61223e61277c565b73ffffffffffffffffffffffffffffffffffffffff1661225c611a98565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906150fe565b60405180910390fd5b80600b90805190602001906122c8929190613f47565b5050565b6122d461277c565b73ffffffffffffffffffffffffffffffffffffffff166122f2611a98565b73ffffffffffffffffffffffffffffffffffffffff1614612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233f906150fe565b60405180910390fd5b8060138190555050565b61235a61277c565b73ffffffffffffffffffffffffffffffffffffffff16612378611a98565b73ffffffffffffffffffffffffffffffffffffffff16146123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c5906150fe565b60405180910390fd5b8060148190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b61249561277c565b73ffffffffffffffffffffffffffffffffffffffff166124b3611a98565b73ffffffffffffffffffffffffffffffffffffffff1614612509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612500906150fe565b60405180910390fd5b80600f60006101000a81548160ff0219169083600281111561252e5761252d61568b565b5b021790555050565b60006018600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61257b61277c565b73ffffffffffffffffffffffffffffffffffffffff16612599611a98565b73ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e6906150fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265690614ede565b60405180910390fd5b61266881612d30565b50565b600080823b905060008111915050919050565b505050565b60008261269085846131b0565b1490509392505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061276557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612775575061277482613263565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661286383611708565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128b482612784565b6128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea90614f9e565b60405180910390fd5b60006128fe83611708565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061296d57508373ffffffffffffffffffffffffffffffffffffffff1661295584610f09565b73ffffffffffffffffffffffffffffffffffffffff16145b8061297e575061297d81856123d8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129a782611708565b73ffffffffffffffffffffffffffffffffffffffff16146129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f49061511e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490614f5e565b60405180910390fd5b612a788383836132cd565b612a836000826127f0565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad39190615409565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2a9190615328565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612bed611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612c6557506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612c7257819050612ce1565b6017805490508210612cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb0906150de565b60405180910390fd5b600060178381548110612ccf57612cce615718565b5b90600052602060002001549050809150505b919050565b612cef826133e1565b612cf983826134d5565b612d02826135d4565b612d0c8483613659565b50505050565b612d2c82826040518060200160405280600081525061373c565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614f7e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f549190614dab565b60405180910390a3505050565b612f6c848484612987565b612f7884848484613797565b612fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fae90614e7e565b60405180910390fd5b50505050565b6060600c8054612fcc90615522565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff890615522565b80156130455780601f1061301a57610100808354040283529160200191613045565b820191906000526020600020905b81548152906001019060200180831161302857829003601f168201915b5050505050905090565b60606000821415613097576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131ab565b600082905060005b600082146130c95780806130b290615585565b915050600a826130c2919061537e565b915061309f565b60008167ffffffffffffffff8111156130e5576130e4615747565b5b6040519080825280601f01601f1916602001820160405280156131175781602001600182028036833780820191505090505b5090505b600085146131a4576001826131309190615409565b9150600a8561313f91906155fc565b603061314b9190615328565b60f81b81838151811061316157613160615718565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561319d919061537e565b945061311b565b8093505050505b919050565b60008082905060005b84518110156132585760008582815181106131d7576131d6615718565b5b602002602001015190508083116132185782816040516020016131fb929190614cb0565b604051602081830303815290604052805190602001209250613244565b808360405160200161322b929190614cb0565b6040516020818303038152906040528051906020012092505b50808061325090615585565b9150506131b9565b508091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132d883838361267e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561331b576133168161392e565b61335a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613359576133588382613977565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561339d5761339881613ae4565b6133dc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133db576133da8282613bb5565b5b5b505050565b60008111613424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341b90614ebe565b60405180910390fd5b60115481613430611144565b61343a9190615328565b111561347b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134729061509e565b60405180910390fd5b60125481613487611144565b6134919190615328565b11156134d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c990614e9e565b60405180910390fd5b50565b6134dd611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061354a5750600060028111156135255761352461568b565b5b600f60009054906101000a900460ff1660028111156135475761354661568b565b5b14155b613589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358090614e1e565b60405180910390fd5b6001600281111561359d5761359c61568b565b5b600f60009054906101000a900460ff1660028111156135bf576135be61568b565b5b14156135d0576135cf8282613c34565b5b5050565b6135dc611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061361757506013548111155b613656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364d9061517e565b60405180910390fd5b50565b613661611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136d957506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b806136f95750601454816136ec84611840565b6136f69190615328565b11155b613738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372f9061501e565b60405180910390fd5b5050565b6137468383613d22565b6137536000848484613797565b613792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378990614e7e565b60405180910390fd5b505050565b60006137b88473ffffffffffffffffffffffffffffffffffffffff1661266b565b15613921578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137e161277c565b8786866040518563ffffffff1660e01b81526004016138039493929190614d3d565b602060405180830381600087803b15801561381d57600080fd5b505af192505050801561384e57506040513d601f19601f8201168201806040525081019061384b919061458b565b60015b6138d1573d806000811461387e576040519150601f19603f3d011682016040523d82523d6000602084013e613883565b606091505b506000815114156138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c090614e7e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613926565b600190505b949350505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161398484611840565b61398e9190615409565b9050600060086000848152602001908152602001600020549050818114613a73576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050613af89190615409565b90506000600a6000848152602001908152602001600020549050600060098381548110613b2857613b27615718565b5b906000526020600020015490508060098381548110613b4a57613b49615718565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480613b9957613b986156e9565b5b6001900381819060005260206000200160009055905550505050565b6000613bc083611840565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b613c3c611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613cb457506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b80613ccf575060165482148015613cce5750600060165414155b5b80613cdf5750613cde81613ef0565b5b613d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1590614e3e565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d899061507e565b60405180910390fd5b613d9b81612784565b15613ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd290614f1e565b60405180910390fd5b613de7600083836132cd565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e379190615328565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008033604051602001613f049190614c95565b604051602081830303815290604052805190602001209050613f296015548285613f31565b915050919050565b6000613f3e828585612683565b90509392505050565b828054613f5390615522565b90600052602060002090601f016020900481019282613f755760008555613fbc565b82601f10613f8e57805160ff1916838001178555613fbc565b82800160010185558215613fbc579182015b82811115613fbb578251825591602001919060010190613fa0565b5b509050613fc9919061401a565b5090565b828054828255906000526020600020908101928215614009579160200282015b82811115614008578235825591602001919060010190613fed565b5b509050614016919061401a565b5090565b5b8082111561403357600081600090555060010161401b565b5090565b600061404a614045846151fe565b6151d9565b9050808382526020820190508285602086028201111561406d5761406c615780565b5b60005b8581101561409d578161408388826141d9565b845260208401935060208301925050600181019050614070565b5050509392505050565b60006140ba6140b58461522a565b6151d9565b9050828152602081018484840111156140d6576140d5615785565b5b6140e18482856154e0565b509392505050565b60006140fc6140f78461525b565b6151d9565b90508281526020810184848401111561411857614117615785565b5b6141238482856154e0565b509392505050565b60008135905061413a81615e5c565b92915050565b600082601f8301126141555761415461577b565b5b8135614165848260208601614037565b91505092915050565b60008083601f8401126141845761418361577b565b5b8235905067ffffffffffffffff8111156141a1576141a0615776565b5b6020830191508360208202830111156141bd576141bc615780565b5b9250929050565b6000813590506141d381615e73565b92915050565b6000813590506141e881615e8a565b92915050565b6000813590506141fd81615ea1565b92915050565b60008151905061421281615ea1565b92915050565b600082601f83011261422d5761422c61577b565b5b813561423d8482602086016140a7565b91505092915050565b60008135905061425581615eb8565b92915050565b600082601f8301126142705761426f61577b565b5b81356142808482602086016140e9565b91505092915050565b60008135905061429881615ec8565b92915050565b6000602082840312156142b4576142b361578f565b5b60006142c28482850161412b565b91505092915050565b600080604083850312156142e2576142e161578f565b5b60006142f08582860161412b565b92505060206143018582860161412b565b9150509250929050565b6000806000606084860312156143245761432361578f565b5b60006143328682870161412b565b93505060206143438682870161412b565b925050604061435486828701614289565b9150509250925092565b600080600080608085870312156143785761437761578f565b5b60006143868782880161412b565b94505060206143978782880161412b565b93505060406143a887828801614289565b925050606085013567ffffffffffffffff8111156143c9576143c861578a565b5b6143d587828801614218565b91505092959194509250565b600080604083850312156143f8576143f761578f565b5b60006144068582860161412b565b9250506020614417858286016141c4565b9150509250929050565b600080604083850312156144385761443761578f565b5b60006144468582860161412b565b925050602061445785828601614289565b9150509250929050565b6000806000806080858703121561447b5761447a61578f565b5b60006144898782880161412b565b945050602061449a87828801614289565b93505060406144ab87828801614289565b925050606085013567ffffffffffffffff8111156144cc576144cb61578a565b5b6144d887828801614140565b91505092959194509250565b600080602083850312156144fb576144fa61578f565b5b600083013567ffffffffffffffff8111156145195761451861578a565b5b6145258582860161416e565b92509250509250929050565b6000602082840312156145475761454661578f565b5b6000614555848285016141d9565b91505092915050565b6000602082840312156145745761457361578f565b5b6000614582848285016141ee565b91505092915050565b6000602082840312156145a1576145a061578f565b5b60006145af84828501614203565b91505092915050565b6000602082840312156145ce576145cd61578f565b5b60006145dc84828501614246565b91505092915050565b6000602082840312156145fb576145fa61578f565b5b600082013567ffffffffffffffff8111156146195761461861578a565b5b6146258482850161425b565b91505092915050565b6000602082840312156146445761464361578f565b5b600061465284828501614289565b91505092915050565b60006146678383614c77565b60208301905092915050565b61467c8161543d565b82525050565b61469361468e8261543d565b6155ce565b82525050565b60006146a4826152b1565b6146ae81856152df565b93506146b98361528c565b8060005b838110156146ea5781516146d1888261465b565b97506146dc836152d2565b9250506001810190506146bd565b5085935050505092915050565b6147008161544f565b82525050565b61470f8161545b565b82525050565b6147266147218261545b565b6155e0565b82525050565b6000614737826152bc565b61474181856152f0565b93506147518185602086016154ef565b61475a81615794565b840191505092915050565b61476e816154ce565b82525050565b600061477f826152c7565b614789818561530c565b93506147998185602086016154ef565b6147a281615794565b840191505092915050565b60006147b8826152c7565b6147c2818561531d565b93506147d28185602086016154ef565b80840191505092915050565b600081546147eb81615522565b6147f5818661531d565b94506001821660008114614810576001811461482157614854565b60ff19831686528186019350614854565b61482a8561529c565b60005b8381101561484c5781548189015260018201915060208101905061482d565b838801955050505b50505092915050565b600061486a600e8361530c565b9150614875826157b2565b602082019050919050565b600061488d600c8361530c565b9150614898826157db565b602082019050919050565b60006148b0602b8361530c565b91506148bb82615804565b604082019050919050565b60006148d360328361530c565b91506148de82615853565b604082019050919050565b60006148f6600e8361530c565b9150614901826158a2565b602082019050919050565b600061491960158361530c565b9150614924826158cb565b602082019050919050565b600061493c60268361530c565b9150614947826158f4565b604082019050919050565b600061495f600f8361530c565b915061496a82615943565b602082019050919050565b6000614982601c8361530c565b915061498d8261596c565b602082019050919050565b60006149a5600f8361530c565b91506149b082615995565b602082019050919050565b60006149c860248361530c565b91506149d3826159be565b604082019050919050565b60006149eb60198361530c565b91506149f682615a0d565b602082019050919050565b6000614a0e602c8361530c565b9150614a1982615a36565b604082019050919050565b6000614a31600d8361530c565b9150614a3c82615a85565b602082019050919050565b6000614a5460118361530c565b9150614a5f82615aae565b602082019050919050565b6000614a7760388361530c565b9150614a8282615ad7565b604082019050919050565b6000614a9a600e8361530c565b9150614aa582615b26565b602082019050919050565b6000614abd602a8361530c565b9150614ac882615b4f565b604082019050919050565b6000614ae060298361530c565b9150614aeb82615b9e565b604082019050919050565b6000614b0360208361530c565b9150614b0e82615bed565b602082019050919050565b6000614b26600a8361530c565b9150614b3182615c16565b602082019050919050565b6000614b49602c8361530c565b9150614b5482615c3f565b604082019050919050565b6000614b6c60088361530c565b9150614b7782615c8e565b602082019050919050565b6000614b8f60208361530c565b9150614b9a82615cb7565b602082019050919050565b6000614bb260298361530c565b9150614bbd82615ce0565b604082019050919050565b6000614bd560218361530c565b9150614be082615d2f565b604082019050919050565b6000614bf8600083615301565b9150614c0382615d7e565b600082019050919050565b6000614c1b60318361530c565b9150614c2682615d81565b604082019050919050565b6000614c3e600c8361530c565b9150614c4982615dd0565b602082019050919050565b6000614c61602c8361530c565b9150614c6c82615df9565b604082019050919050565b614c80816154c4565b82525050565b614c8f816154c4565b82525050565b6000614ca18284614682565b60148201915081905092915050565b6000614cbc8285614715565b602082019150614ccc8284614715565b6020820191508190509392505050565b6000614ce882866147ad565b9150614cf482856147ad565b9150614d0082846147de565b9150819050949350505050565b6000614d1882614beb565b9150819050919050565b6000602082019050614d376000830184614673565b92915050565b6000608082019050614d526000830187614673565b614d5f6020830186614673565b614d6c6040830185614c86565b8181036060830152614d7e818461472c565b905095945050505050565b60006020820190508181036000830152614da38184614699565b905092915050565b6000602082019050614dc060008301846146f7565b92915050565b6000602082019050614ddb6000830184614706565b92915050565b6000602082019050614df66000830184614765565b92915050565b60006020820190508181036000830152614e168184614774565b905092915050565b60006020820190508181036000830152614e378161485d565b9050919050565b60006020820190508181036000830152614e5781614880565b9050919050565b60006020820190508181036000830152614e77816148a3565b9050919050565b60006020820190508181036000830152614e97816148c6565b9050919050565b60006020820190508181036000830152614eb7816148e9565b9050919050565b60006020820190508181036000830152614ed78161490c565b9050919050565b60006020820190508181036000830152614ef78161492f565b9050919050565b60006020820190508181036000830152614f1781614952565b9050919050565b60006020820190508181036000830152614f3781614975565b9050919050565b60006020820190508181036000830152614f5781614998565b9050919050565b60006020820190508181036000830152614f77816149bb565b9050919050565b60006020820190508181036000830152614f97816149de565b9050919050565b60006020820190508181036000830152614fb781614a01565b9050919050565b60006020820190508181036000830152614fd781614a24565b9050919050565b60006020820190508181036000830152614ff781614a47565b9050919050565b6000602082019050818103600083015261501781614a6a565b9050919050565b6000602082019050818103600083015261503781614a8d565b9050919050565b6000602082019050818103600083015261505781614ab0565b9050919050565b6000602082019050818103600083015261507781614ad3565b9050919050565b6000602082019050818103600083015261509781614af6565b9050919050565b600060208201905081810360008301526150b781614b19565b9050919050565b600060208201905081810360008301526150d781614b3c565b9050919050565b600060208201905081810360008301526150f781614b5f565b9050919050565b6000602082019050818103600083015261511781614b82565b9050919050565b6000602082019050818103600083015261513781614ba5565b9050919050565b6000602082019050818103600083015261515781614bc8565b9050919050565b6000602082019050818103600083015261517781614c0e565b9050919050565b6000602082019050818103600083015261519781614c31565b9050919050565b600060208201905081810360008301526151b781614c54565b9050919050565b60006020820190506151d36000830184614c86565b92915050565b60006151e36151f4565b90506151ef8282615554565b919050565b6000604051905090565b600067ffffffffffffffff82111561521957615218615747565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561524557615244615747565b5b61524e82615794565b9050602081019050919050565b600067ffffffffffffffff82111561527657615275615747565b5b61527f82615794565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615333826154c4565b915061533e836154c4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153735761537261562d565b5b828201905092915050565b6000615389826154c4565b9150615394836154c4565b9250826153a4576153a361565c565b5b828204905092915050565b60006153ba826154c4565b91506153c5836154c4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153fe576153fd61562d565b5b828202905092915050565b6000615414826154c4565b915061541f836154c4565b9250828210156154325761543161562d565b5b828203905092915050565b6000615448826154a4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061549f82615e48565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006154d982615491565b9050919050565b82818337600083830152505050565b60005b8381101561550d5780820151818401526020810190506154f2565b8381111561551c576000848401525b50505050565b6000600282049050600182168061553a57607f821691505b6020821081141561554e5761554d6156ba565b5b50919050565b61555d82615794565b810181811067ffffffffffffffff8211171561557c5761557b615747565b5b80604052505050565b6000615590826154c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155c3576155c261562d565b5b600182019050919050565b60006155d9826155ea565b9050919050565b6000819050919050565b60006155f5826157a5565b9050919050565b6000615607826154c4565b9150615612836154c4565b9250826156225761562161565c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74696e6720636c6f736564000000000000000000000000000000000000600082015250565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74696e6720706175736564000000000000000000000000000000000000600082015250565b7f4f6e6c79203e302063616e206265206d696e7465640000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d6178207065722077616c6c6574000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d617820746f6b656e7300000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617820706572206d696e740000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60038110615e5957615e5861568b565b5b50565b615e658161543d565b8114615e7057600080fd5b50565b615e7c8161544f565b8114615e8757600080fd5b50565b615e938161545b565b8114615e9e57600080fd5b50565b615eaa81615465565b8114615eb557600080fd5b50565b60038110615ec557600080fd5b50565b615ed1816154c4565b8114615edc57600080fd5b5056fea2646970667358221220366c4736dabc2c91f92749af8387301c44f2fecfb52b9ede4cff5457a3f6e48164736f6c6343000807003368747470733a2f2f63796265726e697465733173612e626c6f622e636f72652e77696e646f77732e6e65742f746f6b656e732f63796265726e697465732d6d657461646174612e6a736f6e68747470733a2f2f63796265726e697465733173612e626c6f622e636f72652e77696e646f77732e6e65742f746f6b656e732f
Deployed Bytecode
0x6080604052600436106103395760003560e01c80637cb64759116101ab578063b88d4fde116100f7578063db6242c311610095578063e99548bf1161006f578063e99548bf14610c05578063f11cb0af14610c42578063f1e9ff9f14610c6b578063f2fde38b14610ca857610340565b8063db6242c314610b76578063e268e4d314610b9f578063e985e9c514610bc857610340565b8063c6682862116100d1578063c668286214610aba578063c87b56dd14610ae5578063d5abeb0114610b22578063da3ef23f14610b4d57610340565b8063b88d4fde14610a4a578063c051e38a14610a73578063c290d69114610a9e57610340565b8063a035b1fe11610164578063a4dc9a801161013e578063a4dc9a8014610990578063b463e0c6146109cd578063b53c357e146109f6578063b804760414610a1f57610340565b8063a035b1fe14610913578063a22cb4651461093e578063a4451df11461096757610340565b80637cb64759146108175780638da5cb5b146108405780638e69b0b81461086b57806391b7f5ed1461089657806395d89b41146108bf5780639692768a146108ea57610340565b80633ccfd60b1161028557806355f804b3116102235780636f8b44b0116101fd5780636f8b44b01461076f57806370a0823114610798578063715018a6146107d557806377a4d559146107ec57610340565b806355f804b3146106ed578063597d78e1146107165780636352211e1461073257610340565b8063453c23101161025f578063453c23101461061d5780634b3ab9c5146106485780634f6ccce714610685578063507e094f146106c257610340565b80633ccfd60b146105b45780633e1d80fb146105cb57806342842e0e146105f457610340565b806312065fe0116102f257806325ee23be116102cc57806325ee23be146104e4578063297420141461050f5780632eb4a7ab1461054c5780632f745c591461057757610340565b806312065fe01461046557806318160ddd1461049057806323b872dd146104bb57610340565b806301ffc9a7146103455780630562b9f71461038257806306fdde03146103ab578063081812fc146103d6578063095ea7b3146104135780631130630c1461043c57610340565b3661034057005b600080fd5b34801561035157600080fd5b5061036c6004803603810190610367919061455e565b610cd1565b6040516103799190614dab565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a4919061462e565b610d4b565b005b3480156103b757600080fd5b506103c0610e77565b6040516103cd9190614dfc565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f8919061462e565b610f09565b60405161040a9190614d22565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190614421565b610f8e565b005b34801561044857600080fd5b50610463600480360381019061045e91906145e5565b6110a6565b005b34801561047157600080fd5b5061047a61113c565b60405161048791906151be565b60405180910390f35b34801561049c57600080fd5b506104a5611144565b6040516104b291906151be565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd919061430b565b611151565b005b3480156104f057600080fd5b506104f96111b1565b60405161050691906151be565b60405180910390f35b34801561051b57600080fd5b506105366004803603810190610531919061429e565b6111bb565b60405161054391906151be565b60405180910390f35b34801561055857600080fd5b50610561611280565b60405161056e9190614dc6565b60405180910390f35b34801561058357600080fd5b5061059e60048036038101906105999190614421565b61128a565b6040516105ab91906151be565b60405180910390f35b3480156105c057600080fd5b506105c961132f565b005b3480156105d757600080fd5b506105f260048036038101906105ed919061462e565b611421565b005b34801561060057600080fd5b5061061b6004803603810190610616919061430b565b6114a7565b005b34801561062957600080fd5b506106326114c7565b60405161063f91906151be565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a919061429e565b6114d1565b60405161067c91906151be565b60405180910390f35b34801561069157600080fd5b506106ac60048036038101906106a7919061462e565b61151a565b6040516106b991906151be565b60405180910390f35b3480156106ce57600080fd5b506106d761158b565b6040516106e491906151be565b60405180910390f35b3480156106f957600080fd5b50610714600480360381019061070f91906145e5565b611595565b005b610730600480360381019061072b9190614461565b61162b565b005b34801561073e57600080fd5b506107596004803603810190610754919061462e565b611708565b6040516107669190614d22565b60405180910390f35b34801561077b57600080fd5b506107966004803603810190610791919061462e565b6117ba565b005b3480156107a457600080fd5b506107bf60048036038101906107ba919061429e565b611840565b6040516107cc91906151be565b60405180910390f35b3480156107e157600080fd5b506107ea6118f8565b005b3480156107f857600080fd5b50610801611980565b60405161080e9190614dfc565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190614531565b611a12565b005b34801561084c57600080fd5b50610855611a98565b6040516108629190614d22565b60405180910390f35b34801561087757600080fd5b50610880611ac1565b60405161088d9190614d89565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b8919061462e565b611b19565b005b3480156108cb57600080fd5b506108d4611b9f565b6040516108e19190614dfc565b60405180910390f35b3480156108f657600080fd5b50610911600480360381019061090c919061462e565b611c31565b005b34801561091f57600080fd5b50610928611cb7565b60405161093591906151be565b60405180910390f35b34801561094a57600080fd5b50610965600480360381019061096091906143e1565b611cc1565b005b34801561097357600080fd5b5061098e60048036038101906109899190614421565b611cd7565b005b34801561099c57600080fd5b506109b760048036038101906109b2919061429e565b611d9b565b6040516109c49190614d89565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef91906144e4565b611e49565b005b348015610a0257600080fd5b50610a1d6004803603810190610a189190614421565b611edb565b005b348015610a2b57600080fd5b50610a34611f9f565b604051610a4191906151be565b60405180910390f35b348015610a5657600080fd5b50610a716004803603810190610a6c919061435e565b611fa9565b005b348015610a7f57600080fd5b50610a8861200b565b604051610a959190614de1565b60405180910390f35b610ab86004803603810190610ab3919061462e565b612022565b005b348015610ac657600080fd5b50610acf6120f0565b604051610adc9190614dfc565b60405180910390f35b348015610af157600080fd5b50610b0c6004803603810190610b07919061462e565b612182565b604051610b199190614dfc565b60405180910390f35b348015610b2e57600080fd5b50610b3761222c565b604051610b4491906151be565b60405180910390f35b348015610b5957600080fd5b50610b746004803603810190610b6f91906145e5565b612236565b005b348015610b8257600080fd5b50610b9d6004803603810190610b98919061462e565b6122cc565b005b348015610bab57600080fd5b50610bc66004803603810190610bc1919061462e565b612352565b005b348015610bd457600080fd5b50610bef6004803603810190610bea91906142cb565b6123d8565b604051610bfc9190614dab565b60405180910390f35b348015610c1157600080fd5b50610c2c6004803603810190610c27919061429e565b61246c565b604051610c3991906151be565b60405180910390f35b348015610c4e57600080fd5b50610c696004803603810190610c6491906145b8565b61248d565b005b348015610c7757600080fd5b50610c926004803603810190610c8d919061462e565b612536565b604051610c9f9190614d22565b60405180910390f35b348015610cb457600080fd5b50610ccf6004803603810190610cca919061429e565b612573565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d445750610d438261269a565b5b9050919050565b610d5361277c565b73ffffffffffffffffffffffffffffffffffffffff16610d71611a98565b73ffffffffffffffffffffffffffffffffffffffff1614610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe906150fe565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1682604051610ded90614d0d565b60006040518083038185875af1925050503d8060008114610e2a576040519150601f19603f3d011682016040523d82523d6000602084013e610e2f565b606091505b5050905080610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614efe565b60405180910390fd5b5050565b606060018054610e8690615522565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb290615522565b8015610eff5780601f10610ed457610100808354040283529160200191610eff565b820191906000526020600020905b815481529060010190602001808311610ee257829003601f168201915b5050505050905090565b6000610f1482612784565b610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a906150be565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610f9982611708565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110019061513e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661102961277c565b73ffffffffffffffffffffffffffffffffffffffff16148061105857506110578161105261277c565b6123d8565b5b611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90614ffe565b60405180910390fd5b6110a183836127f0565b505050565b6110ae61277c565b73ffffffffffffffffffffffffffffffffffffffff166110cc611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611119906150fe565b60405180910390fd5b80600d9080519060200190611138929190613f47565b5050565b600047905090565b6000600980549050905090565b61116261115c61277c565b826128a9565b6111a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111989061515e565b60405180910390fd5b6111ac838383612987565b505050565b6000601654905090565b60006111c561277c565b73ffffffffffffffffffffffffffffffffffffffff166111e3611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611230906150fe565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601554905090565b600061129583611840565b82106112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd90614e5e565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61133761277c565b73ffffffffffffffffffffffffffffffffffffffff16611355611a98565b73ffffffffffffffffffffffffffffffffffffffff16146113ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a2906150fe565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690614f3e565b60405180910390fd5b565b61142961277c565b73ffffffffffffffffffffffffffffffffffffffff16611447611a98565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611494906150fe565b60405180910390fd5b8060128190555050565b6114c283838360405180602001604052806000815250611fa9565b505050565b6000601454905090565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611524611144565b8210611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c9061519e565b60405180910390fd5b6009828154811061157957611578615718565b5b90600052602060002001549050919050565b6000601354905090565b61159d61277c565b73ffffffffffffffffffffffffffffffffffffffff166115bb611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611611576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611608906150fe565b60405180910390fd5b80600c9080519060200190611627929190613f47565b5050565b600061163684612be3565b905061164485848385612ce6565b60008460105461165491906153af565b905061165f81612022565b6000611669611144565b90506000600190505b8381116116fe578760186000838561168a9190615328565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116eb8882846116e69190615328565b612d12565b80806116f690615585565b915050611672565b5050505050505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a89061505e565b60405180910390fd5b80915050919050565b6117c261277c565b73ffffffffffffffffffffffffffffffffffffffff166117e0611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906150fe565b60405180910390fd5b8060118190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a89061503e565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61190061277c565b73ffffffffffffffffffffffffffffffffffffffff1661191e611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b906150fe565b60405180910390fd5b61197e6000612d30565b565b6060600d805461198f90615522565b80601f01602080910402602001604051908101604052809291908181526020018280546119bb90615522565b8015611a085780601f106119dd57610100808354040283529160200191611a08565b820191906000526020600020905b8154815290600101906020018083116119eb57829003601f168201915b5050505050905090565b611a1a61277c565b73ffffffffffffffffffffffffffffffffffffffff16611a38611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a85906150fe565b60405180910390fd5b8060158190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611b0f57602002820191906000526020600020905b815481526020019060010190808311611afb575b5050505050905090565b611b2161277c565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906150fe565b60405180910390fd5b8060108190555050565b606060028054611bae90615522565b80601f0160208091040260200160405190810160405280929190818152602001828054611bda90615522565b8015611c275780601f10611bfc57610100808354040283529160200191611c27565b820191906000526020600020905b815481529060010190602001808311611c0a57829003601f168201915b5050505050905090565b611c3961277c565b73ffffffffffffffffffffffffffffffffffffffff16611c57611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca4906150fe565b60405180910390fd5b8060168190555050565b6000601054905090565b611cd3611ccc61277c565b8383612df4565b5050565b611cdf61277c565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a906150fe565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60606000611da883611840565b905060008167ffffffffffffffff811115611dc657611dc5615747565b5b604051908082528060200260200182016040528015611df45781602001602082028036833780820191505090505b50905060005b82811015611e3e57611e0c858261128a565b828281518110611e1f57611e1e615718565b5b6020026020010181815250508080611e3690615585565b915050611dfa565b508092505050919050565b611e5161277c565b73ffffffffffffffffffffffffffffffffffffffff16611e6f611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc906150fe565b60405180910390fd5b818160179190611ed6929190613fcd565b505050565b611ee361277c565b73ffffffffffffffffffffffffffffffffffffffff16611f01611a98565b73ffffffffffffffffffffffffffffffffffffffff1614611f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4e906150fe565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000601254905090565b611fba611fb461277c565b836128a9565b611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff09061515e565b60405180910390fd5b61200584848484612f61565b50505050565b6000600f60009054906101000a900460ff16905090565b61202a611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156120a457506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156120ed57803410156120ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e390614fde565b60405180910390fd5b5b50565b6060600b80546120ff90615522565b80601f016020809104026020016040519081016040528092919081815260200182805461212b90615522565b80156121785780601f1061214d57610100808354040283529160200191612178565b820191906000526020600020905b81548152906001019060200180831161215b57829003601f168201915b5050505050905090565b606061218d82612784565b6121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390614fbe565b60405180910390fd5b60006121d6612fbd565b905060008151116121f65760405180602001604052806000815250612224565b806122008461304f565b600b60405160200161221493929190614cdc565b6040516020818303038152906040525b915050919050565b6000601154905090565b61223e61277c565b73ffffffffffffffffffffffffffffffffffffffff1661225c611a98565b73ffffffffffffffffffffffffffffffffffffffff16146122b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a9906150fe565b60405180910390fd5b80600b90805190602001906122c8929190613f47565b5050565b6122d461277c565b73ffffffffffffffffffffffffffffffffffffffff166122f2611a98565b73ffffffffffffffffffffffffffffffffffffffff1614612348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233f906150fe565b60405180910390fd5b8060138190555050565b61235a61277c565b73ffffffffffffffffffffffffffffffffffffffff16612378611a98565b73ffffffffffffffffffffffffffffffffffffffff16146123ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c5906150fe565b60405180910390fd5b8060148190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008173ffffffffffffffffffffffffffffffffffffffff16319050919050565b61249561277c565b73ffffffffffffffffffffffffffffffffffffffff166124b3611a98565b73ffffffffffffffffffffffffffffffffffffffff1614612509576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612500906150fe565b60405180910390fd5b80600f60006101000a81548160ff0219169083600281111561252e5761252d61568b565b5b021790555050565b60006018600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61257b61277c565b73ffffffffffffffffffffffffffffffffffffffff16612599611a98565b73ffffffffffffffffffffffffffffffffffffffff16146125ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e6906150fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561265f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265690614ede565b60405180910390fd5b61266881612d30565b50565b600080823b905060008111915050919050565b505050565b60008261269085846131b0565b1490509392505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061276557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612775575061277482613263565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661286383611708565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006128b482612784565b6128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ea90614f9e565b60405180910390fd5b60006128fe83611708565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061296d57508373ffffffffffffffffffffffffffffffffffffffff1661295584610f09565b73ffffffffffffffffffffffffffffffffffffffff16145b8061297e575061297d81856123d8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166129a782611708565b73ffffffffffffffffffffffffffffffffffffffff16146129fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f49061511e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490614f5e565b60405180910390fd5b612a788383836132cd565b612a836000826127f0565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad39190615409565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b2a9190615328565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612bed611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612c6557506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612c7257819050612ce1565b6017805490508210612cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb0906150de565b60405180910390fd5b600060178381548110612ccf57612cce615718565b5b90600052602060002001549050809150505b919050565b612cef826133e1565b612cf983826134d5565b612d02826135d4565b612d0c8483613659565b50505050565b612d2c82826040518060200160405280600081525061373c565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5a90614f7e565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f549190614dab565b60405180910390a3505050565b612f6c848484612987565b612f7884848484613797565b612fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fae90614e7e565b60405180910390fd5b50505050565b6060600c8054612fcc90615522565b80601f0160208091040260200160405190810160405280929190818152602001828054612ff890615522565b80156130455780601f1061301a57610100808354040283529160200191613045565b820191906000526020600020905b81548152906001019060200180831161302857829003601f168201915b5050505050905090565b60606000821415613097576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131ab565b600082905060005b600082146130c95780806130b290615585565b915050600a826130c2919061537e565b915061309f565b60008167ffffffffffffffff8111156130e5576130e4615747565b5b6040519080825280601f01601f1916602001820160405280156131175781602001600182028036833780820191505090505b5090505b600085146131a4576001826131309190615409565b9150600a8561313f91906155fc565b603061314b9190615328565b60f81b81838151811061316157613160615718565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561319d919061537e565b945061311b565b8093505050505b919050565b60008082905060005b84518110156132585760008582815181106131d7576131d6615718565b5b602002602001015190508083116132185782816040516020016131fb929190614cb0565b604051602081830303815290604052805190602001209250613244565b808360405160200161322b929190614cb0565b6040516020818303038152906040528051906020012092505b50808061325090615585565b9150506131b9565b508091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6132d883838361267e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561331b576133168161392e565b61335a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613359576133588382613977565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561339d5761339881613ae4565b6133dc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146133db576133da8282613bb5565b5b5b505050565b60008111613424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341b90614ebe565b60405180910390fd5b60115481613430611144565b61343a9190615328565b111561347b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134729061509e565b60405180910390fd5b60125481613487611144565b6134919190615328565b11156134d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c990614e9e565b60405180910390fd5b50565b6134dd611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061354a5750600060028111156135255761352461568b565b5b600f60009054906101000a900460ff1660028111156135475761354661568b565b5b14155b613589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161358090614e1e565b60405180910390fd5b6001600281111561359d5761359c61568b565b5b600f60009054906101000a900460ff1660028111156135bf576135be61568b565b5b14156135d0576135cf8282613c34565b5b5050565b6135dc611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061361757506013548111155b613656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364d9061517e565b60405180910390fd5b50565b613661611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136d957506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b806136f95750601454816136ec84611840565b6136f69190615328565b11155b613738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372f9061501e565b60405180910390fd5b5050565b6137468383613d22565b6137536000848484613797565b613792576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378990614e7e565b60405180910390fd5b505050565b60006137b88473ffffffffffffffffffffffffffffffffffffffff1661266b565b15613921578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026137e161277c565b8786866040518563ffffffff1660e01b81526004016138039493929190614d3d565b602060405180830381600087803b15801561381d57600080fd5b505af192505050801561384e57506040513d601f19601f8201168201806040525081019061384b919061458b565b60015b6138d1573d806000811461387e576040519150601f19603f3d011682016040523d82523d6000602084013e613883565b606091505b506000815114156138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c090614e7e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613926565b600190505b949350505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161398484611840565b61398e9190615409565b9050600060086000848152602001908152602001600020549050818114613a73576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600980549050613af89190615409565b90506000600a6000848152602001908152602001600020549050600060098381548110613b2857613b27615718565b5b906000526020600020015490508060098381548110613b4a57613b49615718565b5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480613b9957613b986156e9565b5b6001900381819060005260206000200160009055905550505050565b6000613bc083611840565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b613c3c611a98565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480613cb457506000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b80613ccf575060165482148015613cce5750600060165414155b5b80613cdf5750613cde81613ef0565b5b613d1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d1590614e3e565b60405180910390fd5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d899061507e565b60405180910390fd5b613d9b81612784565b15613ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd290614f1e565b60405180910390fd5b613de7600083836132cd565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613e379190615328565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008033604051602001613f049190614c95565b604051602081830303815290604052805190602001209050613f296015548285613f31565b915050919050565b6000613f3e828585612683565b90509392505050565b828054613f5390615522565b90600052602060002090601f016020900481019282613f755760008555613fbc565b82601f10613f8e57805160ff1916838001178555613fbc565b82800160010185558215613fbc579182015b82811115613fbb578251825591602001919060010190613fa0565b5b509050613fc9919061401a565b5090565b828054828255906000526020600020908101928215614009579160200282015b82811115614008578235825591602001919060010190613fed565b5b509050614016919061401a565b5090565b5b8082111561403357600081600090555060010161401b565b5090565b600061404a614045846151fe565b6151d9565b9050808382526020820190508285602086028201111561406d5761406c615780565b5b60005b8581101561409d578161408388826141d9565b845260208401935060208301925050600181019050614070565b5050509392505050565b60006140ba6140b58461522a565b6151d9565b9050828152602081018484840111156140d6576140d5615785565b5b6140e18482856154e0565b509392505050565b60006140fc6140f78461525b565b6151d9565b90508281526020810184848401111561411857614117615785565b5b6141238482856154e0565b509392505050565b60008135905061413a81615e5c565b92915050565b600082601f8301126141555761415461577b565b5b8135614165848260208601614037565b91505092915050565b60008083601f8401126141845761418361577b565b5b8235905067ffffffffffffffff8111156141a1576141a0615776565b5b6020830191508360208202830111156141bd576141bc615780565b5b9250929050565b6000813590506141d381615e73565b92915050565b6000813590506141e881615e8a565b92915050565b6000813590506141fd81615ea1565b92915050565b60008151905061421281615ea1565b92915050565b600082601f83011261422d5761422c61577b565b5b813561423d8482602086016140a7565b91505092915050565b60008135905061425581615eb8565b92915050565b600082601f8301126142705761426f61577b565b5b81356142808482602086016140e9565b91505092915050565b60008135905061429881615ec8565b92915050565b6000602082840312156142b4576142b361578f565b5b60006142c28482850161412b565b91505092915050565b600080604083850312156142e2576142e161578f565b5b60006142f08582860161412b565b92505060206143018582860161412b565b9150509250929050565b6000806000606084860312156143245761432361578f565b5b60006143328682870161412b565b93505060206143438682870161412b565b925050604061435486828701614289565b9150509250925092565b600080600080608085870312156143785761437761578f565b5b60006143868782880161412b565b94505060206143978782880161412b565b93505060406143a887828801614289565b925050606085013567ffffffffffffffff8111156143c9576143c861578a565b5b6143d587828801614218565b91505092959194509250565b600080604083850312156143f8576143f761578f565b5b60006144068582860161412b565b9250506020614417858286016141c4565b9150509250929050565b600080604083850312156144385761443761578f565b5b60006144468582860161412b565b925050602061445785828601614289565b9150509250929050565b6000806000806080858703121561447b5761447a61578f565b5b60006144898782880161412b565b945050602061449a87828801614289565b93505060406144ab87828801614289565b925050606085013567ffffffffffffffff8111156144cc576144cb61578a565b5b6144d887828801614140565b91505092959194509250565b600080602083850312156144fb576144fa61578f565b5b600083013567ffffffffffffffff8111156145195761451861578a565b5b6145258582860161416e565b92509250509250929050565b6000602082840312156145475761454661578f565b5b6000614555848285016141d9565b91505092915050565b6000602082840312156145745761457361578f565b5b6000614582848285016141ee565b91505092915050565b6000602082840312156145a1576145a061578f565b5b60006145af84828501614203565b91505092915050565b6000602082840312156145ce576145cd61578f565b5b60006145dc84828501614246565b91505092915050565b6000602082840312156145fb576145fa61578f565b5b600082013567ffffffffffffffff8111156146195761461861578a565b5b6146258482850161425b565b91505092915050565b6000602082840312156146445761464361578f565b5b600061465284828501614289565b91505092915050565b60006146678383614c77565b60208301905092915050565b61467c8161543d565b82525050565b61469361468e8261543d565b6155ce565b82525050565b60006146a4826152b1565b6146ae81856152df565b93506146b98361528c565b8060005b838110156146ea5781516146d1888261465b565b97506146dc836152d2565b9250506001810190506146bd565b5085935050505092915050565b6147008161544f565b82525050565b61470f8161545b565b82525050565b6147266147218261545b565b6155e0565b82525050565b6000614737826152bc565b61474181856152f0565b93506147518185602086016154ef565b61475a81615794565b840191505092915050565b61476e816154ce565b82525050565b600061477f826152c7565b614789818561530c565b93506147998185602086016154ef565b6147a281615794565b840191505092915050565b60006147b8826152c7565b6147c2818561531d565b93506147d28185602086016154ef565b80840191505092915050565b600081546147eb81615522565b6147f5818661531d565b94506001821660008114614810576001811461482157614854565b60ff19831686528186019350614854565b61482a8561529c565b60005b8381101561484c5781548189015260018201915060208101905061482d565b838801955050505b50505092915050565b600061486a600e8361530c565b9150614875826157b2565b602082019050919050565b600061488d600c8361530c565b9150614898826157db565b602082019050919050565b60006148b0602b8361530c565b91506148bb82615804565b604082019050919050565b60006148d360328361530c565b91506148de82615853565b604082019050919050565b60006148f6600e8361530c565b9150614901826158a2565b602082019050919050565b600061491960158361530c565b9150614924826158cb565b602082019050919050565b600061493c60268361530c565b9150614947826158f4565b604082019050919050565b600061495f600f8361530c565b915061496a82615943565b602082019050919050565b6000614982601c8361530c565b915061498d8261596c565b602082019050919050565b60006149a5600f8361530c565b91506149b082615995565b602082019050919050565b60006149c860248361530c565b91506149d3826159be565b604082019050919050565b60006149eb60198361530c565b91506149f682615a0d565b602082019050919050565b6000614a0e602c8361530c565b9150614a1982615a36565b604082019050919050565b6000614a31600d8361530c565b9150614a3c82615a85565b602082019050919050565b6000614a5460118361530c565b9150614a5f82615aae565b602082019050919050565b6000614a7760388361530c565b9150614a8282615ad7565b604082019050919050565b6000614a9a600e8361530c565b9150614aa582615b26565b602082019050919050565b6000614abd602a8361530c565b9150614ac882615b4f565b604082019050919050565b6000614ae060298361530c565b9150614aeb82615b9e565b604082019050919050565b6000614b0360208361530c565b9150614b0e82615bed565b602082019050919050565b6000614b26600a8361530c565b9150614b3182615c16565b602082019050919050565b6000614b49602c8361530c565b9150614b5482615c3f565b604082019050919050565b6000614b6c60088361530c565b9150614b7782615c8e565b602082019050919050565b6000614b8f60208361530c565b9150614b9a82615cb7565b602082019050919050565b6000614bb260298361530c565b9150614bbd82615ce0565b604082019050919050565b6000614bd560218361530c565b9150614be082615d2f565b604082019050919050565b6000614bf8600083615301565b9150614c0382615d7e565b600082019050919050565b6000614c1b60318361530c565b9150614c2682615d81565b604082019050919050565b6000614c3e600c8361530c565b9150614c4982615dd0565b602082019050919050565b6000614c61602c8361530c565b9150614c6c82615df9565b604082019050919050565b614c80816154c4565b82525050565b614c8f816154c4565b82525050565b6000614ca18284614682565b60148201915081905092915050565b6000614cbc8285614715565b602082019150614ccc8284614715565b6020820191508190509392505050565b6000614ce882866147ad565b9150614cf482856147ad565b9150614d0082846147de565b9150819050949350505050565b6000614d1882614beb565b9150819050919050565b6000602082019050614d376000830184614673565b92915050565b6000608082019050614d526000830187614673565b614d5f6020830186614673565b614d6c6040830185614c86565b8181036060830152614d7e818461472c565b905095945050505050565b60006020820190508181036000830152614da38184614699565b905092915050565b6000602082019050614dc060008301846146f7565b92915050565b6000602082019050614ddb6000830184614706565b92915050565b6000602082019050614df66000830184614765565b92915050565b60006020820190508181036000830152614e168184614774565b905092915050565b60006020820190508181036000830152614e378161485d565b9050919050565b60006020820190508181036000830152614e5781614880565b9050919050565b60006020820190508181036000830152614e77816148a3565b9050919050565b60006020820190508181036000830152614e97816148c6565b9050919050565b60006020820190508181036000830152614eb7816148e9565b9050919050565b60006020820190508181036000830152614ed78161490c565b9050919050565b60006020820190508181036000830152614ef78161492f565b9050919050565b60006020820190508181036000830152614f1781614952565b9050919050565b60006020820190508181036000830152614f3781614975565b9050919050565b60006020820190508181036000830152614f5781614998565b9050919050565b60006020820190508181036000830152614f77816149bb565b9050919050565b60006020820190508181036000830152614f97816149de565b9050919050565b60006020820190508181036000830152614fb781614a01565b9050919050565b60006020820190508181036000830152614fd781614a24565b9050919050565b60006020820190508181036000830152614ff781614a47565b9050919050565b6000602082019050818103600083015261501781614a6a565b9050919050565b6000602082019050818103600083015261503781614a8d565b9050919050565b6000602082019050818103600083015261505781614ab0565b9050919050565b6000602082019050818103600083015261507781614ad3565b9050919050565b6000602082019050818103600083015261509781614af6565b9050919050565b600060208201905081810360008301526150b781614b19565b9050919050565b600060208201905081810360008301526150d781614b3c565b9050919050565b600060208201905081810360008301526150f781614b5f565b9050919050565b6000602082019050818103600083015261511781614b82565b9050919050565b6000602082019050818103600083015261513781614ba5565b9050919050565b6000602082019050818103600083015261515781614bc8565b9050919050565b6000602082019050818103600083015261517781614c0e565b9050919050565b6000602082019050818103600083015261519781614c31565b9050919050565b600060208201905081810360008301526151b781614c54565b9050919050565b60006020820190506151d36000830184614c86565b92915050565b60006151e36151f4565b90506151ef8282615554565b919050565b6000604051905090565b600067ffffffffffffffff82111561521957615218615747565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561524557615244615747565b5b61524e82615794565b9050602081019050919050565b600067ffffffffffffffff82111561527657615275615747565b5b61527f82615794565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000615333826154c4565b915061533e836154c4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153735761537261562d565b5b828201905092915050565b6000615389826154c4565b9150615394836154c4565b9250826153a4576153a361565c565b5b828204905092915050565b60006153ba826154c4565b91506153c5836154c4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153fe576153fd61562d565b5b828202905092915050565b6000615414826154c4565b915061541f836154c4565b9250828210156154325761543161562d565b5b828203905092915050565b6000615448826154a4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061549f82615e48565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006154d982615491565b9050919050565b82818337600083830152505050565b60005b8381101561550d5780820151818401526020810190506154f2565b8381111561551c576000848401525b50505050565b6000600282049050600182168061553a57607f821691505b6020821081141561554e5761554d6156ba565b5b50919050565b61555d82615794565b810181811067ffffffffffffffff8211171561557c5761557b615747565b5b80604052505050565b6000615590826154c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156155c3576155c261562d565b5b600182019050919050565b60006155d9826155ea565b9050919050565b6000819050919050565b60006155f5826157a5565b9050919050565b6000615607826154c4565b9150615612836154c4565b9250826156225761562161565c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4d696e74696e6720636c6f736564000000000000000000000000000000000000600082015250565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4d696e74696e6720706175736564000000000000000000000000000000000000600082015250565b7f4f6e6c79203e302063616e206265206d696e7465640000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f496e76616c696420746f6b656e00000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d6178207065722077616c6c6574000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d617820746f6b656e7300000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d617820706572206d696e740000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b60038110615e5957615e5861568b565b5b50565b615e658161543d565b8114615e7057600080fd5b50565b615e7c8161544f565b8114615e8757600080fd5b50565b615e938161545b565b8114615e9e57600080fd5b50565b615eaa81615465565b8114615eb557600080fd5b50565b60038110615ec557600080fd5b50565b615ed1816154c4565b8114615edc57600080fd5b5056fea2646970667358221220366c4736dabc2c91f92749af8387301c44f2fecfb52b9ede4cff5457a3f6e48164736f6c63430008070033
Deployed Bytecode Sourcemap
41110:9540:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31458:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50470:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19353:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20912:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20435:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47791:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47053:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32098:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21662:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49258:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50003:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49068:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31766:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50294:168;;;;;;;;;;;;;:::i;:::-;;48550:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22072:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48872:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49689:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32288:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48684:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47593:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42914:530;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19047:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48342:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18777:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40292:103;;;;;;;;;;;;;:::i;:::-;;47688:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49162:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39641:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49453:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48162:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19522:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49357:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48078:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21205:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49854:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43578:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49568:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50143:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48440:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22328:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47894:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42655:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47260:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43962:579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48250:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47367:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48778:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48970:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21431:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47144:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47984:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43450:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40550:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31458:224;31560:4;31599:35;31584:50;;;:11;:50;;;;:90;;;;31638:36;31662:11;31638:23;:36::i;:::-;31584:90;31577:97;;31458:224;;;:::o;50470:175::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50539:12:::1;50557:10;:15;;50580:6;50557:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50538:53;;;50610:7;50602:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;50527:118;50470:175:::0;:::o;19353:100::-;19407:13;19440:5;19433:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19353:100;:::o;20912:221::-;20988:7;21016:16;21024:7;21016;:16::i;:::-;21008:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21101:15;:24;21117:7;21101:24;;;;;;;;;;;;;;;;;;;;;21094:31;;20912:221;;;:::o;20435:411::-;20516:13;20532:23;20547:7;20532:14;:23::i;:::-;20516:39;;20580:5;20574:11;;:2;:11;;;;20566:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;20674:5;20658:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;20683:37;20700:5;20707:12;:10;:12::i;:::-;20683:16;:37::i;:::-;20658:62;20636:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;20817:21;20826:2;20830:7;20817:8;:21::i;:::-;20505:341;20435:411;;:::o;47791:95::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47877:6:::1;47856:18;:27;;;;;;;;;;;;:::i;:::-;;47791:95:::0;:::o;47053:85::-;47096:7;47114:21;47107:28;;47053:85;:::o;32098:113::-;32159:7;32186:10;:17;;;;32179:24;;32098:113;:::o;21662:339::-;21857:41;21876:12;:10;:12::i;:::-;21890:7;21857:18;:41::i;:::-;21849:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;21965:28;21975:4;21981:2;21985:7;21965:9;:28::i;:::-;21662:339;;;:::o;49258:93::-;49309:12;49332:16;;49325:23;;49258:93;:::o;50003:134::-;50077:18;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50106:16:::1;:28;50123:10;50106:28;;;;;;;;;;;;;;;;50099:35;;50003:134:::0;;;:::o;49068:88::-;49119:7;49137:16;;49130:23;;49068:88;:::o;31766:256::-;31863:7;31899:23;31916:5;31899:16;:23::i;:::-;31891:5;:31;31883:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31988:12;:19;32001:5;31988:19;;;;;;;;;;;;;;;:26;32008:5;31988:26;;;;;;;;;;;;31981:33;;31766:256;;;;:::o;50294:168::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50372:10:::1;50364:24;;:47;50389:21;50364:47;;;;;;;;;;;;;;;;;;;;;;;50342:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;50294:168::o:0;48550:126::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48655:18:::1;48628:24;:45;;;;48550:126:::0;:::o;22072:185::-;22210:39;22227:4;22233:2;22237:7;22210:39;;;;;;;;;;;;:16;:39::i;:::-;22072:185;;;:::o;48872:92::-;48925:7;48943:18;;48936:25;;48872:92;:::o;49689:121::-;49749:15;49775:19;:32;49795:11;49775:32;;;;;;;;;;;;;;;;49768:39;;49689:121;;;:::o;32288:233::-;32363:7;32399:30;:28;:30::i;:::-;32391:5;:38;32383:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;32496:10;32507:5;32496:17;;;;;;;;:::i;:::-;;;;;;;;;;32489:24;;32288:233;;;:::o;48684:88::-;48735:7;48753:16;;48746:23;;48684:88;:::o;47593:87::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47671:6:::1;47654:14;:23;;;;;;;;;;;;:::i;:::-;;47593:87:::0;:::o;42914:530::-;43024:25;43052:28;43069:10;43052:16;:28::i;:::-;43024:56;;43091:58;43114:2;43118:4;43124:17;43143:5;43091:22;:58::i;:::-;43162:17;43196:10;43182:11;;:24;;;;:::i;:::-;43162:44;;43217:14;43221:9;43217:3;:14::i;:::-;43244;43261:13;:11;:13::i;:::-;43244:30;;43290:9;43302:1;43290:13;;43285:152;43310:17;43305:1;:22;43285:152;;43383:2;43349:21;:33;43380:1;43371:6;:10;;;;:::i;:::-;43349:33;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;43400:25;43410:2;43423:1;43414:6;:10;;;;:::i;:::-;43400:9;:25::i;:::-;43329:3;;;;;:::i;:::-;;;;43285:152;;;;43013:431;;;42914:530;;;;:::o;19047:239::-;19119:7;19139:13;19155:7;:16;19163:7;19155:16;;;;;;;;;;;;;;;;;;;;;19139:32;;19207:1;19190:19;;:5;:19;;;;19182:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19273:5;19266:12;;;19047:239;;;:::o;48342:90::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48420:9:::1;48402:15;:27;;;;48342:90:::0;:::o;18777:208::-;18849:7;18894:1;18877:19;;:5;:19;;;;18869:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18961:9;:16;18971:5;18961:16;;;;;;;;;;;;;;;;18954:23;;18777:208;;;:::o;40292:103::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40357:30:::1;40384:1;40357:18;:30::i;:::-;40292:103::o:0;47688:97::-;47740:13;47764:18;47757:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47688:97;:::o;49162:88::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49240:7:::1;49221:16;:26;;;;49162:88:::0;:::o;39641:87::-;39687:7;39714:6;;;;;;;;;;;39707:13;;39641:87;:::o;49453:109::-;49510:16;49537:22;49530:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49453:109;:::o;48162:80::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48231:8:::1;48217:11;:22;;;;48162:80:::0;:::o;19522:104::-;19578:13;19611:7;19604:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19522:104;:::o;49357:88::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49435:7:::1;49416:16;:26;;;;49357:88:::0;:::o;48078:78::-;48124:7;48142:11;;48135:18;;48078:78;:::o;21205:155::-;21300:52;21319:12;:10;:12::i;:::-;21333:8;21343;21300:18;:52::i;:::-;21205:155;;:::o;49854:141::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49980:7:::1;49947:19;:32;49967:11;49947:32;;;;;;;;;;;;;;;:40;;;;49854:141:::0;;:::o;43578:376::-;43649:16;43683:23;43709:17;43719:6;43709:9;:17::i;:::-;43683:43;;43737:25;43779:15;43765:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43737:58;;43811:9;43806:113;43826:15;43822:1;:19;43806:113;;;43877:30;43897:6;43905:1;43877:19;:30::i;:::-;43863:8;43872:1;43863:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43843:3;;;;;:::i;:::-;;;;43806:113;;;;43938:8;43931:15;;;;43578:376;;;:::o;49568:113::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49670:8:::1;;49645:22;:33;;;;;;;:::i;:::-;;49568:113:::0;;:::o;50143:143::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50268:10:::1;50237:16;:28;50254:10;50237:28;;;;;;;;;;;;;;;:41;;;;50143:143:::0;;:::o;48440:104::-;48499:7;48517:24;;48510:31;;48440:104;:::o;22328:328::-;22503:41;22522:12;:10;:12::i;:::-;22536:7;22503:18;:41::i;:::-;22495:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22609:39;22623:4;22629:2;22633:7;22642:5;22609:13;:39::i;:::-;22328:328;;;;:::o;47894:84::-;47944:9;47964:11;;;;;;;;;;;47957:18;;47894:84;:::o;42655:251::-;42728:7;:5;:7::i;:::-;42714:21;;:10;:21;;;;:58;;;;;42771:1;42739:16;:28;42756:10;42739:28;;;;;;;;;;;;;;;;:33;42714:58;42710:189;;;42828:6;42815:9;:19;;42789:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;42710:189;42655:251;:::o;47260:101::-;47314:13;47338:20;47331:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47260:101;:::o;43962:579::-;44044:13;44097:16;44105:7;44097;:16::i;:::-;44075:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;44167:28;44198:10;:8;:10::i;:::-;44167:41;;44270:1;44245:14;44239:28;:32;:294;;;;;;;;;;;;;;;;;44363:14;44404:18;:7;:16;:18::i;:::-;44449:20;44320:172;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44239:294;44219:314;;;43962:579;;;:::o;48250:86::-;48300:7;48318:15;;48311:22;;48250:86;:::o;47367:111::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47463:12:::1;47440:20;:35;;;;;;;;;;;;:::i;:::-;;47367:111:::0;:::o;48778:86::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48855:6:::1;48836:16;:25;;;;48778:86:::0;:::o;48970:90::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49051:6:::1;49030:18;:27;;;;48970:90:::0;:::o;21431:164::-;21528:4;21552:18;:25;21571:5;21552:25;;;;;;;;;;;;;;;:35;21578:8;21552:35;;;;;;;;;;;;;;;;;;;;;;;;;21545:42;;21431:164;;;;:::o;47144:108::-;47212:7;47230:11;:19;;;47223:26;;47144:108;;;:::o;47984:86::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48059:8:::1;48045:11;;:22;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;47984:86:::0;:::o;43450:120::-;43505:7;43532:21;:30;43554:7;43532:30;;;;;;;;;;;;;;;;;;;;;43525:37;;43450:120;;;:::o;40550:201::-;39872:12;:10;:12::i;:::-;39861:23;;:7;:5;:7::i;:::-;:23;;;39853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40659:1:::1;40639:22;;:8;:22;;;;40631:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40715:28;40734:8;40715:18;:28::i;:::-;40550:201:::0;:::o;610:387::-;670:4;878:12;945:7;933:20;925:28;;988:1;981:4;:8;974:15;;;610:387;;;:::o;30715:126::-;;;;:::o;37968:190::-;38093:4;38146;38117:25;38130:5;38137:4;38117:12;:25::i;:::-;:33;38110:40;;37968:190;;;;;:::o;18408:305::-;18510:4;18562:25;18547:40;;;:11;:40;;;;:105;;;;18619:33;18604:48;;;:11;:48;;;;18547:105;:158;;;;18669:36;18693:11;18669:23;:36::i;:::-;18547:158;18527:178;;18408:305;;;:::o;9923:98::-;9976:7;10003:10;9996:17;;9923:98;:::o;24166:127::-;24231:4;24283:1;24255:30;;:7;:16;24263:7;24255:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24248:37;;24166:127;;;:::o;28148:174::-;28250:2;28223:15;:24;28239:7;28223:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28306:7;28302:2;28268:46;;28277:23;28292:7;28277:14;:23::i;:::-;28268:46;;;;;;;;;;;;28148:174;;:::o;24460:348::-;24553:4;24578:16;24586:7;24578;:16::i;:::-;24570:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24654:13;24670:23;24685:7;24670:14;:23::i;:::-;24654:39;;24723:5;24712:16;;:7;:16;;;:51;;;;24756:7;24732:31;;:20;24744:7;24732:11;:20::i;:::-;:31;;;24712:51;:87;;;;24767:32;24784:5;24791:7;24767:16;:32::i;:::-;24712:87;24704:96;;;24460:348;;;;:::o;27452:578::-;27611:4;27584:31;;:23;27599:7;27584:14;:23::i;:::-;:31;;;27576:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27694:1;27680:16;;:2;:16;;;;27672:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27750:39;27771:4;27777:2;27781:7;27750:20;:39::i;:::-;27854:29;27871:1;27875:7;27854:8;:29::i;:::-;27915:1;27896:9;:15;27906:4;27896:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27944:1;27927:9;:13;27937:2;27927:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27975:2;27956:7;:16;27964:7;27956:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28014:7;28010:2;27995:27;;28004:4;27995:27;;;;;;;;;;;;27452:578;;;:::o;44571:417::-;44640:14;44683:7;:5;:7::i;:::-;44669:21;;:10;:21;;;:57;;;;44725:1;44694:16;:28;44711:10;44694:28;;;;;;;;;;;;;;;;:32;44669:57;44666:86;;;44737:12;44730:19;;;;44666:86;44802:22;:29;;;;44787:12;:44;44765:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;44881:25;44909:22;44932:12;44909:36;;;;;;;;:::i;:::-;;;;;;;;;;44881:64;;44963:17;44956:24;;;44571:417;;;;:::o;45220:305::-;45361:30;45378:12;45361:16;:30::i;:::-;45402:26;45416:4;45422:5;45402:13;:26::i;:::-;45439:29;45455:12;45439:15;:29::i;:::-;45479:38;45497:5;45504:12;45479:17;:38::i;:::-;45220:305;;;;:::o;25150:110::-;25226:26;25236:2;25240:7;25226:26;;;;;;;;;;;;:9;:26::i;:::-;25150:110;;:::o;40911:191::-;40985:16;41004:6;;;;;;;;;;;40985:25;;41030:8;41021:6;;:17;;;;;;;;;;;;;;;;;;41085:8;41054:40;;41075:8;41054:40;;;;;;;;;;;;40974:128;40911:191;:::o;28464:315::-;28619:8;28610:17;;:5;:17;;;;28602:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28706:8;28668:18;:25;28687:5;28668:25;;;;;;;;;;;;;;;:35;28694:8;28668:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28752:8;28730:41;;28745:5;28730:41;;;28762:8;28730:41;;;;;;:::i;:::-;;;;;;;;28464:315;;;:::o;23538:::-;23695:28;23705:4;23711:2;23715:7;23695:9;:28::i;:::-;23742:48;23765:4;23771:2;23775:7;23784:5;23742:22;:48::i;:::-;23734:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;23538:315;;;;:::o;47486:101::-;47546:13;47570:14;47563:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47486:101;:::o;8130:723::-;8186:13;8416:1;8407:5;:10;8403:53;;;8434:10;;;;;;;;;;;;;;;;;;;;;8403:53;8466:12;8481:5;8466:20;;8497:14;8522:78;8537:1;8529:4;:9;8522:78;;8555:8;;;;;:::i;:::-;;;;8586:2;8578:10;;;;;:::i;:::-;;;8522:78;;;8610:19;8642:6;8632:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8610:39;;8660:154;8676:1;8667:5;:10;8660:154;;8704:1;8694:11;;;;;:::i;:::-;;;8771:2;8763:5;:10;;;;:::i;:::-;8750:2;:24;;;;:::i;:::-;8737:39;;8720:6;8727;8720:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8800:2;8791:11;;;;;:::i;:::-;;;8660:154;;;8838:6;8824:21;;;;;8130:723;;;;:::o;38520:701::-;38603:7;38623:20;38646:4;38623:27;;38666:9;38661:523;38685:5;:12;38681:1;:16;38661:523;;;38719:20;38742:5;38748:1;38742:8;;;;;;;;:::i;:::-;;;;;;;;38719:31;;38785:12;38769;:28;38765:408;;38939:12;38953;38922:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38912:55;;;;;;38897:70;;38765:408;;;39129:12;39143;39112:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39102:55;;;;;;39087:70;;38765:408;38704:480;38699:3;;;;;:::i;:::-;;;;38661:523;;;;39201:12;39194:19;;;38520:701;;;;:::o;17268:157::-;17353:4;17392:25;17377:40;;;:11;:40;;;;17370:47;;17268:157;;;:::o;33134:589::-;33278:45;33305:4;33311:2;33315:7;33278:26;:45::i;:::-;33356:1;33340:18;;:4;:18;;;33336:187;;;33375:40;33407:7;33375:31;:40::i;:::-;33336:187;;;33445:2;33437:10;;:4;:10;;;33433:90;;33464:47;33497:4;33503:7;33464:32;:47::i;:::-;33433:90;33336:187;33551:1;33537:16;;:2;:16;;;33533:183;;;33570:45;33607:7;33570:36;:45::i;:::-;33533:183;;;33643:4;33637:10;;:2;:10;;;33633:83;;33664:40;33692:2;33696:7;33664:27;:40::i;:::-;33633:83;33533:183;33134:589;;;:::o;46690:305::-;46785:1;46770:12;:16;46762:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46863:15;;46847:12;46831:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:47;;46823:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46944:24;;46928:12;46912:13;:11;:13::i;:::-;:28;;;;:::i;:::-;:56;;46904:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46690:305;:::o;45849:322::-;45970:7;:5;:7::i;:::-;45956:21;;:10;:21;;;:58;;;;45996:18;45981:33;;;;;;;;:::i;:::-;;:11;;;;;;;;;;;:33;;;;;;;;:::i;:::-;;;;45956:58;45934:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;46088:17;46073:32;;;;;;;;:::i;:::-;;:11;;;;;;;;;;;:32;;;;;;;;:::i;:::-;;;46070:94;;;46121:31;46140:4;46146:5;46121:18;:31::i;:::-;46070:94;45849:322;;:::o;46177:213::-;46284:7;:5;:7::i;:::-;46270:21;;:10;:21;;;:71;;;;46325:16;;46309:12;:32;;46270:71;46248:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;46177:213;:::o;46396:288::-;46520:7;:5;:7::i;:::-;46506:21;;:10;:21;;;:57;;;;46562:1;46531:16;:28;46548:10;46531:28;;;;;;;;;;;;;;;;:32;46506:57;:127;;;;46615:18;;46599:12;46580:16;46590:5;46580:9;:16::i;:::-;:31;;;;:::i;:::-;:53;;46506:127;46484:192;;;;;;;;;;;;:::i;:::-;;;;;;;;;46396:288;;:::o;25487:321::-;25617:18;25623:2;25627:7;25617:5;:18::i;:::-;25668:54;25699:1;25703:2;25707:7;25716:5;25668:22;:54::i;:::-;25646:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;25487:321;;;:::o;29344:799::-;29499:4;29520:15;:2;:13;;;:15::i;:::-;29516:620;;;29572:2;29556:36;;;29593:12;:10;:12::i;:::-;29607:4;29613:7;29622:5;29556:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29552:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29815:1;29798:6;:13;:18;29794:272;;;29841:60;;;;;;;;;;:::i;:::-;;;;;;;;29794:272;30016:6;30010:13;30001:6;29997:2;29993:15;29986:38;29552:529;29689:41;;;29679:51;;;:6;:51;;;;29672:58;;;;;29516:620;30120:4;30113:11;;29344:799;;;;;;;:::o;34446:164::-;34550:10;:17;;;;34523:15;:24;34539:7;34523:24;;;;;;;;;;;:44;;;;34578:10;34594:7;34578:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34446:164;:::o;35237:988::-;35503:22;35553:1;35528:22;35545:4;35528:16;:22::i;:::-;:26;;;;:::i;:::-;35503:51;;35565:18;35586:17;:26;35604:7;35586:26;;;;;;;;;;;;35565:47;;35733:14;35719:10;:28;35715:328;;35764:19;35786:12;:18;35799:4;35786:18;;;;;;;;;;;;;;;:34;35805:14;35786:34;;;;;;;;;;;;35764:56;;35870:11;35837:12;:18;35850:4;35837:18;;;;;;;;;;;;;;;:30;35856:10;35837:30;;;;;;;;;;;:44;;;;35987:10;35954:17;:30;35972:11;35954:30;;;;;;;;;;;:43;;;;35749:294;35715:328;36139:17;:26;36157:7;36139:26;;;;;;;;;;;36132:33;;;36183:12;:18;36196:4;36183:18;;;;;;;;;;;;;;;:34;36202:14;36183:34;;;;;;;;;;;36176:41;;;35318:907;;35237:988;;:::o;36520:1079::-;36773:22;36818:1;36798:10;:17;;;;:21;;;;:::i;:::-;36773:46;;36830:18;36851:15;:24;36867:7;36851:24;;;;;;;;;;;;36830:45;;37202:19;37224:10;37235:14;37224:26;;;;;;;;:::i;:::-;;;;;;;;;;37202:48;;37288:11;37263:10;37274;37263:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;37399:10;37368:15;:28;37384:11;37368:28;;;;;;;;;;;:41;;;;37540:15;:24;37556:7;37540:24;;;;;;;;;;;37533:31;;;37575:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36591:1008;;;36520:1079;:::o;34024:221::-;34109:14;34126:20;34143:2;34126:16;:20::i;:::-;34109:37;;34184:7;34157:12;:16;34170:2;34157:16;;;;;;;;;;;;;;;:24;34174:6;34157:24;;;;;;;;;;;:34;;;;34231:6;34202:17;:26;34220:7;34202:26;;;;;;;;;;;:35;;;;34098:147;34024:221;;:::o;45533:310::-;45659:7;:5;:7::i;:::-;45645:21;;:10;:21;;;:57;;;;45701:1;45670:16;:28;45687:10;45670:28;;;;;;;;;;;;;;;;:32;45645:57;:125;;;;45728:16;;45720:4;:24;:49;;;;;45768:1;45748:16;;:21;;45720:49;45645:125;:159;;;;45788:16;45798:5;45788:9;:16::i;:::-;45645:159;45623:212;;;;;;;;;;;;:::i;:::-;;;;;;;;;45533:310;;:::o;26144:382::-;26238:1;26224:16;;:2;:16;;;;26216:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26297:16;26305:7;26297;:16::i;:::-;26296:17;26288:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26359:45;26388:1;26392:2;26396:7;26359:20;:45::i;:::-;26434:1;26417:9;:13;26427:2;26417:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26465:2;26446:7;:16;26454:7;26446:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26510:7;26506:2;26485:33;;26502:1;26485:33;;;;;;;;;;;;26144:382;;:::o;44996:216::-;45061:11;45085:14;45129:10;45112:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;45102:39;;;;;;45085:56;;45159:45;45172:16;;45190:6;45198:5;45159:12;:45::i;:::-;45152:52;;;44996:216;;;:::o;42467:180::-;42574:4;42602:37;42621:5;42628:4;42634;42602:18;:37::i;:::-;42595:44;;42467:180;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;2141:568::-;2214:8;2224:6;2274:3;2267:4;2259:6;2255:17;2251:27;2241:122;;2282:79;;:::i;:::-;2241:122;2395:6;2382:20;2372:30;;2425:18;2417:6;2414:30;2411:117;;;2447:79;;:::i;:::-;2411:117;2561:4;2553:6;2549:17;2537:29;;2615:3;2607:4;2599:6;2595:17;2585:8;2581:32;2578:41;2575:128;;;2622:79;;:::i;:::-;2575:128;2141:568;;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:139::-;2900:5;2938:6;2925:20;2916:29;;2954:33;2981:5;2954:33;:::i;:::-;2854:139;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;2999:137;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3142:141;;;;:::o;3302:338::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:122;;3414:79;;:::i;:::-;3373:122;3531:6;3518:20;3556:78;3630:3;3622:6;3615:4;3607:6;3603:17;3556:78;:::i;:::-;3547:87;;3363:277;3302:338;;;;:::o;3646:167::-;3706:5;3744:6;3731:20;3722:29;;3760:47;3801:5;3760:47;:::i;:::-;3646:167;;;;:::o;3833:340::-;3889:5;3938:3;3931:4;3923:6;3919:17;3915:27;3905:122;;3946:79;;:::i;:::-;3905:122;4063:6;4050:20;4088:79;4163:3;4155:6;4148:4;4140:6;4136:17;4088:79;:::i;:::-;4079:88;;3895:278;3833:340;;;;:::o;4179:139::-;4225:5;4263:6;4250:20;4241:29;;4279:33;4306:5;4279:33;:::i;:::-;4179:139;;;;:::o;4324:329::-;4383:6;4432:2;4420:9;4411:7;4407:23;4403:32;4400:119;;;4438:79;;:::i;:::-;4400:119;4558:1;4583:53;4628:7;4619:6;4608:9;4604:22;4583:53;:::i;:::-;4573:63;;4529:117;4324:329;;;;:::o;4659:474::-;4727:6;4735;4784:2;4772:9;4763:7;4759:23;4755:32;4752:119;;;4790:79;;:::i;:::-;4752:119;4910:1;4935:53;4980:7;4971:6;4960:9;4956:22;4935:53;:::i;:::-;4925:63;;4881:117;5037:2;5063:53;5108:7;5099:6;5088:9;5084:22;5063:53;:::i;:::-;5053:63;;5008:118;4659:474;;;;;:::o;5139:619::-;5216:6;5224;5232;5281:2;5269:9;5260:7;5256:23;5252:32;5249:119;;;5287:79;;:::i;:::-;5249:119;5407:1;5432:53;5477:7;5468:6;5457:9;5453:22;5432:53;:::i;:::-;5422:63;;5378:117;5534:2;5560:53;5605:7;5596:6;5585:9;5581:22;5560:53;:::i;:::-;5550:63;;5505:118;5662:2;5688:53;5733:7;5724:6;5713:9;5709:22;5688:53;:::i;:::-;5678:63;;5633:118;5139:619;;;;;:::o;5764:943::-;5859:6;5867;5875;5883;5932:3;5920:9;5911:7;5907:23;5903:33;5900:120;;;5939:79;;:::i;:::-;5900:120;6059:1;6084:53;6129:7;6120:6;6109:9;6105:22;6084:53;:::i;:::-;6074:63;;6030:117;6186:2;6212:53;6257:7;6248:6;6237:9;6233:22;6212:53;:::i;:::-;6202:63;;6157:118;6314:2;6340:53;6385:7;6376:6;6365:9;6361:22;6340:53;:::i;:::-;6330:63;;6285:118;6470:2;6459:9;6455:18;6442:32;6501:18;6493:6;6490:30;6487:117;;;6523:79;;:::i;:::-;6487:117;6628:62;6682:7;6673:6;6662:9;6658:22;6628:62;:::i;:::-;6618:72;;6413:287;5764:943;;;;;;;:::o;6713:468::-;6778:6;6786;6835:2;6823:9;6814:7;6810:23;6806:32;6803:119;;;6841:79;;:::i;:::-;6803:119;6961:1;6986:53;7031:7;7022:6;7011:9;7007:22;6986:53;:::i;:::-;6976:63;;6932:117;7088:2;7114:50;7156:7;7147:6;7136:9;7132:22;7114:50;:::i;:::-;7104:60;;7059:115;6713:468;;;;;:::o;7187:474::-;7255:6;7263;7312:2;7300:9;7291:7;7287:23;7283:32;7280:119;;;7318:79;;:::i;:::-;7280:119;7438:1;7463:53;7508:7;7499:6;7488:9;7484:22;7463:53;:::i;:::-;7453:63;;7409:117;7565:2;7591:53;7636:7;7627:6;7616:9;7612:22;7591:53;:::i;:::-;7581:63;;7536:118;7187:474;;;;;:::o;7667:975::-;7778:6;7786;7794;7802;7851:3;7839:9;7830:7;7826:23;7822:33;7819:120;;;7858:79;;:::i;:::-;7819:120;7978:1;8003:53;8048:7;8039:6;8028:9;8024:22;8003:53;:::i;:::-;7993:63;;7949:117;8105:2;8131:53;8176:7;8167:6;8156:9;8152:22;8131:53;:::i;:::-;8121:63;;8076:118;8233:2;8259:53;8304:7;8295:6;8284:9;8280:22;8259:53;:::i;:::-;8249:63;;8204:118;8389:2;8378:9;8374:18;8361:32;8420:18;8412:6;8409:30;8406:117;;;8442:79;;:::i;:::-;8406:117;8547:78;8617:7;8608:6;8597:9;8593:22;8547:78;:::i;:::-;8537:88;;8332:303;7667:975;;;;;;;:::o;8648:559::-;8734:6;8742;8791:2;8779:9;8770:7;8766:23;8762:32;8759:119;;;8797:79;;:::i;:::-;8759:119;8945:1;8934:9;8930:17;8917:31;8975:18;8967:6;8964:30;8961:117;;;8997:79;;:::i;:::-;8961:117;9110:80;9182:7;9173:6;9162:9;9158:22;9110:80;:::i;:::-;9092:98;;;;8888:312;8648:559;;;;;:::o;9213:329::-;9272:6;9321:2;9309:9;9300:7;9296:23;9292:32;9289:119;;;9327:79;;:::i;:::-;9289:119;9447:1;9472:53;9517:7;9508:6;9497:9;9493:22;9472:53;:::i;:::-;9462:63;;9418:117;9213:329;;;;:::o;9548:327::-;9606:6;9655:2;9643:9;9634:7;9630:23;9626:32;9623:119;;;9661:79;;:::i;:::-;9623:119;9781:1;9806:52;9850:7;9841:6;9830:9;9826:22;9806:52;:::i;:::-;9796:62;;9752:116;9548:327;;;;:::o;9881:349::-;9950:6;9999:2;9987:9;9978:7;9974:23;9970:32;9967:119;;;10005:79;;:::i;:::-;9967:119;10125:1;10150:63;10205:7;10196:6;10185:9;10181:22;10150:63;:::i;:::-;10140:73;;10096:127;9881:349;;;;:::o;10236:357::-;10309:6;10358:2;10346:9;10337:7;10333:23;10329:32;10326:119;;;10364:79;;:::i;:::-;10326:119;10484:1;10509:67;10568:7;10559:6;10548:9;10544:22;10509:67;:::i;:::-;10499:77;;10455:131;10236:357;;;;:::o;10599:509::-;10668:6;10717:2;10705:9;10696:7;10692:23;10688:32;10685:119;;;10723:79;;:::i;:::-;10685:119;10871:1;10860:9;10856:17;10843:31;10901:18;10893:6;10890:30;10887:117;;;10923:79;;:::i;:::-;10887:117;11028:63;11083:7;11074:6;11063:9;11059:22;11028:63;:::i;:::-;11018:73;;10814:287;10599:509;;;;:::o;11114:329::-;11173:6;11222:2;11210:9;11201:7;11197:23;11193:32;11190:119;;;11228:79;;:::i;:::-;11190:119;11348:1;11373:53;11418:7;11409:6;11398:9;11394:22;11373:53;:::i;:::-;11363:63;;11319:117;11114:329;;;;:::o;11449:179::-;11518:10;11539:46;11581:3;11573:6;11539:46;:::i;:::-;11617:4;11612:3;11608:14;11594:28;;11449:179;;;;:::o;11634:118::-;11721:24;11739:5;11721:24;:::i;:::-;11716:3;11709:37;11634:118;;:::o;11758:157::-;11863:45;11883:24;11901:5;11883:24;:::i;:::-;11863:45;:::i;:::-;11858:3;11851:58;11758:157;;:::o;11951:732::-;12070:3;12099:54;12147:5;12099:54;:::i;:::-;12169:86;12248:6;12243:3;12169:86;:::i;:::-;12162:93;;12279:56;12329:5;12279:56;:::i;:::-;12358:7;12389:1;12374:284;12399:6;12396:1;12393:13;12374:284;;;12475:6;12469:13;12502:63;12561:3;12546:13;12502:63;:::i;:::-;12495:70;;12588:60;12641:6;12588:60;:::i;:::-;12578:70;;12434:224;12421:1;12418;12414:9;12409:14;;12374:284;;;12378:14;12674:3;12667:10;;12075:608;;;11951:732;;;;:::o;12689:109::-;12770:21;12785:5;12770:21;:::i;:::-;12765:3;12758:34;12689:109;;:::o;12804:118::-;12891:24;12909:5;12891:24;:::i;:::-;12886:3;12879:37;12804:118;;:::o;12928:157::-;13033:45;13053:24;13071:5;13053:24;:::i;:::-;13033:45;:::i;:::-;13028:3;13021:58;12928:157;;:::o;13091:360::-;13177:3;13205:38;13237:5;13205:38;:::i;:::-;13259:70;13322:6;13317:3;13259:70;:::i;:::-;13252:77;;13338:52;13383:6;13378:3;13371:4;13364:5;13360:16;13338:52;:::i;:::-;13415:29;13437:6;13415:29;:::i;:::-;13410:3;13406:39;13399:46;;13181:270;13091:360;;;;:::o;13457:155::-;13556:49;13599:5;13556:49;:::i;:::-;13551:3;13544:62;13457:155;;:::o;13618:364::-;13706:3;13734:39;13767:5;13734:39;:::i;:::-;13789:71;13853:6;13848:3;13789:71;:::i;:::-;13782:78;;13869:52;13914:6;13909:3;13902:4;13895:5;13891:16;13869:52;:::i;:::-;13946:29;13968:6;13946:29;:::i;:::-;13941:3;13937:39;13930:46;;13710:272;13618:364;;;;:::o;13988:377::-;14094:3;14122:39;14155:5;14122:39;:::i;:::-;14177:89;14259:6;14254:3;14177:89;:::i;:::-;14170:96;;14275:52;14320:6;14315:3;14308:4;14301:5;14297:16;14275:52;:::i;:::-;14352:6;14347:3;14343:16;14336:23;;14098:267;13988:377;;;;:::o;14395:845::-;14498:3;14535:5;14529:12;14564:36;14590:9;14564:36;:::i;:::-;14616:89;14698:6;14693:3;14616:89;:::i;:::-;14609:96;;14736:1;14725:9;14721:17;14752:1;14747:137;;;;14898:1;14893:341;;;;14714:520;;14747:137;14831:4;14827:9;14816;14812:25;14807:3;14800:38;14867:6;14862:3;14858:16;14851:23;;14747:137;;14893:341;14960:38;14992:5;14960:38;:::i;:::-;15020:1;15034:154;15048:6;15045:1;15042:13;15034:154;;;15122:7;15116:14;15112:1;15107:3;15103:11;15096:35;15172:1;15163:7;15159:15;15148:26;;15070:4;15067:1;15063:12;15058:17;;15034:154;;;15217:6;15212:3;15208:16;15201:23;;14900:334;;14714:520;;14502:738;;14395:845;;;;:::o;15246:366::-;15388:3;15409:67;15473:2;15468:3;15409:67;:::i;:::-;15402:74;;15485:93;15574:3;15485:93;:::i;:::-;15603:2;15598:3;15594:12;15587:19;;15246:366;;;:::o;15618:::-;15760:3;15781:67;15845:2;15840:3;15781:67;:::i;:::-;15774:74;;15857:93;15946:3;15857:93;:::i;:::-;15975:2;15970:3;15966:12;15959:19;;15618:366;;;:::o;15990:::-;16132:3;16153:67;16217:2;16212:3;16153:67;:::i;:::-;16146:74;;16229:93;16318:3;16229:93;:::i;:::-;16347:2;16342:3;16338:12;16331:19;;15990:366;;;:::o;16362:::-;16504:3;16525:67;16589:2;16584:3;16525:67;:::i;:::-;16518:74;;16601:93;16690:3;16601:93;:::i;:::-;16719:2;16714:3;16710:12;16703:19;;16362:366;;;:::o;16734:::-;16876:3;16897:67;16961:2;16956:3;16897:67;:::i;:::-;16890:74;;16973:93;17062:3;16973:93;:::i;:::-;17091:2;17086:3;17082:12;17075:19;;16734:366;;;:::o;17106:::-;17248:3;17269:67;17333:2;17328:3;17269:67;:::i;:::-;17262:74;;17345:93;17434:3;17345:93;:::i;:::-;17463:2;17458:3;17454:12;17447:19;;17106:366;;;:::o;17478:::-;17620:3;17641:67;17705:2;17700:3;17641:67;:::i;:::-;17634:74;;17717:93;17806:3;17717:93;:::i;:::-;17835:2;17830:3;17826:12;17819:19;;17478:366;;;:::o;17850:::-;17992:3;18013:67;18077:2;18072:3;18013:67;:::i;:::-;18006:74;;18089:93;18178:3;18089:93;:::i;:::-;18207:2;18202:3;18198:12;18191:19;;17850:366;;;:::o;18222:::-;18364:3;18385:67;18449:2;18444:3;18385:67;:::i;:::-;18378:74;;18461:93;18550:3;18461:93;:::i;:::-;18579:2;18574:3;18570:12;18563:19;;18222:366;;;:::o;18594:::-;18736:3;18757:67;18821:2;18816:3;18757:67;:::i;:::-;18750:74;;18833:93;18922:3;18833:93;:::i;:::-;18951:2;18946:3;18942:12;18935:19;;18594:366;;;:::o;18966:::-;19108:3;19129:67;19193:2;19188:3;19129:67;:::i;:::-;19122:74;;19205:93;19294:3;19205:93;:::i;:::-;19323:2;19318:3;19314:12;19307:19;;18966:366;;;:::o;19338:::-;19480:3;19501:67;19565:2;19560:3;19501:67;:::i;:::-;19494:74;;19577:93;19666:3;19577:93;:::i;:::-;19695:2;19690:3;19686:12;19679:19;;19338:366;;;:::o;19710:::-;19852:3;19873:67;19937:2;19932:3;19873:67;:::i;:::-;19866:74;;19949:93;20038:3;19949:93;:::i;:::-;20067:2;20062:3;20058:12;20051:19;;19710:366;;;:::o;20082:::-;20224:3;20245:67;20309:2;20304:3;20245:67;:::i;:::-;20238:74;;20321:93;20410:3;20321:93;:::i;:::-;20439:2;20434:3;20430:12;20423:19;;20082:366;;;:::o;20454:::-;20596:3;20617:67;20681:2;20676:3;20617:67;:::i;:::-;20610:74;;20693:93;20782:3;20693:93;:::i;:::-;20811:2;20806:3;20802:12;20795:19;;20454:366;;;:::o;20826:::-;20968:3;20989:67;21053:2;21048:3;20989:67;:::i;:::-;20982:74;;21065:93;21154:3;21065:93;:::i;:::-;21183:2;21178:3;21174:12;21167:19;;20826:366;;;:::o;21198:::-;21340:3;21361:67;21425:2;21420:3;21361:67;:::i;:::-;21354:74;;21437:93;21526:3;21437:93;:::i;:::-;21555:2;21550:3;21546:12;21539:19;;21198:366;;;:::o;21570:::-;21712:3;21733:67;21797:2;21792:3;21733:67;:::i;:::-;21726:74;;21809:93;21898:3;21809:93;:::i;:::-;21927:2;21922:3;21918:12;21911:19;;21570:366;;;:::o;21942:::-;22084:3;22105:67;22169:2;22164:3;22105:67;:::i;:::-;22098:74;;22181:93;22270:3;22181:93;:::i;:::-;22299:2;22294:3;22290:12;22283:19;;21942:366;;;:::o;22314:::-;22456:3;22477:67;22541:2;22536:3;22477:67;:::i;:::-;22470:74;;22553:93;22642:3;22553:93;:::i;:::-;22671:2;22666:3;22662:12;22655:19;;22314:366;;;:::o;22686:::-;22828:3;22849:67;22913:2;22908:3;22849:67;:::i;:::-;22842:74;;22925:93;23014:3;22925:93;:::i;:::-;23043:2;23038:3;23034:12;23027:19;;22686:366;;;:::o;23058:::-;23200:3;23221:67;23285:2;23280:3;23221:67;:::i;:::-;23214:74;;23297:93;23386:3;23297:93;:::i;:::-;23415:2;23410:3;23406:12;23399:19;;23058:366;;;:::o;23430:365::-;23572:3;23593:66;23657:1;23652:3;23593:66;:::i;:::-;23586:73;;23668:93;23757:3;23668:93;:::i;:::-;23786:2;23781:3;23777:12;23770:19;;23430:365;;;:::o;23801:366::-;23943:3;23964:67;24028:2;24023:3;23964:67;:::i;:::-;23957:74;;24040:93;24129:3;24040:93;:::i;:::-;24158:2;24153:3;24149:12;24142:19;;23801:366;;;:::o;24173:::-;24315:3;24336:67;24400:2;24395:3;24336:67;:::i;:::-;24329:74;;24412:93;24501:3;24412:93;:::i;:::-;24530:2;24525:3;24521:12;24514:19;;24173:366;;;:::o;24545:::-;24687:3;24708:67;24772:2;24767:3;24708:67;:::i;:::-;24701:74;;24784:93;24873:3;24784:93;:::i;:::-;24902:2;24897:3;24893:12;24886:19;;24545:366;;;:::o;24917:398::-;25076:3;25097:83;25178:1;25173:3;25097:83;:::i;:::-;25090:90;;25189:93;25278:3;25189:93;:::i;:::-;25307:1;25302:3;25298:11;25291:18;;24917:398;;;:::o;25321:366::-;25463:3;25484:67;25548:2;25543:3;25484:67;:::i;:::-;25477:74;;25560:93;25649:3;25560:93;:::i;:::-;25678:2;25673:3;25669:12;25662:19;;25321:366;;;:::o;25693:::-;25835:3;25856:67;25920:2;25915:3;25856:67;:::i;:::-;25849:74;;25932:93;26021:3;25932:93;:::i;:::-;26050:2;26045:3;26041:12;26034:19;;25693:366;;;:::o;26065:::-;26207:3;26228:67;26292:2;26287:3;26228:67;:::i;:::-;26221:74;;26304:93;26393:3;26304:93;:::i;:::-;26422:2;26417:3;26413:12;26406:19;;26065:366;;;:::o;26437:108::-;26514:24;26532:5;26514:24;:::i;:::-;26509:3;26502:37;26437:108;;:::o;26551:118::-;26638:24;26656:5;26638:24;:::i;:::-;26633:3;26626:37;26551:118;;:::o;26675:256::-;26787:3;26802:75;26873:3;26864:6;26802:75;:::i;:::-;26902:2;26897:3;26893:12;26886:19;;26922:3;26915:10;;26675:256;;;;:::o;26937:397::-;27077:3;27092:75;27163:3;27154:6;27092:75;:::i;:::-;27192:2;27187:3;27183:12;27176:19;;27205:75;27276:3;27267:6;27205:75;:::i;:::-;27305:2;27300:3;27296:12;27289:19;;27325:3;27318:10;;26937:397;;;;;:::o;27340:589::-;27565:3;27587:95;27678:3;27669:6;27587:95;:::i;:::-;27580:102;;27699:95;27790:3;27781:6;27699:95;:::i;:::-;27692:102;;27811:92;27899:3;27890:6;27811:92;:::i;:::-;27804:99;;27920:3;27913:10;;27340:589;;;;;;:::o;27935:379::-;28119:3;28141:147;28284:3;28141:147;:::i;:::-;28134:154;;28305:3;28298:10;;27935:379;;;:::o;28320:222::-;28413:4;28451:2;28440:9;28436:18;28428:26;;28464:71;28532:1;28521:9;28517:17;28508:6;28464:71;:::i;:::-;28320:222;;;;:::o;28548:640::-;28743:4;28781:3;28770:9;28766:19;28758:27;;28795:71;28863:1;28852:9;28848:17;28839:6;28795:71;:::i;:::-;28876:72;28944:2;28933:9;28929:18;28920:6;28876:72;:::i;:::-;28958;29026:2;29015:9;29011:18;29002:6;28958:72;:::i;:::-;29077:9;29071:4;29067:20;29062:2;29051:9;29047:18;29040:48;29105:76;29176:4;29167:6;29105:76;:::i;:::-;29097:84;;28548:640;;;;;;;:::o;29194:373::-;29337:4;29375:2;29364:9;29360:18;29352:26;;29424:9;29418:4;29414:20;29410:1;29399:9;29395:17;29388:47;29452:108;29555:4;29546:6;29452:108;:::i;:::-;29444:116;;29194:373;;;;:::o;29573:210::-;29660:4;29698:2;29687:9;29683:18;29675:26;;29711:65;29773:1;29762:9;29758:17;29749:6;29711:65;:::i;:::-;29573:210;;;;:::o;29789:222::-;29882:4;29920:2;29909:9;29905:18;29897:26;;29933:71;30001:1;29990:9;29986:17;29977:6;29933:71;:::i;:::-;29789:222;;;;:::o;30017:246::-;30122:4;30160:2;30149:9;30145:18;30137:26;;30173:83;30253:1;30242:9;30238:17;30229:6;30173:83;:::i;:::-;30017:246;;;;:::o;30269:313::-;30382:4;30420:2;30409:9;30405:18;30397:26;;30469:9;30463:4;30459:20;30455:1;30444:9;30440:17;30433:47;30497:78;30570:4;30561:6;30497:78;:::i;:::-;30489:86;;30269:313;;;;:::o;30588:419::-;30754:4;30792:2;30781:9;30777:18;30769:26;;30841:9;30835:4;30831:20;30827:1;30816:9;30812:17;30805:47;30869:131;30995:4;30869:131;:::i;:::-;30861:139;;30588:419;;;:::o;31013:::-;31179:4;31217:2;31206:9;31202:18;31194:26;;31266:9;31260:4;31256:20;31252:1;31241:9;31237:17;31230:47;31294:131;31420:4;31294:131;:::i;:::-;31286:139;;31013:419;;;:::o;31438:::-;31604:4;31642:2;31631:9;31627:18;31619:26;;31691:9;31685:4;31681:20;31677:1;31666:9;31662:17;31655:47;31719:131;31845:4;31719:131;:::i;:::-;31711:139;;31438:419;;;:::o;31863:::-;32029:4;32067:2;32056:9;32052:18;32044:26;;32116:9;32110:4;32106:20;32102:1;32091:9;32087:17;32080:47;32144:131;32270:4;32144:131;:::i;:::-;32136:139;;31863:419;;;:::o;32288:::-;32454:4;32492:2;32481:9;32477:18;32469:26;;32541:9;32535:4;32531:20;32527:1;32516:9;32512:17;32505:47;32569:131;32695:4;32569:131;:::i;:::-;32561:139;;32288:419;;;:::o;32713:::-;32879:4;32917:2;32906:9;32902:18;32894:26;;32966:9;32960:4;32956:20;32952:1;32941:9;32937:17;32930:47;32994:131;33120:4;32994:131;:::i;:::-;32986:139;;32713:419;;;:::o;33138:::-;33304:4;33342:2;33331:9;33327:18;33319:26;;33391:9;33385:4;33381:20;33377:1;33366:9;33362:17;33355:47;33419:131;33545:4;33419:131;:::i;:::-;33411:139;;33138:419;;;:::o;33563:::-;33729:4;33767:2;33756:9;33752:18;33744:26;;33816:9;33810:4;33806:20;33802:1;33791:9;33787:17;33780:47;33844:131;33970:4;33844:131;:::i;:::-;33836:139;;33563:419;;;:::o;33988:::-;34154:4;34192:2;34181:9;34177:18;34169:26;;34241:9;34235:4;34231:20;34227:1;34216:9;34212:17;34205:47;34269:131;34395:4;34269:131;:::i;:::-;34261:139;;33988:419;;;:::o;34413:::-;34579:4;34617:2;34606:9;34602:18;34594:26;;34666:9;34660:4;34656:20;34652:1;34641:9;34637:17;34630:47;34694:131;34820:4;34694:131;:::i;:::-;34686:139;;34413:419;;;:::o;34838:::-;35004:4;35042:2;35031:9;35027:18;35019:26;;35091:9;35085:4;35081:20;35077:1;35066:9;35062:17;35055:47;35119:131;35245:4;35119:131;:::i;:::-;35111:139;;34838:419;;;:::o;35263:::-;35429:4;35467:2;35456:9;35452:18;35444:26;;35516:9;35510:4;35506:20;35502:1;35491:9;35487:17;35480:47;35544:131;35670:4;35544:131;:::i;:::-;35536:139;;35263:419;;;:::o;35688:::-;35854:4;35892:2;35881:9;35877:18;35869:26;;35941:9;35935:4;35931:20;35927:1;35916:9;35912:17;35905:47;35969:131;36095:4;35969:131;:::i;:::-;35961:139;;35688:419;;;:::o;36113:::-;36279:4;36317:2;36306:9;36302:18;36294:26;;36366:9;36360:4;36356:20;36352:1;36341:9;36337:17;36330:47;36394:131;36520:4;36394:131;:::i;:::-;36386:139;;36113:419;;;:::o;36538:::-;36704:4;36742:2;36731:9;36727:18;36719:26;;36791:9;36785:4;36781:20;36777:1;36766:9;36762:17;36755:47;36819:131;36945:4;36819:131;:::i;:::-;36811:139;;36538:419;;;:::o;36963:::-;37129:4;37167:2;37156:9;37152:18;37144:26;;37216:9;37210:4;37206:20;37202:1;37191:9;37187:17;37180:47;37244:131;37370:4;37244:131;:::i;:::-;37236:139;;36963:419;;;:::o;37388:::-;37554:4;37592:2;37581:9;37577:18;37569:26;;37641:9;37635:4;37631:20;37627:1;37616:9;37612:17;37605:47;37669:131;37795:4;37669:131;:::i;:::-;37661:139;;37388:419;;;:::o;37813:::-;37979:4;38017:2;38006:9;38002:18;37994:26;;38066:9;38060:4;38056:20;38052:1;38041:9;38037:17;38030:47;38094:131;38220:4;38094:131;:::i;:::-;38086:139;;37813:419;;;:::o;38238:::-;38404:4;38442:2;38431:9;38427:18;38419:26;;38491:9;38485:4;38481:20;38477:1;38466:9;38462:17;38455:47;38519:131;38645:4;38519:131;:::i;:::-;38511:139;;38238:419;;;:::o;38663:::-;38829:4;38867:2;38856:9;38852:18;38844:26;;38916:9;38910:4;38906:20;38902:1;38891:9;38887:17;38880:47;38944:131;39070:4;38944:131;:::i;:::-;38936:139;;38663:419;;;:::o;39088:::-;39254:4;39292:2;39281:9;39277:18;39269:26;;39341:9;39335:4;39331:20;39327:1;39316:9;39312:17;39305:47;39369:131;39495:4;39369:131;:::i;:::-;39361:139;;39088:419;;;:::o;39513:::-;39679:4;39717:2;39706:9;39702:18;39694:26;;39766:9;39760:4;39756:20;39752:1;39741:9;39737:17;39730:47;39794:131;39920:4;39794:131;:::i;:::-;39786:139;;39513:419;;;:::o;39938:::-;40104:4;40142:2;40131:9;40127:18;40119:26;;40191:9;40185:4;40181:20;40177:1;40166:9;40162:17;40155:47;40219:131;40345:4;40219:131;:::i;:::-;40211:139;;39938:419;;;:::o;40363:::-;40529:4;40567:2;40556:9;40552:18;40544:26;;40616:9;40610:4;40606:20;40602:1;40591:9;40587:17;40580:47;40644:131;40770:4;40644:131;:::i;:::-;40636:139;;40363:419;;;:::o;40788:::-;40954:4;40992:2;40981:9;40977:18;40969:26;;41041:9;41035:4;41031:20;41027:1;41016:9;41012:17;41005:47;41069:131;41195:4;41069:131;:::i;:::-;41061:139;;40788:419;;;:::o;41213:::-;41379:4;41417:2;41406:9;41402:18;41394:26;;41466:9;41460:4;41456:20;41452:1;41441:9;41437:17;41430:47;41494:131;41620:4;41494:131;:::i;:::-;41486:139;;41213:419;;;:::o;41638:::-;41804:4;41842:2;41831:9;41827:18;41819:26;;41891:9;41885:4;41881:20;41877:1;41866:9;41862:17;41855:47;41919:131;42045:4;41919:131;:::i;:::-;41911:139;;41638:419;;;:::o;42063:::-;42229:4;42267:2;42256:9;42252:18;42244:26;;42316:9;42310:4;42306:20;42302:1;42291:9;42287:17;42280:47;42344:131;42470:4;42344:131;:::i;:::-;42336:139;;42063:419;;;:::o;42488:::-;42654:4;42692:2;42681:9;42677:18;42669:26;;42741:9;42735:4;42731:20;42727:1;42716:9;42712:17;42705:47;42769:131;42895:4;42769:131;:::i;:::-;42761:139;;42488:419;;;:::o;42913:222::-;43006:4;43044:2;43033:9;43029:18;43021:26;;43057:71;43125:1;43114:9;43110:17;43101:6;43057:71;:::i;:::-;42913:222;;;;:::o;43141:129::-;43175:6;43202:20;;:::i;:::-;43192:30;;43231:33;43259:4;43251:6;43231:33;:::i;:::-;43141:129;;;:::o;43276:75::-;43309:6;43342:2;43336:9;43326:19;;43276:75;:::o;43357:311::-;43434:4;43524:18;43516:6;43513:30;43510:56;;;43546:18;;:::i;:::-;43510:56;43596:4;43588:6;43584:17;43576:25;;43656:4;43650;43646:15;43638:23;;43357:311;;;:::o;43674:307::-;43735:4;43825:18;43817:6;43814:30;43811:56;;;43847:18;;:::i;:::-;43811:56;43885:29;43907:6;43885:29;:::i;:::-;43877:37;;43969:4;43963;43959:15;43951:23;;43674:307;;;:::o;43987:308::-;44049:4;44139:18;44131:6;44128:30;44125:56;;;44161:18;;:::i;:::-;44125:56;44199:29;44221:6;44199:29;:::i;:::-;44191:37;;44283:4;44277;44273:15;44265:23;;43987:308;;;:::o;44301:132::-;44368:4;44391:3;44383:11;;44421:4;44416:3;44412:14;44404:22;;44301:132;;;:::o;44439:141::-;44488:4;44511:3;44503:11;;44534:3;44531:1;44524:14;44568:4;44565:1;44555:18;44547:26;;44439:141;;;:::o;44586:114::-;44653:6;44687:5;44681:12;44671:22;;44586:114;;;:::o;44706:98::-;44757:6;44791:5;44785:12;44775:22;;44706:98;;;:::o;44810:99::-;44862:6;44896:5;44890:12;44880:22;;44810:99;;;:::o;44915:113::-;44985:4;45017;45012:3;45008:14;45000:22;;44915:113;;;:::o;45034:184::-;45133:11;45167:6;45162:3;45155:19;45207:4;45202:3;45198:14;45183:29;;45034:184;;;;:::o;45224:168::-;45307:11;45341:6;45336:3;45329:19;45381:4;45376:3;45372:14;45357:29;;45224:168;;;;:::o;45398:147::-;45499:11;45536:3;45521:18;;45398:147;;;;:::o;45551:169::-;45635:11;45669:6;45664:3;45657:19;45709:4;45704:3;45700:14;45685:29;;45551:169;;;;:::o;45726:148::-;45828:11;45865:3;45850:18;;45726:148;;;;:::o;45880:305::-;45920:3;45939:20;45957:1;45939:20;:::i;:::-;45934:25;;45973:20;45991:1;45973:20;:::i;:::-;45968:25;;46127:1;46059:66;46055:74;46052:1;46049:81;46046:107;;;46133:18;;:::i;:::-;46046:107;46177:1;46174;46170:9;46163:16;;45880:305;;;;:::o;46191:185::-;46231:1;46248:20;46266:1;46248:20;:::i;:::-;46243:25;;46282:20;46300:1;46282:20;:::i;:::-;46277:25;;46321:1;46311:35;;46326:18;;:::i;:::-;46311:35;46368:1;46365;46361:9;46356:14;;46191:185;;;;:::o;46382:348::-;46422:7;46445:20;46463:1;46445:20;:::i;:::-;46440:25;;46479:20;46497:1;46479:20;:::i;:::-;46474:25;;46667:1;46599:66;46595:74;46592:1;46589:81;46584:1;46577:9;46570:17;46566:105;46563:131;;;46674:18;;:::i;:::-;46563:131;46722:1;46719;46715:9;46704:20;;46382:348;;;;:::o;46736:191::-;46776:4;46796:20;46814:1;46796:20;:::i;:::-;46791:25;;46830:20;46848:1;46830:20;:::i;:::-;46825:25;;46869:1;46866;46863:8;46860:34;;;46874:18;;:::i;:::-;46860:34;46919:1;46916;46912:9;46904:17;;46736:191;;;;:::o;46933:96::-;46970:7;46999:24;47017:5;46999:24;:::i;:::-;46988:35;;46933:96;;;:::o;47035:90::-;47069:7;47112:5;47105:13;47098:21;47087:32;;47035:90;;;:::o;47131:77::-;47168:7;47197:5;47186:16;;47131:77;;;:::o;47214:149::-;47250:7;47290:66;47283:5;47279:78;47268:89;;47214:149;;;:::o;47369:139::-;47420:7;47449:5;47438:16;;47455:47;47496:5;47455:47;:::i;:::-;47369:139;;;:::o;47514:126::-;47551:7;47591:42;47584:5;47580:54;47569:65;;47514:126;;;:::o;47646:77::-;47683:7;47712:5;47701:16;;47646:77;;;:::o;47729:139::-;47791:9;47824:38;47856:5;47824:38;:::i;:::-;47811:51;;47729:139;;;:::o;47874:154::-;47958:6;47953:3;47948;47935:30;48020:1;48011:6;48006:3;48002:16;47995:27;47874:154;;;:::o;48034:307::-;48102:1;48112:113;48126:6;48123:1;48120:13;48112:113;;;48211:1;48206:3;48202:11;48196:18;48192:1;48187:3;48183:11;48176:39;48148:2;48145:1;48141:10;48136:15;;48112:113;;;48243:6;48240:1;48237:13;48234:101;;;48323:1;48314:6;48309:3;48305:16;48298:27;48234:101;48083:258;48034:307;;;:::o;48347:320::-;48391:6;48428:1;48422:4;48418:12;48408:22;;48475:1;48469:4;48465:12;48496:18;48486:81;;48552:4;48544:6;48540:17;48530:27;;48486:81;48614:2;48606:6;48603:14;48583:18;48580:38;48577:84;;;48633:18;;:::i;:::-;48577:84;48398:269;48347:320;;;:::o;48673:281::-;48756:27;48778:4;48756:27;:::i;:::-;48748:6;48744:40;48886:6;48874:10;48871:22;48850:18;48838:10;48835:34;48832:62;48829:88;;;48897:18;;:::i;:::-;48829:88;48937:10;48933:2;48926:22;48716:238;48673:281;;:::o;48960:233::-;48999:3;49022:24;49040:5;49022:24;:::i;:::-;49013:33;;49068:66;49061:5;49058:77;49055:103;;;49138:18;;:::i;:::-;49055:103;49185:1;49178:5;49174:13;49167:20;;48960:233;;;:::o;49199:100::-;49238:7;49267:26;49287:5;49267:26;:::i;:::-;49256:37;;49199:100;;;:::o;49305:79::-;49344:7;49373:5;49362:16;;49305:79;;;:::o;49390:94::-;49429:7;49458:20;49472:5;49458:20;:::i;:::-;49447:31;;49390:94;;;:::o;49490:176::-;49522:1;49539:20;49557:1;49539:20;:::i;:::-;49534:25;;49573:20;49591:1;49573:20;:::i;:::-;49568:25;;49612:1;49602:35;;49617:18;;:::i;:::-;49602:35;49658:1;49655;49651:9;49646:14;;49490:176;;;;:::o;49672:180::-;49720:77;49717:1;49710:88;49817:4;49814:1;49807:15;49841:4;49838:1;49831:15;49858:180;49906:77;49903:1;49896:88;50003:4;50000:1;49993:15;50027:4;50024:1;50017:15;50044:180;50092:77;50089:1;50082:88;50189:4;50186:1;50179:15;50213:4;50210:1;50203:15;50230:180;50278:77;50275:1;50268:88;50375:4;50372:1;50365:15;50399:4;50396:1;50389:15;50416:180;50464:77;50461:1;50454:88;50561:4;50558:1;50551:15;50585:4;50582:1;50575:15;50602:180;50650:77;50647:1;50640:88;50747:4;50744:1;50737:15;50771:4;50768:1;50761:15;50788:180;50836:77;50833:1;50826:88;50933:4;50930:1;50923:15;50957:4;50954:1;50947:15;50974:117;51083:1;51080;51073:12;51097:117;51206:1;51203;51196:12;51220:117;51329:1;51326;51319:12;51343:117;51452:1;51449;51442:12;51466:117;51575:1;51572;51565:12;51589:117;51698:1;51695;51688:12;51712:102;51753:6;51804:2;51800:7;51795:2;51788:5;51784:14;51780:28;51770:38;;51712:102;;;:::o;51820:94::-;51853:8;51901:5;51897:2;51893:14;51872:35;;51820:94;;;:::o;51920:164::-;52060:16;52056:1;52048:6;52044:14;52037:40;51920:164;:::o;52090:162::-;52230:14;52226:1;52218:6;52214:14;52207:38;52090:162;:::o;52258:230::-;52398:34;52394:1;52386:6;52382:14;52375:58;52467:13;52462:2;52454:6;52450:15;52443:38;52258:230;:::o;52494:237::-;52634:34;52630:1;52622:6;52618:14;52611:58;52703:20;52698:2;52690:6;52686:15;52679:45;52494:237;:::o;52737:164::-;52877:16;52873:1;52865:6;52861:14;52854:40;52737:164;:::o;52907:171::-;53047:23;53043:1;53035:6;53031:14;53024:47;52907:171;:::o;53084:225::-;53224:34;53220:1;53212:6;53208:14;53201:58;53293:8;53288:2;53280:6;53276:15;53269:33;53084:225;:::o;53315:165::-;53455:17;53451:1;53443:6;53439:14;53432:41;53315:165;:::o;53486:178::-;53626:30;53622:1;53614:6;53610:14;53603:54;53486:178;:::o;53670:165::-;53810:17;53806:1;53798:6;53794:14;53787:41;53670:165;:::o;53841:223::-;53981:34;53977:1;53969:6;53965:14;53958:58;54050:6;54045:2;54037:6;54033:15;54026:31;53841:223;:::o;54070:175::-;54210:27;54206:1;54198:6;54194:14;54187:51;54070:175;:::o;54251:231::-;54391:34;54387:1;54379:6;54375:14;54368:58;54460:14;54455:2;54447:6;54443:15;54436:39;54251:231;:::o;54488:163::-;54628:15;54624:1;54616:6;54612:14;54605:39;54488:163;:::o;54657:167::-;54797:19;54793:1;54785:6;54781:14;54774:43;54657:167;:::o;54830:243::-;54970:34;54966:1;54958:6;54954:14;54947:58;55039:26;55034:2;55026:6;55022:15;55015:51;54830:243;:::o;55079:164::-;55219:16;55215:1;55207:6;55203:14;55196:40;55079:164;:::o;55249:229::-;55389:34;55385:1;55377:6;55373:14;55366:58;55458:12;55453:2;55445:6;55441:15;55434:37;55249:229;:::o;55484:228::-;55624:34;55620:1;55612:6;55608:14;55601:58;55693:11;55688:2;55680:6;55676:15;55669:36;55484:228;:::o;55718:182::-;55858:34;55854:1;55846:6;55842:14;55835:58;55718:182;:::o;55906:160::-;56046:12;56042:1;56034:6;56030:14;56023:36;55906:160;:::o;56072:231::-;56212:34;56208:1;56200:6;56196:14;56189:58;56281:14;56276:2;56268:6;56264:15;56257:39;56072:231;:::o;56309:158::-;56449:10;56445:1;56437:6;56433:14;56426:34;56309:158;:::o;56473:182::-;56613:34;56609:1;56601:6;56597:14;56590:58;56473:182;:::o;56661:228::-;56801:34;56797:1;56789:6;56785:14;56778:58;56870:11;56865:2;56857:6;56853:15;56846:36;56661:228;:::o;56895:220::-;57035:34;57031:1;57023:6;57019:14;57012:58;57104:3;57099:2;57091:6;57087:15;57080:28;56895:220;:::o;57121:114::-;;:::o;57241:236::-;57381:34;57377:1;57369:6;57365:14;57358:58;57450:19;57445:2;57437:6;57433:15;57426:44;57241:236;:::o;57483:162::-;57623:14;57619:1;57611:6;57607:14;57600:38;57483:162;:::o;57651:231::-;57791:34;57787:1;57779:6;57775:14;57768:58;57860:14;57855:2;57847:6;57843:15;57836:39;57651:231;:::o;57888:119::-;57975:1;57968:5;57965:12;57955:46;;57981:18;;:::i;:::-;57955:46;57888:119;:::o;58013:122::-;58086:24;58104:5;58086:24;:::i;:::-;58079:5;58076:35;58066:63;;58125:1;58122;58115:12;58066:63;58013:122;:::o;58141:116::-;58211:21;58226:5;58211:21;:::i;:::-;58204:5;58201:32;58191:60;;58247:1;58244;58237:12;58191:60;58141:116;:::o;58263:122::-;58336:24;58354:5;58336:24;:::i;:::-;58329:5;58326:35;58316:63;;58375:1;58372;58365:12;58316:63;58263:122;:::o;58391:120::-;58463:23;58480:5;58463:23;:::i;:::-;58456:5;58453:34;58443:62;;58501:1;58498;58491:12;58443:62;58391:120;:::o;58517:113::-;58604:1;58597:5;58594:12;58584:40;;58620:1;58617;58610:12;58584:40;58517:113;:::o;58636:122::-;58709:24;58727:5;58709:24;:::i;:::-;58702:5;58699:35;58689:63;;58748:1;58745;58738:12;58689:63;58636:122;:::o
Swarm Source
ipfs://366c4736dabc2c91f92749af8387301c44f2fecfb52b9ede4cff5457a3f6e481
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,377.47 | 3 | $10,132.41 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.