Overview
AVAX Balance
AVAX Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 179 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 53282654 | 154 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 53282650 | 154 days ago | IN | 0 AVAX | 0.00116922 | ||||
Set Approval For... | 46694355 | 313 days ago | IN | 0 AVAX | 0.00123715 | ||||
Set Approval For... | 41430343 | 439 days ago | IN | 0 AVAX | 0.00128614 | ||||
Set Approval For... | 40456939 | 462 days ago | IN | 0 AVAX | 0.00116922 | ||||
Set Approval For... | 40363405 | 464 days ago | IN | 0 AVAX | 0.00078591 | ||||
Set Approval For... | 35650381 | 575 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 35259956 | 584 days ago | IN | 0 AVAX | 0.00116922 | ||||
Set Approval For... | 33942223 | 617 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 33942190 | 617 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 33730355 | 622 days ago | IN | 0 AVAX | 0.00116922 | ||||
Set Approval For... | 32003482 | 662 days ago | IN | 0 AVAX | 0.00128614 | ||||
Set Approval For... | 30502074 | 698 days ago | IN | 0 AVAX | 0.00069859 | ||||
Set Approval For... | 30502061 | 698 days ago | IN | 0 AVAX | 0.00121599 | ||||
Set Approval For... | 29265777 | 727 days ago | IN | 0 AVAX | 0.00164315 | ||||
Set Approval For... | 28880851 | 736 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 28293612 | 750 days ago | IN | 0 AVAX | 0.00116922 | ||||
Set Approval For... | 28280615 | 750 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 28280597 | 750 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 28280569 | 750 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 28274344 | 750 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 27750984 | 763 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 27536584 | 768 days ago | IN | 0 AVAX | 0.00116922 | ||||
Set Approval For... | 27176917 | 776 days ago | IN | 0 AVAX | 0.00067172 | ||||
Set Approval For... | 27173762 | 776 days ago | IN | 0 AVAX | 0.00067172 |
Loading...
Loading
Contract Name:
MoonEgg
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2022-06-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @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); } } } } /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(_msgSender() != operator, "ERC1155: setting approval status for self"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`. * * Emits a {TransferSingle} event. * * Requirements: * * - `account` cannot be the zero address. * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address account, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(account != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][account] += amount; emit TransferSingle(operator, address(0), account, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `account` * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens of token type `id`. */ function _burn( address account, uint256 id, uint256 amount ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } emit TransferSingle(operator, account, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address account, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(account != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, account, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 accountBalance = _balances[id][account]; require(accountBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][account] = accountBalance - amount; } } emit TransferBatch(operator, account, address(0), ids, amounts); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } contract MoonEgg is ERC1155, Ownable { using Strings for string; using SafeMath for uint256; uint256 private _currentTokenID = 0; mapping (address => bool) public allowedMinters; mapping (uint256 => uint256) public tokenSupply; mapping (uint256 => bool) public tokenExists; // Contract name string public name; // Contract symbol string public symbol; constructor( string memory _baseURI ) ERC1155(_baseURI) { name = "MoonDoge Egg"; symbol = "MEGG"; } function uri( uint256 _id ) public view override returns (string memory) { return string(abi.encodePacked( ERC1155.uri(0), Strings.toString(_id) )); } function tokenURI( uint256 tokenID ) public view returns (string memory) { return uri(tokenID); } /** * @dev Returns the total quantity for a token ID * @param _id uint256 ID of the token to query * @return amount of token in existence */ function totalSupply( uint256 _id ) public view returns (uint256) { return tokenSupply[_id]; } /** * @dev Will update the base URL of token's URI * @param _newURI New base URL of token's URI */ function setURI( string memory _newURI ) public onlyOwner { _setURI(_newURI); } function setAllowedMinter( address _minter, bool _newState ) public onlyOwner { allowedMinters[_minter] = _newState; } /** * @dev Creates a new token type and assigns _initialSupply to an address * NOTE: remove onlyOwner if you want third parties to create new tokens on your contract (which may change your IDs) * @param _initialOwner address of the first owner of the token * @param _data Data to pass if receiver is contract * @return The newly created token ID */ function create( address _initialOwner, bytes calldata _data ) external onlyOwner returns (uint256) { uint256 _id = _getNextTokenID(); _incrementTokenTypeId(); _mint(_initialOwner, _id, 0, _data); tokenExists[_id] = true; return _id; } /** * @dev Mints some amount of tokens to an address * @param _to Address of the future owner of the token * @param _id Token ID to mint * @param _quantity Amount of tokens to mint * @param _data Data to pass if receiver is contract */ function mint( address _to, uint256 _id, uint256 _quantity, bytes memory _data ) public { require(allowedMinters[msg.sender] == true, "You are not an allowed minter"); _mint(_to, _id, _quantity, _data); tokenSupply[_id] = tokenSupply[_id].add(_quantity); } /** * @dev Mint tokens for each id in _ids * @param _to The address to mint tokens to * @param _ids Array of ids to mint * @param _quantities Array of amounts of tokens to mint per id * @param _data Data to pass if receiver is contract */ function batchMint( address _to, uint256[] memory _ids, uint256[] memory _quantities, bytes memory _data ) public { require(allowedMinters[msg.sender] == true, "You are not an allowed minter"); for (uint256 i = 0; i < _ids.length; i++) { uint256 _id = _ids[i]; uint256 quantity = _quantities[i]; tokenSupply[_id] = tokenSupply[_id].add(quantity); } _mintBatch(_to, _ids, _quantities, _data); } /** * @dev calculates the next token ID based on value of _currentTokenID * @return uint256 for the next token ID */ function _getNextTokenID() private view returns (uint256) { return _currentTokenID.add(1); } /** * @dev increments the value of _currentTokenID */ function _incrementTokenTypeId() private { _currentTokenID++; } function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedMinters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_quantities","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setAllowedMinter","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":"_newURI","type":"string"}],"name":"setURI","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":"","type":"uint256"}],"name":"tokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","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":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006004553480156200001657600080fd5b5060405162004b4e38038062004b4e83398181016040528101906200003c91906200032a565b806200004e816200011260201b60201c565b506200006f620000636200012e60201b60201c565b6200013660201b60201c565b6040518060400160405280600c81526020017f4d6f6f6e446f676520456767000000000000000000000000000000000000000081525060089080519060200190620000bc929190620001fc565b506040518060400160405280600481526020017f4d45474700000000000000000000000000000000000000000000000000000000815250600990805190602001906200010a929190620001fc565b5050620004ff565b80600290805190602001906200012a929190620001fc565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020a9062000410565b90600052602060002090601f0160209004810192826200022e57600085556200027a565b82601f106200024957805160ff19168380011785556200027a565b828001600101855582156200027a579182015b82811115620002795782518255916020019190600101906200025c565b5b5090506200028991906200028d565b5090565b5b80821115620002a85760008160009055506001016200028e565b5090565b6000620002c3620002bd84620003a4565b6200037b565b905082815260208101848484011115620002e257620002e1620004df565b5b620002ef848285620003da565b509392505050565b600082601f8301126200030f576200030e620004da565b5b815162000321848260208601620002ac565b91505092915050565b600060208284031215620003435762000342620004e9565b5b600082015167ffffffffffffffff811115620003645762000363620004e4565b5b6200037284828501620002f7565b91505092915050565b6000620003876200039a565b905062000395828262000446565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c257620003c1620004ab565b5b620003cd82620004ee565b9050602081019050919050565b60005b83811015620003fa578082015181840152602081019050620003dd565b838111156200040a576000848401525b50505050565b600060028204905060018216806200042957607f821691505b6020821081141562000440576200043f6200047c565b5b50919050565b6200045182620004ee565b810181811067ffffffffffffffff82111715620004735762000472620004ab565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61463f806200050f6000396000f3fe608060405234801561001057600080fd5b50600436106101715760003560e01c8063715018a6116100de578063b48ab8b611610097578063e985e9c511610071578063e985e9c51461047e578063f242432a146104ae578063f2fde38b146104ca578063f5298aca146104e657610171565b8063b48ab8b614610402578063bd85b0391461041e578063c87b56dd1461044e57610171565b8063715018a614610354578063731133e91461035e5780638da5cb5b1461037a57806395d89b4114610398578063a22cb465146103b6578063a3f697ba146103d257610171565b80632693ebf2116101305780632693ebf2146102705780632eb2c2d6146102a0578063423afa66146102bc5780634e1273f4146102ec5780636af9c2051461031c5780636b20c4541461033857610171565b8062923f9e14610176578062fdd58e146101a657806301ffc9a7146101d657806302fe53051461020657806306fdde03146102225780630e89341c14610240575b600080fd5b610190600480360381019061018b91906133f4565b610502565b60405161019d9190613900565b60405180910390f35b6101c060048036038101906101bb91906131c3565b610522565b6040516101cd9190613b3d565b60405180910390f35b6101f060048036038101906101eb9190613351565b6105eb565b6040516101fd9190613900565b60405180910390f35b610220600480360381019061021b91906133ab565b6106cd565b005b61022a610755565b604051610237919061391b565b60405180910390f35b61025a600480360381019061025591906133f4565b6107e3565b604051610267919061391b565b60405180910390f35b61028a600480360381019061028591906133f4565b61081f565b6040516102979190613b3d565b60405180910390f35b6102ba60048036038101906102b59190612e77565b610837565b005b6102d660048036038101906102d19190612e0a565b6108d8565b6040516102e39190613900565b60405180910390f35b610306600480360381019061030191906132d9565b6108f8565b60405161031391906138a7565b60405180910390f35b61033660048036038101906103319190613123565b610a11565b005b610352600480360381019061034d9190612fdd565b610ae8565b005b61035c610b85565b005b61037860048036038101906103739190613256565b610c0d565b005b610382610cef565b60405161038f91906137ca565b60405180910390f35b6103a0610d19565b6040516103ad919061391b565b60405180910390f35b6103d060048036038101906103cb9190613123565b610da7565b005b6103ec60048036038101906103e79190613163565b610f28565b6040516103f99190613b3d565b60405180910390f35b61041c60048036038101906104179190613068565b611042565b005b610438600480360381019061043391906133f4565b611184565b6040516104459190613b3d565b60405180910390f35b610468600480360381019061046391906133f4565b6111a1565b604051610475919061391b565b60405180910390f35b61049860048036038101906104939190612e37565b6111b3565b6040516104a59190613900565b60405180910390f35b6104c860048036038101906104c39190612f46565b611247565b005b6104e460048036038101906104df9190612e0a565b6112e8565b005b61050060048036038101906104fb9190613203565b6113e0565b005b60076020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a9061399d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c657506106c58261147d565b5b9050919050565b6106d56114e7565b73ffffffffffffffffffffffffffffffffffffffff166106f3610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074090613a9d565b60405180910390fd5b610752816114ef565b50565b6008805461076290613e4d565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90613e4d565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b505050505081565b60606107ef6000611509565b6107f88361159d565b6040516020016108099291906137a6565b6040516020818303038152906040529050919050565b60066020528060005260406000206000915090505481565b61083f6114e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061088557506108848561087f6114e7565b6111b3565b5b6108c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bb90613a3d565b60405180910390fd5b6108d185858585856116fe565b5050505050565b60056020528060005260406000206000915054906101000a900460ff1681565b6060815183511461093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590613add565b60405180910390fd5b6000835167ffffffffffffffff81111561095b5761095a613fe6565b5b6040519080825280602002602001820160405280156109895781602001602082028036833780820191505090505b50905060005b8451811015610a06576109d68582815181106109ae576109ad613fb7565b5b60200260200101518583815181106109c9576109c8613fb7565b5b6020026020010151610522565b8282815181106109e9576109e8613fb7565b5b602002602001018181525050806109ff90613eb0565b905061098f565b508091505092915050565b610a196114e7565b73ffffffffffffffffffffffffffffffffffffffff16610a37610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613a9d565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610af06114e7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b365750610b3583610b306114e7565b6111b3565b5b610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c906139fd565b60405180910390fd5b610b80838383611a12565b505050565b610b8d6114e7565b73ffffffffffffffffffffffffffffffffffffffff16610bab610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613a9d565b60405180910390fd5b610c0b6000611cc3565b565b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061397d565b60405180910390fd5b610cac84848484611d89565b610cd2826006600086815260200190815260200160002054611f1f90919063ffffffff16565b600660008581526020019081526020016000208190555050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098054610d2690613e4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5290613e4d565b8015610d9f5780601f10610d7457610100808354040283529160200191610d9f565b820191906000526020600020905b815481529060010190602001808311610d8257829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16610dc66114e7565b73ffffffffffffffffffffffffffffffffffffffff161415610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613abd565b60405180910390fd5b8060016000610e2a6114e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ed76114e7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f1c9190613900565b60405180910390a35050565b6000610f326114e7565b73ffffffffffffffffffffffffffffffffffffffff16610f50610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90613a9d565b60405180910390fd5b6000610fb0611f35565b9050610fba611f52565b61100b8582600087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611d89565b60016007600083815260200190815260200160002060006101000a81548160ff021916908315150217905550809150509392505050565b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc9061397d565b60405180910390fd5b60005b83518110156111715760008482815181106110f6576110f5613fb7565b5b60200260200101519050600084838151811061111557611114613fb7565b5b60200260200101519050611145816006600085815260200190815260200160002054611f1f90919063ffffffff16565b60066000848152602001908152602001600020819055505050808061116990613eb0565b9150506110d8565b5061117e84848484611f6c565b50505050565b600060066000838152602001908152602001600020549050919050565b60606111ac826107e3565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61124f6114e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061129557506112948561128f6114e7565b6111b3565b5b6112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906139fd565b60405180910390fd5b6112e1858585858561218a565b5050505050565b6112f06114e7565b73ffffffffffffffffffffffffffffffffffffffff1661130e610cef565b73ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb906139bd565b60405180910390fd5b6113dd81611cc3565b50565b6113e86114e7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061142e575061142d836114286114e7565b6111b3565b5b61146d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611464906139fd565b60405180910390fd5b61147883838361240c565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611505929190612a8c565b5050565b60606002805461151890613e4d565b80601f016020809104026020016040519081016040528092919081815260200182805461154490613e4d565b80156115915780601f1061156657610100808354040283529160200191611591565b820191906000526020600020905b81548152906001019060200180831161157457829003601f168201915b50505050509050919050565b606060008214156115e5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116f9565b600082905060005b6000821461161757808061160090613eb0565b915050600a826116109190613d32565b91506115ed565b60008167ffffffffffffffff81111561163357611632613fe6565b5b6040519080825280601f01601f1916602001820160405280156116655781602001600182028036833780820191505090505b5090505b600085146116f25760018261167e9190613d63565b9150600a8561168d9190613ef9565b60306116999190613cdc565b60f81b8183815181106116af576116ae613fb7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116eb9190613d32565b9450611669565b8093505050505b919050565b8151835114611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990613a1d565b60405180910390fd5b60006117bc6114e7565b90506117cc818787878787612629565b60005b845181101561197d5760008582815181106117ed576117ec613fb7565b5b60200260200101519050600085838151811061180c5761180b613fb7565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490613a7d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119629190613cdc565b925050819055505050508061197690613eb0565b90506117cf565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119f49291906138c9565b60405180910390a4611a0a818787878787612631565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613a5d565b60405180910390fd5b8051825114611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613afd565b60405180910390fd5b6000611ad06114e7565b9050611af081856000868660405180602001604052806000815250612629565b60005b8351811015611c3d576000848281518110611b1157611b10613fb7565b5b602002602001015190506000848381518110611b3057611b2f613fb7565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc8906139dd565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611c3590613eb0565b915050611af3565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611cb59291906138c9565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613b1d565b60405180910390fd5b6000611e036114e7565b9050611e2481600087611e1588612818565b611e1e88612818565b87612629565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e839190613cdc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611f01929190613b58565b60405180910390a4611f1881600087878787612892565b5050505050565b60008183611f2d9190613cdc565b905092915050565b6000611f4d6001600454611f1f90919063ffffffff16565b905090565b60046000815480929190611f6590613eb0565b9190505550565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613b1d565b60405180910390fd5b8151835114612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790613afd565b60405180910390fd5b600061202a6114e7565b905061203b81600087878787612629565b60005b84518110156120f45783818151811061205a57612059613fb7565b5b602002602001015160008087848151811061207857612077613fb7565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120da9190613cdc565b9250508190555080806120ec90613eb0565b91505061203e565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161216c9291906138c9565b60405180910390a461218381600087878787612631565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190613a1d565b60405180910390fd5b60006122046114e7565b905061222481878761221588612818565b61221e88612818565b87612629565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613a7d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123709190613cdc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516123ed929190613b58565b60405180910390a4612403828888888888612892565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613a5d565b60405180910390fd5b60006124866114e7565b90506124b68185600061249887612818565b6124a187612818565b60405180602001604052806000815250612629565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906139dd565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161261a929190613b58565b60405180910390a45050505050565b505050505050565b6126508473ffffffffffffffffffffffffffffffffffffffff16612a79565b15612810578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016126969594939291906137e5565b602060405180830381600087803b1580156126b057600080fd5b505af19250505080156126e157506040513d601f19601f820116820180604052508101906126de919061337e565b60015b612787576126ed614015565b806308c379a0141561274a5750612702614517565b8061270d575061274c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741919061391b565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e9061393d565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461280e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128059061395d565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561283757612836613fe6565b5b6040519080825280602002602001820160405280156128655781602001602082028036833780820191505090505b509050828160008151811061287d5761287c613fb7565b5b60200260200101818152505080915050919050565b6128b18473ffffffffffffffffffffffffffffffffffffffff16612a79565b15612a71578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128f795949392919061384d565b602060405180830381600087803b15801561291157600080fd5b505af192505050801561294257506040513d601f19601f8201168201806040525081019061293f919061337e565b60015b6129e85761294e614015565b806308c379a014156129ab5750612963614517565b8061296e57506129ad565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a2919061391b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df9061393d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061395d565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612a9890613e4d565b90600052602060002090601f016020900481019282612aba5760008555612b01565b82601f10612ad357805160ff1916838001178555612b01565b82800160010185558215612b01579182015b82811115612b00578251825591602001919060010190612ae5565b5b509050612b0e9190612b12565b5090565b5b80821115612b2b576000816000905550600101612b13565b5090565b6000612b42612b3d84613ba6565b613b81565b90508083825260208201905082856020860282011115612b6557612b64614041565b5b60005b85811015612b955781612b7b8882612c93565b845260208401935060208301925050600181019050612b68565b5050509392505050565b6000612bb2612bad84613bd2565b613b81565b90508083825260208201905082856020860282011115612bd557612bd4614041565b5b60005b85811015612c055781612beb8882612df5565b845260208401935060208301925050600181019050612bd8565b5050509392505050565b6000612c22612c1d84613bfe565b613b81565b905082815260208101848484011115612c3e57612c3d614046565b5b612c49848285613e0b565b509392505050565b6000612c64612c5f84613c2f565b613b81565b905082815260208101848484011115612c8057612c7f614046565b5b612c8b848285613e0b565b509392505050565b600081359050612ca2816145ad565b92915050565b600082601f830112612cbd57612cbc61403c565b5b8135612ccd848260208601612b2f565b91505092915050565b600082601f830112612ceb57612cea61403c565b5b8135612cfb848260208601612b9f565b91505092915050565b600081359050612d13816145c4565b92915050565b600081359050612d28816145db565b92915050565b600081519050612d3d816145db565b92915050565b60008083601f840112612d5957612d5861403c565b5b8235905067ffffffffffffffff811115612d7657612d75614037565b5b602083019150836001820283011115612d9257612d91614041565b5b9250929050565b600082601f830112612dae57612dad61403c565b5b8135612dbe848260208601612c0f565b91505092915050565b600082601f830112612ddc57612ddb61403c565b5b8135612dec848260208601612c51565b91505092915050565b600081359050612e04816145f2565b92915050565b600060208284031215612e2057612e1f614050565b5b6000612e2e84828501612c93565b91505092915050565b60008060408385031215612e4e57612e4d614050565b5b6000612e5c85828601612c93565b9250506020612e6d85828601612c93565b9150509250929050565b600080600080600060a08688031215612e9357612e92614050565b5b6000612ea188828901612c93565b9550506020612eb288828901612c93565b945050604086013567ffffffffffffffff811115612ed357612ed261404b565b5b612edf88828901612cd6565b935050606086013567ffffffffffffffff811115612f0057612eff61404b565b5b612f0c88828901612cd6565b925050608086013567ffffffffffffffff811115612f2d57612f2c61404b565b5b612f3988828901612d99565b9150509295509295909350565b600080600080600060a08688031215612f6257612f61614050565b5b6000612f7088828901612c93565b9550506020612f8188828901612c93565b9450506040612f9288828901612df5565b9350506060612fa388828901612df5565b925050608086013567ffffffffffffffff811115612fc457612fc361404b565b5b612fd088828901612d99565b9150509295509295909350565b600080600060608486031215612ff657612ff5614050565b5b600061300486828701612c93565b935050602084013567ffffffffffffffff8111156130255761302461404b565b5b61303186828701612cd6565b925050604084013567ffffffffffffffff8111156130525761305161404b565b5b61305e86828701612cd6565b9150509250925092565b6000806000806080858703121561308257613081614050565b5b600061309087828801612c93565b945050602085013567ffffffffffffffff8111156130b1576130b061404b565b5b6130bd87828801612cd6565b935050604085013567ffffffffffffffff8111156130de576130dd61404b565b5b6130ea87828801612cd6565b925050606085013567ffffffffffffffff81111561310b5761310a61404b565b5b61311787828801612d99565b91505092959194509250565b6000806040838503121561313a57613139614050565b5b600061314885828601612c93565b925050602061315985828601612d04565b9150509250929050565b60008060006040848603121561317c5761317b614050565b5b600061318a86828701612c93565b935050602084013567ffffffffffffffff8111156131ab576131aa61404b565b5b6131b786828701612d43565b92509250509250925092565b600080604083850312156131da576131d9614050565b5b60006131e885828601612c93565b92505060206131f985828601612df5565b9150509250929050565b60008060006060848603121561321c5761321b614050565b5b600061322a86828701612c93565b935050602061323b86828701612df5565b925050604061324c86828701612df5565b9150509250925092565b600080600080608085870312156132705761326f614050565b5b600061327e87828801612c93565b945050602061328f87828801612df5565b93505060406132a087828801612df5565b925050606085013567ffffffffffffffff8111156132c1576132c061404b565b5b6132cd87828801612d99565b91505092959194509250565b600080604083850312156132f0576132ef614050565b5b600083013567ffffffffffffffff81111561330e5761330d61404b565b5b61331a85828601612ca8565b925050602083013567ffffffffffffffff81111561333b5761333a61404b565b5b61334785828601612cd6565b9150509250929050565b60006020828403121561336757613366614050565b5b600061337584828501612d19565b91505092915050565b60006020828403121561339457613393614050565b5b60006133a284828501612d2e565b91505092915050565b6000602082840312156133c1576133c0614050565b5b600082013567ffffffffffffffff8111156133df576133de61404b565b5b6133eb84828501612dc7565b91505092915050565b60006020828403121561340a57613409614050565b5b600061341884828501612df5565b91505092915050565b600061342d8383613788565b60208301905092915050565b61344281613d97565b82525050565b600061345382613c70565b61345d8185613c9e565b935061346883613c60565b8060005b838110156134995781516134808882613421565b975061348b83613c91565b92505060018101905061346c565b5085935050505092915050565b6134af81613da9565b82525050565b60006134c082613c7b565b6134ca8185613caf565b93506134da818560208601613e1a565b6134e381614055565b840191505092915050565b60006134f982613c86565b6135038185613cc0565b9350613513818560208601613e1a565b61351c81614055565b840191505092915050565b600061353282613c86565b61353c8185613cd1565b935061354c818560208601613e1a565b80840191505092915050565b6000613565603483613cc0565b915061357082614073565b604082019050919050565b6000613588602883613cc0565b9150613593826140c2565b604082019050919050565b60006135ab601d83613cc0565b91506135b682614111565b602082019050919050565b60006135ce602b83613cc0565b91506135d98261413a565b604082019050919050565b60006135f1602683613cc0565b91506135fc82614189565b604082019050919050565b6000613614602483613cc0565b915061361f826141d8565b604082019050919050565b6000613637602983613cc0565b915061364282614227565b604082019050919050565b600061365a602583613cc0565b915061366582614276565b604082019050919050565b600061367d603283613cc0565b9150613688826142c5565b604082019050919050565b60006136a0602383613cc0565b91506136ab82614314565b604082019050919050565b60006136c3602a83613cc0565b91506136ce82614363565b604082019050919050565b60006136e6602083613cc0565b91506136f1826143b2565b602082019050919050565b6000613709602983613cc0565b9150613714826143db565b604082019050919050565b600061372c602983613cc0565b91506137378261442a565b604082019050919050565b600061374f602883613cc0565b915061375a82614479565b604082019050919050565b6000613772602183613cc0565b915061377d826144c8565b604082019050919050565b61379181613e01565b82525050565b6137a081613e01565b82525050565b60006137b28285613527565b91506137be8284613527565b91508190509392505050565b60006020820190506137df6000830184613439565b92915050565b600060a0820190506137fa6000830188613439565b6138076020830187613439565b81810360408301526138198186613448565b9050818103606083015261382d8185613448565b9050818103608083015261384181846134b5565b90509695505050505050565b600060a0820190506138626000830188613439565b61386f6020830187613439565b61387c6040830186613797565b6138896060830185613797565b818103608083015261389b81846134b5565b90509695505050505050565b600060208201905081810360008301526138c18184613448565b905092915050565b600060408201905081810360008301526138e38185613448565b905081810360208301526138f78184613448565b90509392505050565b600060208201905061391560008301846134a6565b92915050565b6000602082019050818103600083015261393581846134ee565b905092915050565b6000602082019050818103600083015261395681613558565b9050919050565b600060208201905081810360008301526139768161357b565b9050919050565b600060208201905081810360008301526139968161359e565b9050919050565b600060208201905081810360008301526139b6816135c1565b9050919050565b600060208201905081810360008301526139d6816135e4565b9050919050565b600060208201905081810360008301526139f681613607565b9050919050565b60006020820190508181036000830152613a168161362a565b9050919050565b60006020820190508181036000830152613a368161364d565b9050919050565b60006020820190508181036000830152613a5681613670565b9050919050565b60006020820190508181036000830152613a7681613693565b9050919050565b60006020820190508181036000830152613a96816136b6565b9050919050565b60006020820190508181036000830152613ab6816136d9565b9050919050565b60006020820190508181036000830152613ad6816136fc565b9050919050565b60006020820190508181036000830152613af68161371f565b9050919050565b60006020820190508181036000830152613b1681613742565b9050919050565b60006020820190508181036000830152613b3681613765565b9050919050565b6000602082019050613b526000830184613797565b92915050565b6000604082019050613b6d6000830185613797565b613b7a6020830184613797565b9392505050565b6000613b8b613b9c565b9050613b978282613e7f565b919050565b6000604051905090565b600067ffffffffffffffff821115613bc157613bc0613fe6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bed57613bec613fe6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c1957613c18613fe6565b5b613c2282614055565b9050602081019050919050565b600067ffffffffffffffff821115613c4a57613c49613fe6565b5b613c5382614055565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ce782613e01565b9150613cf283613e01565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2757613d26613f2a565b5b828201905092915050565b6000613d3d82613e01565b9150613d4883613e01565b925082613d5857613d57613f59565b5b828204905092915050565b6000613d6e82613e01565b9150613d7983613e01565b925082821015613d8c57613d8b613f2a565b5b828203905092915050565b6000613da282613de1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e38578082015181840152602081019050613e1d565b83811115613e47576000848401525b50505050565b60006002820490506001821680613e6557607f821691505b60208210811415613e7957613e78613f88565b5b50919050565b613e8882614055565b810181811067ffffffffffffffff82111715613ea757613ea6613fe6565b5b80604052505050565b6000613ebb82613e01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613eee57613eed613f2a565b5b600182019050919050565b6000613f0482613e01565b9150613f0f83613e01565b925082613f1f57613f1e613f59565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156140345760046000803e614031600051614066565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420616e20616c6c6f776564206d696e746572000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614527576145aa565b61452f613b9c565b60043d036004823e80513d602482011167ffffffffffffffff821117156145575750506145aa565b808201805167ffffffffffffffff81111561457557505050506145aa565b80602083010160043d0385018111156145925750505050506145aa565b6145a182602001850186613e7f565b82955050505050505b90565b6145b681613d97565b81146145c157600080fd5b50565b6145cd81613da9565b81146145d857600080fd5b50565b6145e481613db5565b81146145ef57600080fd5b50565b6145fb81613e01565b811461460657600080fd5b5056fea2646970667358221220e180c723df2390dd6d7365e549a00479b6c16d139c41e0af006e963270aca2c964736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f6170692e646f676572756e2e696f2f6567672f0000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101715760003560e01c8063715018a6116100de578063b48ab8b611610097578063e985e9c511610071578063e985e9c51461047e578063f242432a146104ae578063f2fde38b146104ca578063f5298aca146104e657610171565b8063b48ab8b614610402578063bd85b0391461041e578063c87b56dd1461044e57610171565b8063715018a614610354578063731133e91461035e5780638da5cb5b1461037a57806395d89b4114610398578063a22cb465146103b6578063a3f697ba146103d257610171565b80632693ebf2116101305780632693ebf2146102705780632eb2c2d6146102a0578063423afa66146102bc5780634e1273f4146102ec5780636af9c2051461031c5780636b20c4541461033857610171565b8062923f9e14610176578062fdd58e146101a657806301ffc9a7146101d657806302fe53051461020657806306fdde03146102225780630e89341c14610240575b600080fd5b610190600480360381019061018b91906133f4565b610502565b60405161019d9190613900565b60405180910390f35b6101c060048036038101906101bb91906131c3565b610522565b6040516101cd9190613b3d565b60405180910390f35b6101f060048036038101906101eb9190613351565b6105eb565b6040516101fd9190613900565b60405180910390f35b610220600480360381019061021b91906133ab565b6106cd565b005b61022a610755565b604051610237919061391b565b60405180910390f35b61025a600480360381019061025591906133f4565b6107e3565b604051610267919061391b565b60405180910390f35b61028a600480360381019061028591906133f4565b61081f565b6040516102979190613b3d565b60405180910390f35b6102ba60048036038101906102b59190612e77565b610837565b005b6102d660048036038101906102d19190612e0a565b6108d8565b6040516102e39190613900565b60405180910390f35b610306600480360381019061030191906132d9565b6108f8565b60405161031391906138a7565b60405180910390f35b61033660048036038101906103319190613123565b610a11565b005b610352600480360381019061034d9190612fdd565b610ae8565b005b61035c610b85565b005b61037860048036038101906103739190613256565b610c0d565b005b610382610cef565b60405161038f91906137ca565b60405180910390f35b6103a0610d19565b6040516103ad919061391b565b60405180910390f35b6103d060048036038101906103cb9190613123565b610da7565b005b6103ec60048036038101906103e79190613163565b610f28565b6040516103f99190613b3d565b60405180910390f35b61041c60048036038101906104179190613068565b611042565b005b610438600480360381019061043391906133f4565b611184565b6040516104459190613b3d565b60405180910390f35b610468600480360381019061046391906133f4565b6111a1565b604051610475919061391b565b60405180910390f35b61049860048036038101906104939190612e37565b6111b3565b6040516104a59190613900565b60405180910390f35b6104c860048036038101906104c39190612f46565b611247565b005b6104e460048036038101906104df9190612e0a565b6112e8565b005b61050060048036038101906104fb9190613203565b6113e0565b005b60076020528060005260406000206000915054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058a9061399d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106b657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106c657506106c58261147d565b5b9050919050565b6106d56114e7565b73ffffffffffffffffffffffffffffffffffffffff166106f3610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074090613a9d565b60405180910390fd5b610752816114ef565b50565b6008805461076290613e4d565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90613e4d565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b505050505081565b60606107ef6000611509565b6107f88361159d565b6040516020016108099291906137a6565b6040516020818303038152906040529050919050565b60066020528060005260406000206000915090505481565b61083f6114e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061088557506108848561087f6114e7565b6111b3565b5b6108c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bb90613a3d565b60405180910390fd5b6108d185858585856116fe565b5050505050565b60056020528060005260406000206000915054906101000a900460ff1681565b6060815183511461093e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093590613add565b60405180910390fd5b6000835167ffffffffffffffff81111561095b5761095a613fe6565b5b6040519080825280602002602001820160405280156109895781602001602082028036833780820191505090505b50905060005b8451811015610a06576109d68582815181106109ae576109ad613fb7565b5b60200260200101518583815181106109c9576109c8613fb7565b5b6020026020010151610522565b8282815181106109e9576109e8613fb7565b5b602002602001018181525050806109ff90613eb0565b905061098f565b508091505092915050565b610a196114e7565b73ffffffffffffffffffffffffffffffffffffffff16610a37610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8490613a9d565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610af06114e7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b365750610b3583610b306114e7565b6111b3565b5b610b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6c906139fd565b60405180910390fd5b610b80838383611a12565b505050565b610b8d6114e7565b73ffffffffffffffffffffffffffffffffffffffff16610bab610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613a9d565b60405180910390fd5b610c0b6000611cc3565b565b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c979061397d565b60405180910390fd5b610cac84848484611d89565b610cd2826006600086815260200190815260200160002054611f1f90919063ffffffff16565b600660008581526020019081526020016000208190555050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60098054610d2690613e4d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5290613e4d565b8015610d9f5780601f10610d7457610100808354040283529160200191610d9f565b820191906000526020600020905b815481529060010190602001808311610d8257829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16610dc66114e7565b73ffffffffffffffffffffffffffffffffffffffff161415610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613abd565b60405180910390fd5b8060016000610e2a6114e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ed76114e7565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610f1c9190613900565b60405180910390a35050565b6000610f326114e7565b73ffffffffffffffffffffffffffffffffffffffff16610f50610cef565b73ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90613a9d565b60405180910390fd5b6000610fb0611f35565b9050610fba611f52565b61100b8582600087878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611d89565b60016007600083815260200190815260200160002060006101000a81548160ff021916908315150217905550809150509392505050565b60011515600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc9061397d565b60405180910390fd5b60005b83518110156111715760008482815181106110f6576110f5613fb7565b5b60200260200101519050600084838151811061111557611114613fb7565b5b60200260200101519050611145816006600085815260200190815260200160002054611f1f90919063ffffffff16565b60066000848152602001908152602001600020819055505050808061116990613eb0565b9150506110d8565b5061117e84848484611f6c565b50505050565b600060066000838152602001908152602001600020549050919050565b60606111ac826107e3565b9050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61124f6114e7565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061129557506112948561128f6114e7565b6111b3565b5b6112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906139fd565b60405180910390fd5b6112e1858585858561218a565b5050505050565b6112f06114e7565b73ffffffffffffffffffffffffffffffffffffffff1661130e610cef565b73ffffffffffffffffffffffffffffffffffffffff1614611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90613a9d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb906139bd565b60405180910390fd5b6113dd81611cc3565b50565b6113e86114e7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061142e575061142d836114286114e7565b6111b3565b5b61146d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611464906139fd565b60405180910390fd5b61147883838361240c565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611505929190612a8c565b5050565b60606002805461151890613e4d565b80601f016020809104026020016040519081016040528092919081815260200182805461154490613e4d565b80156115915780601f1061156657610100808354040283529160200191611591565b820191906000526020600020905b81548152906001019060200180831161157457829003601f168201915b50505050509050919050565b606060008214156115e5576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506116f9565b600082905060005b6000821461161757808061160090613eb0565b915050600a826116109190613d32565b91506115ed565b60008167ffffffffffffffff81111561163357611632613fe6565b5b6040519080825280601f01601f1916602001820160405280156116655781602001600182028036833780820191505090505b5090505b600085146116f25760018261167e9190613d63565b9150600a8561168d9190613ef9565b60306116999190613cdc565b60f81b8183815181106116af576116ae613fb7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856116eb9190613d32565b9450611669565b8093505050505b919050565b8151835114611742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173990613afd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990613a1d565b60405180910390fd5b60006117bc6114e7565b90506117cc818787878787612629565b60005b845181101561197d5760008582815181106117ed576117ec613fb7565b5b60200260200101519050600085838151811061180c5761180b613fb7565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a490613a7d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119629190613cdc565b925050819055505050508061197690613eb0565b90506117cf565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119f49291906138c9565b60405180910390a4611a0a818787878787612631565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7990613a5d565b60405180910390fd5b8051825114611ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abd90613afd565b60405180910390fd5b6000611ad06114e7565b9050611af081856000868660405180602001604052806000815250612629565b60005b8351811015611c3d576000848281518110611b1157611b10613fb7565b5b602002602001015190506000848381518110611b3057611b2f613fb7565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc8906139dd565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611c3590613eb0565b915050611af3565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611cb59291906138c9565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613b1d565b60405180910390fd5b6000611e036114e7565b9050611e2481600087611e1588612818565b611e1e88612818565b87612629565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e839190613cdc565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611f01929190613b58565b60405180910390a4611f1881600087878787612892565b5050505050565b60008183611f2d9190613cdc565b905092915050565b6000611f4d6001600454611f1f90919063ffffffff16565b905090565b60046000815480929190611f6590613eb0565b9190505550565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd390613b1d565b60405180910390fd5b8151835114612020576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201790613afd565b60405180910390fd5b600061202a6114e7565b905061203b81600087878787612629565b60005b84518110156120f45783818151811061205a57612059613fb7565b5b602002602001015160008087848151811061207857612077613fb7565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120da9190613cdc565b9250508190555080806120ec90613eb0565b91505061203e565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161216c9291906138c9565b60405180910390a461218381600087878787612631565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f190613a1d565b60405180910390fd5b60006122046114e7565b905061222481878761221588612818565b61221e88612818565b87612629565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290613a7d565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123709190613cdc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516123ed929190613b58565b60405180910390a4612403828888888888612892565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613a5d565b60405180910390fd5b60006124866114e7565b90506124b68185600061249887612818565b6124a187612818565b60405180602001604052806000815250612629565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906139dd565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161261a929190613b58565b60405180910390a45050505050565b505050505050565b6126508473ffffffffffffffffffffffffffffffffffffffff16612a79565b15612810578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016126969594939291906137e5565b602060405180830381600087803b1580156126b057600080fd5b505af19250505080156126e157506040513d601f19601f820116820180604052508101906126de919061337e565b60015b612787576126ed614015565b806308c379a0141561274a5750612702614517565b8061270d575061274c565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612741919061391b565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277e9061393d565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461280e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128059061395d565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561283757612836613fe6565b5b6040519080825280602002602001820160405280156128655781602001602082028036833780820191505090505b509050828160008151811061287d5761287c613fb7565b5b60200260200101818152505080915050919050565b6128b18473ffffffffffffffffffffffffffffffffffffffff16612a79565b15612a71578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016128f795949392919061384d565b602060405180830381600087803b15801561291157600080fd5b505af192505050801561294257506040513d601f19601f8201168201806040525081019061293f919061337e565b60015b6129e85761294e614015565b806308c379a014156129ab5750612963614517565b8061296e57506129ad565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a2919061391b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129df9061393d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061395d565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612a9890613e4d565b90600052602060002090601f016020900481019282612aba5760008555612b01565b82601f10612ad357805160ff1916838001178555612b01565b82800160010185558215612b01579182015b82811115612b00578251825591602001919060010190612ae5565b5b509050612b0e9190612b12565b5090565b5b80821115612b2b576000816000905550600101612b13565b5090565b6000612b42612b3d84613ba6565b613b81565b90508083825260208201905082856020860282011115612b6557612b64614041565b5b60005b85811015612b955781612b7b8882612c93565b845260208401935060208301925050600181019050612b68565b5050509392505050565b6000612bb2612bad84613bd2565b613b81565b90508083825260208201905082856020860282011115612bd557612bd4614041565b5b60005b85811015612c055781612beb8882612df5565b845260208401935060208301925050600181019050612bd8565b5050509392505050565b6000612c22612c1d84613bfe565b613b81565b905082815260208101848484011115612c3e57612c3d614046565b5b612c49848285613e0b565b509392505050565b6000612c64612c5f84613c2f565b613b81565b905082815260208101848484011115612c8057612c7f614046565b5b612c8b848285613e0b565b509392505050565b600081359050612ca2816145ad565b92915050565b600082601f830112612cbd57612cbc61403c565b5b8135612ccd848260208601612b2f565b91505092915050565b600082601f830112612ceb57612cea61403c565b5b8135612cfb848260208601612b9f565b91505092915050565b600081359050612d13816145c4565b92915050565b600081359050612d28816145db565b92915050565b600081519050612d3d816145db565b92915050565b60008083601f840112612d5957612d5861403c565b5b8235905067ffffffffffffffff811115612d7657612d75614037565b5b602083019150836001820283011115612d9257612d91614041565b5b9250929050565b600082601f830112612dae57612dad61403c565b5b8135612dbe848260208601612c0f565b91505092915050565b600082601f830112612ddc57612ddb61403c565b5b8135612dec848260208601612c51565b91505092915050565b600081359050612e04816145f2565b92915050565b600060208284031215612e2057612e1f614050565b5b6000612e2e84828501612c93565b91505092915050565b60008060408385031215612e4e57612e4d614050565b5b6000612e5c85828601612c93565b9250506020612e6d85828601612c93565b9150509250929050565b600080600080600060a08688031215612e9357612e92614050565b5b6000612ea188828901612c93565b9550506020612eb288828901612c93565b945050604086013567ffffffffffffffff811115612ed357612ed261404b565b5b612edf88828901612cd6565b935050606086013567ffffffffffffffff811115612f0057612eff61404b565b5b612f0c88828901612cd6565b925050608086013567ffffffffffffffff811115612f2d57612f2c61404b565b5b612f3988828901612d99565b9150509295509295909350565b600080600080600060a08688031215612f6257612f61614050565b5b6000612f7088828901612c93565b9550506020612f8188828901612c93565b9450506040612f9288828901612df5565b9350506060612fa388828901612df5565b925050608086013567ffffffffffffffff811115612fc457612fc361404b565b5b612fd088828901612d99565b9150509295509295909350565b600080600060608486031215612ff657612ff5614050565b5b600061300486828701612c93565b935050602084013567ffffffffffffffff8111156130255761302461404b565b5b61303186828701612cd6565b925050604084013567ffffffffffffffff8111156130525761305161404b565b5b61305e86828701612cd6565b9150509250925092565b6000806000806080858703121561308257613081614050565b5b600061309087828801612c93565b945050602085013567ffffffffffffffff8111156130b1576130b061404b565b5b6130bd87828801612cd6565b935050604085013567ffffffffffffffff8111156130de576130dd61404b565b5b6130ea87828801612cd6565b925050606085013567ffffffffffffffff81111561310b5761310a61404b565b5b61311787828801612d99565b91505092959194509250565b6000806040838503121561313a57613139614050565b5b600061314885828601612c93565b925050602061315985828601612d04565b9150509250929050565b60008060006040848603121561317c5761317b614050565b5b600061318a86828701612c93565b935050602084013567ffffffffffffffff8111156131ab576131aa61404b565b5b6131b786828701612d43565b92509250509250925092565b600080604083850312156131da576131d9614050565b5b60006131e885828601612c93565b92505060206131f985828601612df5565b9150509250929050565b60008060006060848603121561321c5761321b614050565b5b600061322a86828701612c93565b935050602061323b86828701612df5565b925050604061324c86828701612df5565b9150509250925092565b600080600080608085870312156132705761326f614050565b5b600061327e87828801612c93565b945050602061328f87828801612df5565b93505060406132a087828801612df5565b925050606085013567ffffffffffffffff8111156132c1576132c061404b565b5b6132cd87828801612d99565b91505092959194509250565b600080604083850312156132f0576132ef614050565b5b600083013567ffffffffffffffff81111561330e5761330d61404b565b5b61331a85828601612ca8565b925050602083013567ffffffffffffffff81111561333b5761333a61404b565b5b61334785828601612cd6565b9150509250929050565b60006020828403121561336757613366614050565b5b600061337584828501612d19565b91505092915050565b60006020828403121561339457613393614050565b5b60006133a284828501612d2e565b91505092915050565b6000602082840312156133c1576133c0614050565b5b600082013567ffffffffffffffff8111156133df576133de61404b565b5b6133eb84828501612dc7565b91505092915050565b60006020828403121561340a57613409614050565b5b600061341884828501612df5565b91505092915050565b600061342d8383613788565b60208301905092915050565b61344281613d97565b82525050565b600061345382613c70565b61345d8185613c9e565b935061346883613c60565b8060005b838110156134995781516134808882613421565b975061348b83613c91565b92505060018101905061346c565b5085935050505092915050565b6134af81613da9565b82525050565b60006134c082613c7b565b6134ca8185613caf565b93506134da818560208601613e1a565b6134e381614055565b840191505092915050565b60006134f982613c86565b6135038185613cc0565b9350613513818560208601613e1a565b61351c81614055565b840191505092915050565b600061353282613c86565b61353c8185613cd1565b935061354c818560208601613e1a565b80840191505092915050565b6000613565603483613cc0565b915061357082614073565b604082019050919050565b6000613588602883613cc0565b9150613593826140c2565b604082019050919050565b60006135ab601d83613cc0565b91506135b682614111565b602082019050919050565b60006135ce602b83613cc0565b91506135d98261413a565b604082019050919050565b60006135f1602683613cc0565b91506135fc82614189565b604082019050919050565b6000613614602483613cc0565b915061361f826141d8565b604082019050919050565b6000613637602983613cc0565b915061364282614227565b604082019050919050565b600061365a602583613cc0565b915061366582614276565b604082019050919050565b600061367d603283613cc0565b9150613688826142c5565b604082019050919050565b60006136a0602383613cc0565b91506136ab82614314565b604082019050919050565b60006136c3602a83613cc0565b91506136ce82614363565b604082019050919050565b60006136e6602083613cc0565b91506136f1826143b2565b602082019050919050565b6000613709602983613cc0565b9150613714826143db565b604082019050919050565b600061372c602983613cc0565b91506137378261442a565b604082019050919050565b600061374f602883613cc0565b915061375a82614479565b604082019050919050565b6000613772602183613cc0565b915061377d826144c8565b604082019050919050565b61379181613e01565b82525050565b6137a081613e01565b82525050565b60006137b28285613527565b91506137be8284613527565b91508190509392505050565b60006020820190506137df6000830184613439565b92915050565b600060a0820190506137fa6000830188613439565b6138076020830187613439565b81810360408301526138198186613448565b9050818103606083015261382d8185613448565b9050818103608083015261384181846134b5565b90509695505050505050565b600060a0820190506138626000830188613439565b61386f6020830187613439565b61387c6040830186613797565b6138896060830185613797565b818103608083015261389b81846134b5565b90509695505050505050565b600060208201905081810360008301526138c18184613448565b905092915050565b600060408201905081810360008301526138e38185613448565b905081810360208301526138f78184613448565b90509392505050565b600060208201905061391560008301846134a6565b92915050565b6000602082019050818103600083015261393581846134ee565b905092915050565b6000602082019050818103600083015261395681613558565b9050919050565b600060208201905081810360008301526139768161357b565b9050919050565b600060208201905081810360008301526139968161359e565b9050919050565b600060208201905081810360008301526139b6816135c1565b9050919050565b600060208201905081810360008301526139d6816135e4565b9050919050565b600060208201905081810360008301526139f681613607565b9050919050565b60006020820190508181036000830152613a168161362a565b9050919050565b60006020820190508181036000830152613a368161364d565b9050919050565b60006020820190508181036000830152613a5681613670565b9050919050565b60006020820190508181036000830152613a7681613693565b9050919050565b60006020820190508181036000830152613a96816136b6565b9050919050565b60006020820190508181036000830152613ab6816136d9565b9050919050565b60006020820190508181036000830152613ad6816136fc565b9050919050565b60006020820190508181036000830152613af68161371f565b9050919050565b60006020820190508181036000830152613b1681613742565b9050919050565b60006020820190508181036000830152613b3681613765565b9050919050565b6000602082019050613b526000830184613797565b92915050565b6000604082019050613b6d6000830185613797565b613b7a6020830184613797565b9392505050565b6000613b8b613b9c565b9050613b978282613e7f565b919050565b6000604051905090565b600067ffffffffffffffff821115613bc157613bc0613fe6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613bed57613bec613fe6565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613c1957613c18613fe6565b5b613c2282614055565b9050602081019050919050565b600067ffffffffffffffff821115613c4a57613c49613fe6565b5b613c5382614055565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613ce782613e01565b9150613cf283613e01565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d2757613d26613f2a565b5b828201905092915050565b6000613d3d82613e01565b9150613d4883613e01565b925082613d5857613d57613f59565b5b828204905092915050565b6000613d6e82613e01565b9150613d7983613e01565b925082821015613d8c57613d8b613f2a565b5b828203905092915050565b6000613da282613de1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613e38578082015181840152602081019050613e1d565b83811115613e47576000848401525b50505050565b60006002820490506001821680613e6557607f821691505b60208210811415613e7957613e78613f88565b5b50919050565b613e8882614055565b810181811067ffffffffffffffff82111715613ea757613ea6613fe6565b5b80604052505050565b6000613ebb82613e01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613eee57613eed613f2a565b5b600182019050919050565b6000613f0482613e01565b9150613f0f83613e01565b925082613f1f57613f1e613f59565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156140345760046000803e614031600051614066565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f7420616e20616c6c6f776564206d696e746572000000600082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614527576145aa565b61452f613b9c565b60043d036004823e80513d602482011167ffffffffffffffff821117156145575750506145aa565b808201805167ffffffffffffffff81111561457557505050506145aa565b80602083010160043d0385018111156145925750505050506145aa565b6145a182602001850186613e7f565b82955050505050505b90565b6145b681613d97565b81146145c157600080fd5b50565b6145cd81613da9565b81146145d857600080fd5b50565b6145e481613db5565b81146145ef57600080fd5b50565b6145fb81613e01565b811461460657600080fd5b5056fea2646970667358221220e180c723df2390dd6d7365e549a00479b6c16d139c41e0af006e963270aca2c964736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f6170692e646f676572756e2e696f2f6567672f0000000000
-----Decoded View---------------
Arg [0] : _baseURI (string): https://api.dogerun.io/egg/
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [2] : 68747470733a2f2f6170692e646f676572756e2e696f2f6567672f0000000000
Deployed Bytecode Sourcemap
43388:4953:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43658:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21398:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20421:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44754:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43737:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43973:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43598:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23493:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43544:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21795:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44873:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47985:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2379:94;;;:::i;:::-;;46070:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1728:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43786:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22392:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45421:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46710:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44501:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44198:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22775:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23015:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2628:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47656:321;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43658:44;;;;;;;;;;;;;;;;;;;;;;:::o;21398:231::-;21484:7;21531:1;21512:21;;:7;:21;;;;21504:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;21599:9;:13;21609:2;21599:13;;;;;;;;;;;:22;21613:7;21599:22;;;;;;;;;;;;;;;;21592:29;;21398:231;;;;:::o;20421:310::-;20523:4;20575:26;20560:41;;;:11;:41;;;;:110;;;;20633:37;20618:52;;;:11;:52;;;;20560:110;:163;;;;20687:36;20711:11;20687:23;:36::i;:::-;20560:163;20540:183;;20421:310;;;:::o;44754:107::-;1959:12;:10;:12::i;:::-;1948:23;;:7;:5;:7::i;:::-;:23;;;1940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44837:16:::1;44845:7;44837;:16::i;:::-;44754:107:::0;:::o;43737:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43973:213::-;44045:13;44116:14;44128:1;44116:11;:14::i;:::-;44145:21;44162:3;44145:16;:21::i;:::-;44085:92;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44071:107;;43973:213;;;:::o;43598:47::-;;;;;;;;;;;;;;;;;:::o;23493:442::-;23734:12;:10;:12::i;:::-;23726:20;;:4;:20;;;:60;;;;23750:36;23767:4;23773:12;:10;:12::i;:::-;23750:16;:36::i;:::-;23726:60;23704:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;23875:52;23898:4;23904:2;23908:3;23913:7;23922:4;23875:22;:52::i;:::-;23493:442;;;;;:::o;43544:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;21795:524::-;21951:16;22012:3;:10;21993:8;:15;:29;21985:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22081:30;22128:8;:15;22114:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22081:63;;22162:9;22157:122;22181:8;:15;22177:1;:19;22157:122;;;22237:30;22247:8;22256:1;22247:11;;;;;;;;:::i;:::-;;;;;;;;22260:3;22264:1;22260:6;;;;;;;;:::i;:::-;;;;;;;;22237:9;:30::i;:::-;22218:13;22232:1;22218:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;22198:3;;;;:::i;:::-;;;22157:122;;;;22298:13;22291:20;;;21795:524;;;;:::o;44873:146::-;1959:12;:10;:12::i;:::-;1948:23;;:7;:5;:7::i;:::-;:23;;;1940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45002:9:::1;44976:14;:23;44991:7;44976:23;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;44873:146:::0;;:::o;47985:353::-;48161:12;:10;:12::i;:::-;48150:23;;:7;:23;;;:66;;;;48177:39;48194:7;48203:12;:10;:12::i;:::-;48177:16;:39::i;:::-;48150:66;48128:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;48298:32;48309:7;48318:3;48323:6;48298:10;:32::i;:::-;47985:353;;;:::o;2379:94::-;1959:12;:10;:12::i;:::-;1948:23;;:7;:5;:7::i;:::-;:23;;;1940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2444:21:::1;2462:1;2444:9;:21::i;:::-;2379:94::o:0;46070:329::-;46248:4;46218:34;;:14;:26;46233:10;46218:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;46210:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46297:33;46303:3;46308;46313:9;46324:5;46297;:33::i;:::-;46360:31;46381:9;46360:11;:16;46372:3;46360:16;;;;;;;;;;;;:20;;:31;;;;:::i;:::-;46341:11;:16;46353:3;46341:16;;;;;;;;;;;:50;;;;46070:329;;;;:::o;1728:87::-;1774:7;1801:6;;;;;;;;;;;1794:13;;1728:87;:::o;43786:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22392:311::-;22511:8;22495:24;;:12;:10;:12::i;:::-;:24;;;;22487:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;22623:8;22578:18;:32;22597:12;:10;:12::i;:::-;22578:32;;;;;;;;;;;;;;;:42;22611:8;22578:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22676:8;22647:48;;22662:12;:10;:12::i;:::-;22647:48;;;22686:8;22647:48;;;;;;:::i;:::-;;;;;;;;22392:311;;:::o;45421:338::-;45535:7;1959:12;:10;:12::i;:::-;1948:23;;:7;:5;:7::i;:::-;:23;;;1940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45565:11:::1;45579:17;:15;:17::i;:::-;45565:31;;45607:23;:21;:23::i;:::-;45651:35;45657:13;45672:3;45677:1;45680:5;;45651:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:35::i;:::-;45716:4;45697:11;:16;45709:3;45697:16;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;45748:3;45741:10;;;45421:338:::0;;;;;:::o;46710:514::-;46914:4;46884:34;;:14;:26;46899:10;46884:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;46876:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46968:9;46963:202;46987:4;:11;46983:1;:15;46963:202;;;47020:11;47034:4;47039:1;47034:7;;;;;;;;:::i;:::-;;;;;;;;47020:21;;47056:16;47075:11;47087:1;47075:14;;;;;;;;:::i;:::-;;;;;;;;47056:33;;47123:30;47144:8;47123:11;:16;47135:3;47123:16;;;;;;;;;;;;:20;;:30;;;;:::i;:::-;47104:11;:16;47116:3;47104:16;;;;;;;;;;;:49;;;;47005:160;;47000:3;;;;;:::i;:::-;;;;46963:202;;;;47175:41;47186:3;47191:4;47197:11;47210:5;47175:10;:41::i;:::-;46710:514;;;;:::o;44501:122::-;44572:7;44599:11;:16;44611:3;44599:16;;;;;;;;;;;;44592:23;;44501:122;;;:::o;44198:125::-;44270:13;44303:12;44307:7;44303:3;:12::i;:::-;44296:19;;44198:125;;;:::o;22775:168::-;22874:4;22898:18;:27;22917:7;22898:27;;;;;;;;;;;;;;;:37;22926:8;22898:37;;;;;;;;;;;;;;;;;;;;;;;;;22891:44;;22775:168;;;;:::o;23015:401::-;23231:12;:10;:12::i;:::-;23223:20;;:4;:20;;;:60;;;;23247:36;23264:4;23270:12;:10;:12::i;:::-;23247:16;:36::i;:::-;23223:60;23201:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;23363:45;23381:4;23387:2;23391;23395:6;23403:4;23363:17;:45::i;:::-;23015:401;;;;;:::o;2628:192::-;1959:12;:10;:12::i;:::-;1948:23;;:7;:5;:7::i;:::-;:23;;;1940:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2737:1:::1;2717:22;;:8;:22;;;;2709:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2793:19;2803:8;2793:9;:19::i;:::-;2628:192:::0;:::o;47656:321::-;47807:12;:10;:12::i;:::-;47796:23;;:7;:23;;;:66;;;;47823:39;47840:7;47849:12;:10;:12::i;:::-;47823:16;:39::i;:::-;47796:66;47774:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;47944:25;47950:7;47959:2;47963:5;47944;:25::i;:::-;47656:321;;;:::o;19347:157::-;19432:4;19471:25;19456:40;;;:11;:40;;;;19449:47;;19347:157;;;:::o;604:98::-;657:7;684:10;677:17;;604:98;:::o;27495:88::-;27569:6;27562:4;:13;;;;;;;;;;;;:::i;:::-;;27495:88;:::o;21142:105::-;21202:13;21235:4;21228:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21142:105;;;:::o;34918:723::-;34974:13;35204:1;35195:5;:10;35191:53;;;35222:10;;;;;;;;;;;;;;;;;;;;;35191:53;35254:12;35269:5;35254:20;;35285:14;35310:78;35325:1;35317:4;:9;35310:78;;35343:8;;;;;:::i;:::-;;;;35374:2;35366:10;;;;;:::i;:::-;;;35310:78;;;35398:19;35430:6;35420:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35398:39;;35448:154;35464:1;35455:5;:10;35448:154;;35492:1;35482:11;;;;;:::i;:::-;;;35559:2;35551:5;:10;;;;:::i;:::-;35538:2;:24;;;;:::i;:::-;35525:39;;35508:6;35515;35508:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;35588:2;35579:11;;;;;:::i;:::-;;;35448:154;;;35626:6;35612:21;;;;;34918:723;;;;:::o;25577:1074::-;25804:7;:14;25790:3;:10;:28;25782:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;25896:1;25882:16;;:2;:16;;;;25874:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25953:16;25972:12;:10;:12::i;:::-;25953:31;;25997:60;26018:8;26028:4;26034:2;26038:3;26043:7;26052:4;25997:20;:60::i;:::-;26075:9;26070:421;26094:3;:10;26090:1;:14;26070:421;;;26126:10;26139:3;26143:1;26139:6;;;;;;;;:::i;:::-;;;;;;;;26126:19;;26160:14;26177:7;26185:1;26177:10;;;;;;;;:::i;:::-;;;;;;;;26160:27;;26204:19;26226:9;:13;26236:2;26226:13;;;;;;;;;;;:19;26240:4;26226:19;;;;;;;;;;;;;;;;26204:41;;26283:6;26268:11;:21;;26260:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26416:6;26402:11;:20;26380:9;:13;26390:2;26380:13;;;;;;;;;;;:19;26394:4;26380:19;;;;;;;;;;;;;;;:42;;;;26473:6;26452:9;:13;26462:2;26452:13;;;;;;;;;;;:17;26466:2;26452:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26111:380;;;26106:3;;;;:::i;:::-;;;26070:421;;;;26538:2;26508:47;;26532:4;26508:47;;26522:8;26508:47;;;26542:3;26547:7;26508:47;;;;;;;:::i;:::-;;;;;;;;26568:75;26604:8;26614:4;26620:2;26624:3;26629:7;26638:4;26568:35;:75::i;:::-;25771:880;25577:1074;;;;;:::o;30811:918::-;30985:1;30966:21;;:7;:21;;;;30958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31060:7;:14;31046:3;:10;:28;31038:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31132:16;31151:12;:10;:12::i;:::-;31132:31;;31176:69;31197:8;31207:7;31224:1;31228:3;31233:7;31176:69;;;;;;;;;;;;:20;:69::i;:::-;31263:9;31258:388;31282:3;:10;31278:1;:14;31258:388;;;31314:10;31327:3;31331:1;31327:6;;;;;;;;:::i;:::-;;;;;;;;31314:19;;31348:14;31365:7;31373:1;31365:10;;;;;;;;:::i;:::-;;;;;;;;31348:27;;31392:22;31417:9;:13;31427:2;31417:13;;;;;;;;;;;:22;31431:7;31417:22;;;;;;;;;;;;;;;;31392:47;;31480:6;31462:14;:24;;31454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31613:6;31596:14;:23;31571:9;:13;31581:2;31571:13;;;;;;;;;;;:22;31585:7;31571:22;;;;;;;;;;;;;;;:48;;;;31299:347;;;31294:3;;;;;:::i;:::-;;;;31258:388;;;;31704:1;31663:58;;31687:7;31663:58;;31677:8;31663:58;;;31708:3;31713:7;31663:58;;;;;;;:::i;:::-;;;;;;;;30947:782;30811:918;;;:::o;2828:173::-;2884:16;2903:6;;;;;;;;;;;2884:25;;2929:8;2920:6;;:17;;;;;;;;;;;;;;;;;;2984:8;2953:40;;2974:8;2953:40;;;;;;;;;;;;2873:128;2828:173;:::o;27984:599::-;28161:1;28142:21;;:7;:21;;;;28134:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28214:16;28233:12;:10;:12::i;:::-;28214:31;;28258:107;28279:8;28297:1;28301:7;28310:21;28328:2;28310:17;:21::i;:::-;28333:25;28351:6;28333:17;:25::i;:::-;28360:4;28258:20;:107::i;:::-;28404:6;28378:9;:13;28388:2;28378:13;;;;;;;;;;;:22;28392:7;28378:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;28463:7;28426:57;;28459:1;28426:57;;28441:8;28426:57;;;28472:2;28476:6;28426:57;;;;;;;:::i;:::-;;;;;;;;28496:79;28527:8;28545:1;28549:7;28558:2;28562:6;28570:4;28496:30;:79::i;:::-;28123:460;27984:599;;;;:::o;39223:98::-;39281:7;39312:1;39308;:5;;;;:::i;:::-;39301:12;;39223:98;;;;:::o;47373:106::-;47422:7;47449:22;47469:1;47449:15;;:19;;:22;;;;:::i;:::-;47442:29;;47373:106;:::o;47560:78::-;47613:15;;:17;;;;;;;;;:::i;:::-;;;;;;47560:78::o;28939:735::-;29131:1;29117:16;;:2;:16;;;;29109:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29204:7;:14;29190:3;:10;:28;29182:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29276:16;29295:12;:10;:12::i;:::-;29276:31;;29320:66;29341:8;29359:1;29363:2;29367:3;29372:7;29381:4;29320:20;:66::i;:::-;29404:9;29399:103;29423:3;:10;29419:1;:14;29399:103;;;29480:7;29488:1;29480:10;;;;;;;;:::i;:::-;;;;;;;;29455:9;:17;29465:3;29469:1;29465:6;;;;;;;;:::i;:::-;;;;;;;;29455:17;;;;;;;;;;;:21;29473:2;29455:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;29435:3;;;;;:::i;:::-;;;;29399:103;;;;29555:2;29519:53;;29551:1;29519:53;;29533:8;29519:53;;;29559:3;29564:7;29519:53;;;;;;;:::i;:::-;;;;;;;;29585:81;29621:8;29639:1;29643:2;29647:3;29652:7;29661:4;29585:35;:81::i;:::-;29098:576;28939:735;;;;:::o;24399:820::-;24601:1;24587:16;;:2;:16;;;;24579:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;24658:16;24677:12;:10;:12::i;:::-;24658:31;;24702:96;24723:8;24733:4;24739:2;24743:21;24761:2;24743:17;:21::i;:::-;24766:25;24784:6;24766:17;:25::i;:::-;24793:4;24702:20;:96::i;:::-;24811:19;24833:9;:13;24843:2;24833:13;;;;;;;;;;;:19;24847:4;24833:19;;;;;;;;;;;;;;;;24811:41;;24886:6;24871:11;:21;;24863:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25011:6;24997:11;:20;24975:9;:13;24985:2;24975:13;;;;;;;;;;;:19;24989:4;24975:19;;;;;;;;;;;;;;;:42;;;;25060:6;25039:9;:13;25049:2;25039:13;;;;;;;;;;;:17;25053:2;25039:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25115:2;25084:46;;25109:4;25084:46;;25099:8;25084:46;;;25119:2;25123:6;25084:46;;;;;;;:::i;:::-;;;;;;;;25143:68;25174:8;25184:4;25190:2;25194;25198:6;25206:4;25143:30;:68::i;:::-;24568:651;;24399:820;;;;;:::o;29933:675::-;30082:1;30063:21;;:7;:21;;;;30055:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30137:16;30156:12;:10;:12::i;:::-;30137:31;;30181:105;30202:8;30212:7;30229:1;30233:21;30251:2;30233:17;:21::i;:::-;30256:25;30274:6;30256:17;:25::i;:::-;30181:105;;;;;;;;;;;;:20;:105::i;:::-;30299:22;30324:9;:13;30334:2;30324:13;;;;;;;;;;;:22;30338:7;30324:22;;;;;;;;;;;;;;;;30299:47;;30383:6;30365:14;:24;;30357:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30508:6;30491:14;:23;30466:9;:13;30476:2;30466:13;;;;;;;;;;;:22;30480:7;30466:22;;;;;;;;;;;;;;;:48;;;;30585:1;30543:57;;30568:7;30543:57;;30558:8;30543:57;;;30589:2;30593:6;30543:57;;;;;;;:::i;:::-;;;;;;;;30044:564;;29933:675;;;:::o;32685:221::-;;;;;;;:::o;33666:813::-;33906:15;:2;:13;;;:15::i;:::-;33902:570;;;33959:2;33942:43;;;33986:8;33996:4;34002:3;34007:7;34016:4;33942:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33938:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;34334:6;34327:14;;;;;;;;;;;:::i;:::-;;;;;;;;33938:523;;;34383:62;;;;;;;;;;:::i;:::-;;;;;;;;33938:523;34115:48;;;34103:60;;;:8;:60;;;;34099:159;;34188:50;;;;;;;;;;:::i;:::-;;;;;;;;34099:159;34022:251;33902:570;33666:813;;;;;;:::o;34487:198::-;34553:16;34582:22;34621:1;34607:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34582:41;;34645:7;34634:5;34640:1;34634:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;34672:5;34665:12;;;34487:198;;;:::o;32914:744::-;33129:15;:2;:13;;;:15::i;:::-;33125:526;;;33182:2;33165:38;;;33204:8;33214:4;33220:2;33224:6;33232:4;33165:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33161:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33513:6;33506:14;;;;;;;;;;;:::i;:::-;;;;;;;;33161:479;;;33562:62;;;;;;;;;;:::i;:::-;;;;;;;;33161:479;33299:43;;;33287:55;;;:8;:55;;;;33283:154;;33367:50;;;;;;;;;;:::i;:::-;;;;;;;;33283:154;33238:214;33125:526;32914:744;;;;;;:::o;11316:387::-;11376:4;11584:12;11651:7;11639:20;11631:28;;11694:1;11687:4;:8;11680:15;;;11316:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:552::-;3761:8;3771:6;3821:3;3814:4;3806:6;3802:17;3798:27;3788:122;;3829:79;;:::i;:::-;3788:122;3942:6;3929:20;3919:30;;3972:18;3964:6;3961:30;3958:117;;;3994:79;;:::i;:::-;3958:117;4108:4;4100:6;4096:17;4084:29;;4162:3;4154:4;4146:6;4142:17;4132:8;4128:32;4125:41;4122:128;;;4169:79;;:::i;:::-;4122:128;3704:552;;;;;:::o;4275:338::-;4330:5;4379:3;4372:4;4364:6;4360:17;4356:27;4346:122;;4387:79;;:::i;:::-;4346:122;4504:6;4491:20;4529:78;4603:3;4595:6;4588:4;4580:6;4576:17;4529:78;:::i;:::-;4520:87;;4336:277;4275:338;;;;:::o;4633:340::-;4689:5;4738:3;4731:4;4723:6;4719:17;4715:27;4705:122;;4746:79;;:::i;:::-;4705:122;4863:6;4850:20;4888:79;4963:3;4955:6;4948:4;4940:6;4936:17;4888:79;:::i;:::-;4879:88;;4695:278;4633:340;;;;:::o;4979:139::-;5025:5;5063:6;5050:20;5041:29;;5079:33;5106:5;5079:33;:::i;:::-;4979:139;;;;:::o;5124:329::-;5183:6;5232:2;5220:9;5211:7;5207:23;5203:32;5200:119;;;5238:79;;:::i;:::-;5200:119;5358:1;5383:53;5428:7;5419:6;5408:9;5404:22;5383:53;:::i;:::-;5373:63;;5329:117;5124:329;;;;:::o;5459:474::-;5527:6;5535;5584:2;5572:9;5563:7;5559:23;5555:32;5552:119;;;5590:79;;:::i;:::-;5552:119;5710:1;5735:53;5780:7;5771:6;5760:9;5756:22;5735:53;:::i;:::-;5725:63;;5681:117;5837:2;5863:53;5908:7;5899:6;5888:9;5884:22;5863:53;:::i;:::-;5853:63;;5808:118;5459:474;;;;;:::o;5939:1509::-;6093:6;6101;6109;6117;6125;6174:3;6162:9;6153:7;6149:23;6145:33;6142:120;;;6181:79;;:::i;:::-;6142:120;6301:1;6326:53;6371:7;6362:6;6351:9;6347:22;6326:53;:::i;:::-;6316:63;;6272:117;6428:2;6454:53;6499:7;6490:6;6479:9;6475:22;6454:53;:::i;:::-;6444:63;;6399:118;6584:2;6573:9;6569:18;6556:32;6615:18;6607:6;6604:30;6601:117;;;6637:79;;:::i;:::-;6601:117;6742:78;6812:7;6803:6;6792:9;6788:22;6742:78;:::i;:::-;6732:88;;6527:303;6897:2;6886:9;6882:18;6869:32;6928:18;6920:6;6917:30;6914:117;;;6950:79;;:::i;:::-;6914:117;7055:78;7125:7;7116:6;7105:9;7101:22;7055:78;:::i;:::-;7045:88;;6840:303;7210:3;7199:9;7195:19;7182:33;7242:18;7234:6;7231:30;7228:117;;;7264:79;;:::i;:::-;7228:117;7369:62;7423:7;7414:6;7403:9;7399:22;7369:62;:::i;:::-;7359:72;;7153:288;5939:1509;;;;;;;;:::o;7454:1089::-;7558:6;7566;7574;7582;7590;7639:3;7627:9;7618:7;7614:23;7610:33;7607:120;;;7646:79;;:::i;:::-;7607:120;7766:1;7791:53;7836:7;7827:6;7816:9;7812:22;7791:53;:::i;:::-;7781:63;;7737:117;7893:2;7919:53;7964:7;7955:6;7944:9;7940:22;7919:53;:::i;:::-;7909:63;;7864:118;8021:2;8047:53;8092:7;8083:6;8072:9;8068:22;8047:53;:::i;:::-;8037:63;;7992:118;8149:2;8175:53;8220:7;8211:6;8200:9;8196:22;8175:53;:::i;:::-;8165:63;;8120:118;8305:3;8294:9;8290:19;8277:33;8337:18;8329:6;8326:30;8323:117;;;8359:79;;:::i;:::-;8323:117;8464:62;8518:7;8509:6;8498:9;8494:22;8464:62;:::i;:::-;8454:72;;8248:288;7454:1089;;;;;;;;:::o;8549:1039::-;8676:6;8684;8692;8741:2;8729:9;8720:7;8716:23;8712:32;8709:119;;;8747:79;;:::i;:::-;8709:119;8867:1;8892:53;8937:7;8928:6;8917:9;8913:22;8892:53;:::i;:::-;8882:63;;8838:117;9022:2;9011:9;9007:18;8994:32;9053:18;9045:6;9042:30;9039:117;;;9075:79;;:::i;:::-;9039:117;9180:78;9250:7;9241:6;9230:9;9226:22;9180:78;:::i;:::-;9170:88;;8965:303;9335:2;9324:9;9320:18;9307:32;9366:18;9358:6;9355:30;9352:117;;;9388:79;;:::i;:::-;9352:117;9493:78;9563:7;9554:6;9543:9;9539:22;9493:78;:::i;:::-;9483:88;;9278:303;8549:1039;;;;;:::o;9594:1363::-;9739:6;9747;9755;9763;9812:3;9800:9;9791:7;9787:23;9783:33;9780:120;;;9819:79;;:::i;:::-;9780:120;9939:1;9964:53;10009:7;10000:6;9989:9;9985:22;9964:53;:::i;:::-;9954:63;;9910:117;10094:2;10083:9;10079:18;10066:32;10125:18;10117:6;10114:30;10111:117;;;10147:79;;:::i;:::-;10111:117;10252:78;10322:7;10313:6;10302:9;10298:22;10252:78;:::i;:::-;10242:88;;10037:303;10407:2;10396:9;10392:18;10379:32;10438:18;10430:6;10427:30;10424:117;;;10460:79;;:::i;:::-;10424:117;10565:78;10635:7;10626:6;10615:9;10611:22;10565:78;:::i;:::-;10555:88;;10350:303;10720:2;10709:9;10705:18;10692:32;10751:18;10743:6;10740:30;10737:117;;;10773:79;;:::i;:::-;10737:117;10878:62;10932:7;10923:6;10912:9;10908:22;10878:62;:::i;:::-;10868:72;;10663:287;9594:1363;;;;;;;:::o;10963:468::-;11028:6;11036;11085:2;11073:9;11064:7;11060:23;11056:32;11053:119;;;11091:79;;:::i;:::-;11053:119;11211:1;11236:53;11281:7;11272:6;11261:9;11257:22;11236:53;:::i;:::-;11226:63;;11182:117;11338:2;11364:50;11406:7;11397:6;11386:9;11382:22;11364:50;:::i;:::-;11354:60;;11309:115;10963:468;;;;;:::o;11437:672::-;11516:6;11524;11532;11581:2;11569:9;11560:7;11556:23;11552:32;11549:119;;;11587:79;;:::i;:::-;11549:119;11707:1;11732:53;11777:7;11768:6;11757:9;11753:22;11732:53;:::i;:::-;11722:63;;11678:117;11862:2;11851:9;11847:18;11834:32;11893:18;11885:6;11882:30;11879:117;;;11915:79;;:::i;:::-;11879:117;12028:64;12084:7;12075:6;12064:9;12060:22;12028:64;:::i;:::-;12010:82;;;;11805:297;11437:672;;;;;:::o;12115:474::-;12183:6;12191;12240:2;12228:9;12219:7;12215:23;12211:32;12208:119;;;12246:79;;:::i;:::-;12208:119;12366:1;12391:53;12436:7;12427:6;12416:9;12412:22;12391:53;:::i;:::-;12381:63;;12337:117;12493:2;12519:53;12564:7;12555:6;12544:9;12540:22;12519:53;:::i;:::-;12509:63;;12464:118;12115:474;;;;;:::o;12595:619::-;12672:6;12680;12688;12737:2;12725:9;12716:7;12712:23;12708:32;12705:119;;;12743:79;;:::i;:::-;12705:119;12863:1;12888:53;12933:7;12924:6;12913:9;12909:22;12888:53;:::i;:::-;12878:63;;12834:117;12990:2;13016:53;13061:7;13052:6;13041:9;13037:22;13016:53;:::i;:::-;13006:63;;12961:118;13118:2;13144:53;13189:7;13180:6;13169:9;13165:22;13144:53;:::i;:::-;13134:63;;13089:118;12595:619;;;;;:::o;13220:943::-;13315:6;13323;13331;13339;13388:3;13376:9;13367:7;13363:23;13359:33;13356:120;;;13395:79;;:::i;:::-;13356:120;13515:1;13540:53;13585:7;13576:6;13565:9;13561:22;13540:53;:::i;:::-;13530:63;;13486:117;13642:2;13668:53;13713:7;13704:6;13693:9;13689:22;13668:53;:::i;:::-;13658:63;;13613:118;13770:2;13796:53;13841:7;13832:6;13821:9;13817:22;13796:53;:::i;:::-;13786:63;;13741:118;13926:2;13915:9;13911:18;13898:32;13957:18;13949:6;13946:30;13943:117;;;13979:79;;:::i;:::-;13943:117;14084:62;14138:7;14129:6;14118:9;14114:22;14084:62;:::i;:::-;14074:72;;13869:287;13220:943;;;;;;;:::o;14169:894::-;14287:6;14295;14344:2;14332:9;14323:7;14319:23;14315:32;14312:119;;;14350:79;;:::i;:::-;14312:119;14498:1;14487:9;14483:17;14470:31;14528:18;14520:6;14517:30;14514:117;;;14550:79;;:::i;:::-;14514:117;14655:78;14725:7;14716:6;14705:9;14701:22;14655:78;:::i;:::-;14645:88;;14441:302;14810:2;14799:9;14795:18;14782:32;14841:18;14833:6;14830:30;14827:117;;;14863:79;;:::i;:::-;14827:117;14968:78;15038:7;15029:6;15018:9;15014:22;14968:78;:::i;:::-;14958:88;;14753:303;14169:894;;;;;:::o;15069:327::-;15127:6;15176:2;15164:9;15155:7;15151:23;15147:32;15144:119;;;15182:79;;:::i;:::-;15144:119;15302:1;15327:52;15371:7;15362:6;15351:9;15347:22;15327:52;:::i;:::-;15317:62;;15273:116;15069:327;;;;:::o;15402:349::-;15471:6;15520:2;15508:9;15499:7;15495:23;15491:32;15488:119;;;15526:79;;:::i;:::-;15488:119;15646:1;15671:63;15726:7;15717:6;15706:9;15702:22;15671:63;:::i;:::-;15661:73;;15617:127;15402:349;;;;:::o;15757:509::-;15826:6;15875:2;15863:9;15854:7;15850:23;15846:32;15843:119;;;15881:79;;:::i;:::-;15843:119;16029:1;16018:9;16014:17;16001:31;16059:18;16051:6;16048:30;16045:117;;;16081:79;;:::i;:::-;16045:117;16186:63;16241:7;16232:6;16221:9;16217:22;16186:63;:::i;:::-;16176:73;;15972:287;15757:509;;;;:::o;16272:329::-;16331:6;16380:2;16368:9;16359:7;16355:23;16351:32;16348:119;;;16386:79;;:::i;:::-;16348:119;16506:1;16531:53;16576:7;16567:6;16556:9;16552:22;16531:53;:::i;:::-;16521:63;;16477:117;16272:329;;;;:::o;16607:179::-;16676:10;16697:46;16739:3;16731:6;16697:46;:::i;:::-;16775:4;16770:3;16766:14;16752:28;;16607:179;;;;:::o;16792:118::-;16879:24;16897:5;16879:24;:::i;:::-;16874:3;16867:37;16792:118;;:::o;16946:732::-;17065:3;17094:54;17142:5;17094:54;:::i;:::-;17164:86;17243:6;17238:3;17164:86;:::i;:::-;17157:93;;17274:56;17324:5;17274:56;:::i;:::-;17353:7;17384:1;17369:284;17394:6;17391:1;17388:13;17369:284;;;17470:6;17464:13;17497:63;17556:3;17541:13;17497:63;:::i;:::-;17490:70;;17583:60;17636:6;17583:60;:::i;:::-;17573:70;;17429:224;17416:1;17413;17409:9;17404:14;;17369:284;;;17373:14;17669:3;17662:10;;17070:608;;;16946:732;;;;:::o;17684:109::-;17765:21;17780:5;17765:21;:::i;:::-;17760:3;17753:34;17684:109;;:::o;17799:360::-;17885:3;17913:38;17945:5;17913:38;:::i;:::-;17967:70;18030:6;18025:3;17967:70;:::i;:::-;17960:77;;18046:52;18091:6;18086:3;18079:4;18072:5;18068:16;18046:52;:::i;:::-;18123:29;18145:6;18123:29;:::i;:::-;18118:3;18114:39;18107:46;;17889:270;17799:360;;;;:::o;18165:364::-;18253:3;18281:39;18314:5;18281:39;:::i;:::-;18336:71;18400:6;18395:3;18336:71;:::i;:::-;18329:78;;18416:52;18461:6;18456:3;18449:4;18442:5;18438:16;18416:52;:::i;:::-;18493:29;18515:6;18493:29;:::i;:::-;18488:3;18484:39;18477:46;;18257:272;18165:364;;;;:::o;18535:377::-;18641:3;18669:39;18702:5;18669:39;:::i;:::-;18724:89;18806:6;18801:3;18724:89;:::i;:::-;18717:96;;18822:52;18867:6;18862:3;18855:4;18848:5;18844:16;18822:52;:::i;:::-;18899:6;18894:3;18890:16;18883:23;;18645:267;18535:377;;;;:::o;18918:366::-;19060:3;19081:67;19145:2;19140:3;19081:67;:::i;:::-;19074:74;;19157:93;19246:3;19157:93;:::i;:::-;19275:2;19270:3;19266:12;19259:19;;18918:366;;;:::o;19290:::-;19432:3;19453:67;19517:2;19512:3;19453:67;:::i;:::-;19446:74;;19529:93;19618:3;19529:93;:::i;:::-;19647:2;19642:3;19638:12;19631:19;;19290:366;;;:::o;19662:::-;19804:3;19825:67;19889:2;19884:3;19825:67;:::i;:::-;19818:74;;19901:93;19990:3;19901:93;:::i;:::-;20019:2;20014:3;20010:12;20003:19;;19662:366;;;:::o;20034:::-;20176:3;20197:67;20261:2;20256:3;20197:67;:::i;:::-;20190:74;;20273:93;20362:3;20273:93;:::i;:::-;20391:2;20386:3;20382:12;20375:19;;20034:366;;;:::o;20406:::-;20548:3;20569:67;20633:2;20628:3;20569:67;:::i;:::-;20562:74;;20645:93;20734:3;20645:93;:::i;:::-;20763:2;20758:3;20754:12;20747:19;;20406:366;;;:::o;20778:::-;20920:3;20941:67;21005:2;21000:3;20941:67;:::i;:::-;20934:74;;21017:93;21106:3;21017:93;:::i;:::-;21135:2;21130:3;21126:12;21119:19;;20778:366;;;:::o;21150:::-;21292:3;21313:67;21377:2;21372:3;21313:67;:::i;:::-;21306:74;;21389:93;21478:3;21389:93;:::i;:::-;21507:2;21502:3;21498:12;21491:19;;21150:366;;;:::o;21522:::-;21664:3;21685:67;21749:2;21744:3;21685:67;:::i;:::-;21678:74;;21761:93;21850:3;21761:93;:::i;:::-;21879:2;21874:3;21870:12;21863:19;;21522:366;;;:::o;21894:::-;22036:3;22057:67;22121:2;22116:3;22057:67;:::i;:::-;22050:74;;22133:93;22222:3;22133:93;:::i;:::-;22251:2;22246:3;22242:12;22235:19;;21894:366;;;:::o;22266:::-;22408:3;22429:67;22493:2;22488:3;22429:67;:::i;:::-;22422:74;;22505:93;22594:3;22505:93;:::i;:::-;22623:2;22618:3;22614:12;22607:19;;22266:366;;;:::o;22638:::-;22780:3;22801:67;22865:2;22860:3;22801:67;:::i;:::-;22794:74;;22877:93;22966:3;22877:93;:::i;:::-;22995:2;22990:3;22986:12;22979:19;;22638:366;;;:::o;23010:::-;23152:3;23173:67;23237:2;23232:3;23173:67;:::i;:::-;23166:74;;23249:93;23338:3;23249:93;:::i;:::-;23367:2;23362:3;23358:12;23351:19;;23010:366;;;:::o;23382:::-;23524:3;23545:67;23609:2;23604:3;23545:67;:::i;:::-;23538:74;;23621:93;23710:3;23621:93;:::i;:::-;23739:2;23734:3;23730:12;23723:19;;23382:366;;;:::o;23754:::-;23896:3;23917:67;23981:2;23976:3;23917:67;:::i;:::-;23910:74;;23993:93;24082:3;23993:93;:::i;:::-;24111:2;24106:3;24102:12;24095:19;;23754:366;;;:::o;24126:::-;24268:3;24289:67;24353:2;24348:3;24289:67;:::i;:::-;24282:74;;24365:93;24454:3;24365:93;:::i;:::-;24483:2;24478:3;24474:12;24467:19;;24126:366;;;:::o;24498:::-;24640:3;24661:67;24725:2;24720:3;24661:67;:::i;:::-;24654:74;;24737:93;24826:3;24737:93;:::i;:::-;24855:2;24850:3;24846:12;24839:19;;24498:366;;;:::o;24870:108::-;24947:24;24965:5;24947:24;:::i;:::-;24942:3;24935:37;24870:108;;:::o;24984:118::-;25071:24;25089:5;25071:24;:::i;:::-;25066:3;25059:37;24984:118;;:::o;25108:435::-;25288:3;25310:95;25401:3;25392:6;25310:95;:::i;:::-;25303:102;;25422:95;25513:3;25504:6;25422:95;:::i;:::-;25415:102;;25534:3;25527:10;;25108:435;;;;;:::o;25549:222::-;25642:4;25680:2;25669:9;25665:18;25657:26;;25693:71;25761:1;25750:9;25746:17;25737:6;25693:71;:::i;:::-;25549:222;;;;:::o;25777:1053::-;26100:4;26138:3;26127:9;26123:19;26115:27;;26152:71;26220:1;26209:9;26205:17;26196:6;26152:71;:::i;:::-;26233:72;26301:2;26290:9;26286:18;26277:6;26233:72;:::i;:::-;26352:9;26346:4;26342:20;26337:2;26326:9;26322:18;26315:48;26380:108;26483:4;26474:6;26380:108;:::i;:::-;26372:116;;26535:9;26529:4;26525:20;26520:2;26509:9;26505:18;26498:48;26563:108;26666:4;26657:6;26563:108;:::i;:::-;26555:116;;26719:9;26713:4;26709:20;26703:3;26692:9;26688:19;26681:49;26747:76;26818:4;26809:6;26747:76;:::i;:::-;26739:84;;25777:1053;;;;;;;;:::o;26836:751::-;27059:4;27097:3;27086:9;27082:19;27074:27;;27111:71;27179:1;27168:9;27164:17;27155:6;27111:71;:::i;:::-;27192:72;27260:2;27249:9;27245:18;27236:6;27192:72;:::i;:::-;27274;27342:2;27331:9;27327:18;27318:6;27274:72;:::i;:::-;27356;27424:2;27413:9;27409:18;27400:6;27356:72;:::i;:::-;27476:9;27470:4;27466:20;27460:3;27449:9;27445:19;27438:49;27504:76;27575:4;27566:6;27504:76;:::i;:::-;27496:84;;26836:751;;;;;;;;:::o;27593:373::-;27736:4;27774:2;27763:9;27759:18;27751:26;;27823:9;27817:4;27813:20;27809:1;27798:9;27794:17;27787:47;27851:108;27954:4;27945:6;27851:108;:::i;:::-;27843:116;;27593:373;;;;:::o;27972:634::-;28193:4;28231:2;28220:9;28216:18;28208:26;;28280:9;28274:4;28270:20;28266:1;28255:9;28251:17;28244:47;28308:108;28411:4;28402:6;28308:108;:::i;:::-;28300:116;;28463:9;28457:4;28453:20;28448:2;28437:9;28433:18;28426:48;28491:108;28594:4;28585:6;28491:108;:::i;:::-;28483:116;;27972:634;;;;;:::o;28612:210::-;28699:4;28737:2;28726:9;28722:18;28714:26;;28750:65;28812:1;28801:9;28797:17;28788:6;28750:65;:::i;:::-;28612:210;;;;:::o;28828:313::-;28941:4;28979:2;28968:9;28964:18;28956:26;;29028:9;29022:4;29018:20;29014:1;29003:9;28999:17;28992:47;29056:78;29129:4;29120:6;29056:78;:::i;:::-;29048:86;;28828:313;;;;:::o;29147:419::-;29313:4;29351:2;29340:9;29336:18;29328:26;;29400:9;29394:4;29390:20;29386:1;29375:9;29371:17;29364:47;29428:131;29554:4;29428:131;:::i;:::-;29420:139;;29147:419;;;:::o;29572:::-;29738:4;29776:2;29765:9;29761:18;29753:26;;29825:9;29819:4;29815:20;29811:1;29800:9;29796:17;29789:47;29853:131;29979:4;29853:131;:::i;:::-;29845:139;;29572:419;;;:::o;29997:::-;30163:4;30201:2;30190:9;30186:18;30178:26;;30250:9;30244:4;30240:20;30236:1;30225:9;30221:17;30214:47;30278:131;30404:4;30278:131;:::i;:::-;30270:139;;29997:419;;;:::o;30422:::-;30588:4;30626:2;30615:9;30611:18;30603:26;;30675:9;30669:4;30665:20;30661:1;30650:9;30646:17;30639:47;30703:131;30829:4;30703:131;:::i;:::-;30695:139;;30422:419;;;:::o;30847:::-;31013:4;31051:2;31040:9;31036:18;31028:26;;31100:9;31094:4;31090:20;31086:1;31075:9;31071:17;31064:47;31128:131;31254:4;31128:131;:::i;:::-;31120:139;;30847:419;;;:::o;31272:::-;31438:4;31476:2;31465:9;31461:18;31453:26;;31525:9;31519:4;31515:20;31511:1;31500:9;31496:17;31489:47;31553:131;31679:4;31553:131;:::i;:::-;31545:139;;31272:419;;;:::o;31697:::-;31863:4;31901:2;31890:9;31886:18;31878:26;;31950:9;31944:4;31940:20;31936:1;31925:9;31921:17;31914:47;31978:131;32104:4;31978:131;:::i;:::-;31970:139;;31697:419;;;:::o;32122:::-;32288:4;32326:2;32315:9;32311:18;32303:26;;32375:9;32369:4;32365:20;32361:1;32350:9;32346:17;32339:47;32403:131;32529:4;32403:131;:::i;:::-;32395:139;;32122:419;;;:::o;32547:::-;32713:4;32751:2;32740:9;32736:18;32728:26;;32800:9;32794:4;32790:20;32786:1;32775:9;32771:17;32764:47;32828:131;32954:4;32828:131;:::i;:::-;32820:139;;32547:419;;;:::o;32972:::-;33138:4;33176:2;33165:9;33161:18;33153:26;;33225:9;33219:4;33215:20;33211:1;33200:9;33196:17;33189:47;33253:131;33379:4;33253:131;:::i;:::-;33245:139;;32972:419;;;:::o;33397:::-;33563:4;33601:2;33590:9;33586:18;33578:26;;33650:9;33644:4;33640:20;33636:1;33625:9;33621:17;33614:47;33678:131;33804:4;33678:131;:::i;:::-;33670:139;;33397:419;;;:::o;33822:::-;33988:4;34026:2;34015:9;34011:18;34003:26;;34075:9;34069:4;34065:20;34061:1;34050:9;34046:17;34039:47;34103:131;34229:4;34103:131;:::i;:::-;34095:139;;33822:419;;;:::o;34247:::-;34413:4;34451:2;34440:9;34436:18;34428:26;;34500:9;34494:4;34490:20;34486:1;34475:9;34471:17;34464:47;34528:131;34654:4;34528:131;:::i;:::-;34520:139;;34247:419;;;:::o;34672:::-;34838:4;34876:2;34865:9;34861:18;34853:26;;34925:9;34919:4;34915:20;34911:1;34900:9;34896:17;34889:47;34953:131;35079:4;34953:131;:::i;:::-;34945:139;;34672:419;;;:::o;35097:::-;35263:4;35301:2;35290:9;35286:18;35278:26;;35350:9;35344:4;35340:20;35336:1;35325:9;35321:17;35314:47;35378:131;35504:4;35378:131;:::i;:::-;35370:139;;35097:419;;;:::o;35522:::-;35688:4;35726:2;35715:9;35711:18;35703:26;;35775:9;35769:4;35765:20;35761:1;35750:9;35746:17;35739:47;35803:131;35929:4;35803:131;:::i;:::-;35795:139;;35522:419;;;:::o;35947:222::-;36040:4;36078:2;36067:9;36063:18;36055:26;;36091:71;36159:1;36148:9;36144:17;36135:6;36091:71;:::i;:::-;35947:222;;;;:::o;36175:332::-;36296:4;36334:2;36323:9;36319:18;36311:26;;36347:71;36415:1;36404:9;36400:17;36391:6;36347:71;:::i;:::-;36428:72;36496:2;36485:9;36481:18;36472:6;36428:72;:::i;:::-;36175:332;;;;;:::o;36513:129::-;36547:6;36574:20;;:::i;:::-;36564:30;;36603:33;36631:4;36623:6;36603:33;:::i;:::-;36513:129;;;:::o;36648:75::-;36681:6;36714:2;36708:9;36698:19;;36648:75;:::o;36729:311::-;36806:4;36896:18;36888:6;36885:30;36882:56;;;36918:18;;:::i;:::-;36882:56;36968:4;36960:6;36956:17;36948:25;;37028:4;37022;37018:15;37010:23;;36729:311;;;:::o;37046:::-;37123:4;37213:18;37205:6;37202:30;37199:56;;;37235:18;;:::i;:::-;37199:56;37285:4;37277:6;37273:17;37265:25;;37345:4;37339;37335:15;37327:23;;37046:311;;;:::o;37363:307::-;37424:4;37514:18;37506:6;37503:30;37500:56;;;37536:18;;:::i;:::-;37500:56;37574:29;37596:6;37574:29;:::i;:::-;37566:37;;37658:4;37652;37648:15;37640:23;;37363:307;;;:::o;37676:308::-;37738:4;37828:18;37820:6;37817:30;37814:56;;;37850:18;;:::i;:::-;37814:56;37888:29;37910:6;37888:29;:::i;:::-;37880:37;;37972:4;37966;37962:15;37954:23;;37676:308;;;:::o;37990:132::-;38057:4;38080:3;38072:11;;38110:4;38105:3;38101:14;38093:22;;37990:132;;;:::o;38128:114::-;38195:6;38229:5;38223:12;38213:22;;38128:114;;;:::o;38248:98::-;38299:6;38333:5;38327:12;38317:22;;38248:98;;;:::o;38352:99::-;38404:6;38438:5;38432:12;38422:22;;38352:99;;;:::o;38457:113::-;38527:4;38559;38554:3;38550:14;38542:22;;38457:113;;;:::o;38576:184::-;38675:11;38709:6;38704:3;38697:19;38749:4;38744:3;38740:14;38725:29;;38576:184;;;;:::o;38766:168::-;38849:11;38883:6;38878:3;38871:19;38923:4;38918:3;38914:14;38899:29;;38766:168;;;;:::o;38940:169::-;39024:11;39058:6;39053:3;39046:19;39098:4;39093:3;39089:14;39074:29;;38940:169;;;;:::o;39115:148::-;39217:11;39254:3;39239:18;;39115:148;;;;:::o;39269:305::-;39309:3;39328:20;39346:1;39328:20;:::i;:::-;39323:25;;39362:20;39380:1;39362:20;:::i;:::-;39357:25;;39516:1;39448:66;39444:74;39441:1;39438:81;39435:107;;;39522:18;;:::i;:::-;39435:107;39566:1;39563;39559:9;39552:16;;39269:305;;;;:::o;39580:185::-;39620:1;39637:20;39655:1;39637:20;:::i;:::-;39632:25;;39671:20;39689:1;39671:20;:::i;:::-;39666:25;;39710:1;39700:35;;39715:18;;:::i;:::-;39700:35;39757:1;39754;39750:9;39745:14;;39580:185;;;;:::o;39771:191::-;39811:4;39831:20;39849:1;39831:20;:::i;:::-;39826:25;;39865:20;39883:1;39865:20;:::i;:::-;39860:25;;39904:1;39901;39898:8;39895:34;;;39909:18;;:::i;:::-;39895:34;39954:1;39951;39947:9;39939:17;;39771:191;;;;:::o;39968:96::-;40005:7;40034:24;40052:5;40034:24;:::i;:::-;40023:35;;39968:96;;;:::o;40070:90::-;40104:7;40147:5;40140:13;40133:21;40122:32;;40070:90;;;:::o;40166:149::-;40202:7;40242:66;40235:5;40231:78;40220:89;;40166:149;;;:::o;40321:126::-;40358:7;40398:42;40391:5;40387:54;40376:65;;40321:126;;;:::o;40453:77::-;40490:7;40519:5;40508:16;;40453:77;;;:::o;40536:154::-;40620:6;40615:3;40610;40597:30;40682:1;40673:6;40668:3;40664:16;40657:27;40536:154;;;:::o;40696:307::-;40764:1;40774:113;40788:6;40785:1;40782:13;40774:113;;;40873:1;40868:3;40864:11;40858:18;40854:1;40849:3;40845:11;40838:39;40810:2;40807:1;40803:10;40798:15;;40774:113;;;40905:6;40902:1;40899:13;40896:101;;;40985:1;40976:6;40971:3;40967:16;40960:27;40896:101;40745:258;40696:307;;;:::o;41009:320::-;41053:6;41090:1;41084:4;41080:12;41070:22;;41137:1;41131:4;41127:12;41158:18;41148:81;;41214:4;41206:6;41202:17;41192:27;;41148:81;41276:2;41268:6;41265:14;41245:18;41242:38;41239:84;;;41295:18;;:::i;:::-;41239:84;41060:269;41009:320;;;:::o;41335:281::-;41418:27;41440:4;41418:27;:::i;:::-;41410:6;41406:40;41548:6;41536:10;41533:22;41512:18;41500:10;41497:34;41494:62;41491:88;;;41559:18;;:::i;:::-;41491:88;41599:10;41595:2;41588:22;41378:238;41335:281;;:::o;41622:233::-;41661:3;41684:24;41702:5;41684:24;:::i;:::-;41675:33;;41730:66;41723:5;41720:77;41717:103;;;41800:18;;:::i;:::-;41717:103;41847:1;41840:5;41836:13;41829:20;;41622:233;;;:::o;41861:176::-;41893:1;41910:20;41928:1;41910:20;:::i;:::-;41905:25;;41944:20;41962:1;41944:20;:::i;:::-;41939:25;;41983:1;41973:35;;41988:18;;:::i;:::-;41973:35;42029:1;42026;42022:9;42017:14;;41861:176;;;;:::o;42043:180::-;42091:77;42088:1;42081:88;42188:4;42185:1;42178:15;42212:4;42209:1;42202:15;42229:180;42277:77;42274:1;42267:88;42374:4;42371:1;42364:15;42398:4;42395:1;42388:15;42415:180;42463:77;42460:1;42453:88;42560:4;42557:1;42550:15;42584:4;42581:1;42574:15;42601:180;42649:77;42646:1;42639:88;42746:4;42743:1;42736:15;42770:4;42767:1;42760:15;42787:180;42835:77;42832:1;42825:88;42932:4;42929:1;42922:15;42956:4;42953:1;42946:15;42973:183;43008:3;43046:1;43028:16;43025:23;43022:128;;;43084:1;43081;43078;43063:23;43106:34;43137:1;43131:8;43106:34;:::i;:::-;43099:41;;43022:128;42973:183;:::o;43162:117::-;43271:1;43268;43261:12;43285:117;43394:1;43391;43384:12;43408:117;43517:1;43514;43507:12;43531:117;43640:1;43637;43630:12;43654:117;43763:1;43760;43753:12;43777:117;43886:1;43883;43876:12;43900:102;43941:6;43992:2;43988:7;43983:2;43976:5;43972:14;43968:28;43958:38;;43900:102;;;:::o;44008:106::-;44052:8;44101:5;44096:3;44092:15;44071:36;;44008:106;;;:::o;44120:239::-;44260:34;44256:1;44248:6;44244:14;44237:58;44329:22;44324:2;44316:6;44312:15;44305:47;44120:239;:::o;44365:227::-;44505:34;44501:1;44493:6;44489:14;44482:58;44574:10;44569:2;44561:6;44557:15;44550:35;44365:227;:::o;44598:179::-;44738:31;44734:1;44726:6;44722:14;44715:55;44598:179;:::o;44783:230::-;44923:34;44919:1;44911:6;44907:14;44900:58;44992:13;44987:2;44979:6;44975:15;44968:38;44783:230;:::o;45019:225::-;45159:34;45155:1;45147:6;45143:14;45136:58;45228:8;45223:2;45215:6;45211:15;45204:33;45019:225;:::o;45250:223::-;45390:34;45386:1;45378:6;45374:14;45367:58;45459:6;45454:2;45446:6;45442:15;45435:31;45250:223;:::o;45479:228::-;45619:34;45615:1;45607:6;45603:14;45596:58;45688:11;45683:2;45675:6;45671:15;45664:36;45479:228;:::o;45713:224::-;45853:34;45849:1;45841:6;45837:14;45830:58;45922:7;45917:2;45909:6;45905:15;45898:32;45713:224;:::o;45943:237::-;46083:34;46079:1;46071:6;46067:14;46060:58;46152:20;46147:2;46139:6;46135:15;46128:45;45943:237;:::o;46186:222::-;46326:34;46322:1;46314:6;46310:14;46303:58;46395:5;46390:2;46382:6;46378:15;46371:30;46186:222;:::o;46414:229::-;46554:34;46550:1;46542:6;46538:14;46531:58;46623:12;46618:2;46610:6;46606:15;46599:37;46414:229;:::o;46649:182::-;46789:34;46785:1;46777:6;46773:14;46766:58;46649:182;:::o;46837:228::-;46977:34;46973:1;46965:6;46961:14;46954:58;47046:11;47041:2;47033:6;47029:15;47022:36;46837:228;:::o;47071:::-;47211:34;47207:1;47199:6;47195:14;47188:58;47280:11;47275:2;47267:6;47263:15;47256:36;47071:228;:::o;47305:227::-;47445:34;47441:1;47433:6;47429:14;47422:58;47514:10;47509:2;47501:6;47497:15;47490:35;47305:227;:::o;47538:220::-;47678:34;47674:1;47666:6;47662:14;47655:58;47747:3;47742:2;47734:6;47730:15;47723:28;47538:220;:::o;47764:711::-;47803:3;47841:4;47823:16;47820:26;47817:39;;;47849:5;;47817:39;47878:20;;:::i;:::-;47953:1;47935:16;47931:24;47928:1;47922:4;47907:49;47986:4;47980:11;48085:16;48078:4;48070:6;48066:17;48063:39;48030:18;48022:6;48019:30;48003:113;48000:146;;;48131:5;;;;48000:146;48177:6;48171:4;48167:17;48213:3;48207:10;48240:18;48232:6;48229:30;48226:43;;;48262:5;;;;;;48226:43;48310:6;48303:4;48298:3;48294:14;48290:27;48369:1;48351:16;48347:24;48341:4;48337:35;48332:3;48329:44;48326:57;;;48376:5;;;;;;;48326:57;48393;48441:6;48435:4;48431:17;48423:6;48419:30;48413:4;48393:57;:::i;:::-;48466:3;48459:10;;47807:668;;;;;47764:711;;:::o;48481:122::-;48554:24;48572:5;48554:24;:::i;:::-;48547:5;48544:35;48534:63;;48593:1;48590;48583:12;48534:63;48481:122;:::o;48609:116::-;48679:21;48694:5;48679:21;:::i;:::-;48672:5;48669:32;48659:60;;48715:1;48712;48705:12;48659:60;48609:116;:::o;48731:120::-;48803:23;48820:5;48803:23;:::i;:::-;48796:5;48793:34;48783:62;;48841:1;48838;48831:12;48783:62;48731:120;:::o;48857:122::-;48930:24;48948:5;48930:24;:::i;:::-;48923:5;48920:35;48910:63;;48969:1;48966;48959:12;48910:63;48857:122;:::o
Swarm Source
ipfs://e180c723df2390dd6d7365e549a00479b6c16d139c41e0af006e963270aca2c9
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ 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.