Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Register To Whit... | 15009137 | 989 days ago | IN | 0 ETH | 0.00464755 | ||||
Register To Whit... | 15008021 | 990 days ago | IN | 0 ETH | 0.00294801 | ||||
Transfer Ownersh... | 15007487 | 990 days ago | IN | 0 ETH | 0.00071542 | ||||
Set Royalty Info | 15007447 | 990 days ago | IN | 0 ETH | 0.00051133 | ||||
Set New Added Am... | 15007403 | 990 days ago | IN | 0 ETH | 0.00190635 | ||||
Set Base URI | 15007400 | 990 days ago | IN | 0 ETH | 0.00307529 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ScalesNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-22 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; // import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; // import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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 () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMath { /** * @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) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @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 sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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 mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } 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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } abstract contract ERC721URIStorage is ERC721Enumerable { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } contract ScalesNFT is ERC721URIStorage, Ownable { using SafeMath for uint256; using Strings for uint256; address royaltyReceiver; uint256 royaltyFeesInBips; string private _tokenBaseURI; uint256 public max_mint_amount = 2; uint256 public newAddedAmount; uint256 public totalDroppedAmount; uint256 public totalMintedAmount = 0; mapping ( address => uint256 ) public whitelisted; mapping ( address => uint256 ) public mintedAmount; event ownerRegisterOneUserToWhitelist ( address user ); event ownerRemoveOneUserFromWhitelist ( address user ); event ownerRegisterSomeUsersToWhitelist ( address[] users ); event ownerRemoveSomeUsersFromWhitelist ( address[] users ); event userMintOneNFT( address user, uint256 tokenId); event userMintSomeNFTs ( address to, uint256[] tokenIds); event ownerSetNewAddedAmount ( uint256 amount ); event ownerSetBaseURI ( string baseURI ); constructor(string memory name, string memory symbol, uint256 _royaltyFeesInBips) ERC721(name, symbol) { royaltyReceiver = msg.sender; royaltyFeesInBips = _royaltyFeesInBips; } /** * @dev EIP-2981 * * bytes4(keccak256("royaltyInfo(uint256,uint256)")) == 0x2a55205a * * => 0x2a55205a = 0x2a55205a */ bytes4 private constant _INTERFACE_ID_ROYALTIES_EIP2981 = 0x2a55205a; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == _INTERFACE_ID_ROYALTIES_EIP2981 || super.supportsInterface(interfaceId); } function royaltyInfo( uint256 _tokenId, uint256 _salePrice ) external view returns ( address receiver, uint256 royaltyAmount ) { return (royaltyReceiver, calculateRoyalty(_salePrice)); } function calculateRoyalty(uint256 _salePrice) view public returns(uint256) { return (_salePrice / 10000) * royaltyFeesInBips; } function setRoyaltyInfo (address _receiver, uint256 _royaltyFeesInBips) public onlyOwner { royaltyReceiver = _receiver; royaltyFeesInBips = _royaltyFeesInBips; } function mint () public { if ( msg.sender != owner() ) { require( whitelisted[msg.sender] == 1, "Mint : This user is not whitelisted"); require( mintedAmount[msg.sender] + 1 <= max_mint_amount, "Mint : You already minted Maximum Mint Amount" ); } require(totalMintedAmount + 1 <= totalDroppedAmount, "Mint : NFTs on this drop are already minted"); uint256 _tokenId; _tokenId = totalMintedAmount + 1; _mint(msg.sender, _tokenId); _setTokenURI(_tokenId, tokenURI(_tokenId)); // token URI need to be changed totalMintedAmount++; mintedAmount[msg.sender]++; emit userMintOneNFT(msg.sender, _tokenId); } function mintBatch ( address to, uint256 amount) public { // need to be changed require ( to != address(0), "mintBatch : You can't mint NFTs to zero address" ); require ( amount > 0, "mintBatch : You need to mint at least one NFT" ); require ( totalMintedAmount + amount <= totalDroppedAmount, "mintBatch : There are no enough NFTs in this drop"); if ( msg.sender != owner() ) { require ( msg.sender == to, "mintBatch : Target address must be your address because you are not the owner"); require ( whitelisted[to] == 1, "mintBatch ; Target user is not whitelisted"); require ( mintedAmount[to] + amount <= max_mint_amount, "mintBatch : Target user can't take more than Mamimum Mint Amount" ); } uint256[] memory tokenIds = new uint256[](amount); for ( uint256 i = 0; i < amount; i++ ) { tokenIds[i] = totalMintedAmount + 1; _mint( to, tokenIds[i] ); _setTokenURI(tokenIds[i], tokenURI(tokenIds[i])); // token URI need to be changed totalMintedAmount++; } if (msg.sender == to) { mintedAmount[to] += amount; } emit userMintSomeNFTs(to, tokenIds); } function registerToWhitelist ( address user ) public onlyOwner { require( whitelisted[user] == 0, "Register To Whitelist : This user is already whitelisted" ); whitelisted[user] = 1; emit ownerRegisterOneUserToWhitelist(user); } function removeFromWhitelist ( address user) public onlyOwner { require(whitelisted[user] == 1, "Remove From Whitelist : This user have never been whitelisted"); whitelisted[user] = 0; emit ownerRemoveOneUserFromWhitelist(user); } function registerToWhitelistBatch ( address[] memory users ) public onlyOwner { for ( uint i = 0; i < users.length; i++ ) { require(whitelisted[users[i]] == 0, "Batch Register To Whitelist : Some user of this input is already whitelisted"); } for ( uint i = 0; i < users.length; i++ ) { whitelisted[users[i]] = 1; } emit ownerRegisterSomeUsersToWhitelist( users ); } function removeFromWhitelistBatch ( address[] memory users ) public onlyOwner { for ( uint i = 0; i < users.length; i++ ) { require(whitelisted[users[i]] == 1, "Batch Remove From Whitelist : Some user of input have never been whitelisted"); } for ( uint i = 0; i < users.length; i++ ) { whitelisted[users[i]] = 0; } emit ownerRemoveSomeUsersFromWhitelist( users ); } function setNewAddedAmount ( uint256 _newAddedAmount ) public onlyOwner { newAddedAmount = _newAddedAmount; totalDroppedAmount += newAddedAmount; emit ownerSetNewAddedAmount(_newAddedAmount); } function setBaseURI ( string memory tokenBaseURI ) public onlyOwner { _tokenBaseURI = tokenBaseURI; emit ownerSetBaseURI( tokenBaseURI ); } function setTokenURI ( uint256 tokenId, string memory _tokenURI ) public onlyOwner { _setTokenURI(tokenId, _tokenURI); } function setTokenURIWithBaseURI ( uint256 tokenId ) public onlyOwner { _setTokenURI(tokenId, tokenURI(tokenId)); } function tokenURI ( uint256 tokenId ) public view override returns ( string memory ) { return string(abi.encodePacked(_tokenBaseURI, tokenId.toString())); } function getNewAddedAmount() public view returns (uint256) { return newAddedAmount; } function getTotalDroppedAmount () public view returns (uint256) { return totalDroppedAmount; } function getTotalMintedAmount() public view returns (uint256) { return totalMintedAmount; } function isWhitelisted(address user) public view returns (bool) { return whitelisted[user] == 1; } function getMintedAmount(address user) public view returns ( uint256) { return mintedAmount[user]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"_royaltyFeesInBips","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"ownerRegisterOneUserToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"users","type":"address[]"}],"name":"ownerRegisterSomeUsersToWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"ownerRemoveOneUserFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"users","type":"address[]"}],"name":"ownerRemoveSomeUsersFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"ownerSetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerSetNewAddedAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"userMintOneNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"userMintSomeNFTs","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"calculateRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewAddedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDroppedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newAddedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"registerToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"registerToWhitelistBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"}],"name":"removeFromWhitelistBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"royaltyAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"tokenBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAddedAmount","type":"uint256"}],"name":"setNewAddedAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_royaltyFeesInBips","type":"uint256"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setTokenURIWithBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDroppedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526002600f5560006012553480156200001b57600080fd5b5060405162005e9338038062005e938339818101604052810190620000419190620002c6565b828281600090805190602001906200005b92919062000181565b5080600190805190602001906200007492919062000181565b5050506000620000896200017960201b60201c565b905080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d8190555050505062000508565b600033905090565b8280546200018f90620003ff565b90600052602060002090601f016020900481019282620001b35760008555620001ff565b82601f10620001ce57805160ff1916838001178555620001ff565b82800160010185558215620001ff579182015b82811115620001fe578251825591602001919060010190620001e1565b5b5090506200020e919062000212565b5090565b5b808211156200022d57600081600090555060010162000213565b5090565b600062000248620002428462000389565b62000360565b905082815260208101848484011115620002675762000266620004ce565b5b62000274848285620003c9565b509392505050565b600082601f830112620002945762000293620004c9565b5b8151620002a684826020860162000231565b91505092915050565b600081519050620002c081620004ee565b92915050565b600080600060608486031215620002e257620002e1620004d8565b5b600084015167ffffffffffffffff811115620003035762000302620004d3565b5b62000311868287016200027c565b935050602084015167ffffffffffffffff811115620003355762000334620004d3565b5b62000343868287016200027c565b92505060406200035686828701620002af565b9150509250925092565b60006200036c6200037f565b90506200037a828262000435565b919050565b6000604051905090565b600067ffffffffffffffff821115620003a757620003a66200049a565b5b620003b282620004dd565b9050602081019050919050565b6000819050919050565b60005b83811015620003e9578082015181840152602081019050620003cc565b83811115620003f9576000848401525b50505050565b600060028204905060018216806200041857607f821691505b602082108114156200042f576200042e6200046b565b5b50919050565b6200044082620004dd565b810181811067ffffffffffffffff821117156200046257620004616200049a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620004f981620003bf565b81146200050557600080fd5b50565b61597b80620005186000396000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c8063677d49b511610151578063ae5f1eb9116100c3578063e2baeab011610087578063e2baeab01461075b578063e2e784d514610777578063e985e9c514610793578063eff3da94146107c3578063f2fde38b146107e1578063fbbf8cc3146107fd57610269565b8063ae5f1eb9146106a7578063b88d4fde146106c3578063c461d372146106df578063c87b56dd146106fb578063d936547e1461072b57610269565b806387eb2bea1161011557806387eb2bea146105e55780638ab1d681146106035780638da5cb5b1461061f57806395d89b411461063d578063a22cb4651461065b578063a2e696131461067757610269565b8063677d49b5146105515780636f865e6f1461056f57806370a082311461058d578063715018a6146105bd57806385e5fb3c146105c757610269565b80632a55205a116101ea57806342842e0e116101ae57806342842e0e1461046b578063440e5c41146104875780634f6ccce7146104a557806355f804b3146104d55780636352211e146104f157806363b266ba1461052157610269565b80632a55205a146103a05780632a5d3397146103d15780632f745c59146103ef5780633af32abf1461041f578063427c40d11461044f57610269565b8063162094c411610231578063162094c41461031257806318160ddd1461032e5780631e918f881461034c57806323b872dd14610368578063248b71fc1461038457610269565b806301ffc9a71461026e57806306fdde031461029e578063081812fc146102bc578063095ea7b3146102ec5780631249c58b14610308575b600080fd5b61028860048036038101906102839190613cd5565b61082d565b60405161029591906145dd565b60405180910390f35b6102a661088e565b6040516102b391906145f8565b60405180910390f35b6102d660048036038101906102d19190613d78565b610920565b6040516102e391906144fb565b60405180910390f35b61030660048036038101906103019190613c4c565b6109a5565b005b610310610abd565b005b61032c60048036038101906103279190613da5565b610d35565b005b610336610dda565b60405161034391906149fa565b60405180910390f35b61036660048036038101906103619190613c8c565b610de7565b005b610382600480360381019061037d9190613b36565b610ff3565b005b61039e60048036038101906103999190613c4c565b611053565b005b6103ba60048036038101906103b59190613e01565b6114f7565b6040516103c8929190614592565b60405180910390f35b6103d9611531565b6040516103e691906149fa565b60405180910390f35b61040960048036038101906104049190613c4c565b611537565b60405161041691906149fa565b60405180910390f35b61043960048036038101906104349190613ac9565b6115dc565b60405161044691906145dd565b60405180910390f35b61046960048036038101906104649190613d78565b611628565b005b61048560048036038101906104809190613b36565b61171b565b005b61048f61173b565b60405161049c91906149fa565b60405180910390f35b6104bf60048036038101906104ba9190613d78565b611745565b6040516104cc91906149fa565b60405180910390f35b6104ef60048036038101906104ea9190613d2f565b6117b6565b005b61050b60048036038101906105069190613d78565b61189e565b60405161051891906144fb565b60405180910390f35b61053b60048036038101906105369190613ac9565b611950565b60405161054891906149fa565b60405180910390f35b610559611999565b60405161056691906149fa565b60405180910390f35b6105776119a3565b60405161058491906149fa565b60405180910390f35b6105a760048036038101906105a29190613ac9565b6119a9565b6040516105b491906149fa565b60405180910390f35b6105c5611a61565b005b6105cf611bb9565b6040516105dc91906149fa565b60405180910390f35b6105ed611bc3565b6040516105fa91906149fa565b60405180910390f35b61061d60048036038101906106189190613ac9565b611bc9565b005b610627611d61565b60405161063491906144fb565b60405180910390f35b610645611d8b565b60405161065291906145f8565b60405180910390f35b61067560048036038101906106709190613c0c565b611e1d565b005b610691600480360381019061068c9190613d78565b611e33565b60405161069e91906149fa565b60405180910390f35b6106c160048036038101906106bc9190613c8c565b611e57565b005b6106dd60048036038101906106d89190613b89565b612063565b005b6106f960048036038101906106f49190613d78565b6120c5565b005b61071560048036038101906107109190613d78565b612171565b60405161072291906145f8565b60405180910390f35b61074560048036038101906107409190613ac9565b6121a5565b60405161075291906149fa565b60405180910390f35b61077560048036038101906107709190613ac9565b6121bd565b005b610791600480360381019061078c9190613c4c565b612355565b005b6107ad60048036038101906107a89190613af6565b612438565b6040516107ba91906145dd565b60405180910390f35b6107cb6124cc565b6040516107d891906149fa565b60405180910390f35b6107fb60048036038101906107f69190613ac9565b6124d2565b005b61081760048036038101906108129190613ac9565b612699565b60405161082491906149fa565b60405180910390f35b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108875750610886826126b1565b5b9050919050565b60606000805461089d90614d5d565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990614d5d565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b8261272b565b61096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610961906148ba565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b08261189e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a18906148fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a40612797565b73ffffffffffffffffffffffffffffffffffffffff161480610a6f5750610a6e81610a69612797565b612438565b5b610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa59061481a565b60405180910390fd5b610ab8838361279f565b505050565b610ac5611d61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0a576001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b709061465a565b60405180910390fd5b600f546001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bc89190614b92565b1115610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009061473a565b60405180910390fd5b5b6011546001601254610c1c9190614b92565b1115610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c54906147fa565b60405180910390fd5b60006001601254610c6e9190614b92565b9050610c7a3382612858565b610c8c81610c8783612171565b612a32565b60126000815480929190610c9f90614dc0565b9190505550601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610cf490614dc0565b91905055507fc9fa15e3a9be9675c5396f6e8f08e9eab11343d223f7864eec890e37a62baab33382604051610d2a929190614592565b60405180910390a150565b610d3d612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906148da565b60405180910390fd5b610dd68282612a32565b5050565b6000600880549050905090565b610def612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e75906148da565b60405180910390fd5b60005b8151811015610f3957600060136000848481518110610ea357610ea2614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061475a565b60405180910390fd5b8080610f3190614dc0565b915050610e81565b5060005b8151811015610fb857600160136000848481518110610f5f57610f5e614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610fb090614dc0565b915050610f3d565b507f08a87ea5de92bba32d7280815e3539b551bd21dd037a466e2983177c3712947681604051610fe891906145bb565b60405180910390a150565b611004610ffe612797565b82612aa6565b611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a9061491a565b60405180910390fd5b61104e838383612b84565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9061461a565b60405180910390fd5b60008111611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd9061497a565b60405180910390fd5b601154816012546111179190614b92565b1115611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061463a565b60405180910390fd5b611160611d61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611312578173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061493a565b60405180910390fd5b6001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611279906147da565b60405180910390fd5b600f5481601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d09190614b92565b1115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113089061471a565b60405180910390fd5b5b60008167ffffffffffffffff81111561132e5761132d614f25565b5b60405190808252806020026020018201604052801561135c5781602001602082028036833780820191505090505b50905060005b8281101561142d5760016012546113799190614b92565b82828151811061138c5761138b614ef6565b5b6020026020010181815250506113bc848383815181106113af576113ae614ef6565b5b6020026020010151612858565b6114028282815181106113d2576113d1614ef6565b5b60200260200101516113fd8484815181106113f0576113ef614ef6565b5b6020026020010151612171565b612a32565b6012600081548092919061141590614dc0565b9190505550808061142590614dc0565b915050611362565b508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114b95781601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b19190614b92565b925050819055505b7f236cb6ae833db3932b7e5f9a83eb64b24f8b572612a30fb465b7c8a4f3ab46f583826040516114ea929190614562565b60405180910390a1505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661152684611e33565b915091509250929050565b60115481565b6000611542836119a9565b8210611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a9061467a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054149050919050565b611630612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906148da565b60405180910390fd5b80601081905550601054601160008282546116da9190614b92565b925050819055507fceeb39f246215c03b0ef88d06434eb5684cc458ba44063d05627d6264ffb49838160405161171091906149fa565b60405180910390a150565b61173683838360405180602001604052806000815250612063565b505050565b6000601154905090565b600061174f610dda565b8210611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117879061495a565b60405180910390fd5b600882815481106117a4576117a3614ef6565b5b90600052602060002001549050919050565b6117be612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906148da565b60405180910390fd5b80600e908051906020019061186392919061383f565b507fb9a87c0946f9f47b86a4f8abee55fe12a64b0f102b2c9d20d6853595540941cf8160405161189391906145f8565b60405180910390a150565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e9061485a565b60405180910390fd5b80915050919050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601254905090565b60125481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a119061483a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a69612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef906148da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601054905090565b600f5481565b611bd1612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c57906148da565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd99061499a565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f515274c9bc32939080a74a819630519ca84fa4714c33cb03438ca9863daece1181604051611d5691906144fb565b60405180910390a150565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611d9a90614d5d565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc690614d5d565b8015611e135780601f10611de857610100808354040283529160200191611e13565b820191906000526020600020905b815481529060010190602001808311611df657829003601f168201915b5050505050905090565b611e2f611e28612797565b8383612deb565b5050565b6000600d5461271083611e469190614be8565b611e509190614c19565b9050919050565b611e5f612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee5906148da565b60405180910390fd5b60005b8151811015611fa957600160136000848481518110611f1357611f12614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d906149da565b60405180910390fd5b8080611fa190614dc0565b915050611ef1565b5060005b815181101561202857600060136000848481518110611fcf57611fce614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061202090614dc0565b915050611fad565b507f4064f82465d5f7e9fee12389a7301bc0d1493bffb2b5a69f68d90d21d96972eb8160405161205891906145bb565b60405180910390a150565b61207461206e612797565b83612aa6565b6120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa9061491a565b60405180910390fd5b6120bf84848484612f58565b50505050565b6120cd612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612153906148da565b60405180910390fd5b61216e8161216983612171565b612a32565b50565b6060600e61217e83612fb4565b60405160200161218f9291906144d7565b6040516020818303038152906040529050919050565b60136020528060005260406000206000915090505481565b6121c5612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906148da565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd906149ba565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f627909f632ba3e3bace3091ba65327ebf7f5e6afa947cd7f934d91016bf0b41b8160405161234a91906144fb565b60405180910390a150565b61235d612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e3906148da565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d819055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60105481565b6124da612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612560906148da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d0906146ba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60146020528060005260406000206000915090505481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612724575061272382613115565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128128361189e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9061489a565b60405180910390fd5b6128d18161272b565b15612911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612908906146fa565b60405180910390fd5b61291d600083836131f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461296d9190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a2e6000838361330b565b5050565b612a3b8261272b565b612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a719061487a565b60405180910390fd5b80600a60008481526020019081526020016000209080519060200190612aa192919061383f565b505050565b6000612ab18261272b565b612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae7906147ba565b60405180910390fd5b6000612afb8361189e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b3d5750612b3c8185612438565b5b80612b7b57508373ffffffffffffffffffffffffffffffffffffffff16612b6384610920565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ba48261189e565b73ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf1906146da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c619061477a565b60405180910390fd5b612c758383836131f7565b612c8060008261279f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd09190614c73565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d279190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612de683838361330b565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e519061479a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f4b91906145dd565b60405180910390a3505050565b612f63848484612b84565b612f6f84848484613310565b612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa59061469a565b60405180910390fd5b50505050565b60606000821415612ffc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613110565b600082905060005b6000821461302e57808061301790614dc0565b915050600a826130279190614be8565b9150613004565b60008167ffffffffffffffff81111561304a57613049614f25565b5b6040519080825280601f01601f19166020018201604052801561307c5781602001600182028036833780820191505090505b5090505b60008514613109576001826130959190614c73565b9150600a856130a49190614e09565b60306130b09190614b92565b60f81b8183815181106130c6576130c5614ef6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131029190614be8565b9450613080565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131e057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131f057506131ef826134a7565b5b9050919050565b613202838383613511565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132455761324081613516565b613284565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461328357613282838261355f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132c7576132c2816136cc565b613306565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461330557613304828261379d565b5b5b505050565b505050565b60006133318473ffffffffffffffffffffffffffffffffffffffff1661381c565b1561349a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261335a612797565b8786866040518563ffffffff1660e01b815260040161337c9493929190614516565b602060405180830381600087803b15801561339657600080fd5b505af19250505080156133c757506040513d601f19601f820116820180604052508101906133c49190613d02565b60015b61344a573d80600081146133f7576040519150601f19603f3d011682016040523d82523d6000602084013e6133fc565b606091505b50600081511415613442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134399061469a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061349f565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161356c846119a9565b6135769190614c73565b905060006007600084815260200190815260200160002054905081811461365b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136e09190614c73565b90506000600960008481526020019081526020016000205490506000600883815481106137105761370f614ef6565b5b90600052602060002001549050806008838154811061373257613731614ef6565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061378157613780614ec7565b5b6001900381819060005260206000200160009055905550505050565b60006137a8836119a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461384b90614d5d565b90600052602060002090601f01602090048101928261386d57600085556138b4565b82601f1061388657805160ff19168380011785556138b4565b828001600101855582156138b4579182015b828111156138b3578251825591602001919060010190613898565b5b5090506138c191906138c5565b5090565b5b808211156138de5760008160009055506001016138c6565b5090565b60006138f56138f084614a3a565b614a15565b9050808382526020820190508285602086028201111561391857613917614f59565b5b60005b85811015613948578161392e88826139d6565b84526020840193506020830192505060018101905061391b565b5050509392505050565b600061396561396084614a66565b614a15565b90508281526020810184848401111561398157613980614f5e565b5b61398c848285614d1b565b509392505050565b60006139a76139a284614a97565b614a15565b9050828152602081018484840111156139c3576139c2614f5e565b5b6139ce848285614d1b565b509392505050565b6000813590506139e5816158e9565b92915050565b600082601f830112613a00576139ff614f54565b5b8135613a108482602086016138e2565b91505092915050565b600081359050613a2881615900565b92915050565b600081359050613a3d81615917565b92915050565b600081519050613a5281615917565b92915050565b600082601f830112613a6d57613a6c614f54565b5b8135613a7d848260208601613952565b91505092915050565b600082601f830112613a9b57613a9a614f54565b5b8135613aab848260208601613994565b91505092915050565b600081359050613ac38161592e565b92915050565b600060208284031215613adf57613ade614f68565b5b6000613aed848285016139d6565b91505092915050565b60008060408385031215613b0d57613b0c614f68565b5b6000613b1b858286016139d6565b9250506020613b2c858286016139d6565b9150509250929050565b600080600060608486031215613b4f57613b4e614f68565b5b6000613b5d868287016139d6565b9350506020613b6e868287016139d6565b9250506040613b7f86828701613ab4565b9150509250925092565b60008060008060808587031215613ba357613ba2614f68565b5b6000613bb1878288016139d6565b9450506020613bc2878288016139d6565b9350506040613bd387828801613ab4565b925050606085013567ffffffffffffffff811115613bf457613bf3614f63565b5b613c0087828801613a58565b91505092959194509250565b60008060408385031215613c2357613c22614f68565b5b6000613c31858286016139d6565b9250506020613c4285828601613a19565b9150509250929050565b60008060408385031215613c6357613c62614f68565b5b6000613c71858286016139d6565b9250506020613c8285828601613ab4565b9150509250929050565b600060208284031215613ca257613ca1614f68565b5b600082013567ffffffffffffffff811115613cc057613cbf614f63565b5b613ccc848285016139eb565b91505092915050565b600060208284031215613ceb57613cea614f68565b5b6000613cf984828501613a2e565b91505092915050565b600060208284031215613d1857613d17614f68565b5b6000613d2684828501613a43565b91505092915050565b600060208284031215613d4557613d44614f68565b5b600082013567ffffffffffffffff811115613d6357613d62614f63565b5b613d6f84828501613a86565b91505092915050565b600060208284031215613d8e57613d8d614f68565b5b6000613d9c84828501613ab4565b91505092915050565b60008060408385031215613dbc57613dbb614f68565b5b6000613dca85828601613ab4565b925050602083013567ffffffffffffffff811115613deb57613dea614f63565b5b613df785828601613a86565b9150509250929050565b60008060408385031215613e1857613e17614f68565b5b6000613e2685828601613ab4565b9250506020613e3785828601613ab4565b9150509250929050565b6000613e4d8383613e71565b60208301905092915050565b6000613e6583836144b9565b60208301905092915050565b613e7a81614ca7565b82525050565b613e8981614ca7565b82525050565b6000613e9a82614afd565b613ea48185614b43565b9350613eaf83614ac8565b8060005b83811015613ee0578151613ec78882613e41565b9750613ed283614b29565b925050600181019050613eb3565b5085935050505092915050565b6000613ef882614b08565b613f028185614b54565b9350613f0d83614ad8565b8060005b83811015613f3e578151613f258882613e59565b9750613f3083614b36565b925050600181019050613f11565b5085935050505092915050565b613f5481614cb9565b82525050565b6000613f6582614b13565b613f6f8185614b65565b9350613f7f818560208601614d2a565b613f8881614f6d565b840191505092915050565b6000613f9e82614b1e565b613fa88185614b76565b9350613fb8818560208601614d2a565b613fc181614f6d565b840191505092915050565b6000613fd782614b1e565b613fe18185614b87565b9350613ff1818560208601614d2a565b80840191505092915050565b6000815461400a81614d5d565b6140148186614b87565b9450600182166000811461402f576001811461404057614073565b60ff19831686528186019350614073565b61404985614ae8565b60005b8381101561406b5781548189015260018201915060208101905061404c565b838801955050505b50505092915050565b6000614089602f83614b76565b915061409482614f7e565b604082019050919050565b60006140ac603183614b76565b91506140b782614fcd565b604082019050919050565b60006140cf602383614b76565b91506140da8261501c565b604082019050919050565b60006140f2602b83614b76565b91506140fd8261506b565b604082019050919050565b6000614115603283614b76565b9150614120826150ba565b604082019050919050565b6000614138602683614b76565b915061414382615109565b604082019050919050565b600061415b602583614b76565b915061416682615158565b604082019050919050565b600061417e601c83614b76565b9150614189826151a7565b602082019050919050565b60006141a1604083614b76565b91506141ac826151d0565b604082019050919050565b60006141c4602d83614b76565b91506141cf8261521f565b604082019050919050565b60006141e7604c83614b76565b91506141f28261526e565b606082019050919050565b600061420a602483614b76565b9150614215826152e3565b604082019050919050565b600061422d601983614b76565b915061423882615332565b602082019050919050565b6000614250602c83614b76565b915061425b8261535b565b604082019050919050565b6000614273602a83614b76565b915061427e826153aa565b604082019050919050565b6000614296602b83614b76565b91506142a1826153f9565b604082019050919050565b60006142b9603883614b76565b91506142c482615448565b604082019050919050565b60006142dc602a83614b76565b91506142e782615497565b604082019050919050565b60006142ff602983614b76565b915061430a826154e6565b604082019050919050565b6000614322602e83614b76565b915061432d82615535565b604082019050919050565b6000614345602083614b76565b915061435082615584565b602082019050919050565b6000614368602c83614b76565b9150614373826155ad565b604082019050919050565b600061438b602083614b76565b9150614396826155fc565b602082019050919050565b60006143ae602183614b76565b91506143b982615625565b604082019050919050565b60006143d1603183614b76565b91506143dc82615674565b604082019050919050565b60006143f4604d83614b76565b91506143ff826156c3565b606082019050919050565b6000614417602c83614b76565b915061442282615738565b604082019050919050565b600061443a602d83614b76565b915061444582615787565b604082019050919050565b600061445d603d83614b76565b9150614468826157d6565b604082019050919050565b6000614480603883614b76565b915061448b82615825565b604082019050919050565b60006144a3604c83614b76565b91506144ae82615874565b606082019050919050565b6144c281614d11565b82525050565b6144d181614d11565b82525050565b60006144e38285613ffd565b91506144ef8284613fcc565b91508190509392505050565b60006020820190506145106000830184613e80565b92915050565b600060808201905061452b6000830187613e80565b6145386020830186613e80565b61454560408301856144c8565b81810360608301526145578184613f5a565b905095945050505050565b60006040820190506145776000830185613e80565b81810360208301526145898184613eed565b90509392505050565b60006040820190506145a76000830185613e80565b6145b460208301846144c8565b9392505050565b600060208201905081810360008301526145d58184613e8f565b905092915050565b60006020820190506145f26000830184613f4b565b92915050565b600060208201905081810360008301526146128184613f93565b905092915050565b600060208201905081810360008301526146338161407c565b9050919050565b600060208201905081810360008301526146538161409f565b9050919050565b60006020820190508181036000830152614673816140c2565b9050919050565b60006020820190508181036000830152614693816140e5565b9050919050565b600060208201905081810360008301526146b381614108565b9050919050565b600060208201905081810360008301526146d38161412b565b9050919050565b600060208201905081810360008301526146f38161414e565b9050919050565b6000602082019050818103600083015261471381614171565b9050919050565b6000602082019050818103600083015261473381614194565b9050919050565b60006020820190508181036000830152614753816141b7565b9050919050565b60006020820190508181036000830152614773816141da565b9050919050565b60006020820190508181036000830152614793816141fd565b9050919050565b600060208201905081810360008301526147b381614220565b9050919050565b600060208201905081810360008301526147d381614243565b9050919050565b600060208201905081810360008301526147f381614266565b9050919050565b6000602082019050818103600083015261481381614289565b9050919050565b60006020820190508181036000830152614833816142ac565b9050919050565b60006020820190508181036000830152614853816142cf565b9050919050565b60006020820190508181036000830152614873816142f2565b9050919050565b6000602082019050818103600083015261489381614315565b9050919050565b600060208201905081810360008301526148b381614338565b9050919050565b600060208201905081810360008301526148d38161435b565b9050919050565b600060208201905081810360008301526148f38161437e565b9050919050565b60006020820190508181036000830152614913816143a1565b9050919050565b60006020820190508181036000830152614933816143c4565b9050919050565b60006020820190508181036000830152614953816143e7565b9050919050565b600060208201905081810360008301526149738161440a565b9050919050565b600060208201905081810360008301526149938161442d565b9050919050565b600060208201905081810360008301526149b381614450565b9050919050565b600060208201905081810360008301526149d381614473565b9050919050565b600060208201905081810360008301526149f381614496565b9050919050565b6000602082019050614a0f60008301846144c8565b92915050565b6000614a1f614a30565b9050614a2b8282614d8f565b919050565b6000604051905090565b600067ffffffffffffffff821115614a5557614a54614f25565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a8157614a80614f25565b5b614a8a82614f6d565b9050602081019050919050565b600067ffffffffffffffff821115614ab257614ab1614f25565b5b614abb82614f6d565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b9d82614d11565b9150614ba883614d11565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bdd57614bdc614e3a565b5b828201905092915050565b6000614bf382614d11565b9150614bfe83614d11565b925082614c0e57614c0d614e69565b5b828204905092915050565b6000614c2482614d11565b9150614c2f83614d11565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6857614c67614e3a565b5b828202905092915050565b6000614c7e82614d11565b9150614c8983614d11565b925082821015614c9c57614c9b614e3a565b5b828203905092915050565b6000614cb282614cf1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d48578082015181840152602081019050614d2d565b83811115614d57576000848401525b50505050565b60006002820490506001821680614d7557607f821691505b60208210811415614d8957614d88614e98565b5b50919050565b614d9882614f6d565b810181811067ffffffffffffffff82111715614db757614db6614f25565b5b80604052505050565b6000614dcb82614d11565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dfe57614dfd614e3a565b5b600182019050919050565b6000614e1482614d11565b9150614e1f83614d11565b925082614e2f57614e2e614e69565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6d696e744261746368203a20596f752063616e2774206d696e74204e4654732060008201527f746f207a65726f20616464726573730000000000000000000000000000000000602082015250565b7f6d696e744261746368203a20546865726520617265206e6f20656e6f7567682060008201527f4e46547320696e20746869732064726f70000000000000000000000000000000602082015250565b7f4d696e74203a20546869732075736572206973206e6f742077686974656c697360008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e744261746368203a2054617267657420757365722063616e277420746160008201527f6b65206d6f7265207468616e204d616d696d756d204d696e7420416d6f756e74602082015250565b7f4d696e74203a20596f7520616c7265616479206d696e746564204d6178696d7560008201527f6d204d696e7420416d6f756e7400000000000000000000000000000000000000602082015250565b7f426174636820526567697374657220546f2057686974656c697374203a20536f60008201527f6d652075736572206f66207468697320696e70757420697320616c726561647960208201527f2077686974656c69737465640000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f6d696e744261746368203b205461726765742075736572206973206e6f74207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b7f4d696e74203a204e465473206f6e20746869732064726f702061726520616c7260008201527f65616479206d696e746564000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e744261746368203a205461726765742061646472657373206d7573742060008201527f626520796f75722061646472657373206265636175736520796f75206172652060208201527f6e6f7420746865206f776e657200000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d696e744261746368203a20596f75206e65656420746f206d696e742061742060008201527f6c65617374206f6e65204e465400000000000000000000000000000000000000602082015250565b7f52656d6f76652046726f6d2057686974656c697374203a20546869732075736560008201527f722068617665206e65766572206265656e2077686974656c6973746564000000602082015250565b7f526567697374657220546f2057686974656c697374203a20546869732075736560008201527f7220697320616c72656164792077686974656c69737465640000000000000000602082015250565b7f42617463682052656d6f76652046726f6d2057686974656c697374203a20536f60008201527f6d652075736572206f6620696e7075742068617665206e65766572206265656e60208201527f2077686974656c69737465640000000000000000000000000000000000000000604082015250565b6158f281614ca7565b81146158fd57600080fd5b50565b61590981614cb9565b811461591457600080fd5b50565b61592081614cc5565b811461592b57600080fd5b50565b61593781614d11565b811461594257600080fd5b5056fea26469706673582212203a08835281c97b0e7e01d8b7f9b0abc1efdd115ea8cb3a763f5623ae52ea3e9864736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000000135363616c657320627920416e6e61204a7564640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065343414c45530000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102695760003560e01c8063677d49b511610151578063ae5f1eb9116100c3578063e2baeab011610087578063e2baeab01461075b578063e2e784d514610777578063e985e9c514610793578063eff3da94146107c3578063f2fde38b146107e1578063fbbf8cc3146107fd57610269565b8063ae5f1eb9146106a7578063b88d4fde146106c3578063c461d372146106df578063c87b56dd146106fb578063d936547e1461072b57610269565b806387eb2bea1161011557806387eb2bea146105e55780638ab1d681146106035780638da5cb5b1461061f57806395d89b411461063d578063a22cb4651461065b578063a2e696131461067757610269565b8063677d49b5146105515780636f865e6f1461056f57806370a082311461058d578063715018a6146105bd57806385e5fb3c146105c757610269565b80632a55205a116101ea57806342842e0e116101ae57806342842e0e1461046b578063440e5c41146104875780634f6ccce7146104a557806355f804b3146104d55780636352211e146104f157806363b266ba1461052157610269565b80632a55205a146103a05780632a5d3397146103d15780632f745c59146103ef5780633af32abf1461041f578063427c40d11461044f57610269565b8063162094c411610231578063162094c41461031257806318160ddd1461032e5780631e918f881461034c57806323b872dd14610368578063248b71fc1461038457610269565b806301ffc9a71461026e57806306fdde031461029e578063081812fc146102bc578063095ea7b3146102ec5780631249c58b14610308575b600080fd5b61028860048036038101906102839190613cd5565b61082d565b60405161029591906145dd565b60405180910390f35b6102a661088e565b6040516102b391906145f8565b60405180910390f35b6102d660048036038101906102d19190613d78565b610920565b6040516102e391906144fb565b60405180910390f35b61030660048036038101906103019190613c4c565b6109a5565b005b610310610abd565b005b61032c60048036038101906103279190613da5565b610d35565b005b610336610dda565b60405161034391906149fa565b60405180910390f35b61036660048036038101906103619190613c8c565b610de7565b005b610382600480360381019061037d9190613b36565b610ff3565b005b61039e60048036038101906103999190613c4c565b611053565b005b6103ba60048036038101906103b59190613e01565b6114f7565b6040516103c8929190614592565b60405180910390f35b6103d9611531565b6040516103e691906149fa565b60405180910390f35b61040960048036038101906104049190613c4c565b611537565b60405161041691906149fa565b60405180910390f35b61043960048036038101906104349190613ac9565b6115dc565b60405161044691906145dd565b60405180910390f35b61046960048036038101906104649190613d78565b611628565b005b61048560048036038101906104809190613b36565b61171b565b005b61048f61173b565b60405161049c91906149fa565b60405180910390f35b6104bf60048036038101906104ba9190613d78565b611745565b6040516104cc91906149fa565b60405180910390f35b6104ef60048036038101906104ea9190613d2f565b6117b6565b005b61050b60048036038101906105069190613d78565b61189e565b60405161051891906144fb565b60405180910390f35b61053b60048036038101906105369190613ac9565b611950565b60405161054891906149fa565b60405180910390f35b610559611999565b60405161056691906149fa565b60405180910390f35b6105776119a3565b60405161058491906149fa565b60405180910390f35b6105a760048036038101906105a29190613ac9565b6119a9565b6040516105b491906149fa565b60405180910390f35b6105c5611a61565b005b6105cf611bb9565b6040516105dc91906149fa565b60405180910390f35b6105ed611bc3565b6040516105fa91906149fa565b60405180910390f35b61061d60048036038101906106189190613ac9565b611bc9565b005b610627611d61565b60405161063491906144fb565b60405180910390f35b610645611d8b565b60405161065291906145f8565b60405180910390f35b61067560048036038101906106709190613c0c565b611e1d565b005b610691600480360381019061068c9190613d78565b611e33565b60405161069e91906149fa565b60405180910390f35b6106c160048036038101906106bc9190613c8c565b611e57565b005b6106dd60048036038101906106d89190613b89565b612063565b005b6106f960048036038101906106f49190613d78565b6120c5565b005b61071560048036038101906107109190613d78565b612171565b60405161072291906145f8565b60405180910390f35b61074560048036038101906107409190613ac9565b6121a5565b60405161075291906149fa565b60405180910390f35b61077560048036038101906107709190613ac9565b6121bd565b005b610791600480360381019061078c9190613c4c565b612355565b005b6107ad60048036038101906107a89190613af6565b612438565b6040516107ba91906145dd565b60405180910390f35b6107cb6124cc565b6040516107d891906149fa565b60405180910390f35b6107fb60048036038101906107f69190613ac9565b6124d2565b005b61081760048036038101906108129190613ac9565b612699565b60405161082491906149fa565b60405180910390f35b6000632a55205a60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108875750610886826126b1565b5b9050919050565b60606000805461089d90614d5d565b80601f01602080910402602001604051908101604052809291908181526020018280546108c990614d5d565b80156109165780601f106108eb57610100808354040283529160200191610916565b820191906000526020600020905b8154815290600101906020018083116108f957829003601f168201915b5050505050905090565b600061092b8261272b565b61096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610961906148ba565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b08261189e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a18906148fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a40612797565b73ffffffffffffffffffffffffffffffffffffffff161480610a6f5750610a6e81610a69612797565b612438565b5b610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa59061481a565b60405180910390fd5b610ab8838361279f565b505050565b610ac5611d61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0a576001601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b709061465a565b60405180910390fd5b600f546001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bc89190614b92565b1115610c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c009061473a565b60405180910390fd5b5b6011546001601254610c1c9190614b92565b1115610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c54906147fa565b60405180910390fd5b60006001601254610c6e9190614b92565b9050610c7a3382612858565b610c8c81610c8783612171565b612a32565b60126000815480929190610c9f90614dc0565b9190505550601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610cf490614dc0565b91905055507fc9fa15e3a9be9675c5396f6e8f08e9eab11343d223f7864eec890e37a62baab33382604051610d2a929190614592565b60405180910390a150565b610d3d612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc3906148da565b60405180910390fd5b610dd68282612a32565b5050565b6000600880549050905090565b610def612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e75906148da565b60405180910390fd5b60005b8151811015610f3957600060136000848481518110610ea357610ea2614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061475a565b60405180910390fd5b8080610f3190614dc0565b915050610e81565b5060005b8151811015610fb857600160136000848481518110610f5f57610f5e614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080610fb090614dc0565b915050610f3d565b507f08a87ea5de92bba32d7280815e3539b551bd21dd037a466e2983177c3712947681604051610fe891906145bb565b60405180910390a150565b611004610ffe612797565b82612aa6565b611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a9061491a565b60405180910390fd5b61104e838383612b84565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9061461a565b60405180910390fd5b60008111611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd9061497a565b60405180910390fd5b601154816012546111179190614b92565b1115611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114f9061463a565b60405180910390fd5b611160611d61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611312578173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f79061493a565b60405180910390fd5b6001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611282576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611279906147da565b60405180910390fd5b600f5481601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d09190614b92565b1115611311576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113089061471a565b60405180910390fd5b5b60008167ffffffffffffffff81111561132e5761132d614f25565b5b60405190808252806020026020018201604052801561135c5781602001602082028036833780820191505090505b50905060005b8281101561142d5760016012546113799190614b92565b82828151811061138c5761138b614ef6565b5b6020026020010181815250506113bc848383815181106113af576113ae614ef6565b5b6020026020010151612858565b6114028282815181106113d2576113d1614ef6565b5b60200260200101516113fd8484815181106113f0576113ef614ef6565b5b6020026020010151612171565b612a32565b6012600081548092919061141590614dc0565b9190505550808061142590614dc0565b915050611362565b508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114b95781601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114b19190614b92565b925050819055505b7f236cb6ae833db3932b7e5f9a83eb64b24f8b572612a30fb465b7c8a4f3ab46f583826040516114ea929190614562565b60405180910390a1505050565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661152684611e33565b915091509250929050565b60115481565b6000611542836119a9565b8210611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a9061467a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006001601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054149050919050565b611630612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b6906148da565b60405180910390fd5b80601081905550601054601160008282546116da9190614b92565b925050819055507fceeb39f246215c03b0ef88d06434eb5684cc458ba44063d05627d6264ffb49838160405161171091906149fa565b60405180910390a150565b61173683838360405180602001604052806000815250612063565b505050565b6000601154905090565b600061174f610dda565b8210611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117879061495a565b60405180910390fd5b600882815481106117a4576117a3614ef6565b5b90600052602060002001549050919050565b6117be612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611844906148da565b60405180910390fd5b80600e908051906020019061186392919061383f565b507fb9a87c0946f9f47b86a4f8abee55fe12a64b0f102b2c9d20d6853595540941cf8160405161189391906145f8565b60405180910390a150565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e9061485a565b60405180910390fd5b80915050919050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601254905090565b60125481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a119061483a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a69612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aef906148da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000601054905090565b600f5481565b611bd1612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c57906148da565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd99061499a565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f515274c9bc32939080a74a819630519ca84fa4714c33cb03438ca9863daece1181604051611d5691906144fb565b60405180910390a150565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611d9a90614d5d565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc690614d5d565b8015611e135780601f10611de857610100808354040283529160200191611e13565b820191906000526020600020905b815481529060010190602001808311611df657829003601f168201915b5050505050905090565b611e2f611e28612797565b8383612deb565b5050565b6000600d5461271083611e469190614be8565b611e509190614c19565b9050919050565b611e5f612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee5906148da565b60405180910390fd5b60005b8151811015611fa957600160136000848481518110611f1357611f12614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d906149da565b60405180910390fd5b8080611fa190614dc0565b915050611ef1565b5060005b815181101561202857600060136000848481518110611fcf57611fce614ef6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808061202090614dc0565b915050611fad565b507f4064f82465d5f7e9fee12389a7301bc0d1493bffb2b5a69f68d90d21d96972eb8160405161205891906145bb565b60405180910390a150565b61207461206e612797565b83612aa6565b6120b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120aa9061491a565b60405180910390fd5b6120bf84848484612f58565b50505050565b6120cd612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612153906148da565b60405180910390fd5b61216e8161216983612171565b612a32565b50565b6060600e61217e83612fb4565b60405160200161218f9291906144d7565b6040516020818303038152906040529050919050565b60136020528060005260406000206000915090505481565b6121c5612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906148da565b60405180910390fd5b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146122d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cd906149ba565b60405180910390fd5b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f627909f632ba3e3bace3091ba65327ebf7f5e6afa947cd7f934d91016bf0b41b8160405161234a91906144fb565b60405180910390a150565b61235d612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e3906148da565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d819055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60105481565b6124da612797565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612560906148da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d0906146ba565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60146020528060005260406000206000915090505481565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612724575061272382613115565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166128128361189e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9061489a565b60405180910390fd5b6128d18161272b565b15612911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612908906146fa565b60405180910390fd5b61291d600083836131f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461296d9190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a2e6000838361330b565b5050565b612a3b8261272b565b612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a719061487a565b60405180910390fd5b80600a60008481526020019081526020016000209080519060200190612aa192919061383f565b505050565b6000612ab18261272b565b612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae7906147ba565b60405180910390fd5b6000612afb8361189e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612b3d5750612b3c8185612438565b5b80612b7b57508373ffffffffffffffffffffffffffffffffffffffff16612b6384610920565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ba48261189e565b73ffffffffffffffffffffffffffffffffffffffff1614612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf1906146da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c619061477a565b60405180910390fd5b612c758383836131f7565b612c8060008261279f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cd09190614c73565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d279190614b92565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612de683838361330b565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e519061479a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612f4b91906145dd565b60405180910390a3505050565b612f63848484612b84565b612f6f84848484613310565b612fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa59061469a565b60405180910390fd5b50505050565b60606000821415612ffc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613110565b600082905060005b6000821461302e57808061301790614dc0565b915050600a826130279190614be8565b9150613004565b60008167ffffffffffffffff81111561304a57613049614f25565b5b6040519080825280601f01601f19166020018201604052801561307c5781602001600182028036833780820191505090505b5090505b60008514613109576001826130959190614c73565b9150600a856130a49190614e09565b60306130b09190614b92565b60f81b8183815181106130c6576130c5614ef6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131029190614be8565b9450613080565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806131e057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806131f057506131ef826134a7565b5b9050919050565b613202838383613511565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132455761324081613516565b613284565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461328357613282838261355f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132c7576132c2816136cc565b613306565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461330557613304828261379d565b5b5b505050565b505050565b60006133318473ffffffffffffffffffffffffffffffffffffffff1661381c565b1561349a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261335a612797565b8786866040518563ffffffff1660e01b815260040161337c9493929190614516565b602060405180830381600087803b15801561339657600080fd5b505af19250505080156133c757506040513d601f19601f820116820180604052508101906133c49190613d02565b60015b61344a573d80600081146133f7576040519150601f19603f3d011682016040523d82523d6000602084013e6133fc565b606091505b50600081511415613442576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134399061469a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061349f565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161356c846119a9565b6135769190614c73565b905060006007600084815260200190815260200160002054905081811461365b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506136e09190614c73565b90506000600960008481526020019081526020016000205490506000600883815481106137105761370f614ef6565b5b90600052602060002001549050806008838154811061373257613731614ef6565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061378157613780614ec7565b5b6001900381819060005260206000200160009055905550505050565b60006137a8836119a9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461384b90614d5d565b90600052602060002090601f01602090048101928261386d57600085556138b4565b82601f1061388657805160ff19168380011785556138b4565b828001600101855582156138b4579182015b828111156138b3578251825591602001919060010190613898565b5b5090506138c191906138c5565b5090565b5b808211156138de5760008160009055506001016138c6565b5090565b60006138f56138f084614a3a565b614a15565b9050808382526020820190508285602086028201111561391857613917614f59565b5b60005b85811015613948578161392e88826139d6565b84526020840193506020830192505060018101905061391b565b5050509392505050565b600061396561396084614a66565b614a15565b90508281526020810184848401111561398157613980614f5e565b5b61398c848285614d1b565b509392505050565b60006139a76139a284614a97565b614a15565b9050828152602081018484840111156139c3576139c2614f5e565b5b6139ce848285614d1b565b509392505050565b6000813590506139e5816158e9565b92915050565b600082601f830112613a00576139ff614f54565b5b8135613a108482602086016138e2565b91505092915050565b600081359050613a2881615900565b92915050565b600081359050613a3d81615917565b92915050565b600081519050613a5281615917565b92915050565b600082601f830112613a6d57613a6c614f54565b5b8135613a7d848260208601613952565b91505092915050565b600082601f830112613a9b57613a9a614f54565b5b8135613aab848260208601613994565b91505092915050565b600081359050613ac38161592e565b92915050565b600060208284031215613adf57613ade614f68565b5b6000613aed848285016139d6565b91505092915050565b60008060408385031215613b0d57613b0c614f68565b5b6000613b1b858286016139d6565b9250506020613b2c858286016139d6565b9150509250929050565b600080600060608486031215613b4f57613b4e614f68565b5b6000613b5d868287016139d6565b9350506020613b6e868287016139d6565b9250506040613b7f86828701613ab4565b9150509250925092565b60008060008060808587031215613ba357613ba2614f68565b5b6000613bb1878288016139d6565b9450506020613bc2878288016139d6565b9350506040613bd387828801613ab4565b925050606085013567ffffffffffffffff811115613bf457613bf3614f63565b5b613c0087828801613a58565b91505092959194509250565b60008060408385031215613c2357613c22614f68565b5b6000613c31858286016139d6565b9250506020613c4285828601613a19565b9150509250929050565b60008060408385031215613c6357613c62614f68565b5b6000613c71858286016139d6565b9250506020613c8285828601613ab4565b9150509250929050565b600060208284031215613ca257613ca1614f68565b5b600082013567ffffffffffffffff811115613cc057613cbf614f63565b5b613ccc848285016139eb565b91505092915050565b600060208284031215613ceb57613cea614f68565b5b6000613cf984828501613a2e565b91505092915050565b600060208284031215613d1857613d17614f68565b5b6000613d2684828501613a43565b91505092915050565b600060208284031215613d4557613d44614f68565b5b600082013567ffffffffffffffff811115613d6357613d62614f63565b5b613d6f84828501613a86565b91505092915050565b600060208284031215613d8e57613d8d614f68565b5b6000613d9c84828501613ab4565b91505092915050565b60008060408385031215613dbc57613dbb614f68565b5b6000613dca85828601613ab4565b925050602083013567ffffffffffffffff811115613deb57613dea614f63565b5b613df785828601613a86565b9150509250929050565b60008060408385031215613e1857613e17614f68565b5b6000613e2685828601613ab4565b9250506020613e3785828601613ab4565b9150509250929050565b6000613e4d8383613e71565b60208301905092915050565b6000613e6583836144b9565b60208301905092915050565b613e7a81614ca7565b82525050565b613e8981614ca7565b82525050565b6000613e9a82614afd565b613ea48185614b43565b9350613eaf83614ac8565b8060005b83811015613ee0578151613ec78882613e41565b9750613ed283614b29565b925050600181019050613eb3565b5085935050505092915050565b6000613ef882614b08565b613f028185614b54565b9350613f0d83614ad8565b8060005b83811015613f3e578151613f258882613e59565b9750613f3083614b36565b925050600181019050613f11565b5085935050505092915050565b613f5481614cb9565b82525050565b6000613f6582614b13565b613f6f8185614b65565b9350613f7f818560208601614d2a565b613f8881614f6d565b840191505092915050565b6000613f9e82614b1e565b613fa88185614b76565b9350613fb8818560208601614d2a565b613fc181614f6d565b840191505092915050565b6000613fd782614b1e565b613fe18185614b87565b9350613ff1818560208601614d2a565b80840191505092915050565b6000815461400a81614d5d565b6140148186614b87565b9450600182166000811461402f576001811461404057614073565b60ff19831686528186019350614073565b61404985614ae8565b60005b8381101561406b5781548189015260018201915060208101905061404c565b838801955050505b50505092915050565b6000614089602f83614b76565b915061409482614f7e565b604082019050919050565b60006140ac603183614b76565b91506140b782614fcd565b604082019050919050565b60006140cf602383614b76565b91506140da8261501c565b604082019050919050565b60006140f2602b83614b76565b91506140fd8261506b565b604082019050919050565b6000614115603283614b76565b9150614120826150ba565b604082019050919050565b6000614138602683614b76565b915061414382615109565b604082019050919050565b600061415b602583614b76565b915061416682615158565b604082019050919050565b600061417e601c83614b76565b9150614189826151a7565b602082019050919050565b60006141a1604083614b76565b91506141ac826151d0565b604082019050919050565b60006141c4602d83614b76565b91506141cf8261521f565b604082019050919050565b60006141e7604c83614b76565b91506141f28261526e565b606082019050919050565b600061420a602483614b76565b9150614215826152e3565b604082019050919050565b600061422d601983614b76565b915061423882615332565b602082019050919050565b6000614250602c83614b76565b915061425b8261535b565b604082019050919050565b6000614273602a83614b76565b915061427e826153aa565b604082019050919050565b6000614296602b83614b76565b91506142a1826153f9565b604082019050919050565b60006142b9603883614b76565b91506142c482615448565b604082019050919050565b60006142dc602a83614b76565b91506142e782615497565b604082019050919050565b60006142ff602983614b76565b915061430a826154e6565b604082019050919050565b6000614322602e83614b76565b915061432d82615535565b604082019050919050565b6000614345602083614b76565b915061435082615584565b602082019050919050565b6000614368602c83614b76565b9150614373826155ad565b604082019050919050565b600061438b602083614b76565b9150614396826155fc565b602082019050919050565b60006143ae602183614b76565b91506143b982615625565b604082019050919050565b60006143d1603183614b76565b91506143dc82615674565b604082019050919050565b60006143f4604d83614b76565b91506143ff826156c3565b606082019050919050565b6000614417602c83614b76565b915061442282615738565b604082019050919050565b600061443a602d83614b76565b915061444582615787565b604082019050919050565b600061445d603d83614b76565b9150614468826157d6565b604082019050919050565b6000614480603883614b76565b915061448b82615825565b604082019050919050565b60006144a3604c83614b76565b91506144ae82615874565b606082019050919050565b6144c281614d11565b82525050565b6144d181614d11565b82525050565b60006144e38285613ffd565b91506144ef8284613fcc565b91508190509392505050565b60006020820190506145106000830184613e80565b92915050565b600060808201905061452b6000830187613e80565b6145386020830186613e80565b61454560408301856144c8565b81810360608301526145578184613f5a565b905095945050505050565b60006040820190506145776000830185613e80565b81810360208301526145898184613eed565b90509392505050565b60006040820190506145a76000830185613e80565b6145b460208301846144c8565b9392505050565b600060208201905081810360008301526145d58184613e8f565b905092915050565b60006020820190506145f26000830184613f4b565b92915050565b600060208201905081810360008301526146128184613f93565b905092915050565b600060208201905081810360008301526146338161407c565b9050919050565b600060208201905081810360008301526146538161409f565b9050919050565b60006020820190508181036000830152614673816140c2565b9050919050565b60006020820190508181036000830152614693816140e5565b9050919050565b600060208201905081810360008301526146b381614108565b9050919050565b600060208201905081810360008301526146d38161412b565b9050919050565b600060208201905081810360008301526146f38161414e565b9050919050565b6000602082019050818103600083015261471381614171565b9050919050565b6000602082019050818103600083015261473381614194565b9050919050565b60006020820190508181036000830152614753816141b7565b9050919050565b60006020820190508181036000830152614773816141da565b9050919050565b60006020820190508181036000830152614793816141fd565b9050919050565b600060208201905081810360008301526147b381614220565b9050919050565b600060208201905081810360008301526147d381614243565b9050919050565b600060208201905081810360008301526147f381614266565b9050919050565b6000602082019050818103600083015261481381614289565b9050919050565b60006020820190508181036000830152614833816142ac565b9050919050565b60006020820190508181036000830152614853816142cf565b9050919050565b60006020820190508181036000830152614873816142f2565b9050919050565b6000602082019050818103600083015261489381614315565b9050919050565b600060208201905081810360008301526148b381614338565b9050919050565b600060208201905081810360008301526148d38161435b565b9050919050565b600060208201905081810360008301526148f38161437e565b9050919050565b60006020820190508181036000830152614913816143a1565b9050919050565b60006020820190508181036000830152614933816143c4565b9050919050565b60006020820190508181036000830152614953816143e7565b9050919050565b600060208201905081810360008301526149738161440a565b9050919050565b600060208201905081810360008301526149938161442d565b9050919050565b600060208201905081810360008301526149b381614450565b9050919050565b600060208201905081810360008301526149d381614473565b9050919050565b600060208201905081810360008301526149f381614496565b9050919050565b6000602082019050614a0f60008301846144c8565b92915050565b6000614a1f614a30565b9050614a2b8282614d8f565b919050565b6000604051905090565b600067ffffffffffffffff821115614a5557614a54614f25565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614a8157614a80614f25565b5b614a8a82614f6d565b9050602081019050919050565b600067ffffffffffffffff821115614ab257614ab1614f25565b5b614abb82614f6d565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b9d82614d11565b9150614ba883614d11565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bdd57614bdc614e3a565b5b828201905092915050565b6000614bf382614d11565b9150614bfe83614d11565b925082614c0e57614c0d614e69565b5b828204905092915050565b6000614c2482614d11565b9150614c2f83614d11565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c6857614c67614e3a565b5b828202905092915050565b6000614c7e82614d11565b9150614c8983614d11565b925082821015614c9c57614c9b614e3a565b5b828203905092915050565b6000614cb282614cf1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614d48578082015181840152602081019050614d2d565b83811115614d57576000848401525b50505050565b60006002820490506001821680614d7557607f821691505b60208210811415614d8957614d88614e98565b5b50919050565b614d9882614f6d565b810181811067ffffffffffffffff82111715614db757614db6614f25565b5b80604052505050565b6000614dcb82614d11565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614dfe57614dfd614e3a565b5b600182019050919050565b6000614e1482614d11565b9150614e1f83614d11565b925082614e2f57614e2e614e69565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6d696e744261746368203a20596f752063616e2774206d696e74204e4654732060008201527f746f207a65726f20616464726573730000000000000000000000000000000000602082015250565b7f6d696e744261746368203a20546865726520617265206e6f20656e6f7567682060008201527f4e46547320696e20746869732064726f70000000000000000000000000000000602082015250565b7f4d696e74203a20546869732075736572206973206e6f742077686974656c697360008201527f7465640000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e744261746368203a2054617267657420757365722063616e277420746160008201527f6b65206d6f7265207468616e204d616d696d756d204d696e7420416d6f756e74602082015250565b7f4d696e74203a20596f7520616c7265616479206d696e746564204d6178696d7560008201527f6d204d696e7420416d6f756e7400000000000000000000000000000000000000602082015250565b7f426174636820526567697374657220546f2057686974656c697374203a20536f60008201527f6d652075736572206f66207468697320696e70757420697320616c726561647960208201527f2077686974656c69737465640000000000000000000000000000000000000000604082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f6d696e744261746368203b205461726765742075736572206973206e6f74207760008201527f686974656c697374656400000000000000000000000000000000000000000000602082015250565b7f4d696e74203a204e465473206f6e20746869732064726f702061726520616c7260008201527f65616479206d696e746564000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e744261746368203a205461726765742061646472657373206d7573742060008201527f626520796f75722061646472657373206265636175736520796f75206172652060208201527f6e6f7420746865206f776e657200000000000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f6d696e744261746368203a20596f75206e65656420746f206d696e742061742060008201527f6c65617374206f6e65204e465400000000000000000000000000000000000000602082015250565b7f52656d6f76652046726f6d2057686974656c697374203a20546869732075736560008201527f722068617665206e65766572206265656e2077686974656c6973746564000000602082015250565b7f526567697374657220546f2057686974656c697374203a20546869732075736560008201527f7220697320616c72656164792077686974656c69737465640000000000000000602082015250565b7f42617463682052656d6f76652046726f6d2057686974656c697374203a20536f60008201527f6d652075736572206f6620696e7075742068617665206e65766572206265656e60208201527f2077686974656c69737465640000000000000000000000000000000000000000604082015250565b6158f281614ca7565b81146158fd57600080fd5b50565b61590981614cb9565b811461591457600080fd5b50565b61592081614cc5565b811461592b57600080fd5b50565b61593781614d11565b811461594257600080fd5b5056fea26469706673582212203a08835281c97b0e7e01d8b7f9b0abc1efdd115ea8cb3a763f5623ae52ea3e9864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000005dc00000000000000000000000000000000000000000000000000000000000000135363616c657320627920416e6e61204a7564640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065343414c45530000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Scales by Anna Judd
Arg [1] : symbol (string): SCALES
Arg [2] : _royaltyFeesInBips (uint256): 1500
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000005dc
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [4] : 5363616c657320627920416e6e61204a75646400000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 5343414c45530000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47118:7254:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48627:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25713:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27273:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26796:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49436:737;;;:::i;:::-;;53339:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39859:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52036:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28023:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50181:1309;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48839:246;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;47418:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39527:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54131:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52936:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28433:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53902:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40049:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53169:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25407:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54255:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54018:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47458:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25137:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1729:148;;;:::i;:::-;;53795:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47341:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51766:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1087:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25882:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27566:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49093:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52486:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28689:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53481:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53617:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47507:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51498:260;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49242:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27792:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47382:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2032:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47563:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48627:203;48712:4;48544:10;48751:31;;48736:46;;;:11;:46;;;;:86;;;;48786:36;48810:11;48786:23;:36::i;:::-;48736:86;48729:93;;48627:203;;;:::o;25713:100::-;25767:13;25800:5;25793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25713:100;:::o;27273:221::-;27349:7;27377:16;27385:7;27377;:16::i;:::-;27369:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27462:15;:24;27478:7;27462:24;;;;;;;;;;;;;;;;;;;;;27455:31;;27273:221;;;:::o;26796:411::-;26877:13;26893:23;26908:7;26893:14;:23::i;:::-;26877:39;;26941:5;26935:11;;:2;:11;;;;26927:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27035:5;27019:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27044:37;27061:5;27068:12;:10;:12::i;:::-;27044:16;:37::i;:::-;27019:62;26997:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27178:21;27187:2;27191:7;27178:8;:21::i;:::-;26866:341;26796:411;;:::o;49436:737::-;49490:7;:5;:7::i;:::-;49476:21;;:10;:21;;;49471:255;;49551:1;49524:11;:23;49536:10;49524:23;;;;;;;;;;;;;;;;:28;49515:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;49648:15;;49643:1;49616:12;:24;49629:10;49616:24;;;;;;;;;;;;;;;;:28;;;;:::i;:::-;:47;;49607:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;49471:255;49769:18;;49764:1;49744:17;;:21;;;;:::i;:::-;:43;;49736:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;49846:16;49904:1;49884:17;;:21;;;;:::i;:::-;49873:32;;49916:27;49922:10;49934:8;49916:5;:27::i;:::-;49954:42;49967:8;49977:18;49986:8;49977;:18::i;:::-;49954:12;:42::i;:::-;50057:17;;:19;;;;;;;;;:::i;:::-;;;;;;50087:12;:24;50100:10;50087:24;;;;;;;;;;;;;;;;:26;;;;;;;;;:::i;:::-;;;;;;50129:36;50144:10;50156:8;50129:36;;;;;;;:::i;:::-;;;;;;;;49460:713;49436:737::o;53339:134::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53433:32:::1;53446:7;53455:9;53433:12;:32::i;:::-;53339:134:::0;;:::o;39859:113::-;39920:7;39947:10;:17;;;;39940:24;;39859:113;:::o;52036:442::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52131:6:::1;52125:184;52147:5;:12;52143:1;:16;52125:184;;;52215:1;52190:11;:21;52202:5;52208:1;52202:8;;;;;;;;:::i;:::-;;;;;;;;52190:21;;;;;;;;;;;;;;;;:26;52182:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;52161:3;;;;;:::i;:::-;;;;52125:184;;;;52325:6;52319:94;52341:5;:12;52337:1;:16;52319:94;;;52400:1;52376:11;:21;52388:5;52394:1;52388:8;;;;;;;;:::i;:::-;;;;;;;;52376:21;;;;;;;;;;;;;;;:25;;;;52355:3;;;;;:::i;:::-;;;;52319:94;;;;52428:42;52463:5;52428:42;;;;;;:::i;:::-;;;;;;;;52036:442:::0;:::o;28023:339::-;28218:41;28237:12;:10;:12::i;:::-;28251:7;28218:18;:41::i;:::-;28210:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28326:28;28336:4;28342:2;28346:7;28326:9;:28::i;:::-;28023:339;;;:::o;50181:1309::-;50303:1;50289:16;;:2;:16;;;;50279:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;50388:1;50379:6;:10;50369:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50491:18;;50481:6;50461:17;;:26;;;;:::i;:::-;:48;;50451:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;50593:7;:5;:7::i;:::-;50579:21;;:10;:21;;;50574:404;;50651:2;50637:16;;:10;:16;;;50627:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;50779:1;50760:11;:15;50772:2;50760:15;;;;;;;;;;;;;;;;:20;50750:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50881:15;;50871:6;50852:12;:16;50865:2;50852:16;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;:44;;50842:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;50574:404;50988:25;51030:6;51016:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50988:49;;51054:9;51048:296;51073:6;51069:1;:10;51048:296;;;51145:1;51125:17;;:21;;;;:::i;:::-;51111:8;51120:1;51111:11;;;;;;;;:::i;:::-;;;;;;;:35;;;;;51161:24;51168:2;51172:8;51181:1;51172:11;;;;;;;;:::i;:::-;;;;;;;;51161:5;:24::i;:::-;51200:48;51213:8;51222:1;51213:11;;;;;;;;:::i;:::-;;;;;;;;51226:21;51235:8;51244:1;51235:11;;;;;;;;:::i;:::-;;;;;;;;51226:8;:21::i;:::-;51200:12;:48::i;:::-;51313:17;;:19;;;;;;;;;:::i;:::-;;;;;;51081:3;;;;;:::i;:::-;;;;51048:296;;;;51372:2;51358:16;;:10;:16;;;51354:75;;;51411:6;51391:12;:16;51404:2;51391:16;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;51354:75;51452:30;51469:2;51473:8;51452:30;;;;;;;:::i;:::-;;;;;;;;50237:1253;50181:1309;;:::o;48839:246::-;48956:16;48983:21;49031:15;;;;;;;;;;;49048:28;49065:10;49048:16;:28::i;:::-;49023:54;;;;48839:246;;;;;:::o;47418:33::-;;;;:::o;39527:256::-;39624:7;39660:23;39677:5;39660:16;:23::i;:::-;39652:5;:31;39644:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39749:12;:19;39762:5;39749:19;;;;;;;;;;;;;;;:26;39769:5;39749:26;;;;;;;;;;;;39742:33;;39527:256;;;;:::o;54131:112::-;54189:4;54234:1;54213:11;:17;54225:4;54213:17;;;;;;;;;;;;;;;;:22;54206:29;;54131:112;;;:::o;52936:225::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53036:15:::1;53019:14;:32;;;;53084:14;;53062:18;;:36;;;;;;;:::i;:::-;;;;;;;;53114:39;53137:15;53114:39;;;;;;:::i;:::-;;;;;;;;52936:225:::0;:::o;28433:185::-;28571:39;28588:4;28594:2;28598:7;28571:39;;;;;;;;;;;;:16;:39::i;:::-;28433:185;;;:::o;53902:108::-;53957:7;53984:18;;53977:25;;53902:108;:::o;40049:233::-;40124:7;40160:30;:28;:30::i;:::-;40152:5;:38;40144:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40257:10;40268:5;40257:17;;;;;;;;:::i;:::-;;;;;;;;;;40250:24;;40049:233;;;:::o;53169:162::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53264:12:::1;53248:13;:28;;;;;;;;;;;;:::i;:::-;;53292:31;53309:12;53292:31;;;;;;:::i;:::-;;;;;;;;53169:162:::0;:::o;25407:239::-;25479:7;25499:13;25515:7;:16;25523:7;25515:16;;;;;;;;;;;;;;;;;;;;;25499:32;;25567:1;25550:19;;:5;:19;;;;25542:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25633:5;25626:12;;;25407:239;;;:::o;54255:114::-;54316:7;54343:12;:18;54356:4;54343:18;;;;;;;;;;;;;;;;54336:25;;54255:114;;;:::o;54018:105::-;54071:7;54098:17;;54091:24;;54018:105;:::o;47458:36::-;;;;:::o;25137:208::-;25209:7;25254:1;25237:19;;:5;:19;;;;25229:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25321:9;:16;25331:5;25321:16;;;;;;;;;;;;;;;;25314:23;;25137:208;;;:::o;1729:148::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;1836:1:::1;1799:40;;1820:6;;;;;;;;;;;1799:40;;;;;;;;;;;;1867:1;1850:6;;:19;;;;;;;;;;;;;;;;;;1729:148::o:0;53795:99::-;53845:7;53872:14;;53865:21;;53795:99;:::o;47341:34::-;;;;:::o;51766:262::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51868:1:::1;51847:11;:17;51859:4;51847:17;;;;;;;;;;;;;;;;:22;51839:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;51966:1;51946:11;:17;51958:4;51946:17;;;;;;;;;;;;;;;:21;;;;51983:37;52015:4;51983:37;;;;;;:::i;:::-;;;;;;;;51766:262:::0;:::o;1087:79::-;1125:7;1152:6;;;;;;;;;;;1145:13;;1087:79;:::o;25882:104::-;25938:13;25971:7;25964:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25882:104;:::o;27566:155::-;27661:52;27680:12;:10;:12::i;:::-;27694:8;27704;27661:18;:52::i;:::-;27566:155;;:::o;49093:141::-;49159:7;49209:17;;49200:5;49187:10;:18;;;;:::i;:::-;49186:40;;;;:::i;:::-;49179:47;;49093:141;;;:::o;52486:442::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;52581:6:::1;52575:184;52597:5;:12;52593:1;:16;52575:184;;;52665:1;52640:11;:21;52652:5;52658:1;52652:8;;;;;;;;:::i;:::-;;;;;;;;52640:21;;;;;;;;;;;;;;;;:26;52632:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;52611:3;;;;;:::i;:::-;;;;52575:184;;;;52775:6;52769:94;52791:5;:12;52787:1;:16;52769:94;;;52850:1;52826:11;:21;52838:5;52844:1;52838:8;;;;;;;;:::i;:::-;;;;;;;;52826:21;;;;;;;;;;;;;;;:25;;;;52805:3;;;;;:::i;:::-;;;;52769:94;;;;52878:42;52913:5;52878:42;;;;;;:::i;:::-;;;;;;;;52486:442:::0;:::o;28689:328::-;28864:41;28883:12;:10;:12::i;:::-;28897:7;28864:18;:41::i;:::-;28856:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28970:39;28984:4;28990:2;28994:7;29003:5;28970:13;:39::i;:::-;28689:328;;;;:::o;53481:128::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;53561:40:::1;53574:7;53583:17;53592:7;53583:8;:17::i;:::-;53561:12;:40::i;:::-;53481:128:::0;:::o;53617:170::-;53686:13;53744;53759:18;:7;:16;:18::i;:::-;53727:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53713:66;;53617:170;;;:::o;47507:49::-;;;;;;;;;;;;;;;;;:::o;51498:260::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51602:1:::1;51581:11;:17;51593:4;51581:17;;;;;;;;;;;;;;;;:22;51572:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;51696:1;51676:11;:17;51688:4;51676:17;;;;;;;;;;;;;;;:21;;;;51713:37;51745:4;51713:37;;;;;;:::i;:::-;;;;;;;;51498:260:::0;:::o;49242:184::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49360:9:::1;49342:15;;:27;;;;;;;;;;;;;;;;;;49400:18;49380:17;:38;;;;49242:184:::0;;:::o;27792:164::-;27889:4;27913:18;:25;27932:5;27913:25;;;;;;;;;;;;;;;:35;27939:8;27913:35;;;;;;;;;;;;;;;;;;;;;;;;;27906:42;;27792:164;;;;:::o;47382:29::-;;;;:::o;2032:244::-;1309:12;:10;:12::i;:::-;1299:22;;:6;;;;;;;;;;;:22;;;1291:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2141:1:::1;2121:22;;:8;:22;;;;2113:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2231:8;2202:38;;2223:6;;;;;;;;;;;2202:38;;;;;;;;;;;;2260:8;2251:6;;:17;;;;;;;;;;;;;;;;;;2032:244:::0;:::o;47563:50::-;;;;;;;;;;;;;;;;;:::o;39219:224::-;39321:4;39360:35;39345:50;;;:11;:50;;;;:90;;;;39399:36;39423:11;39399:23;:36::i;:::-;39345:90;39338:97;;39219:224;;;:::o;30527:127::-;30592:4;30644:1;30616:30;;:7;:16;30624:7;30616:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30609:37;;30527:127;;;:::o;240:98::-;293:7;320:10;313:17;;240:98;:::o;34673:174::-;34775:2;34748:15;:24;34764:7;34748:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34831:7;34827:2;34793:46;;34802:23;34817:7;34802:14;:23::i;:::-;34793:46;;;;;;;;;;;;34673:174;;:::o;32505:439::-;32599:1;32585:16;;:2;:16;;;;32577:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32658:16;32666:7;32658;:16::i;:::-;32657:17;32649:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32720:45;32749:1;32753:2;32757:7;32720:20;:45::i;:::-;32795:1;32778:9;:13;32788:2;32778:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32826:2;32807:7;:16;32815:7;32807:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32871:7;32867:2;32846:33;;32863:1;32846:33;;;;;;;;;;;;32892:44;32920:1;32924:2;32928:7;32892:19;:44::i;:::-;32505:439;;:::o;46457:217::-;46557:16;46565:7;46557;:16::i;:::-;46549:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;46657:9;46635:10;:19;46646:7;46635:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;46457:217;;:::o;30821:348::-;30914:4;30939:16;30947:7;30939;:16::i;:::-;30931:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31015:13;31031:23;31046:7;31031:14;:23::i;:::-;31015:39;;31084:5;31073:16;;:7;:16;;;:52;;;;31093:32;31110:5;31117:7;31093:16;:32::i;:::-;31073:52;:87;;;;31153:7;31129:31;;:20;31141:7;31129:11;:20::i;:::-;:31;;;31073:87;31065:96;;;30821:348;;;;:::o;33930:625::-;34089:4;34062:31;;:23;34077:7;34062:14;:23::i;:::-;:31;;;34054:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34168:1;34154:16;;:2;:16;;;;34146:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34224:39;34245:4;34251:2;34255:7;34224:20;:39::i;:::-;34328:29;34345:1;34349:7;34328:8;:29::i;:::-;34389:1;34370:9;:15;34380:4;34370:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34418:1;34401:9;:13;34411:2;34401:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34449:2;34430:7;:16;34438:7;34430:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34488:7;34484:2;34469:27;;34478:4;34469:27;;;;;;;;;;;;34509:38;34529:4;34535:2;34539:7;34509:19;:38::i;:::-;33930:625;;;:::o;34989:315::-;35144:8;35135:17;;:5;:17;;;;35127:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35231:8;35193:18;:25;35212:5;35193:25;;;;;;;;;;;;;;;:35;35219:8;35193:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35277:8;35255:41;;35270:5;35255:41;;;35287:8;35255:41;;;;;;:::i;:::-;;;;;;;;34989:315;;;:::o;29899:::-;30056:28;30066:4;30072:2;30076:7;30056:9;:28::i;:::-;30103:48;30126:4;30132:2;30136:7;30145:5;30103:22;:48::i;:::-;30095:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29899:315;;;;:::o;21322:723::-;21378:13;21608:1;21599:5;:10;21595:53;;;21626:10;;;;;;;;;;;;;;;;;;;;;21595:53;21658:12;21673:5;21658:20;;21689:14;21714:78;21729:1;21721:4;:9;21714:78;;21747:8;;;;;:::i;:::-;;;;21778:2;21770:10;;;;;:::i;:::-;;;21714:78;;;21802:19;21834:6;21824:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21802:39;;21852:154;21868:1;21859:5;:10;21852:154;;21896:1;21886:11;;;;;:::i;:::-;;;21963:2;21955:5;:10;;;;:::i;:::-;21942:2;:24;;;;:::i;:::-;21929:39;;21912:6;21919;21912:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;21992:2;21983:11;;;;;:::i;:::-;;;21852:154;;;22030:6;22016:21;;;;;21322:723;;;;:::o;24768:305::-;24870:4;24922:25;24907:40;;;:11;:40;;;;:105;;;;24979:33;24964:48;;;:11;:48;;;;24907:105;:158;;;;25029:36;25053:11;25029:23;:36::i;:::-;24907:158;24887:178;;24768:305;;;:::o;40895:589::-;41039:45;41066:4;41072:2;41076:7;41039:26;:45::i;:::-;41117:1;41101:18;;:4;:18;;;41097:187;;;41136:40;41168:7;41136:31;:40::i;:::-;41097:187;;;41206:2;41198:10;;:4;:10;;;41194:90;;41225:47;41258:4;41264:7;41225:32;:47::i;:::-;41194:90;41097:187;41312:1;41298:16;;:2;:16;;;41294:183;;;41331:45;41368:7;41331:36;:45::i;:::-;41294:183;;;41404:4;41398:10;;:2;:10;;;41394:83;;41425:40;41453:2;41457:7;41425:27;:40::i;:::-;41394:83;41294:183;40895:589;;;:::o;37751:125::-;;;;:::o;35869:799::-;36024:4;36045:15;:2;:13;;;:15::i;:::-;36041:620;;;36097:2;36081:36;;;36118:12;:10;:12::i;:::-;36132:4;36138:7;36147:5;36081:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36077:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36340:1;36323:6;:13;:18;36319:272;;;36366:60;;;;;;;;;;:::i;:::-;;;;;;;;36319:272;36541:6;36535:13;36526:6;36522:2;36518:15;36511:38;36077:529;36214:41;;;36204:51;;;:6;:51;;;;36197:58;;;;;36041:620;36645:4;36638:11;;35869:799;;;;;;;:::o;7574:157::-;7659:4;7698:25;7683:40;;;:11;:40;;;;7676:47;;7574:157;;;:::o;37240:126::-;;;;:::o;42207:164::-;42311:10;:17;;;;42284:15;:24;42300:7;42284:24;;;;;;;;;;;:44;;;;42339:10;42355:7;42339:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42207:164;:::o;42998:988::-;43264:22;43314:1;43289:22;43306:4;43289:16;:22::i;:::-;:26;;;;:::i;:::-;43264:51;;43326:18;43347:17;:26;43365:7;43347:26;;;;;;;;;;;;43326:47;;43494:14;43480:10;:28;43476:328;;43525:19;43547:12;:18;43560:4;43547:18;;;;;;;;;;;;;;;:34;43566:14;43547:34;;;;;;;;;;;;43525:56;;43631:11;43598:12;:18;43611:4;43598:18;;;;;;;;;;;;;;;:30;43617:10;43598:30;;;;;;;;;;;:44;;;;43748:10;43715:17;:30;43733:11;43715:30;;;;;;;;;;;:43;;;;43510:294;43476:328;43900:17;:26;43918:7;43900:26;;;;;;;;;;;43893:33;;;43944:12;:18;43957:4;43944:18;;;;;;;;;;;;;;;:34;43963:14;43944:34;;;;;;;;;;;43937:41;;;43079:907;;42998:988;;:::o;44281:1079::-;44534:22;44579:1;44559:10;:17;;;;:21;;;;:::i;:::-;44534:46;;44591:18;44612:15;:24;44628:7;44612:24;;;;;;;;;;;;44591:45;;44963:19;44985:10;44996:14;44985:26;;;;;;;;:::i;:::-;;;;;;;;;;44963:48;;45049:11;45024:10;45035;45024:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45160:10;45129:15;:28;45145:11;45129:28;;;;;;;;;;;:41;;;;45301:15;:24;45317:7;45301:24;;;;;;;;;;;45294:31;;;45336:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44352:1008;;;44281:1079;:::o;41785:221::-;41870:14;41887:20;41904:2;41887:16;:20::i;:::-;41870:37;;41945:7;41918:12;:16;41931:2;41918:16;;;;;;;;;;;;;;;:24;41935:6;41918:24;;;;;;;;;;;:34;;;;41992:6;41963:17;:26;41981:7;41963:26;;;;;;;;;;;:35;;;;41859:147;41785:221;;:::o;13864:326::-;13924:4;14181:1;14159:7;:19;;;:23;14152:30;;13864:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:654::-;8919:6;8927;8976:2;8964:9;8955:7;8951:23;8947:32;8944:119;;;8982:79;;:::i;:::-;8944:119;9102:1;9127:53;9172:7;9163:6;9152:9;9148:22;9127:53;:::i;:::-;9117:63;;9073:117;9257:2;9246:9;9242:18;9229:32;9288:18;9280:6;9277:30;9274:117;;;9310:79;;:::i;:::-;9274:117;9415:63;9470:7;9461:6;9450:9;9446:22;9415:63;:::i;:::-;9405:73;;9200:288;8841:654;;;;;:::o;9501:474::-;9569:6;9577;9626:2;9614:9;9605:7;9601:23;9597:32;9594:119;;;9632:79;;:::i;:::-;9594:119;9752:1;9777:53;9822:7;9813:6;9802:9;9798:22;9777:53;:::i;:::-;9767:63;;9723:117;9879:2;9905:53;9950:7;9941:6;9930:9;9926:22;9905:53;:::i;:::-;9895:63;;9850:118;9501:474;;;;;:::o;9981:179::-;10050:10;10071:46;10113:3;10105:6;10071:46;:::i;:::-;10149:4;10144:3;10140:14;10126:28;;9981:179;;;;:::o;10166:::-;10235:10;10256:46;10298:3;10290:6;10256:46;:::i;:::-;10334:4;10329:3;10325:14;10311:28;;10166:179;;;;:::o;10351:108::-;10428:24;10446:5;10428:24;:::i;:::-;10423:3;10416:37;10351:108;;:::o;10465:118::-;10552:24;10570:5;10552:24;:::i;:::-;10547:3;10540:37;10465:118;;:::o;10619:732::-;10738:3;10767:54;10815:5;10767:54;:::i;:::-;10837:86;10916:6;10911:3;10837:86;:::i;:::-;10830:93;;10947:56;10997:5;10947:56;:::i;:::-;11026:7;11057:1;11042:284;11067:6;11064:1;11061:13;11042:284;;;11143:6;11137:13;11170:63;11229:3;11214:13;11170:63;:::i;:::-;11163:70;;11256:60;11309:6;11256:60;:::i;:::-;11246:70;;11102:224;11089:1;11086;11082:9;11077:14;;11042:284;;;11046:14;11342:3;11335:10;;10743:608;;;10619:732;;;;:::o;11387:::-;11506:3;11535:54;11583:5;11535:54;:::i;:::-;11605:86;11684:6;11679:3;11605:86;:::i;:::-;11598:93;;11715:56;11765:5;11715:56;:::i;:::-;11794:7;11825:1;11810:284;11835:6;11832:1;11829:13;11810:284;;;11911:6;11905:13;11938:63;11997:3;11982:13;11938:63;:::i;:::-;11931:70;;12024:60;12077:6;12024:60;:::i;:::-;12014:70;;11870:224;11857:1;11854;11850:9;11845:14;;11810:284;;;11814:14;12110:3;12103:10;;11511:608;;;11387:732;;;;:::o;12125:109::-;12206:21;12221:5;12206:21;:::i;:::-;12201:3;12194:34;12125:109;;:::o;12240:360::-;12326:3;12354:38;12386:5;12354:38;:::i;:::-;12408:70;12471:6;12466:3;12408:70;:::i;:::-;12401:77;;12487:52;12532:6;12527:3;12520:4;12513:5;12509:16;12487:52;:::i;:::-;12564:29;12586:6;12564:29;:::i;:::-;12559:3;12555:39;12548:46;;12330:270;12240:360;;;;:::o;12606:364::-;12694:3;12722:39;12755:5;12722:39;:::i;:::-;12777:71;12841:6;12836:3;12777:71;:::i;:::-;12770:78;;12857:52;12902:6;12897:3;12890:4;12883:5;12879:16;12857:52;:::i;:::-;12934:29;12956:6;12934:29;:::i;:::-;12929:3;12925:39;12918:46;;12698:272;12606:364;;;;:::o;12976:377::-;13082:3;13110:39;13143:5;13110:39;:::i;:::-;13165:89;13247:6;13242:3;13165:89;:::i;:::-;13158:96;;13263:52;13308:6;13303:3;13296:4;13289:5;13285:16;13263:52;:::i;:::-;13340:6;13335:3;13331:16;13324:23;;13086:267;12976:377;;;;:::o;13383:845::-;13486:3;13523:5;13517:12;13552:36;13578:9;13552:36;:::i;:::-;13604:89;13686:6;13681:3;13604:89;:::i;:::-;13597:96;;13724:1;13713:9;13709:17;13740:1;13735:137;;;;13886:1;13881:341;;;;13702:520;;13735:137;13819:4;13815:9;13804;13800:25;13795:3;13788:38;13855:6;13850:3;13846:16;13839:23;;13735:137;;13881:341;13948:38;13980:5;13948:38;:::i;:::-;14008:1;14022:154;14036:6;14033:1;14030:13;14022:154;;;14110:7;14104:14;14100:1;14095:3;14091:11;14084:35;14160:1;14151:7;14147:15;14136:26;;14058:4;14055:1;14051:12;14046:17;;14022:154;;;14205:6;14200:3;14196:16;14189:23;;13888:334;;13702:520;;13490:738;;13383:845;;;;:::o;14234:366::-;14376:3;14397:67;14461:2;14456:3;14397:67;:::i;:::-;14390:74;;14473:93;14562:3;14473:93;:::i;:::-;14591:2;14586:3;14582:12;14575:19;;14234:366;;;:::o;14606:::-;14748:3;14769:67;14833:2;14828:3;14769:67;:::i;:::-;14762:74;;14845:93;14934:3;14845:93;:::i;:::-;14963:2;14958:3;14954:12;14947:19;;14606:366;;;:::o;14978:::-;15120:3;15141:67;15205:2;15200:3;15141:67;:::i;:::-;15134:74;;15217:93;15306:3;15217:93;:::i;:::-;15335:2;15330:3;15326:12;15319:19;;14978:366;;;:::o;15350:::-;15492:3;15513:67;15577:2;15572:3;15513:67;:::i;:::-;15506:74;;15589:93;15678:3;15589:93;:::i;:::-;15707:2;15702:3;15698:12;15691:19;;15350:366;;;:::o;15722:::-;15864:3;15885:67;15949:2;15944:3;15885:67;:::i;:::-;15878:74;;15961:93;16050:3;15961:93;:::i;:::-;16079:2;16074:3;16070:12;16063:19;;15722:366;;;:::o;16094:::-;16236:3;16257:67;16321:2;16316:3;16257:67;:::i;:::-;16250:74;;16333:93;16422:3;16333:93;:::i;:::-;16451:2;16446:3;16442:12;16435:19;;16094:366;;;:::o;16466:::-;16608:3;16629:67;16693:2;16688:3;16629:67;:::i;:::-;16622:74;;16705:93;16794:3;16705:93;:::i;:::-;16823:2;16818:3;16814:12;16807:19;;16466:366;;;:::o;16838:::-;16980:3;17001:67;17065:2;17060:3;17001:67;:::i;:::-;16994:74;;17077:93;17166:3;17077:93;:::i;:::-;17195:2;17190:3;17186:12;17179:19;;16838:366;;;:::o;17210:::-;17352:3;17373:67;17437:2;17432:3;17373:67;:::i;:::-;17366:74;;17449:93;17538:3;17449:93;:::i;:::-;17567:2;17562:3;17558:12;17551:19;;17210:366;;;:::o;17582:::-;17724:3;17745:67;17809:2;17804:3;17745:67;:::i;:::-;17738:74;;17821:93;17910:3;17821:93;:::i;:::-;17939:2;17934:3;17930:12;17923:19;;17582:366;;;:::o;17954:::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;17954:366;;;:::o;18326:::-;18468:3;18489:67;18553:2;18548:3;18489:67;:::i;:::-;18482:74;;18565:93;18654:3;18565:93;:::i;:::-;18683:2;18678:3;18674:12;18667:19;;18326:366;;;:::o;18698:::-;18840:3;18861:67;18925:2;18920:3;18861:67;:::i;:::-;18854:74;;18937:93;19026:3;18937:93;:::i;:::-;19055:2;19050:3;19046:12;19039:19;;18698:366;;;:::o;19070:::-;19212:3;19233:67;19297:2;19292:3;19233:67;:::i;:::-;19226:74;;19309:93;19398:3;19309:93;:::i;:::-;19427:2;19422:3;19418:12;19411:19;;19070:366;;;:::o;19442:::-;19584:3;19605:67;19669:2;19664:3;19605:67;:::i;:::-;19598:74;;19681:93;19770:3;19681:93;:::i;:::-;19799:2;19794:3;19790:12;19783:19;;19442:366;;;:::o;19814:::-;19956:3;19977:67;20041:2;20036:3;19977:67;:::i;:::-;19970:74;;20053:93;20142:3;20053:93;:::i;:::-;20171:2;20166:3;20162:12;20155:19;;19814:366;;;:::o;20186:::-;20328:3;20349:67;20413:2;20408:3;20349:67;:::i;:::-;20342:74;;20425:93;20514:3;20425:93;:::i;:::-;20543:2;20538:3;20534:12;20527:19;;20186:366;;;:::o;20558:::-;20700:3;20721:67;20785:2;20780:3;20721:67;:::i;:::-;20714:74;;20797:93;20886:3;20797:93;:::i;:::-;20915:2;20910:3;20906:12;20899:19;;20558:366;;;:::o;20930:::-;21072:3;21093:67;21157:2;21152:3;21093:67;:::i;:::-;21086:74;;21169:93;21258:3;21169:93;:::i;:::-;21287:2;21282:3;21278:12;21271:19;;20930:366;;;:::o;21302:::-;21444:3;21465:67;21529:2;21524:3;21465:67;:::i;:::-;21458:74;;21541:93;21630:3;21541:93;:::i;:::-;21659:2;21654:3;21650:12;21643:19;;21302:366;;;:::o;21674:::-;21816:3;21837:67;21901:2;21896:3;21837:67;:::i;:::-;21830:74;;21913:93;22002:3;21913:93;:::i;:::-;22031:2;22026:3;22022:12;22015:19;;21674:366;;;:::o;22046:::-;22188:3;22209:67;22273:2;22268:3;22209:67;:::i;:::-;22202:74;;22285:93;22374:3;22285:93;:::i;:::-;22403:2;22398:3;22394:12;22387:19;;22046:366;;;:::o;22418:::-;22560:3;22581:67;22645:2;22640:3;22581:67;:::i;:::-;22574:74;;22657:93;22746:3;22657:93;:::i;:::-;22775:2;22770:3;22766:12;22759:19;;22418:366;;;:::o;22790:::-;22932:3;22953:67;23017:2;23012:3;22953:67;:::i;:::-;22946:74;;23029:93;23118:3;23029:93;:::i;:::-;23147:2;23142:3;23138:12;23131:19;;22790:366;;;:::o;23162:::-;23304:3;23325:67;23389:2;23384:3;23325:67;:::i;:::-;23318:74;;23401:93;23490:3;23401:93;:::i;:::-;23519:2;23514:3;23510:12;23503:19;;23162:366;;;:::o;23534:::-;23676:3;23697:67;23761:2;23756:3;23697:67;:::i;:::-;23690:74;;23773:93;23862:3;23773:93;:::i;:::-;23891:2;23886:3;23882:12;23875:19;;23534:366;;;:::o;23906:::-;24048:3;24069:67;24133:2;24128:3;24069:67;:::i;:::-;24062:74;;24145:93;24234:3;24145:93;:::i;:::-;24263:2;24258:3;24254:12;24247:19;;23906:366;;;:::o;24278:::-;24420:3;24441:67;24505:2;24500:3;24441:67;:::i;:::-;24434:74;;24517:93;24606:3;24517:93;:::i;:::-;24635:2;24630:3;24626:12;24619:19;;24278:366;;;:::o;24650:::-;24792:3;24813:67;24877:2;24872:3;24813:67;:::i;:::-;24806:74;;24889:93;24978:3;24889:93;:::i;:::-;25007:2;25002:3;24998:12;24991:19;;24650:366;;;:::o;25022:::-;25164:3;25185:67;25249:2;25244:3;25185:67;:::i;:::-;25178:74;;25261:93;25350:3;25261:93;:::i;:::-;25379:2;25374:3;25370:12;25363:19;;25022:366;;;:::o;25394:::-;25536:3;25557:67;25621:2;25616:3;25557:67;:::i;:::-;25550:74;;25633:93;25722:3;25633:93;:::i;:::-;25751:2;25746:3;25742:12;25735:19;;25394:366;;;:::o;25766:108::-;25843:24;25861:5;25843:24;:::i;:::-;25838:3;25831:37;25766:108;;:::o;25880:118::-;25967:24;25985:5;25967:24;:::i;:::-;25962:3;25955:37;25880:118;;:::o;26004:429::-;26181:3;26203:92;26291:3;26282:6;26203:92;:::i;:::-;26196:99;;26312:95;26403:3;26394:6;26312:95;:::i;:::-;26305:102;;26424:3;26417:10;;26004:429;;;;;:::o;26439:222::-;26532:4;26570:2;26559:9;26555:18;26547:26;;26583:71;26651:1;26640:9;26636:17;26627:6;26583:71;:::i;:::-;26439:222;;;;:::o;26667:640::-;26862:4;26900:3;26889:9;26885:19;26877:27;;26914:71;26982:1;26971:9;26967:17;26958:6;26914:71;:::i;:::-;26995:72;27063:2;27052:9;27048:18;27039:6;26995:72;:::i;:::-;27077;27145:2;27134:9;27130:18;27121:6;27077:72;:::i;:::-;27196:9;27190:4;27186:20;27181:2;27170:9;27166:18;27159:48;27224:76;27295:4;27286:6;27224:76;:::i;:::-;27216:84;;26667:640;;;;;;;:::o;27313:483::-;27484:4;27522:2;27511:9;27507:18;27499:26;;27535:71;27603:1;27592:9;27588:17;27579:6;27535:71;:::i;:::-;27653:9;27647:4;27643:20;27638:2;27627:9;27623:18;27616:48;27681:108;27784:4;27775:6;27681:108;:::i;:::-;27673:116;;27313:483;;;;;:::o;27802:332::-;27923:4;27961:2;27950:9;27946:18;27938:26;;27974:71;28042:1;28031:9;28027:17;28018:6;27974:71;:::i;:::-;28055:72;28123:2;28112:9;28108:18;28099:6;28055:72;:::i;:::-;27802:332;;;;;:::o;28140:373::-;28283:4;28321:2;28310:9;28306:18;28298:26;;28370:9;28364:4;28360:20;28356:1;28345:9;28341:17;28334:47;28398:108;28501:4;28492:6;28398:108;:::i;:::-;28390:116;;28140:373;;;;:::o;28519:210::-;28606:4;28644:2;28633:9;28629:18;28621:26;;28657:65;28719:1;28708:9;28704:17;28695:6;28657:65;:::i;:::-;28519:210;;;;:::o;28735:313::-;28848:4;28886:2;28875:9;28871:18;28863:26;;28935:9;28929:4;28925:20;28921:1;28910:9;28906:17;28899:47;28963:78;29036:4;29027:6;28963:78;:::i;:::-;28955:86;;28735:313;;;;:::o;29054:419::-;29220:4;29258:2;29247:9;29243:18;29235:26;;29307:9;29301:4;29297:20;29293:1;29282:9;29278:17;29271:47;29335:131;29461:4;29335:131;:::i;:::-;29327:139;;29054:419;;;:::o;29479:::-;29645:4;29683:2;29672:9;29668:18;29660:26;;29732:9;29726:4;29722:20;29718:1;29707:9;29703:17;29696:47;29760:131;29886:4;29760:131;:::i;:::-;29752:139;;29479:419;;;:::o;29904:::-;30070:4;30108:2;30097:9;30093:18;30085:26;;30157:9;30151:4;30147:20;30143:1;30132:9;30128:17;30121:47;30185:131;30311:4;30185:131;:::i;:::-;30177:139;;29904:419;;;:::o;30329:::-;30495:4;30533:2;30522:9;30518:18;30510:26;;30582:9;30576:4;30572:20;30568:1;30557:9;30553:17;30546:47;30610:131;30736:4;30610:131;:::i;:::-;30602:139;;30329:419;;;:::o;30754:::-;30920:4;30958:2;30947:9;30943:18;30935:26;;31007:9;31001:4;30997:20;30993:1;30982:9;30978:17;30971:47;31035:131;31161:4;31035:131;:::i;:::-;31027:139;;30754:419;;;:::o;31179:::-;31345:4;31383:2;31372:9;31368:18;31360:26;;31432:9;31426:4;31422:20;31418:1;31407:9;31403:17;31396:47;31460:131;31586:4;31460:131;:::i;:::-;31452:139;;31179:419;;;:::o;31604:::-;31770:4;31808:2;31797:9;31793:18;31785:26;;31857:9;31851:4;31847:20;31843:1;31832:9;31828:17;31821:47;31885:131;32011:4;31885:131;:::i;:::-;31877:139;;31604:419;;;:::o;32029:::-;32195:4;32233:2;32222:9;32218:18;32210:26;;32282:9;32276:4;32272:20;32268:1;32257:9;32253:17;32246:47;32310:131;32436:4;32310:131;:::i;:::-;32302:139;;32029:419;;;:::o;32454:::-;32620:4;32658:2;32647:9;32643:18;32635:26;;32707:9;32701:4;32697:20;32693:1;32682:9;32678:17;32671:47;32735:131;32861:4;32735:131;:::i;:::-;32727:139;;32454:419;;;:::o;32879:::-;33045:4;33083:2;33072:9;33068:18;33060:26;;33132:9;33126:4;33122:20;33118:1;33107:9;33103:17;33096:47;33160:131;33286:4;33160:131;:::i;:::-;33152:139;;32879:419;;;:::o;33304:::-;33470:4;33508:2;33497:9;33493:18;33485:26;;33557:9;33551:4;33547:20;33543:1;33532:9;33528:17;33521:47;33585:131;33711:4;33585:131;:::i;:::-;33577:139;;33304:419;;;:::o;33729:::-;33895:4;33933:2;33922:9;33918:18;33910:26;;33982:9;33976:4;33972:20;33968:1;33957:9;33953:17;33946:47;34010:131;34136:4;34010:131;:::i;:::-;34002:139;;33729:419;;;:::o;34154:::-;34320:4;34358:2;34347:9;34343:18;34335:26;;34407:9;34401:4;34397:20;34393:1;34382:9;34378:17;34371:47;34435:131;34561:4;34435:131;:::i;:::-;34427:139;;34154:419;;;:::o;34579:::-;34745:4;34783:2;34772:9;34768:18;34760:26;;34832:9;34826:4;34822:20;34818:1;34807:9;34803:17;34796:47;34860:131;34986:4;34860:131;:::i;:::-;34852:139;;34579:419;;;:::o;35004:::-;35170:4;35208:2;35197:9;35193:18;35185:26;;35257:9;35251:4;35247:20;35243:1;35232:9;35228:17;35221:47;35285:131;35411:4;35285:131;:::i;:::-;35277:139;;35004:419;;;:::o;35429:::-;35595:4;35633:2;35622:9;35618:18;35610:26;;35682:9;35676:4;35672:20;35668:1;35657:9;35653:17;35646:47;35710:131;35836:4;35710:131;:::i;:::-;35702:139;;35429:419;;;:::o;35854:::-;36020:4;36058:2;36047:9;36043:18;36035:26;;36107:9;36101:4;36097:20;36093:1;36082:9;36078:17;36071:47;36135:131;36261:4;36135:131;:::i;:::-;36127:139;;35854:419;;;:::o;36279:::-;36445:4;36483:2;36472:9;36468:18;36460:26;;36532:9;36526:4;36522:20;36518:1;36507:9;36503:17;36496:47;36560:131;36686:4;36560:131;:::i;:::-;36552:139;;36279:419;;;:::o;36704:::-;36870:4;36908:2;36897:9;36893:18;36885:26;;36957:9;36951:4;36947:20;36943:1;36932:9;36928:17;36921:47;36985:131;37111:4;36985:131;:::i;:::-;36977:139;;36704:419;;;:::o;37129:::-;37295:4;37333:2;37322:9;37318:18;37310:26;;37382:9;37376:4;37372:20;37368:1;37357:9;37353:17;37346:47;37410:131;37536:4;37410:131;:::i;:::-;37402:139;;37129:419;;;:::o;37554:::-;37720:4;37758:2;37747:9;37743:18;37735:26;;37807:9;37801:4;37797:20;37793:1;37782:9;37778:17;37771:47;37835:131;37961:4;37835:131;:::i;:::-;37827:139;;37554:419;;;:::o;37979:::-;38145:4;38183:2;38172:9;38168:18;38160:26;;38232:9;38226:4;38222:20;38218:1;38207:9;38203:17;38196:47;38260:131;38386:4;38260:131;:::i;:::-;38252:139;;37979:419;;;:::o;38404:::-;38570:4;38608:2;38597:9;38593:18;38585:26;;38657:9;38651:4;38647:20;38643:1;38632:9;38628:17;38621:47;38685:131;38811:4;38685:131;:::i;:::-;38677:139;;38404:419;;;:::o;38829:::-;38995:4;39033:2;39022:9;39018:18;39010:26;;39082:9;39076:4;39072:20;39068:1;39057:9;39053:17;39046:47;39110:131;39236:4;39110:131;:::i;:::-;39102:139;;38829:419;;;:::o;39254:::-;39420:4;39458:2;39447:9;39443:18;39435:26;;39507:9;39501:4;39497:20;39493:1;39482:9;39478:17;39471:47;39535:131;39661:4;39535:131;:::i;:::-;39527:139;;39254:419;;;:::o;39679:::-;39845:4;39883:2;39872:9;39868:18;39860:26;;39932:9;39926:4;39922:20;39918:1;39907:9;39903:17;39896:47;39960:131;40086:4;39960:131;:::i;:::-;39952:139;;39679:419;;;:::o;40104:::-;40270:4;40308:2;40297:9;40293:18;40285:26;;40357:9;40351:4;40347:20;40343:1;40332:9;40328:17;40321:47;40385:131;40511:4;40385:131;:::i;:::-;40377:139;;40104:419;;;:::o;40529:::-;40695:4;40733:2;40722:9;40718:18;40710:26;;40782:9;40776:4;40772:20;40768:1;40757:9;40753:17;40746:47;40810:131;40936:4;40810:131;:::i;:::-;40802:139;;40529:419;;;:::o;40954:::-;41120:4;41158:2;41147:9;41143:18;41135:26;;41207:9;41201:4;41197:20;41193:1;41182:9;41178:17;41171:47;41235:131;41361:4;41235:131;:::i;:::-;41227:139;;40954:419;;;:::o;41379:::-;41545:4;41583:2;41572:9;41568:18;41560:26;;41632:9;41626:4;41622:20;41618:1;41607:9;41603:17;41596:47;41660:131;41786:4;41660:131;:::i;:::-;41652:139;;41379:419;;;:::o;41804:::-;41970:4;42008:2;41997:9;41993:18;41985:26;;42057:9;42051:4;42047:20;42043:1;42032:9;42028:17;42021:47;42085:131;42211:4;42085:131;:::i;:::-;42077:139;;41804:419;;;:::o;42229:222::-;42322:4;42360:2;42349:9;42345:18;42337:26;;42373:71;42441:1;42430:9;42426:17;42417:6;42373:71;:::i;:::-;42229:222;;;;:::o;42457:129::-;42491:6;42518:20;;:::i;:::-;42508:30;;42547:33;42575:4;42567:6;42547:33;:::i;:::-;42457:129;;;:::o;42592:75::-;42625:6;42658:2;42652:9;42642:19;;42592:75;:::o;42673:311::-;42750:4;42840:18;42832:6;42829:30;42826:56;;;42862:18;;:::i;:::-;42826:56;42912:4;42904:6;42900:17;42892:25;;42972:4;42966;42962:15;42954:23;;42673:311;;;:::o;42990:307::-;43051:4;43141:18;43133:6;43130:30;43127:56;;;43163:18;;:::i;:::-;43127:56;43201:29;43223:6;43201:29;:::i;:::-;43193:37;;43285:4;43279;43275:15;43267:23;;42990:307;;;:::o;43303:308::-;43365:4;43455:18;43447:6;43444:30;43441:56;;;43477:18;;:::i;:::-;43441:56;43515:29;43537:6;43515:29;:::i;:::-;43507:37;;43599:4;43593;43589:15;43581:23;;43303:308;;;:::o;43617:132::-;43684:4;43707:3;43699:11;;43737:4;43732:3;43728:14;43720:22;;43617:132;;;:::o;43755:::-;43822:4;43845:3;43837:11;;43875:4;43870:3;43866:14;43858:22;;43755:132;;;:::o;43893:141::-;43942:4;43965:3;43957:11;;43988:3;43985:1;43978:14;44022:4;44019:1;44009:18;44001:26;;43893:141;;;:::o;44040:114::-;44107:6;44141:5;44135:12;44125:22;;44040:114;;;:::o;44160:::-;44227:6;44261:5;44255:12;44245:22;;44160:114;;;:::o;44280:98::-;44331:6;44365:5;44359:12;44349:22;;44280:98;;;:::o;44384:99::-;44436:6;44470:5;44464:12;44454:22;;44384:99;;;:::o;44489:113::-;44559:4;44591;44586:3;44582:14;44574:22;;44489:113;;;:::o;44608:::-;44678:4;44710;44705:3;44701:14;44693:22;;44608:113;;;:::o;44727:184::-;44826:11;44860:6;44855:3;44848:19;44900:4;44895:3;44891:14;44876:29;;44727:184;;;;:::o;44917:::-;45016:11;45050:6;45045:3;45038:19;45090:4;45085:3;45081:14;45066:29;;44917:184;;;;:::o;45107:168::-;45190:11;45224:6;45219:3;45212:19;45264:4;45259:3;45255:14;45240:29;;45107:168;;;;:::o;45281:169::-;45365:11;45399:6;45394:3;45387:19;45439:4;45434:3;45430:14;45415:29;;45281:169;;;;:::o;45456:148::-;45558:11;45595:3;45580:18;;45456:148;;;;:::o;45610:305::-;45650:3;45669:20;45687:1;45669:20;:::i;:::-;45664:25;;45703:20;45721:1;45703:20;:::i;:::-;45698:25;;45857:1;45789:66;45785:74;45782:1;45779:81;45776:107;;;45863:18;;:::i;:::-;45776:107;45907:1;45904;45900:9;45893:16;;45610:305;;;;:::o;45921:185::-;45961:1;45978:20;45996:1;45978:20;:::i;:::-;45973:25;;46012:20;46030:1;46012:20;:::i;:::-;46007:25;;46051:1;46041:35;;46056:18;;:::i;:::-;46041:35;46098:1;46095;46091:9;46086:14;;45921:185;;;;:::o;46112:348::-;46152:7;46175:20;46193:1;46175:20;:::i;:::-;46170:25;;46209:20;46227:1;46209:20;:::i;:::-;46204:25;;46397:1;46329:66;46325:74;46322:1;46319:81;46314:1;46307:9;46300:17;46296:105;46293:131;;;46404:18;;:::i;:::-;46293:131;46452:1;46449;46445:9;46434:20;;46112:348;;;;:::o;46466:191::-;46506:4;46526:20;46544:1;46526:20;:::i;:::-;46521:25;;46560:20;46578:1;46560:20;:::i;:::-;46555:25;;46599:1;46596;46593:8;46590:34;;;46604:18;;:::i;:::-;46590:34;46649:1;46646;46642:9;46634:17;;46466:191;;;;:::o;46663:96::-;46700:7;46729:24;46747:5;46729:24;:::i;:::-;46718:35;;46663:96;;;:::o;46765:90::-;46799:7;46842:5;46835:13;46828:21;46817:32;;46765:90;;;:::o;46861:149::-;46897:7;46937:66;46930:5;46926:78;46915:89;;46861:149;;;:::o;47016:126::-;47053:7;47093:42;47086:5;47082:54;47071:65;;47016:126;;;:::o;47148:77::-;47185:7;47214:5;47203:16;;47148:77;;;:::o;47231:154::-;47315:6;47310:3;47305;47292:30;47377:1;47368:6;47363:3;47359:16;47352:27;47231:154;;;:::o;47391:307::-;47459:1;47469:113;47483:6;47480:1;47477:13;47469:113;;;47568:1;47563:3;47559:11;47553:18;47549:1;47544:3;47540:11;47533:39;47505:2;47502:1;47498:10;47493:15;;47469:113;;;47600:6;47597:1;47594:13;47591:101;;;47680:1;47671:6;47666:3;47662:16;47655:27;47591:101;47440:258;47391:307;;;:::o;47704:320::-;47748:6;47785:1;47779:4;47775:12;47765:22;;47832:1;47826:4;47822:12;47853:18;47843:81;;47909:4;47901:6;47897:17;47887:27;;47843:81;47971:2;47963:6;47960:14;47940:18;47937:38;47934:84;;;47990:18;;:::i;:::-;47934:84;47755:269;47704:320;;;:::o;48030:281::-;48113:27;48135:4;48113:27;:::i;:::-;48105:6;48101:40;48243:6;48231:10;48228:22;48207:18;48195:10;48192:34;48189:62;48186:88;;;48254:18;;:::i;:::-;48186:88;48294:10;48290:2;48283:22;48073:238;48030:281;;:::o;48317:233::-;48356:3;48379:24;48397:5;48379:24;:::i;:::-;48370:33;;48425:66;48418:5;48415:77;48412:103;;;48495:18;;:::i;:::-;48412:103;48542:1;48535:5;48531:13;48524:20;;48317:233;;;:::o;48556:176::-;48588:1;48605:20;48623:1;48605:20;:::i;:::-;48600:25;;48639:20;48657:1;48639:20;:::i;:::-;48634:25;;48678:1;48668:35;;48683:18;;:::i;:::-;48668:35;48724:1;48721;48717:9;48712:14;;48556:176;;;;:::o;48738:180::-;48786:77;48783:1;48776:88;48883:4;48880:1;48873:15;48907:4;48904:1;48897:15;48924:180;48972:77;48969:1;48962:88;49069:4;49066:1;49059:15;49093:4;49090:1;49083:15;49110:180;49158:77;49155:1;49148:88;49255:4;49252:1;49245:15;49279:4;49276:1;49269:15;49296:180;49344:77;49341:1;49334:88;49441:4;49438:1;49431:15;49465:4;49462:1;49455:15;49482:180;49530:77;49527:1;49520:88;49627:4;49624:1;49617:15;49651:4;49648:1;49641:15;49668:180;49716:77;49713:1;49706:88;49813:4;49810:1;49803:15;49837:4;49834:1;49827:15;49854:117;49963:1;49960;49953:12;49977:117;50086:1;50083;50076:12;50100:117;50209:1;50206;50199:12;50223:117;50332:1;50329;50322:12;50346:117;50455:1;50452;50445:12;50469:102;50510:6;50561:2;50557:7;50552:2;50545:5;50541:14;50537:28;50527:38;;50469:102;;;:::o;50577:234::-;50717:34;50713:1;50705:6;50701:14;50694:58;50786:17;50781:2;50773:6;50769:15;50762:42;50577:234;:::o;50817:236::-;50957:34;50953:1;50945:6;50941:14;50934:58;51026:19;51021:2;51013:6;51009:15;51002:44;50817:236;:::o;51059:222::-;51199:34;51195:1;51187:6;51183:14;51176:58;51268:5;51263:2;51255:6;51251:15;51244:30;51059:222;:::o;51287:230::-;51427:34;51423:1;51415:6;51411:14;51404:58;51496:13;51491:2;51483:6;51479:15;51472:38;51287:230;:::o;51523:237::-;51663:34;51659:1;51651:6;51647:14;51640:58;51732:20;51727:2;51719:6;51715:15;51708:45;51523:237;:::o;51766:225::-;51906:34;51902:1;51894:6;51890:14;51883:58;51975:8;51970:2;51962:6;51958:15;51951:33;51766:225;:::o;51997:224::-;52137:34;52133:1;52125:6;52121:14;52114:58;52206:7;52201:2;52193:6;52189:15;52182:32;51997:224;:::o;52227:178::-;52367:30;52363:1;52355:6;52351:14;52344:54;52227:178;:::o;52411:251::-;52551:34;52547:1;52539:6;52535:14;52528:58;52620:34;52615:2;52607:6;52603:15;52596:59;52411:251;:::o;52668:232::-;52808:34;52804:1;52796:6;52792:14;52785:58;52877:15;52872:2;52864:6;52860:15;52853:40;52668:232;:::o;52906:300::-;53046:34;53042:1;53034:6;53030:14;53023:58;53115:34;53110:2;53102:6;53098:15;53091:59;53184:14;53179:2;53171:6;53167:15;53160:39;52906:300;:::o;53212:223::-;53352:34;53348:1;53340:6;53336:14;53329:58;53421:6;53416:2;53408:6;53404:15;53397:31;53212:223;:::o;53441:175::-;53581:27;53577:1;53569:6;53565:14;53558:51;53441:175;:::o;53622:231::-;53762:34;53758:1;53750:6;53746:14;53739:58;53831:14;53826:2;53818:6;53814:15;53807:39;53622:231;:::o;53859:229::-;53999:34;53995:1;53987:6;53983:14;53976:58;54068:12;54063:2;54055:6;54051:15;54044:37;53859:229;:::o;54094:230::-;54234:34;54230:1;54222:6;54218:14;54211:58;54303:13;54298:2;54290:6;54286:15;54279:38;54094:230;:::o;54330:243::-;54470:34;54466:1;54458:6;54454:14;54447:58;54539:26;54534:2;54526:6;54522:15;54515:51;54330:243;:::o;54579:229::-;54719:34;54715:1;54707:6;54703:14;54696:58;54788:12;54783:2;54775:6;54771:15;54764:37;54579:229;:::o;54814:228::-;54954:34;54950:1;54942:6;54938:14;54931:58;55023:11;55018:2;55010:6;55006:15;54999:36;54814:228;:::o;55048:233::-;55188:34;55184:1;55176:6;55172:14;55165:58;55257:16;55252:2;55244:6;55240:15;55233:41;55048:233;:::o;55287:182::-;55427:34;55423:1;55415:6;55411:14;55404:58;55287:182;:::o;55475:231::-;55615:34;55611:1;55603:6;55599:14;55592:58;55684:14;55679:2;55671:6;55667:15;55660:39;55475:231;:::o;55712:182::-;55852:34;55848:1;55840:6;55836:14;55829:58;55712:182;:::o;55900:220::-;56040:34;56036:1;56028:6;56024:14;56017:58;56109:3;56104:2;56096:6;56092:15;56085:28;55900:220;:::o;56126:236::-;56266:34;56262:1;56254:6;56250:14;56243:58;56335:19;56330:2;56322:6;56318:15;56311:44;56126:236;:::o;56368:301::-;56508:34;56504:1;56496:6;56492:14;56485:58;56577:34;56572:2;56564:6;56560:15;56553:59;56646:15;56641:2;56633:6;56629:15;56622:40;56368:301;:::o;56675:231::-;56815:34;56811:1;56803:6;56799:14;56792:58;56884:14;56879:2;56871:6;56867:15;56860:39;56675:231;:::o;56912:232::-;57052:34;57048:1;57040:6;57036:14;57029:58;57121:15;57116:2;57108:6;57104:15;57097:40;56912:232;:::o;57150:248::-;57290:34;57286:1;57278:6;57274:14;57267:58;57359:31;57354:2;57346:6;57342:15;57335:56;57150:248;:::o;57404:243::-;57544:34;57540:1;57532:6;57528:14;57521:58;57613:26;57608:2;57600:6;57596:15;57589:51;57404:243;:::o;57653:300::-;57793:34;57789:1;57781:6;57777:14;57770:58;57862:34;57857:2;57849:6;57845:15;57838:59;57931:14;57926:2;57918:6;57914:15;57907:39;57653:300;:::o;57959:122::-;58032:24;58050:5;58032:24;:::i;:::-;58025:5;58022:35;58012:63;;58071:1;58068;58061:12;58012:63;57959:122;:::o;58087:116::-;58157:21;58172:5;58157:21;:::i;:::-;58150:5;58147:32;58137:60;;58193:1;58190;58183:12;58137:60;58087:116;:::o;58209:120::-;58281:23;58298:5;58281:23;:::i;:::-;58274:5;58271:34;58261:62;;58319:1;58316;58309:12;58261:62;58209:120;:::o;58335:122::-;58408:24;58426:5;58408:24;:::i;:::-;58401:5;58398:35;58388:63;;58447:1;58444;58437:12;58388:63;58335:122;:::o
Swarm Source
ipfs://3a08835281c97b0e7e01d8b7f9b0abc1efdd115ea8cb3a763f5623ae52ea3e98
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.