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 25 from a total of 235 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21110970 | 19 days ago | IN | 0 ETH | 0.00020072 | ||||
Transfer Ownersh... | 17050100 | 588 days ago | IN | 0 ETH | 0.00068025 | ||||
Set Approval For... | 17029823 | 591 days ago | IN | 0 ETH | 0.0009232 | ||||
Set Approval For... | 17029702 | 591 days ago | IN | 0 ETH | 0.0008855 | ||||
Safe Transfer Fr... | 17029352 | 591 days ago | IN | 0 ETH | 0.00109675 | ||||
Average Claim | 16519097 | 663 days ago | IN | 0 ETH | 0.00138215 | ||||
Average Claim | 16470739 | 669 days ago | IN | 0 ETH | 0.00610472 | ||||
Set Approval For... | 16464658 | 670 days ago | IN | 0 ETH | 0.00083086 | ||||
Average Claim | 16456814 | 671 days ago | IN | 0 ETH | 0.00164621 | ||||
Average Claim | 16390277 | 681 days ago | IN | 0 ETH | 0.00168236 | ||||
Average Claim | 16373837 | 683 days ago | IN | 0 ETH | 0.00142354 | ||||
Average Claim | 16370410 | 683 days ago | IN | 0 ETH | 0.00389825 | ||||
Average Claim | 16363227 | 684 days ago | IN | 0 ETH | 0.00180515 | ||||
Average Claim | 16363220 | 684 days ago | IN | 0 ETH | 0.00187955 | ||||
Average Claim | 16363200 | 684 days ago | IN | 0 ETH | 0.00171549 | ||||
Average Claim | 16363142 | 684 days ago | IN | 0 ETH | 0.00166924 | ||||
Average Claim | 16357682 | 685 days ago | IN | 0 ETH | 0.00171844 | ||||
Average Claim | 16356743 | 685 days ago | IN | 0 ETH | 0.0013576 | ||||
Average Claim | 16356436 | 685 days ago | IN | 0 ETH | 0.00123459 | ||||
Average Claim | 16351069 | 686 days ago | IN | 0 ETH | 0.00188998 | ||||
Average Claim | 16346370 | 687 days ago | IN | 0 ETH | 0.00149263 | ||||
Average Claim | 16346353 | 687 days ago | IN | 0 ETH | 0.00136787 | ||||
Average Claim | 16346270 | 687 days ago | IN | 0 ETH | 0.00136747 | ||||
Average Claim | 16341339 | 687 days ago | IN | 0 ETH | 0.00164144 | ||||
Average Claim | 16338058 | 688 days ago | IN | 0 ETH | 0.00128397 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AverageHolidays
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /* '.\|/.' (\ /) - -O- - (/ \) ,'/|\'. Average Holidays by Average Creatures */ pragma solidity ^0.8.2; import "./ERC1155.sol"; import "./ERC1155Burnable.sol"; import "./Ownable.sol"; import "./Strings.sol"; import "./MerkleProof.sol"; contract AverageHolidays is ERC1155, ERC1155Burnable, Ownable { using Strings for uint256; string public uriSuffix = ".json"; mapping(address => uint256) public claimedList; bytes32 public _merkleRoot; bool public paused = true; uint256[] public _currentTokens; uint256 public _toLoop = 0; uint256 public _week = 0; uint256[40] claimedBitMap; uint256 public cost; constructor(string memory uri_, uint256 _cost) ERC1155(uri_) { cost = _cost; } // Bouncer modifier claimCompliance() { require(!paused, "Average Token Claim is paused."); require(claimedList[msg.sender] != _week, "This wallet already claimed."); _; } // Paywall modifier mintPriceCompliance(uint256 _mintAmount) { require(msg.value >= cost * _mintAmount, "Insufficient funds!"); _; } // Claim your Tokens! function averageClaim(uint256 _mintAmount, bytes32[] calldata _merkleProof) public payable claimCompliance() mintPriceCompliance(_mintAmount) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(_merkleProof, _merkleRoot, leaf), "Your address is not on the snapshot. :("); claimedList[msg.sender] = _week; _mint(msg.sender, _currentTokens[_toLoop], 1, '0x0000'); randomToken(); } // Spread token ID function randomToken() internal { if (_currentTokens.length > 1) { if (_toLoop + 1 > _currentTokens.length - 1) { _toLoop = 0; } else { _toLoop++; } } } // Justice for all function smallClaimsCourt( address[] memory addresses, uint256[] memory ids, uint256[] memory amounts, bytes[] memory data ) external onlyOwner { uint numWallets = addresses.length; require(numWallets == ids.length, "Number of ids need to match number of addresses"); require(numWallets == amounts.length, "Number of -amounts- need to match number of addresses"); for (uint i = 0; i < numWallets; i++) { _mint(addresses[i], ids[i], amounts[i], data[i]); } } // Update our current Tokens being Claimed function updateCurrentTokens(uint256[] memory newTokens) public onlyOwner { _currentTokens = newTokens; _toLoop = 0; } // Retrieve URI function uri(uint id_) public view override returns (string memory) { return string(abi.encodePacked(super.uri(id_), id_.toString(), uriSuffix)); } // Set new URI prefix function setURI(string memory uri_) external onlyOwner { _setURI(uri_); } // Set new URI suffix function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } // Set current claim week function setWeek(uint256 newWeek) public onlyOwner { _week = newWeek; } // Retrieve current claim week function currentWeek() public view returns (uint256) { return _week; } // Update Token Price function setCost(uint256 _cost) public onlyOwner { cost = _cost; } // Show tokens being claimed function showCurrentTokens() public view returns (uint256[] memory) { return _currentTokens; } // Pause contract... function setPaused(bool _state) public onlyOwner { paused = _state; } // Set new merkle root function setMerkleRoot(bytes32 merkleRoot) public onlyOwner { _merkleRoot = merkleRoot; } // Payday function withdraw() external onlyOwner { payable(msg.sender).transfer(address(this).balance); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; import "./IERC1155Receiver.sol"; import "./IERC1155MetadataURI.sol"; import "./Address.sol"; import "./Context.sol"; import "./ERC165.sol"; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @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, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; import "./ERC1155.sol"; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not owner nor approved" ); _burnBatch(account, ids, values); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; import "./IERC1155.sol"; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } return computedHash; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri_","type":"string"},{"internalType":"uint256","name":"_cost","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_currentTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_toLoop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_week","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"averageClaim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentWeek","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWeek","type":"uint256"}],"name":"setWeek","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showCurrentTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"smallClaimsCourt","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newTokens","type":"uint256[]"}],"name":"updateCurrentTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506004908051906020019062000051929190620001d6565b506001600760006101000a81548160ff02191690831515021790555060006009556000600a553480156200008457600080fd5b50604051620056e2380380620056e28339818101604052810190620000aa91906200031b565b81620000bc81620000ec60201b60201c565b50620000dd620000d16200010860201b60201c565b6200011060201b60201c565b80603381905550505062000529565b806002908051906020019062000104929190620001d6565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001e49062000420565b90600052602060002090601f01602090048101928262000208576000855562000254565b82601f106200022357805160ff191683800117855562000254565b8280016001018555821562000254579182015b828111156200025357825182559160200191906001019062000236565b5b50905062000263919062000267565b5090565b5b808211156200028257600081600090555060010162000268565b5090565b60006200029d6200029784620003aa565b62000381565b905082815260208101848484011115620002bc57620002bb620004ef565b5b620002c9848285620003ea565b509392505050565b600082601f830112620002e957620002e8620004ea565b5b8151620002fb84826020860162000286565b91505092915050565b60008151905062000315816200050f565b92915050565b60008060408385031215620003355762000334620004f9565b5b600083015167ffffffffffffffff811115620003565762000355620004f4565b5b6200036485828601620002d1565b9250506020620003778582860162000304565b9150509250929050565b60006200038d620003a0565b90506200039b828262000456565b919050565b6000604051905090565b600067ffffffffffffffff821115620003c857620003c7620004bb565b5b620003d382620004fe565b9050602081019050919050565b6000819050919050565b60005b838110156200040a578082015181840152602081019050620003ed565b838111156200041a576000848401525b50505050565b600060028204905060018216806200043957607f821691505b6020821081141562000450576200044f6200048c565b5b50919050565b6200046182620004fe565b810181811067ffffffffffffffff82111715620004835762000482620004bb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200051a81620003e0565b81146200052657600080fd5b50565b6151a980620005396000396000f3fe6080604052600436106101ed5760003560e01c806344a0d68a1161010d578063a22cb465116100a0578063e985e9c51161006f578063e985e9c5146106c5578063f242432a14610702578063f2fde38b1461072b578063f5298aca14610754578063fd38b8bf1461077d576101ed565b8063a22cb46514610618578063b599117814610641578063b92b5a1e1461065d578063da7cbba314610688576101ed565b80636b20c454116100dc5780636b20c45414610584578063715018a6146105ad5780637cb64759146105c45780638da5cb5b146105ed576101ed565b806344a0d68a146104c85780634e1273f4146104f15780635503a0e81461052e5780635c975abb14610559576101ed565b806316ba10e0116101855780632eb2c2d6116101545780632eb2c2d6146104345780632fc37ab21461045d57806330920118146104885780633ccfd60b146104b1576101ed565b806316ba10e01461037c57806316c38b3c146103a5578063226467a0146103ce5780632bf02bfd1461040b576101ed565b806306575c89116101c157806306575c89146102be5780630a2e828c146102e95780630e89341c1461031457806313faede614610351576101ed565b8062fdd58e146101f257806301ffc9a71461022f57806302fe53051461026c57806303d7913914610295575b600080fd5b3480156101fe57600080fd5b5061021960048036038101906102149190613726565b6107a8565b6040516102269190614471565b60405180910390f35b34801561023b57600080fd5b50610256600480360381019061025191906139ab565b610871565b6040516102639190614179565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613a05565b610953565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613908565b6109db565b005b3480156102ca57600080fd5b506102d3610a79565b6040516102e09190614471565b60405180910390f35b3480156102f557600080fd5b506102fe610a83565b60405161030b9190614120565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613a4e565b610adb565b60405161034891906141af565b60405180910390f35b34801561035d57600080fd5b50610366610b19565b6040516103739190614471565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613a05565b610b1f565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613951565b610bb5565b005b3480156103da57600080fd5b506103f560048036038101906103f09190613a4e565b610c4e565b6040516104029190614471565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613831565b610c72565b005b34801561044057600080fd5b5061045b600480360381019061045691906134f5565b610e14565b005b34801561046957600080fd5b50610472610eb5565b60405161047f9190614194565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613a4e565b610ebb565b005b3480156104bd57600080fd5b506104c6610f41565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190613a4e565b611006565b005b3480156104fd57600080fd5b50610518600480360381019061051391906137b9565b61108c565b6040516105259190614120565b60405180910390f35b34801561053a57600080fd5b506105436111a5565b60405161055091906141af565b60405180910390f35b34801561056557600080fd5b5061056e611233565b60405161057b9190614179565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a6919061365b565b611246565b005b3480156105b957600080fd5b506105c26112e3565b005b3480156105d057600080fd5b506105eb60048036038101906105e6919061397e565b61136b565b005b3480156105f957600080fd5b506106026113f1565b60405161060f9190614043565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906136e6565b61141b565b005b61065b60048036038101906106569190613a7b565b611431565b005b34801561066957600080fd5b506106726116c5565b60405161067f9190614471565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613488565b6116cb565b6040516106bc9190614471565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906134b5565b6116e3565b6040516106f99190614179565b60405180910390f35b34801561070e57600080fd5b50610729600480360381019061072491906135c4565b611777565b005b34801561073757600080fd5b50610752600480360381019061074d9190613488565b611818565b005b34801561076057600080fd5b5061077b60048036038101906107769190613766565b611910565b005b34801561078957600080fd5b506107926119ad565b60405161079f9190614471565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090614211565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093c57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094c575061094b826119b3565b5b9050919050565b61095b611a1d565b73ffffffffffffffffffffffffffffffffffffffff166109796113f1565b73ffffffffffffffffffffffffffffffffffffffff16146109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690614351565b60405180910390fd5b6109d881611a25565b50565b6109e3611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610a016113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90614351565b60405180910390fd5b8060089080519060200190610a6d929190612fec565b50600060098190555050565b6000600a54905090565b60606008805480602002602001604051908101604052809291908181526020018280548015610ad157602002820191906000526020600020905b815481526020019060010190808311610abd575b5050505050905090565b6060610ae682611a3f565b610aef83611ad3565b6004604051602001610b0393929190614012565b6040516020818303038152906040529050919050565b60335481565b610b27611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610b456113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290614351565b60405180910390fd5b8060049080519060200190610bb1929190613039565b5050565b610bbd611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610bdb6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890614351565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60088181548110610c5e57600080fd5b906000526020600020016000915090505481565b610c7a611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610c986113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590614351565b60405180910390fd5b60008451905083518114610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90614291565b60405180910390fd5b82518114610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906143f1565b60405180910390fd5b60005b81811015610e0c57610df9868281518110610d9b57610d9a6149be565b5b6020026020010151868381518110610db657610db56149be565b5b6020026020010151868481518110610dd157610dd06149be565b5b6020026020010151868581518110610dec57610deb6149be565b5b6020026020010151611c34565b8080610e0490614889565b915050610d7d565b505050505050565b610e1c611a1d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e625750610e6185610e5c611a1d565b6116e3565b5b610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e98906142f1565b60405180910390fd5b610eae8585858585611dca565b5050505050565b60065481565b610ec3611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610ee16113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614351565b60405180910390fd5b80600a8190555050565b610f49611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610f676113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490614351565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611003573d6000803e3d6000fd5b50565b61100e611a1d565b73ffffffffffffffffffffffffffffffffffffffff1661102c6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990614351565b60405180910390fd5b8060338190555050565b606081518351146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906143b1565b60405180910390fd5b6000835167ffffffffffffffff8111156110ef576110ee6149ed565b5b60405190808252806020026020018201604052801561111d5781602001602082028036833780820191505090505b50905060005b845181101561119a5761116a858281518110611142576111416149be565b5b602002602001015185838151811061115d5761115c6149be565b5b60200260200101516107a8565b82828151811061117d5761117c6149be565b5b6020026020010181815250508061119390614889565b9050611123565b508091505092915050565b600480546111b290614826565b80601f01602080910402602001604051908101604052809291908181526020018280546111de90614826565b801561122b5780601f106112005761010080835404028352916020019161122b565b820191906000526020600020905b81548152906001019060200180831161120e57829003601f168201915b505050505081565b600760009054906101000a900460ff1681565b61124e611a1d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061129457506112938361128e611a1d565b6116e3565b5b6112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906142b1565b60405180910390fd5b6112de8383836120de565b505050565b6112eb611a1d565b73ffffffffffffffffffffffffffffffffffffffff166113096113f1565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614351565b60405180910390fd5b611369600061238f565b565b611373611a1d565b73ffffffffffffffffffffffffffffffffffffffff166113916113f1565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614351565b60405180910390fd5b8060068190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142d611426611a1d565b8383612455565b5050565b600760009054906101000a900460ff1615611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890614271565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90614431565b60405180910390fd5b828060335461151491906146d8565b341015611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614451565b60405180910390fd5b6000336040516020016115699190613fcb565b6040516020818303038152906040528051906020012090506115cf848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600654836125c2565b61160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590614371565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116b63360086009548154811061166e5761166d6149be565b5b906000526020600020015460016040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611c34565b6116be6125d9565b5050505050565b600a5481565b60056020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61177f611a1d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117c557506117c4856117bf611a1d565b6116e3565b5b611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb906142b1565b60405180910390fd5b6118118585858585612637565b5050505050565b611820611a1d565b73ffffffffffffffffffffffffffffffffffffffff1661183e6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90614351565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90614231565b60405180910390fd5b61190d8161238f565b50565b611918611a1d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061195e575061195d83611958611a1d565b6116e3565b5b61199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906142b1565b60405180910390fd5b6119a88383836128b9565b505050565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611a3b929190613039565b5050565b606060028054611a4e90614826565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7a90614826565b8015611ac75780601f10611a9c57610100808354040283529160200191611ac7565b820191906000526020600020905b815481529060010190602001808311611aaa57829003601f168201915b50505050509050919050565b60606000821415611b1b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c2f565b600082905060005b60008214611b4d578080611b3690614889565b915050600a82611b4691906146a7565b9150611b23565b60008167ffffffffffffffff811115611b6957611b686149ed565b5b6040519080825280601f01601f191660200182016040528015611b9b5781602001600182028036833780820191505090505b5090505b60008514611c2857600182611bb49190614732565b9150600a85611bc39190614900565b6030611bcf9190614651565b60f81b818381518110611be557611be46149be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c2191906146a7565b9450611b9f565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90614411565b60405180910390fd5b6000611cae611a1d565b9050611ccf81600087611cc088612ad6565b611cc988612ad6565b87612b50565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2e9190614651565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611dac92919061448c565b60405180910390a4611dc381600087878787612b58565b5050505050565b8151835114611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e05906143d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906142d1565b60405180910390fd5b6000611e88611a1d565b9050611e98818787878787612b50565b60005b8451811015612049576000858281518110611eb957611eb86149be565b5b602002602001015190506000858381518110611ed857611ed76149be565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614331565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202e9190614651565b925050819055505050508061204290614889565b9050611e9b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120c0929190614142565b60405180910390a46120d6818787878787612d3f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590614311565b60405180910390fd5b8051825114612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612189906143d1565b60405180910390fd5b600061219c611a1d565b90506121bc81856000868660405180602001604052806000815250612b50565b60005b83518110156123095760008482815181106121dd576121dc6149be565b5b6020026020010151905060008483815181106121fc576121fb6149be565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614251565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061230190614889565b9150506121bf565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612381929190614142565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb90614391565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125b59190614179565b60405180910390a3505050565b6000826125cf8584612f26565b1490509392505050565b600160088054905011156126355760016008805490506125f99190614732565b60016009546126089190614651565b111561261b576000600981905550612634565b6009600081548092919061262e90614889565b91905055505b5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e906142d1565b60405180910390fd5b60006126b1611a1d565b90506126d18187876126c288612ad6565b6126cb88612ad6565b87612b50565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275f90614331565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281d9190614651565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161289a92919061448c565b60405180910390a46128b0828888888888612b58565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090614311565b60405180910390fd5b6000612933611a1d565b90506129638185600061294587612ad6565b61294e87612ad6565b60405180602001604052806000815250612b50565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f190614251565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612ac792919061448c565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115612af557612af46149ed565b5b604051908082528060200260200182016040528015612b235781602001602082028036833780820191505090505b5090508281600081518110612b3b57612b3a6149be565b5b60200260200101818152505080915050919050565b505050505050565b612b778473ffffffffffffffffffffffffffffffffffffffff16612fd9565b15612d37578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612bbd9594939291906140c6565b602060405180830381600087803b158015612bd757600080fd5b505af1925050508015612c0857506040513d601f19601f82011682018060405250810190612c0591906139d8565b60015b612cae57612c14614a1c565b806308c379a01415612c715750612c2961506a565b80612c345750612c73565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6891906141af565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca5906141d1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2c906141f1565b60405180910390fd5b505b505050505050565b612d5e8473ffffffffffffffffffffffffffffffffffffffff16612fd9565b15612f1e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612da495949392919061405e565b602060405180830381600087803b158015612dbe57600080fd5b505af1925050508015612def57506040513d601f19601f82011682018060405250810190612dec91906139d8565b60015b612e9557612dfb614a1c565b806308c379a01415612e585750612e1061506a565b80612e1b5750612e5a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4f91906141af565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8c906141d1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f13906141f1565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612fce576000858281518110612f4d57612f4c6149be565b5b60200260200101519050808311612f8e578281604051602001612f71929190613fe6565b604051602081830303815290604052805190602001209250612fba565b8083604051602001612fa1929190613fe6565b6040516020818303038152906040528051906020012092505b508080612fc690614889565b915050612f2f565b508091505092915050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215613028579160200282015b8281111561302757825182559160200191906001019061300c565b5b50905061303591906130bf565b5090565b82805461304590614826565b90600052602060002090601f01602090048101928261306757600085556130ae565b82601f1061308057805160ff19168380011785556130ae565b828001600101855582156130ae579182015b828111156130ad578251825591602001919060010190613092565b5b5090506130bb91906130bf565b5090565b5b808211156130d85760008160009055506001016130c0565b5090565b60006130ef6130ea846144da565b6144b5565b9050808382526020820190508285602086028201111561311257613111614a48565b5b60005b85811015613142578161312888826132ce565b845260208401935060208301925050600181019050613115565b5050509392505050565b600061315f61315a84614506565b6144b5565b9050808382526020820190508285602086028201111561318257613181614a48565b5b60005b858110156131d057813567ffffffffffffffff8111156131a8576131a7614a43565b5b8086016131b58982613417565b85526020850194506020840193505050600181019050613185565b5050509392505050565b60006131ed6131e884614532565b6144b5565b905080838252602082019050828560208602820111156132105761320f614a48565b5b60005b8581101561324057816132268882613473565b845260208401935060208301925050600181019050613213565b5050509392505050565b600061325d6132588461455e565b6144b5565b90508281526020810184848401111561327957613278614a4d565b5b6132848482856147e4565b509392505050565b600061329f61329a8461458f565b6144b5565b9050828152602081018484840111156132bb576132ba614a4d565b5b6132c68482856147e4565b509392505050565b6000813590506132dd81615100565b92915050565b600082601f8301126132f8576132f7614a43565b5b81356133088482602086016130dc565b91505092915050565b60008083601f84011261332757613326614a43565b5b8235905067ffffffffffffffff81111561334457613343614a3e565b5b6020830191508360208202830111156133605761335f614a48565b5b9250929050565b600082601f83011261337c5761337b614a43565b5b813561338c84826020860161314c565b91505092915050565b600082601f8301126133aa576133a9614a43565b5b81356133ba8482602086016131da565b91505092915050565b6000813590506133d281615117565b92915050565b6000813590506133e78161512e565b92915050565b6000813590506133fc81615145565b92915050565b60008151905061341181615145565b92915050565b600082601f83011261342c5761342b614a43565b5b813561343c84826020860161324a565b91505092915050565b600082601f83011261345a57613459614a43565b5b813561346a84826020860161328c565b91505092915050565b6000813590506134828161515c565b92915050565b60006020828403121561349e5761349d614a57565b5b60006134ac848285016132ce565b91505092915050565b600080604083850312156134cc576134cb614a57565b5b60006134da858286016132ce565b92505060206134eb858286016132ce565b9150509250929050565b600080600080600060a0868803121561351157613510614a57565b5b600061351f888289016132ce565b9550506020613530888289016132ce565b945050604086013567ffffffffffffffff81111561355157613550614a52565b5b61355d88828901613395565b935050606086013567ffffffffffffffff81111561357e5761357d614a52565b5b61358a88828901613395565b925050608086013567ffffffffffffffff8111156135ab576135aa614a52565b5b6135b788828901613417565b9150509295509295909350565b600080600080600060a086880312156135e0576135df614a57565b5b60006135ee888289016132ce565b95505060206135ff888289016132ce565b945050604061361088828901613473565b935050606061362188828901613473565b925050608086013567ffffffffffffffff81111561364257613641614a52565b5b61364e88828901613417565b9150509295509295909350565b60008060006060848603121561367457613673614a57565b5b6000613682868287016132ce565b935050602084013567ffffffffffffffff8111156136a3576136a2614a52565b5b6136af86828701613395565b925050604084013567ffffffffffffffff8111156136d0576136cf614a52565b5b6136dc86828701613395565b9150509250925092565b600080604083850312156136fd576136fc614a57565b5b600061370b858286016132ce565b925050602061371c858286016133c3565b9150509250929050565b6000806040838503121561373d5761373c614a57565b5b600061374b858286016132ce565b925050602061375c85828601613473565b9150509250929050565b60008060006060848603121561377f5761377e614a57565b5b600061378d868287016132ce565b935050602061379e86828701613473565b92505060406137af86828701613473565b9150509250925092565b600080604083850312156137d0576137cf614a57565b5b600083013567ffffffffffffffff8111156137ee576137ed614a52565b5b6137fa858286016132e3565b925050602083013567ffffffffffffffff81111561381b5761381a614a52565b5b61382785828601613395565b9150509250929050565b6000806000806080858703121561384b5761384a614a57565b5b600085013567ffffffffffffffff81111561386957613868614a52565b5b613875878288016132e3565b945050602085013567ffffffffffffffff81111561389657613895614a52565b5b6138a287828801613395565b935050604085013567ffffffffffffffff8111156138c3576138c2614a52565b5b6138cf87828801613395565b925050606085013567ffffffffffffffff8111156138f0576138ef614a52565b5b6138fc87828801613367565b91505092959194509250565b60006020828403121561391e5761391d614a57565b5b600082013567ffffffffffffffff81111561393c5761393b614a52565b5b61394884828501613395565b91505092915050565b60006020828403121561396757613966614a57565b5b6000613975848285016133c3565b91505092915050565b60006020828403121561399457613993614a57565b5b60006139a2848285016133d8565b91505092915050565b6000602082840312156139c1576139c0614a57565b5b60006139cf848285016133ed565b91505092915050565b6000602082840312156139ee576139ed614a57565b5b60006139fc84828501613402565b91505092915050565b600060208284031215613a1b57613a1a614a57565b5b600082013567ffffffffffffffff811115613a3957613a38614a52565b5b613a4584828501613445565b91505092915050565b600060208284031215613a6457613a63614a57565b5b6000613a7284828501613473565b91505092915050565b600080600060408486031215613a9457613a93614a57565b5b6000613aa286828701613473565b935050602084013567ffffffffffffffff811115613ac357613ac2614a52565b5b613acf86828701613311565b92509250509250925092565b6000613ae78383613fad565b60208301905092915050565b613afc81614766565b82525050565b613b13613b0e82614766565b6148d2565b82525050565b6000613b24826145e5565b613b2e8185614613565b9350613b39836145c0565b8060005b83811015613b6a578151613b518882613adb565b9750613b5c83614606565b925050600181019050613b3d565b5085935050505092915050565b613b8081614778565b82525050565b613b8f81614784565b82525050565b613ba6613ba182614784565b6148e4565b82525050565b6000613bb7826145f0565b613bc18185614624565b9350613bd18185602086016147f3565b613bda81614a5c565b840191505092915050565b6000613bf0826145fb565b613bfa8185614635565b9350613c0a8185602086016147f3565b613c1381614a5c565b840191505092915050565b6000613c29826145fb565b613c338185614646565b9350613c438185602086016147f3565b80840191505092915050565b60008154613c5c81614826565b613c668186614646565b94506001821660008114613c815760018114613c9257613cc5565b60ff19831686528186019350613cc5565b613c9b856145d0565b60005b83811015613cbd57815481890152600182019150602081019050613c9e565b838801955050505b50505092915050565b6000613cdb603483614635565b9150613ce682614a87565b604082019050919050565b6000613cfe602883614635565b9150613d0982614ad6565b604082019050919050565b6000613d21602b83614635565b9150613d2c82614b25565b604082019050919050565b6000613d44602683614635565b9150613d4f82614b74565b604082019050919050565b6000613d67602483614635565b9150613d7282614bc3565b604082019050919050565b6000613d8a601e83614635565b9150613d9582614c12565b602082019050919050565b6000613dad602f83614635565b9150613db882614c3b565b604082019050919050565b6000613dd0602983614635565b9150613ddb82614c8a565b604082019050919050565b6000613df3602583614635565b9150613dfe82614cd9565b604082019050919050565b6000613e16603283614635565b9150613e2182614d28565b604082019050919050565b6000613e39602383614635565b9150613e4482614d77565b604082019050919050565b6000613e5c602a83614635565b9150613e6782614dc6565b604082019050919050565b6000613e7f602083614635565b9150613e8a82614e15565b602082019050919050565b6000613ea2602783614635565b9150613ead82614e3e565b604082019050919050565b6000613ec5602983614635565b9150613ed082614e8d565b604082019050919050565b6000613ee8602983614635565b9150613ef382614edc565b604082019050919050565b6000613f0b602883614635565b9150613f1682614f2b565b604082019050919050565b6000613f2e603583614635565b9150613f3982614f7a565b604082019050919050565b6000613f51602183614635565b9150613f5c82614fc9565b604082019050919050565b6000613f74601c83614635565b9150613f7f82615018565b602082019050919050565b6000613f97601383614635565b9150613fa282615041565b602082019050919050565b613fb6816147da565b82525050565b613fc5816147da565b82525050565b6000613fd78284613b02565b60148201915081905092915050565b6000613ff28285613b95565b6020820191506140028284613b95565b6020820191508190509392505050565b600061401e8286613c1e565b915061402a8285613c1e565b91506140368284613c4f565b9150819050949350505050565b60006020820190506140586000830184613af3565b92915050565b600060a0820190506140736000830188613af3565b6140806020830187613af3565b81810360408301526140928186613b19565b905081810360608301526140a68185613b19565b905081810360808301526140ba8184613bac565b90509695505050505050565b600060a0820190506140db6000830188613af3565b6140e86020830187613af3565b6140f56040830186613fbc565b6141026060830185613fbc565b81810360808301526141148184613bac565b90509695505050505050565b6000602082019050818103600083015261413a8184613b19565b905092915050565b6000604082019050818103600083015261415c8185613b19565b905081810360208301526141708184613b19565b90509392505050565b600060208201905061418e6000830184613b77565b92915050565b60006020820190506141a96000830184613b86565b92915050565b600060208201905081810360008301526141c98184613be5565b905092915050565b600060208201905081810360008301526141ea81613cce565b9050919050565b6000602082019050818103600083015261420a81613cf1565b9050919050565b6000602082019050818103600083015261422a81613d14565b9050919050565b6000602082019050818103600083015261424a81613d37565b9050919050565b6000602082019050818103600083015261426a81613d5a565b9050919050565b6000602082019050818103600083015261428a81613d7d565b9050919050565b600060208201905081810360008301526142aa81613da0565b9050919050565b600060208201905081810360008301526142ca81613dc3565b9050919050565b600060208201905081810360008301526142ea81613de6565b9050919050565b6000602082019050818103600083015261430a81613e09565b9050919050565b6000602082019050818103600083015261432a81613e2c565b9050919050565b6000602082019050818103600083015261434a81613e4f565b9050919050565b6000602082019050818103600083015261436a81613e72565b9050919050565b6000602082019050818103600083015261438a81613e95565b9050919050565b600060208201905081810360008301526143aa81613eb8565b9050919050565b600060208201905081810360008301526143ca81613edb565b9050919050565b600060208201905081810360008301526143ea81613efe565b9050919050565b6000602082019050818103600083015261440a81613f21565b9050919050565b6000602082019050818103600083015261442a81613f44565b9050919050565b6000602082019050818103600083015261444a81613f67565b9050919050565b6000602082019050818103600083015261446a81613f8a565b9050919050565b60006020820190506144866000830184613fbc565b92915050565b60006040820190506144a16000830185613fbc565b6144ae6020830184613fbc565b9392505050565b60006144bf6144d0565b90506144cb8282614858565b919050565b6000604051905090565b600067ffffffffffffffff8211156144f5576144f46149ed565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614521576145206149ed565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561454d5761454c6149ed565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614579576145786149ed565b5b61458282614a5c565b9050602081019050919050565b600067ffffffffffffffff8211156145aa576145a96149ed565b5b6145b382614a5c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061465c826147da565b9150614667836147da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561469c5761469b614931565b5b828201905092915050565b60006146b2826147da565b91506146bd836147da565b9250826146cd576146cc614960565b5b828204905092915050565b60006146e3826147da565b91506146ee836147da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561472757614726614931565b5b828202905092915050565b600061473d826147da565b9150614748836147da565b92508282101561475b5761475a614931565b5b828203905092915050565b6000614771826147ba565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148115780820151818401526020810190506147f6565b83811115614820576000848401525b50505050565b6000600282049050600182168061483e57607f821691505b602082108114156148525761485161498f565b5b50919050565b61486182614a5c565b810181811067ffffffffffffffff821117156148805761487f6149ed565b5b80604052505050565b6000614894826147da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148c7576148c6614931565b5b600182019050919050565b60006148dd826148ee565b9050919050565b6000819050919050565b60006148f982614a6d565b9050919050565b600061490b826147da565b9150614916836147da565b92508261492657614925614960565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614a3b5760046000803e614a38600051614a7a565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4176657261676520546f6b656e20436c61696d206973207061757365642e0000600082015250565b7f4e756d626572206f6620696473206e65656420746f206d61746368206e756d6260008201527f6572206f66206164647265737365730000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f75722061646472657373206973206e6f74206f6e2074686520736e61707360008201527f686f742e203a2800000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4e756d626572206f66202d616d6f756e74732d206e65656420746f206d61746360008201527f68206e756d626572206f66206164647265737365730000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546869732077616c6c657420616c726561647920636c61696d65642e00000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b600060443d101561507a576150fd565b6150826144d0565b60043d036004823e80513d602482011167ffffffffffffffff821117156150aa5750506150fd565b808201805167ffffffffffffffff8111156150c857505050506150fd565b80602083010160043d0385018111156150e55750505050506150fd565b6150f482602001850186614858565b82955050505050505b90565b61510981614766565b811461511457600080fd5b50565b61512081614778565b811461512b57600080fd5b50565b61513781614784565b811461514257600080fd5b50565b61514e8161478e565b811461515957600080fd5b50565b615165816147da565b811461517057600080fd5b5056fea2646970667358221220465c7086121b0624af69c7e60dcdce2e6a94095e48546279aa0ad387732a6af264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f6176676372656174757265732e6d7970696e6174612e636c6f75642f697066732f516d62525a4e745a374b75613670503144753139796f4c3666636d754e53326943525354686967567868614667662f0000000000000000
Deployed Bytecode
0x6080604052600436106101ed5760003560e01c806344a0d68a1161010d578063a22cb465116100a0578063e985e9c51161006f578063e985e9c5146106c5578063f242432a14610702578063f2fde38b1461072b578063f5298aca14610754578063fd38b8bf1461077d576101ed565b8063a22cb46514610618578063b599117814610641578063b92b5a1e1461065d578063da7cbba314610688576101ed565b80636b20c454116100dc5780636b20c45414610584578063715018a6146105ad5780637cb64759146105c45780638da5cb5b146105ed576101ed565b806344a0d68a146104c85780634e1273f4146104f15780635503a0e81461052e5780635c975abb14610559576101ed565b806316ba10e0116101855780632eb2c2d6116101545780632eb2c2d6146104345780632fc37ab21461045d57806330920118146104885780633ccfd60b146104b1576101ed565b806316ba10e01461037c57806316c38b3c146103a5578063226467a0146103ce5780632bf02bfd1461040b576101ed565b806306575c89116101c157806306575c89146102be5780630a2e828c146102e95780630e89341c1461031457806313faede614610351576101ed565b8062fdd58e146101f257806301ffc9a71461022f57806302fe53051461026c57806303d7913914610295575b600080fd5b3480156101fe57600080fd5b5061021960048036038101906102149190613726565b6107a8565b6040516102269190614471565b60405180910390f35b34801561023b57600080fd5b50610256600480360381019061025191906139ab565b610871565b6040516102639190614179565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190613a05565b610953565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613908565b6109db565b005b3480156102ca57600080fd5b506102d3610a79565b6040516102e09190614471565b60405180910390f35b3480156102f557600080fd5b506102fe610a83565b60405161030b9190614120565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613a4e565b610adb565b60405161034891906141af565b60405180910390f35b34801561035d57600080fd5b50610366610b19565b6040516103739190614471565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613a05565b610b1f565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613951565b610bb5565b005b3480156103da57600080fd5b506103f560048036038101906103f09190613a4e565b610c4e565b6040516104029190614471565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613831565b610c72565b005b34801561044057600080fd5b5061045b600480360381019061045691906134f5565b610e14565b005b34801561046957600080fd5b50610472610eb5565b60405161047f9190614194565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190613a4e565b610ebb565b005b3480156104bd57600080fd5b506104c6610f41565b005b3480156104d457600080fd5b506104ef60048036038101906104ea9190613a4e565b611006565b005b3480156104fd57600080fd5b50610518600480360381019061051391906137b9565b61108c565b6040516105259190614120565b60405180910390f35b34801561053a57600080fd5b506105436111a5565b60405161055091906141af565b60405180910390f35b34801561056557600080fd5b5061056e611233565b60405161057b9190614179565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a6919061365b565b611246565b005b3480156105b957600080fd5b506105c26112e3565b005b3480156105d057600080fd5b506105eb60048036038101906105e6919061397e565b61136b565b005b3480156105f957600080fd5b506106026113f1565b60405161060f9190614043565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a91906136e6565b61141b565b005b61065b60048036038101906106569190613a7b565b611431565b005b34801561066957600080fd5b506106726116c5565b60405161067f9190614471565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa9190613488565b6116cb565b6040516106bc9190614471565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e791906134b5565b6116e3565b6040516106f99190614179565b60405180910390f35b34801561070e57600080fd5b50610729600480360381019061072491906135c4565b611777565b005b34801561073757600080fd5b50610752600480360381019061074d9190613488565b611818565b005b34801561076057600080fd5b5061077b60048036038101906107769190613766565b611910565b005b34801561078957600080fd5b506107926119ad565b60405161079f9190614471565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081090614211565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061093c57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061094c575061094b826119b3565b5b9050919050565b61095b611a1d565b73ffffffffffffffffffffffffffffffffffffffff166109796113f1565b73ffffffffffffffffffffffffffffffffffffffff16146109cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c690614351565b60405180910390fd5b6109d881611a25565b50565b6109e3611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610a016113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4e90614351565b60405180910390fd5b8060089080519060200190610a6d929190612fec565b50600060098190555050565b6000600a54905090565b60606008805480602002602001604051908101604052809291908181526020018280548015610ad157602002820191906000526020600020905b815481526020019060010190808311610abd575b5050505050905090565b6060610ae682611a3f565b610aef83611ad3565b6004604051602001610b0393929190614012565b6040516020818303038152906040529050919050565b60335481565b610b27611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610b456113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290614351565b60405180910390fd5b8060049080519060200190610bb1929190613039565b5050565b610bbd611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610bdb6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890614351565b60405180910390fd5b80600760006101000a81548160ff02191690831515021790555050565b60088181548110610c5e57600080fd5b906000526020600020016000915090505481565b610c7a611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610c986113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590614351565b60405180910390fd5b60008451905083518114610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90614291565b60405180910390fd5b82518114610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906143f1565b60405180910390fd5b60005b81811015610e0c57610df9868281518110610d9b57610d9a6149be565b5b6020026020010151868381518110610db657610db56149be565b5b6020026020010151868481518110610dd157610dd06149be565b5b6020026020010151868581518110610dec57610deb6149be565b5b6020026020010151611c34565b8080610e0490614889565b915050610d7d565b505050505050565b610e1c611a1d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e625750610e6185610e5c611a1d565b6116e3565b5b610ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e98906142f1565b60405180910390fd5b610eae8585858585611dca565b5050505050565b60065481565b610ec3611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610ee16113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610f37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2e90614351565b60405180910390fd5b80600a8190555050565b610f49611a1d565b73ffffffffffffffffffffffffffffffffffffffff16610f676113f1565b73ffffffffffffffffffffffffffffffffffffffff1614610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490614351565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611003573d6000803e3d6000fd5b50565b61100e611a1d565b73ffffffffffffffffffffffffffffffffffffffff1661102c6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990614351565b60405180910390fd5b8060338190555050565b606081518351146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c9906143b1565b60405180910390fd5b6000835167ffffffffffffffff8111156110ef576110ee6149ed565b5b60405190808252806020026020018201604052801561111d5781602001602082028036833780820191505090505b50905060005b845181101561119a5761116a858281518110611142576111416149be565b5b602002602001015185838151811061115d5761115c6149be565b5b60200260200101516107a8565b82828151811061117d5761117c6149be565b5b6020026020010181815250508061119390614889565b9050611123565b508091505092915050565b600480546111b290614826565b80601f01602080910402602001604051908101604052809291908181526020018280546111de90614826565b801561122b5780601f106112005761010080835404028352916020019161122b565b820191906000526020600020905b81548152906001019060200180831161120e57829003601f168201915b505050505081565b600760009054906101000a900460ff1681565b61124e611a1d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061129457506112938361128e611a1d565b6116e3565b5b6112d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ca906142b1565b60405180910390fd5b6112de8383836120de565b505050565b6112eb611a1d565b73ffffffffffffffffffffffffffffffffffffffff166113096113f1565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135690614351565b60405180910390fd5b611369600061238f565b565b611373611a1d565b73ffffffffffffffffffffffffffffffffffffffff166113916113f1565b73ffffffffffffffffffffffffffffffffffffffff16146113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90614351565b60405180910390fd5b8060068190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142d611426611a1d565b8383612455565b5050565b600760009054906101000a900460ff1615611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147890614271565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fc90614431565b60405180910390fd5b828060335461151491906146d8565b341015611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154d90614451565b60405180910390fd5b6000336040516020016115699190613fcb565b6040516020818303038152906040528051906020012090506115cf848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600654836125c2565b61160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160590614371565b60405180910390fd5b600a54600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506116b63360086009548154811061166e5761166d6149be565b5b906000526020600020015460016040518060400160405280600681526020017f3078303030300000000000000000000000000000000000000000000000000000815250611c34565b6116be6125d9565b5050505050565b600a5481565b60056020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61177f611a1d565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117c557506117c4856117bf611a1d565b6116e3565b5b611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb906142b1565b60405180910390fd5b6118118585858585612637565b5050505050565b611820611a1d565b73ffffffffffffffffffffffffffffffffffffffff1661183e6113f1565b73ffffffffffffffffffffffffffffffffffffffff1614611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90614351565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fb90614231565b60405180910390fd5b61190d8161238f565b50565b611918611a1d565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061195e575061195d83611958611a1d565b6116e3565b5b61199d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611994906142b1565b60405180910390fd5b6119a88383836128b9565b505050565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611a3b929190613039565b5050565b606060028054611a4e90614826565b80601f0160208091040260200160405190810160405280929190818152602001828054611a7a90614826565b8015611ac75780601f10611a9c57610100808354040283529160200191611ac7565b820191906000526020600020905b815481529060010190602001808311611aaa57829003601f168201915b50505050509050919050565b60606000821415611b1b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611c2f565b600082905060005b60008214611b4d578080611b3690614889565b915050600a82611b4691906146a7565b9150611b23565b60008167ffffffffffffffff811115611b6957611b686149ed565b5b6040519080825280601f01601f191660200182016040528015611b9b5781602001600182028036833780820191505090505b5090505b60008514611c2857600182611bb49190614732565b9150600a85611bc39190614900565b6030611bcf9190614651565b60f81b818381518110611be557611be46149be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611c2191906146a7565b9450611b9f565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9b90614411565b60405180910390fd5b6000611cae611a1d565b9050611ccf81600087611cc088612ad6565b611cc988612ad6565b87612b50565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d2e9190614651565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611dac92919061448c565b60405180910390a4611dc381600087878787612b58565b5050505050565b8151835114611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e05906143d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906142d1565b60405180910390fd5b6000611e88611a1d565b9050611e98818787878787612b50565b60005b8451811015612049576000858281518110611eb957611eb86149be565b5b602002602001015190506000858381518110611ed857611ed76149be565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7090614331565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202e9190614651565b925050819055505050508061204290614889565b9050611e9b565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120c0929190614142565b60405180910390a46120d6818787878787612d3f565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561214e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214590614311565b60405180910390fd5b8051825114612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612189906143d1565b60405180910390fd5b600061219c611a1d565b90506121bc81856000868660405180602001604052806000815250612b50565b60005b83518110156123095760008482815181106121dd576121dc6149be565b5b6020026020010151905060008483815181106121fc576121fb6149be565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229490614251565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061230190614889565b9150506121bf565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612381929190614142565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb90614391565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125b59190614179565b60405180910390a3505050565b6000826125cf8584612f26565b1490509392505050565b600160088054905011156126355760016008805490506125f99190614732565b60016009546126089190614651565b111561261b576000600981905550612634565b6009600081548092919061262e90614889565b91905055505b5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269e906142d1565b60405180910390fd5b60006126b1611a1d565b90506126d18187876126c288612ad6565b6126cb88612ad6565b87612b50565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275f90614331565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281d9190614651565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161289a92919061448c565b60405180910390a46128b0828888888888612b58565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292090614311565b60405180910390fd5b6000612933611a1d565b90506129638185600061294587612ad6565b61294e87612ad6565b60405180602001604052806000815250612b50565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f190614251565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612ac792919061448c565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115612af557612af46149ed565b5b604051908082528060200260200182016040528015612b235781602001602082028036833780820191505090505b5090508281600081518110612b3b57612b3a6149be565b5b60200260200101818152505080915050919050565b505050505050565b612b778473ffffffffffffffffffffffffffffffffffffffff16612fd9565b15612d37578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612bbd9594939291906140c6565b602060405180830381600087803b158015612bd757600080fd5b505af1925050508015612c0857506040513d601f19601f82011682018060405250810190612c0591906139d8565b60015b612cae57612c14614a1c565b806308c379a01415612c715750612c2961506a565b80612c345750612c73565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6891906141af565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca5906141d1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2c906141f1565b60405180910390fd5b505b505050505050565b612d5e8473ffffffffffffffffffffffffffffffffffffffff16612fd9565b15612f1e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612da495949392919061405e565b602060405180830381600087803b158015612dbe57600080fd5b505af1925050508015612def57506040513d601f19601f82011682018060405250810190612dec91906139d8565b60015b612e9557612dfb614a1c565b806308c379a01415612e585750612e1061506a565b80612e1b5750612e5a565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4f91906141af565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8c906141d1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f13906141f1565b60405180910390fd5b505b505050505050565b60008082905060005b8451811015612fce576000858281518110612f4d57612f4c6149be565b5b60200260200101519050808311612f8e578281604051602001612f71929190613fe6565b604051602081830303815290604052805190602001209250612fba565b8083604051602001612fa1929190613fe6565b6040516020818303038152906040528051906020012092505b508080612fc690614889565b915050612f2f565b508091505092915050565b600080823b905060008111915050919050565b828054828255906000526020600020908101928215613028579160200282015b8281111561302757825182559160200191906001019061300c565b5b50905061303591906130bf565b5090565b82805461304590614826565b90600052602060002090601f01602090048101928261306757600085556130ae565b82601f1061308057805160ff19168380011785556130ae565b828001600101855582156130ae579182015b828111156130ad578251825591602001919060010190613092565b5b5090506130bb91906130bf565b5090565b5b808211156130d85760008160009055506001016130c0565b5090565b60006130ef6130ea846144da565b6144b5565b9050808382526020820190508285602086028201111561311257613111614a48565b5b60005b85811015613142578161312888826132ce565b845260208401935060208301925050600181019050613115565b5050509392505050565b600061315f61315a84614506565b6144b5565b9050808382526020820190508285602086028201111561318257613181614a48565b5b60005b858110156131d057813567ffffffffffffffff8111156131a8576131a7614a43565b5b8086016131b58982613417565b85526020850194506020840193505050600181019050613185565b5050509392505050565b60006131ed6131e884614532565b6144b5565b905080838252602082019050828560208602820111156132105761320f614a48565b5b60005b8581101561324057816132268882613473565b845260208401935060208301925050600181019050613213565b5050509392505050565b600061325d6132588461455e565b6144b5565b90508281526020810184848401111561327957613278614a4d565b5b6132848482856147e4565b509392505050565b600061329f61329a8461458f565b6144b5565b9050828152602081018484840111156132bb576132ba614a4d565b5b6132c68482856147e4565b509392505050565b6000813590506132dd81615100565b92915050565b600082601f8301126132f8576132f7614a43565b5b81356133088482602086016130dc565b91505092915050565b60008083601f84011261332757613326614a43565b5b8235905067ffffffffffffffff81111561334457613343614a3e565b5b6020830191508360208202830111156133605761335f614a48565b5b9250929050565b600082601f83011261337c5761337b614a43565b5b813561338c84826020860161314c565b91505092915050565b600082601f8301126133aa576133a9614a43565b5b81356133ba8482602086016131da565b91505092915050565b6000813590506133d281615117565b92915050565b6000813590506133e78161512e565b92915050565b6000813590506133fc81615145565b92915050565b60008151905061341181615145565b92915050565b600082601f83011261342c5761342b614a43565b5b813561343c84826020860161324a565b91505092915050565b600082601f83011261345a57613459614a43565b5b813561346a84826020860161328c565b91505092915050565b6000813590506134828161515c565b92915050565b60006020828403121561349e5761349d614a57565b5b60006134ac848285016132ce565b91505092915050565b600080604083850312156134cc576134cb614a57565b5b60006134da858286016132ce565b92505060206134eb858286016132ce565b9150509250929050565b600080600080600060a0868803121561351157613510614a57565b5b600061351f888289016132ce565b9550506020613530888289016132ce565b945050604086013567ffffffffffffffff81111561355157613550614a52565b5b61355d88828901613395565b935050606086013567ffffffffffffffff81111561357e5761357d614a52565b5b61358a88828901613395565b925050608086013567ffffffffffffffff8111156135ab576135aa614a52565b5b6135b788828901613417565b9150509295509295909350565b600080600080600060a086880312156135e0576135df614a57565b5b60006135ee888289016132ce565b95505060206135ff888289016132ce565b945050604061361088828901613473565b935050606061362188828901613473565b925050608086013567ffffffffffffffff81111561364257613641614a52565b5b61364e88828901613417565b9150509295509295909350565b60008060006060848603121561367457613673614a57565b5b6000613682868287016132ce565b935050602084013567ffffffffffffffff8111156136a3576136a2614a52565b5b6136af86828701613395565b925050604084013567ffffffffffffffff8111156136d0576136cf614a52565b5b6136dc86828701613395565b9150509250925092565b600080604083850312156136fd576136fc614a57565b5b600061370b858286016132ce565b925050602061371c858286016133c3565b9150509250929050565b6000806040838503121561373d5761373c614a57565b5b600061374b858286016132ce565b925050602061375c85828601613473565b9150509250929050565b60008060006060848603121561377f5761377e614a57565b5b600061378d868287016132ce565b935050602061379e86828701613473565b92505060406137af86828701613473565b9150509250925092565b600080604083850312156137d0576137cf614a57565b5b600083013567ffffffffffffffff8111156137ee576137ed614a52565b5b6137fa858286016132e3565b925050602083013567ffffffffffffffff81111561381b5761381a614a52565b5b61382785828601613395565b9150509250929050565b6000806000806080858703121561384b5761384a614a57565b5b600085013567ffffffffffffffff81111561386957613868614a52565b5b613875878288016132e3565b945050602085013567ffffffffffffffff81111561389657613895614a52565b5b6138a287828801613395565b935050604085013567ffffffffffffffff8111156138c3576138c2614a52565b5b6138cf87828801613395565b925050606085013567ffffffffffffffff8111156138f0576138ef614a52565b5b6138fc87828801613367565b91505092959194509250565b60006020828403121561391e5761391d614a57565b5b600082013567ffffffffffffffff81111561393c5761393b614a52565b5b61394884828501613395565b91505092915050565b60006020828403121561396757613966614a57565b5b6000613975848285016133c3565b91505092915050565b60006020828403121561399457613993614a57565b5b60006139a2848285016133d8565b91505092915050565b6000602082840312156139c1576139c0614a57565b5b60006139cf848285016133ed565b91505092915050565b6000602082840312156139ee576139ed614a57565b5b60006139fc84828501613402565b91505092915050565b600060208284031215613a1b57613a1a614a57565b5b600082013567ffffffffffffffff811115613a3957613a38614a52565b5b613a4584828501613445565b91505092915050565b600060208284031215613a6457613a63614a57565b5b6000613a7284828501613473565b91505092915050565b600080600060408486031215613a9457613a93614a57565b5b6000613aa286828701613473565b935050602084013567ffffffffffffffff811115613ac357613ac2614a52565b5b613acf86828701613311565b92509250509250925092565b6000613ae78383613fad565b60208301905092915050565b613afc81614766565b82525050565b613b13613b0e82614766565b6148d2565b82525050565b6000613b24826145e5565b613b2e8185614613565b9350613b39836145c0565b8060005b83811015613b6a578151613b518882613adb565b9750613b5c83614606565b925050600181019050613b3d565b5085935050505092915050565b613b8081614778565b82525050565b613b8f81614784565b82525050565b613ba6613ba182614784565b6148e4565b82525050565b6000613bb7826145f0565b613bc18185614624565b9350613bd18185602086016147f3565b613bda81614a5c565b840191505092915050565b6000613bf0826145fb565b613bfa8185614635565b9350613c0a8185602086016147f3565b613c1381614a5c565b840191505092915050565b6000613c29826145fb565b613c338185614646565b9350613c438185602086016147f3565b80840191505092915050565b60008154613c5c81614826565b613c668186614646565b94506001821660008114613c815760018114613c9257613cc5565b60ff19831686528186019350613cc5565b613c9b856145d0565b60005b83811015613cbd57815481890152600182019150602081019050613c9e565b838801955050505b50505092915050565b6000613cdb603483614635565b9150613ce682614a87565b604082019050919050565b6000613cfe602883614635565b9150613d0982614ad6565b604082019050919050565b6000613d21602b83614635565b9150613d2c82614b25565b604082019050919050565b6000613d44602683614635565b9150613d4f82614b74565b604082019050919050565b6000613d67602483614635565b9150613d7282614bc3565b604082019050919050565b6000613d8a601e83614635565b9150613d9582614c12565b602082019050919050565b6000613dad602f83614635565b9150613db882614c3b565b604082019050919050565b6000613dd0602983614635565b9150613ddb82614c8a565b604082019050919050565b6000613df3602583614635565b9150613dfe82614cd9565b604082019050919050565b6000613e16603283614635565b9150613e2182614d28565b604082019050919050565b6000613e39602383614635565b9150613e4482614d77565b604082019050919050565b6000613e5c602a83614635565b9150613e6782614dc6565b604082019050919050565b6000613e7f602083614635565b9150613e8a82614e15565b602082019050919050565b6000613ea2602783614635565b9150613ead82614e3e565b604082019050919050565b6000613ec5602983614635565b9150613ed082614e8d565b604082019050919050565b6000613ee8602983614635565b9150613ef382614edc565b604082019050919050565b6000613f0b602883614635565b9150613f1682614f2b565b604082019050919050565b6000613f2e603583614635565b9150613f3982614f7a565b604082019050919050565b6000613f51602183614635565b9150613f5c82614fc9565b604082019050919050565b6000613f74601c83614635565b9150613f7f82615018565b602082019050919050565b6000613f97601383614635565b9150613fa282615041565b602082019050919050565b613fb6816147da565b82525050565b613fc5816147da565b82525050565b6000613fd78284613b02565b60148201915081905092915050565b6000613ff28285613b95565b6020820191506140028284613b95565b6020820191508190509392505050565b600061401e8286613c1e565b915061402a8285613c1e565b91506140368284613c4f565b9150819050949350505050565b60006020820190506140586000830184613af3565b92915050565b600060a0820190506140736000830188613af3565b6140806020830187613af3565b81810360408301526140928186613b19565b905081810360608301526140a68185613b19565b905081810360808301526140ba8184613bac565b90509695505050505050565b600060a0820190506140db6000830188613af3565b6140e86020830187613af3565b6140f56040830186613fbc565b6141026060830185613fbc565b81810360808301526141148184613bac565b90509695505050505050565b6000602082019050818103600083015261413a8184613b19565b905092915050565b6000604082019050818103600083015261415c8185613b19565b905081810360208301526141708184613b19565b90509392505050565b600060208201905061418e6000830184613b77565b92915050565b60006020820190506141a96000830184613b86565b92915050565b600060208201905081810360008301526141c98184613be5565b905092915050565b600060208201905081810360008301526141ea81613cce565b9050919050565b6000602082019050818103600083015261420a81613cf1565b9050919050565b6000602082019050818103600083015261422a81613d14565b9050919050565b6000602082019050818103600083015261424a81613d37565b9050919050565b6000602082019050818103600083015261426a81613d5a565b9050919050565b6000602082019050818103600083015261428a81613d7d565b9050919050565b600060208201905081810360008301526142aa81613da0565b9050919050565b600060208201905081810360008301526142ca81613dc3565b9050919050565b600060208201905081810360008301526142ea81613de6565b9050919050565b6000602082019050818103600083015261430a81613e09565b9050919050565b6000602082019050818103600083015261432a81613e2c565b9050919050565b6000602082019050818103600083015261434a81613e4f565b9050919050565b6000602082019050818103600083015261436a81613e72565b9050919050565b6000602082019050818103600083015261438a81613e95565b9050919050565b600060208201905081810360008301526143aa81613eb8565b9050919050565b600060208201905081810360008301526143ca81613edb565b9050919050565b600060208201905081810360008301526143ea81613efe565b9050919050565b6000602082019050818103600083015261440a81613f21565b9050919050565b6000602082019050818103600083015261442a81613f44565b9050919050565b6000602082019050818103600083015261444a81613f67565b9050919050565b6000602082019050818103600083015261446a81613f8a565b9050919050565b60006020820190506144866000830184613fbc565b92915050565b60006040820190506144a16000830185613fbc565b6144ae6020830184613fbc565b9392505050565b60006144bf6144d0565b90506144cb8282614858565b919050565b6000604051905090565b600067ffffffffffffffff8211156144f5576144f46149ed565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614521576145206149ed565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561454d5761454c6149ed565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614579576145786149ed565b5b61458282614a5c565b9050602081019050919050565b600067ffffffffffffffff8211156145aa576145a96149ed565b5b6145b382614a5c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061465c826147da565b9150614667836147da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561469c5761469b614931565b5b828201905092915050565b60006146b2826147da565b91506146bd836147da565b9250826146cd576146cc614960565b5b828204905092915050565b60006146e3826147da565b91506146ee836147da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561472757614726614931565b5b828202905092915050565b600061473d826147da565b9150614748836147da565b92508282101561475b5761475a614931565b5b828203905092915050565b6000614771826147ba565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148115780820151818401526020810190506147f6565b83811115614820576000848401525b50505050565b6000600282049050600182168061483e57607f821691505b602082108114156148525761485161498f565b5b50919050565b61486182614a5c565b810181811067ffffffffffffffff821117156148805761487f6149ed565b5b80604052505050565b6000614894826147da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156148c7576148c6614931565b5b600182019050919050565b60006148dd826148ee565b9050919050565b6000819050919050565b60006148f982614a6d565b9050919050565b600061490b826147da565b9150614916836147da565b92508261492657614925614960565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115614a3b5760046000803e614a38600051614a7a565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4176657261676520546f6b656e20436c61696d206973207061757365642e0000600082015250565b7f4e756d626572206f6620696473206e65656420746f206d61746368206e756d6260008201527f6572206f66206164647265737365730000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f75722061646472657373206973206e6f74206f6e2074686520736e61707360008201527f686f742e203a2800000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f4e756d626572206f66202d616d6f756e74732d206e65656420746f206d61746360008201527f68206e756d626572206f66206164647265737365730000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f546869732077616c6c657420616c726561647920636c61696d65642e00000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b600060443d101561507a576150fd565b6150826144d0565b60043d036004823e80513d602482011167ffffffffffffffff821117156150aa5750506150fd565b808201805167ffffffffffffffff8111156150c857505050506150fd565b80602083010160043d0385018111156150e55750505050506150fd565b6150f482602001850186614858565b82955050505050505b90565b61510981614766565b811461511457600080fd5b50565b61512081614778565b811461512b57600080fd5b50565b61513781614784565b811461514257600080fd5b50565b61514e8161478e565b811461515957600080fd5b50565b615165816147da565b811461517057600080fd5b5056fea2646970667358221220465c7086121b0624af69c7e60dcdce2e6a94095e48546279aa0ad387732a6af264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005868747470733a2f2f6176676372656174757265732e6d7970696e6174612e636c6f75642f697066732f516d62525a4e745a374b75613670503144753139796f4c3666636d754e53326943525354686967567868614667662f0000000000000000
-----Decoded View---------------
Arg [0] : uri_ (string): https://avgcreatures.mypinata.cloud/ipfs/QmbRZNtZ7Kua6pP1Du19yoL6fcmuNS2iCRSThigVxhaFgf/
Arg [1] : _cost (uint256): 0
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000058
Arg [3] : 68747470733a2f2f6176676372656174757265732e6d7970696e6174612e636c
Arg [4] : 6f75642f697066732f516d62525a4e745a374b75613670503144753139796f4c
Arg [5] : 3666636d754e53326943525354686967567868614667662f0000000000000000
Deployed Bytecode Sourcemap
293:3416:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2115:228:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1166:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2702:79:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2370:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3053:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3264:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2520:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;660:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2809:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3391:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;538:31;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1814:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3990:430:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;478:26:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2939:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3606:101;;;;;;;;;;;;;:::i;:::-;;3157:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2500:508:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;391:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;508:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;708:342:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1661:101:11;;;;;;;;;;;;;:::i;:::-;;3495:95:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1029:85:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3076:153:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1135:433:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;603:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;428:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3296:166:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3529:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1911:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;392:310:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;573:26:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2115:228:3;2201:7;2247:1;2228:21;;:7;:21;;;;2220:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2314:9;:13;2324:2;2314:13;;;;;;;;;;;:22;2328:7;2314:22;;;;;;;;;;;;;;;;2307:29;;2115:228;;;;:::o;1166:305::-;1268:4;1318:26;1303:41;;;:11;:41;;;;:109;;;;1375:37;1360:52;;;:11;:52;;;;1303:109;:161;;;;1428:36;1452:11;1428:23;:36::i;:::-;1303:161;1284:180;;1166:305;;;:::o;2702:79:1:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2763:13:1::1;2771:4;2763:7;:13::i;:::-;2702:79:::0;:::o;2370:128::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2467:9:1::1;2450:14;:26;;;;;;;;;;;;:::i;:::-;;2492:1;2482:7;:11;;;;2370:128:::0;:::o;3053:76::-;3097:7;3119:5;;3112:12;;3053:76;:::o;3264:100::-;3314:16;3345:14;3338:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3264:100;:::o;2520:153::-;2573:13;2625:14;2635:3;2625:9;:14::i;:::-;2641;:3;:12;:14::i;:::-;2657:9;2608:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2594:74;;2520:153;;;:::o;660:19::-;;;;:::o;2809:98::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2892:10:1::1;2880:9;:22;;;;;;;;;;;;:::i;:::-;;2809:98:::0;:::o;3391:75::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3455:6:1::1;3446;;:15;;;;;;;;;;;;;;;;;;3391:75:::0;:::o;538:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1814:507::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1985:15:1::1;2003:9;:16;1985:34;;2047:3;:10;2033;:24;2025:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:7;:14;2123:10;:28;2115:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;2221:6;2216:101;2237:10;2233:1;:14;2216:101;;;2262:48;2268:9;2278:1;2268:12;;;;;;;;:::i;:::-;;;;;;;;2282:3;2286:1;2282:6;;;;;;;;:::i;:::-;;;;;;;;2290:7;2298:1;2290:10;;;;;;;;:::i;:::-;;;;;;;;2302:4;2307:1;2302:7;;;;;;;;:::i;:::-;;;;;;;;2262:5;:48::i;:::-;2249:3;;;;;:::i;:::-;;;;2216:101;;;;1979:342;1814:507:::0;;;;:::o;3990:430:3:-;4223:12;:10;:12::i;:::-;4215:20;;:4;:20;;;:60;;;;4239:36;4256:4;4262:12;:10;:12::i;:::-;4239:16;:36::i;:::-;4215:60;4194:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4361:52;4384:4;4390:2;4394:3;4399:7;4408:4;4361:22;:52::i;:::-;3990:430;;;;;:::o;478:26:1:-;;;;:::o;2939:77::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3004:7:1::1;2996:5;:15;;;;2939:77:::0;:::o;3606:101::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3659:10:1::1;3651:28;;:51;3680:21;3651:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3606:101::o:0;3157:72::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3219:5:1::1;3212:4;:12;;;;3157:72:::0;:::o;2500:508:3:-;2651:16;2710:3;:10;2691:8;:15;:29;2683:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2777:30;2824:8;:15;2810:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2777:63;;2856:9;2851:120;2875:8;:15;2871:1;:19;2851:120;;;2930:30;2940:8;2949:1;2940:11;;;;;;;;:::i;:::-;;;;;;;;2953:3;2957:1;2953:6;;;;;;;;:::i;:::-;;;;;;;;2930:9;:30::i;:::-;2911:13;2925:1;2911:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2892:3;;;;:::i;:::-;;;2851:120;;;;2988:13;2981:20;;;2500:508;;;;:::o;391:33:1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;508:25::-;;;;;;;;;;;;;:::o;708:342:4:-;878:12;:10;:12::i;:::-;867:23;;:7;:23;;;:66;;;;894:39;911:7;920:12;:10;:12::i;:::-;894:16;:39::i;:::-;867:66;846:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;1011:32;1022:7;1031:3;1036:6;1011:10;:32::i;:::-;708:342;;;:::o;1661:101:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;3495:95:1:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3575:10:1::1;3561:11;:24;;;;3495:95:::0;:::o;1029:85:11:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;3076:153:3:-;3170:52;3189:12;:10;:12::i;:::-;3203:8;3213;3170:18;:52::i;:::-;3076:153;;:::o;1135:433:1:-;827:6;;;;;;;;;;;826:7;818:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;909:5;;882:11;:23;894:10;882:23;;;;;;;;;;;;;;;;:32;;874:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1264:11:::1;1060;1053:4;;:18;;;;:::i;:::-;1040:9;:31;;1032:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1283:12:::2;1325:10;1308:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;1298:39;;;;;;1283:54;;1351:51;1370:12;;1351:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1384:11;;1397:4;1351:18;:51::i;:::-;1343:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;1478:5;;1452:11;:23;1464:10;1452:23;;;;;;;;;;;;;;;:31;;;;1489:55;1495:10;1507:14;1522:7;;1507:23;;;;;;;;:::i;:::-;;;;;;;;;;1532:1;1489:55;;;;;;;;;;;;;;;;::::0;:5:::2;:55::i;:::-;1550:13;:11;:13::i;:::-;1277:291;953:1:::1;1135:433:::0;;;:::o;603:24::-;;;;:::o;428:46::-;;;;;;;;;;;;;;;;;:::o;3296:166:3:-;3395:4;3418:18;:27;3437:7;3418:27;;;;;;;;;;;;;;;:37;3446:8;3418:37;;;;;;;;;;;;;;;;;;;;;;;;;3411:44;;3296:166;;;;:::o;3529:389::-;3737:12;:10;:12::i;:::-;3729:20;;:4;:20;;;:60;;;;3753:36;3770:4;3776:12;:10;:12::i;:::-;3753:16;:36::i;:::-;3729:60;3708:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3866:45;3884:4;3890:2;3894;3898:6;3906:4;3866:17;:45::i;:::-;3529:389;;;;;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;392:310:4:-;537:12;:10;:12::i;:::-;526:23;;:7;:23;;;:66;;;;553:39;570:7;579:12;:10;:12::i;:::-;553:16;:39::i;:::-;526:66;505:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:25;676:7;685:2;689:5;670;:25::i;:::-;392:310;;;:::o;573:26:1:-;;;;:::o;829:155:5:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;640:96:2:-;693:7;719:10;712:17;;640:96;:::o;7881:86:3:-;7954:6;7947:4;:13;;;;;;;;;;;;:::i;:::-;;7881:86;:::o;1870:103::-;1930:13;1962:4;1955:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1870:103;;;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;8340:553:3:-;8501:1;8487:16;;:2;:16;;;;8479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8552:16;8571:12;:10;:12::i;:::-;8552:31;;8594:102;8615:8;8633:1;8637:2;8641:21;8659:2;8641:17;:21::i;:::-;8664:25;8682:6;8664:17;:25::i;:::-;8691:4;8594:20;:102::i;:::-;8728:6;8707:9;:13;8717:2;8707:13;;;;;;;;;;;:17;8721:2;8707:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;8786:2;8749:52;;8782:1;8749:52;;8764:8;8749:52;;;8790:2;8794:6;8749:52;;;;;;;:::i;:::-;;;;;;;;8812:74;8843:8;8861:1;8865:2;8869;8873:6;8881:4;8812:30;:74::i;:::-;8469:424;8340:553;;;;:::o;6013:1045::-;6233:7;:14;6219:3;:10;:28;6211:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6324:1;6310:16;;:2;:16;;;;6302:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6379:16;6398:12;:10;:12::i;:::-;6379:31;;6421:60;6442:8;6452:4;6458:2;6462:3;6467:7;6476:4;6421:20;:60::i;:::-;6497:9;6492:411;6516:3;:10;6512:1;:14;6492:411;;;6547:10;6560:3;6564:1;6560:6;;;;;;;;:::i;:::-;;;;;;;;6547:19;;6580:14;6597:7;6605:1;6597:10;;;;;;;;:::i;:::-;;;;;;;;6580:27;;6622:19;6644:9;:13;6654:2;6644:13;;;;;;;;;;;:19;6658:4;6644:19;;;;;;;;;;;;;;;;6622:41;;6700:6;6685:11;:21;;6677:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;6831:6;6817:11;:20;6795:9;:13;6805:2;6795:13;;;;;;;;;;;:19;6809:4;6795:19;;;;;;;;;;;;;;;:42;;;;6886:6;6865:9;:13;6875:2;6865:13;;;;;;;;;;;:17;6879:2;6865:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6533:370;;;6528:3;;;;:::i;:::-;;;6492:411;;;;6948:2;6918:47;;6942:4;6918:47;;6932:8;6918:47;;;6952:3;6957:7;6918:47;;;;;;;:::i;:::-;;;;;;;;6976:75;7012:8;7022:4;7028:2;7032:3;7037:7;7046:4;6976:35;:75::i;:::-;6201:857;6013:1045;;;;;:::o;11017:867::-;11180:1;11164:18;;:4;:18;;;;11156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11254:7;:14;11240:3;:10;:28;11232:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;11324:16;11343:12;:10;:12::i;:::-;11324:31;;11366:66;11387:8;11397:4;11411:1;11415:3;11420:7;11366:66;;;;;;;;;;;;:20;:66::i;:::-;11448:9;11443:364;11467:3;:10;11463:1;:14;11443:364;;;11498:10;11511:3;11515:1;11511:6;;;;;;;;:::i;:::-;;;;;;;;11498:19;;11531:14;11548:7;11556:1;11548:10;;;;;;;;:::i;:::-;;;;;;;;11531:27;;11573:19;11595:9;:13;11605:2;11595:13;;;;;;;;;;;:19;11609:4;11595:19;;;;;;;;;;;;;;;;11573:41;;11651:6;11636:11;:21;;11628:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11776:6;11762:11;:20;11740:9;:13;11750:2;11740:13;;;;;;;;;;;:19;11754:4;11740:19;;;;;;;;;;;;;;;:42;;;;11484:323;;;11479:3;;;;;:::i;:::-;;;;11443:364;;;;11860:1;11822:55;;11846:4;11822:55;;11836:8;11822:55;;;11864:3;11869:7;11822:55;;;;;;;:::i;:::-;;;;;;;;11146:738;11017:867;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;12019:323:3:-;12169:8;12160:17;;:5;:17;;;;12152:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:8;12233:18;:25;12252:5;12233:25;;;;;;;;;;;;;;;:35;12259:8;12233:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12316:8;12294:41;;12309:5;12294:41;;;12326:8;12294:41;;;;;;:::i;:::-;;;;;;;;12019:323;;;:::o;847:184:10:-;968:4;1020;991:25;1004:5;1011:4;991:12;:25::i;:::-;:33;984:40;;847:184;;;;;:::o;1593:196:1:-;1659:1;1635:14;:21;;;;:25;1631:154;;;1712:1;1688:14;:21;;;;:25;;;;:::i;:::-;1684:1;1674:7;;:11;;;;:::i;:::-;:39;1670:109;;;1735:1;1725:7;:11;;;;1670:109;;;1761:7;;:9;;;;;;;;;:::i;:::-;;;;;;1670:109;1631:154;1593:196::o;4870:797:3:-;5065:1;5051:16;;:2;:16;;;;5043:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5120:16;5139:12;:10;:12::i;:::-;5120:31;;5162:96;5183:8;5193:4;5199:2;5203:21;5221:2;5203:17;:21::i;:::-;5226:25;5244:6;5226:17;:25::i;:::-;5253:4;5162:20;:96::i;:::-;5269:19;5291:9;:13;5301:2;5291:13;;;;;;;;;;;:19;5305:4;5291:19;;;;;;;;;;;;;;;;5269:41;;5343:6;5328:11;:21;;5320:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5466:6;5452:11;:20;5430:9;:13;5440:2;5430:13;;;;;;;;;;;:19;5444:4;5430:19;;;;;;;;;;;;;;;:42;;;;5513:6;5492:9;:13;5502:2;5492:13;;;;;;;;;;;:17;5506:2;5492:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5566:2;5535:46;;5560:4;5535:46;;5550:8;5535:46;;;5570:2;5574:6;5535:46;;;;;;;:::i;:::-;;;;;;;;5592:68;5623:8;5633:4;5639:2;5643;5647:6;5655:4;5592:30;:68::i;:::-;5033:634;;4870:797;;;;;:::o;10193:630::-;10331:1;10315:18;;:4;:18;;;;10307:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10384:16;10403:12;:10;:12::i;:::-;10384:31;;10426:102;10447:8;10457:4;10471:1;10475:21;10493:2;10475:17;:21::i;:::-;10498:25;10516:6;10498:17;:25::i;:::-;10426:102;;;;;;;;;;;;:20;:102::i;:::-;10539:19;10561:9;:13;10571:2;10561:13;;;;;;;;;;;:19;10575:4;10561:19;;;;;;;;;;;;;;;;10539:41;;10613:6;10598:11;:21;;10590:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10730:6;10716:11;:20;10694:9;:13;10704:2;10694:13;;;;;;;;;;;:19;10708:4;10694:19;;;;;;;;;;;;;;;:42;;;;10801:1;10762:54;;10787:4;10762:54;;10777:8;10762:54;;;10805:2;10809:6;10762:54;;;;;;;:::i;:::-;;;;;;;;10297:526;;10193:630;;;:::o;15025:193::-;15091:16;15119:22;15158:1;15144:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:41;;15181:7;15170:5;15176:1;15170:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15206:5;15199:12;;;15025:193;;;:::o;13276:214::-;;;;;;;:::o;13496:725::-;13703:15;:2;:13;;;:15::i;:::-;13699:516;;;13755:2;13738:38;;;13777:8;13787:4;13793:2;13797:6;13805:4;13738:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13734:471;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14081:6;14074:14;;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;;;14128:62;;;;;;;;;;:::i;:::-;;;;;;;;13734:471;13871:43;;;13859:55;;;:8;:55;;;;13855:152;;13938:50;;;;;;;;;;:::i;:::-;;;;;;;;13855:152;13811:210;13699:516;13496:725;;;;;;:::o;14227:792::-;14459:15;:2;:13;;;:15::i;:::-;14455:558;;;14511:2;14494:43;;;14538:8;14548:4;14554:3;14559:7;14568:4;14494:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14490:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14879:6;14872:14;;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;;;14926:62;;;;;;;;;;:::i;:::-;;;;;;;;14490:513;14664:48;;;14652:60;;;:8;:60;;;;14648:157;;14736:50;;;;;;;;;;:::i;:::-;;;;;;;;14648:157;14574:245;14455:558;14227:792;;;;;;:::o;1383:688:10:-;1466:7;1485:20;1508:4;1485:27;;1527:9;1522:514;1546:5;:12;1542:1;:16;1522:514;;;1579:20;1602:5;1608:1;1602:8;;;;;;;;:::i;:::-;;;;;;;;1579:31;;1644:12;1628;:28;1624:402;;1796:12;1810;1779:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1769:55;;;;;;1754:70;;1624:402;;;1983:12;1997;1966:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1956:55;;;;;;1941:70;;1624:402;1565:471;1560:3;;;;;:::i;:::-;;;;1522:514;;;;2052:12;2045:19;;;1383:688;;;;:::o;771:377:0:-;831:4;1034:12;1099:7;1087:20;1079:28;;1140:1;1133:4;:8;1126:15;;;771:377;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;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;767:954::-;872:5;897:90;913:73;979:6;913:73;:::i;:::-;897:90;:::i;:::-;888:99;;1007:5;1036:6;1029:5;1022:21;1070:4;1063:5;1059:16;1052:23;;1096:6;1146:3;1138:4;1130:6;1126:17;1121:3;1117:27;1114:36;1111:143;;;1165:79;;:::i;:::-;1111:143;1278:1;1263:452;1288:6;1285:1;1282:13;1263:452;;;1370:3;1357:17;1406:18;1393:11;1390:35;1387:122;;;1428:79;;:::i;:::-;1387:122;1552:11;1544:6;1540:24;1590:46;1632:3;1620:10;1590:46;:::i;:::-;1585:3;1578:59;1666:4;1661:3;1657:14;1650:21;;1700:4;1695:3;1691:14;1684:21;;1323:392;;1310:1;1307;1303:9;1298:14;;1263:452;;;1267:14;878:843;;767:954;;;;;:::o;1744:722::-;1840:5;1865:81;1881:64;1938:6;1881:64;:::i;:::-;1865:81;:::i;:::-;1856:90;;1966:5;1995:6;1988:5;1981:21;2029:4;2022:5;2018:16;2011:23;;2055:6;2105:3;2097:4;2089:6;2085:17;2080:3;2076:27;2073:36;2070:143;;;2124:79;;:::i;:::-;2070:143;2237:1;2222:238;2247:6;2244:1;2241:13;2222:238;;;2315:3;2344:37;2377:3;2365:10;2344:37;:::i;:::-;2339:3;2332:50;2411:4;2406:3;2402:14;2395:21;;2445:4;2440:3;2436:14;2429:21;;2282:178;2269:1;2266;2262:9;2257:14;;2222:238;;;2226:14;1846:620;;1744:722;;;;;:::o;2472:410::-;2549:5;2574:65;2590:48;2631:6;2590:48;:::i;:::-;2574:65;:::i;:::-;2565:74;;2662:6;2655:5;2648:21;2700:4;2693:5;2689:16;2738:3;2729:6;2724:3;2720:16;2717:25;2714:112;;;2745:79;;:::i;:::-;2714:112;2835:41;2869:6;2864:3;2859;2835:41;:::i;:::-;2555:327;2472:410;;;;;:::o;2888:412::-;2966:5;2991:66;3007:49;3049:6;3007:49;:::i;:::-;2991:66;:::i;:::-;2982:75;;3080:6;3073:5;3066:21;3118:4;3111:5;3107:16;3156:3;3147:6;3142:3;3138:16;3135:25;3132:112;;;3163:79;;:::i;:::-;3132:112;3253:41;3287:6;3282:3;3277;3253:41;:::i;:::-;2972:328;2888:412;;;;;:::o;3306:139::-;3352:5;3390:6;3377:20;3368:29;;3406:33;3433:5;3406:33;:::i;:::-;3306:139;;;;:::o;3468:370::-;3539:5;3588:3;3581:4;3573:6;3569:17;3565:27;3555:122;;3596:79;;:::i;:::-;3555:122;3713:6;3700:20;3738:94;3828:3;3820:6;3813:4;3805:6;3801:17;3738:94;:::i;:::-;3729:103;;3545:293;3468:370;;;;:::o;3861:568::-;3934:8;3944:6;3994:3;3987:4;3979:6;3975:17;3971:27;3961:122;;4002:79;;:::i;:::-;3961:122;4115:6;4102:20;4092:30;;4145:18;4137:6;4134:30;4131:117;;;4167:79;;:::i;:::-;4131:117;4281:4;4273:6;4269:17;4257:29;;4335:3;4327:4;4319:6;4315:17;4305:8;4301:32;4298:41;4295:128;;;4342:79;;:::i;:::-;4295:128;3861:568;;;;;:::o;4450:388::-;4530:5;4579:3;4572:4;4564:6;4560:17;4556:27;4546:122;;4587:79;;:::i;:::-;4546:122;4704:6;4691:20;4729:103;4828:3;4820:6;4813:4;4805:6;4801:17;4729:103;:::i;:::-;4720:112;;4536:302;4450:388;;;;:::o;4861:370::-;4932:5;4981:3;4974:4;4966:6;4962:17;4958:27;4948:122;;4989:79;;:::i;:::-;4948:122;5106:6;5093:20;5131:94;5221:3;5213:6;5206:4;5198:6;5194:17;5131:94;:::i;:::-;5122:103;;4938:293;4861:370;;;;:::o;5237:133::-;5280:5;5318:6;5305:20;5296:29;;5334:30;5358:5;5334:30;:::i;:::-;5237:133;;;;:::o;5376:139::-;5422:5;5460:6;5447:20;5438:29;;5476:33;5503:5;5476:33;:::i;:::-;5376:139;;;;:::o;5521:137::-;5566:5;5604:6;5591:20;5582:29;;5620:32;5646:5;5620:32;:::i;:::-;5521:137;;;;:::o;5664:141::-;5720:5;5751:6;5745:13;5736:22;;5767:32;5793:5;5767:32;:::i;:::-;5664:141;;;;:::o;5824:338::-;5879:5;5928:3;5921:4;5913:6;5909:17;5905:27;5895:122;;5936:79;;:::i;:::-;5895:122;6053:6;6040:20;6078:78;6152:3;6144:6;6137:4;6129:6;6125:17;6078:78;:::i;:::-;6069:87;;5885:277;5824:338;;;;:::o;6182:340::-;6238:5;6287:3;6280:4;6272:6;6268:17;6264:27;6254:122;;6295:79;;:::i;:::-;6254:122;6412:6;6399:20;6437:79;6512:3;6504:6;6497:4;6489:6;6485:17;6437:79;:::i;:::-;6428:88;;6244:278;6182:340;;;;:::o;6528:139::-;6574:5;6612:6;6599:20;6590:29;;6628:33;6655:5;6628:33;:::i;:::-;6528:139;;;;:::o;6673:329::-;6732:6;6781:2;6769:9;6760:7;6756:23;6752:32;6749:119;;;6787:79;;:::i;:::-;6749:119;6907:1;6932:53;6977:7;6968:6;6957:9;6953:22;6932:53;:::i;:::-;6922:63;;6878:117;6673:329;;;;:::o;7008:474::-;7076:6;7084;7133:2;7121:9;7112:7;7108:23;7104:32;7101:119;;;7139:79;;:::i;:::-;7101:119;7259:1;7284:53;7329:7;7320:6;7309:9;7305:22;7284:53;:::i;:::-;7274:63;;7230:117;7386:2;7412:53;7457:7;7448:6;7437:9;7433:22;7412:53;:::i;:::-;7402:63;;7357:118;7008:474;;;;;:::o;7488:1509::-;7642:6;7650;7658;7666;7674;7723:3;7711:9;7702:7;7698:23;7694:33;7691:120;;;7730:79;;:::i;:::-;7691:120;7850:1;7875:53;7920:7;7911:6;7900:9;7896:22;7875:53;:::i;:::-;7865:63;;7821:117;7977:2;8003:53;8048:7;8039:6;8028:9;8024:22;8003:53;:::i;:::-;7993:63;;7948:118;8133:2;8122:9;8118:18;8105:32;8164:18;8156:6;8153:30;8150:117;;;8186:79;;:::i;:::-;8150:117;8291:78;8361:7;8352:6;8341:9;8337:22;8291:78;:::i;:::-;8281:88;;8076:303;8446:2;8435:9;8431:18;8418:32;8477:18;8469:6;8466:30;8463:117;;;8499:79;;:::i;:::-;8463:117;8604:78;8674:7;8665:6;8654:9;8650:22;8604:78;:::i;:::-;8594:88;;8389:303;8759:3;8748:9;8744:19;8731:33;8791:18;8783:6;8780:30;8777:117;;;8813:79;;:::i;:::-;8777:117;8918:62;8972:7;8963:6;8952:9;8948:22;8918:62;:::i;:::-;8908:72;;8702:288;7488:1509;;;;;;;;:::o;9003:1089::-;9107:6;9115;9123;9131;9139;9188:3;9176:9;9167:7;9163:23;9159:33;9156:120;;;9195:79;;:::i;:::-;9156:120;9315:1;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9286:117;9442:2;9468:53;9513:7;9504:6;9493:9;9489:22;9468:53;:::i;:::-;9458:63;;9413:118;9570:2;9596:53;9641:7;9632:6;9621:9;9617:22;9596:53;:::i;:::-;9586:63;;9541:118;9698:2;9724:53;9769:7;9760:6;9749:9;9745:22;9724:53;:::i;:::-;9714:63;;9669:118;9854:3;9843:9;9839:19;9826:33;9886:18;9878:6;9875:30;9872:117;;;9908:79;;:::i;:::-;9872:117;10013:62;10067:7;10058:6;10047:9;10043:22;10013:62;:::i;:::-;10003:72;;9797:288;9003:1089;;;;;;;;:::o;10098:1039::-;10225:6;10233;10241;10290:2;10278:9;10269:7;10265:23;10261:32;10258:119;;;10296:79;;:::i;:::-;10258:119;10416:1;10441:53;10486:7;10477:6;10466:9;10462:22;10441:53;:::i;:::-;10431:63;;10387:117;10571:2;10560:9;10556:18;10543:32;10602:18;10594:6;10591:30;10588:117;;;10624:79;;:::i;:::-;10588:117;10729:78;10799:7;10790:6;10779:9;10775:22;10729:78;:::i;:::-;10719:88;;10514:303;10884:2;10873:9;10869:18;10856:32;10915:18;10907:6;10904:30;10901:117;;;10937:79;;:::i;:::-;10901:117;11042:78;11112:7;11103:6;11092:9;11088:22;11042:78;:::i;:::-;11032:88;;10827:303;10098:1039;;;;;:::o;11143:468::-;11208:6;11216;11265:2;11253:9;11244:7;11240:23;11236:32;11233:119;;;11271:79;;:::i;:::-;11233:119;11391:1;11416:53;11461:7;11452:6;11441:9;11437:22;11416:53;:::i;:::-;11406:63;;11362:117;11518:2;11544:50;11586:7;11577:6;11566:9;11562:22;11544:50;:::i;:::-;11534:60;;11489:115;11143:468;;;;;:::o;11617:474::-;11685:6;11693;11742:2;11730:9;11721:7;11717:23;11713:32;11710:119;;;11748:79;;:::i;:::-;11710:119;11868:1;11893:53;11938:7;11929:6;11918:9;11914:22;11893:53;:::i;:::-;11883:63;;11839:117;11995:2;12021:53;12066:7;12057:6;12046:9;12042:22;12021:53;:::i;:::-;12011:63;;11966:118;11617:474;;;;;:::o;12097:619::-;12174:6;12182;12190;12239:2;12227:9;12218:7;12214:23;12210:32;12207:119;;;12245:79;;:::i;:::-;12207:119;12365:1;12390:53;12435:7;12426:6;12415:9;12411:22;12390:53;:::i;:::-;12380:63;;12336:117;12492:2;12518:53;12563:7;12554:6;12543:9;12539:22;12518:53;:::i;:::-;12508:63;;12463:118;12620:2;12646:53;12691:7;12682:6;12671:9;12667:22;12646:53;:::i;:::-;12636:63;;12591:118;12097:619;;;;;:::o;12722:894::-;12840:6;12848;12897:2;12885:9;12876:7;12872:23;12868:32;12865:119;;;12903:79;;:::i;:::-;12865:119;13051:1;13040:9;13036:17;13023:31;13081:18;13073:6;13070:30;13067:117;;;13103:79;;:::i;:::-;13067:117;13208:78;13278:7;13269:6;13258:9;13254:22;13208:78;:::i;:::-;13198:88;;12994:302;13363:2;13352:9;13348:18;13335:32;13394:18;13386:6;13383:30;13380:117;;;13416:79;;:::i;:::-;13380:117;13521:78;13591:7;13582:6;13571:9;13567:22;13521:78;:::i;:::-;13511:88;;13306:303;12722:894;;;;;:::o;13622:1623::-;13817:6;13825;13833;13841;13890:3;13878:9;13869:7;13865:23;13861:33;13858:120;;;13897:79;;:::i;:::-;13858:120;14045:1;14034:9;14030:17;14017:31;14075:18;14067:6;14064:30;14061:117;;;14097:79;;:::i;:::-;14061:117;14202:78;14272:7;14263:6;14252:9;14248:22;14202:78;:::i;:::-;14192:88;;13988:302;14357:2;14346:9;14342:18;14329:32;14388:18;14380:6;14377:30;14374:117;;;14410:79;;:::i;:::-;14374:117;14515:78;14585:7;14576:6;14565:9;14561:22;14515:78;:::i;:::-;14505:88;;14300:303;14670:2;14659:9;14655:18;14642:32;14701:18;14693:6;14690:30;14687:117;;;14723:79;;:::i;:::-;14687:117;14828:78;14898:7;14889:6;14878:9;14874:22;14828:78;:::i;:::-;14818:88;;14613:303;14983:2;14972:9;14968:18;14955:32;15014:18;15006:6;15003:30;15000:117;;;15036:79;;:::i;:::-;15000:117;15141:87;15220:7;15211:6;15200:9;15196:22;15141:87;:::i;:::-;15131:97;;14926:312;13622:1623;;;;;;;:::o;15251:539::-;15335:6;15384:2;15372:9;15363:7;15359:23;15355:32;15352:119;;;15390:79;;:::i;:::-;15352:119;15538:1;15527:9;15523:17;15510:31;15568:18;15560:6;15557:30;15554:117;;;15590:79;;:::i;:::-;15554:117;15695:78;15765:7;15756:6;15745:9;15741:22;15695:78;:::i;:::-;15685:88;;15481:302;15251:539;;;;:::o;15796:323::-;15852:6;15901:2;15889:9;15880:7;15876:23;15872:32;15869:119;;;15907:79;;:::i;:::-;15869:119;16027:1;16052:50;16094:7;16085:6;16074:9;16070:22;16052:50;:::i;:::-;16042:60;;15998:114;15796:323;;;;:::o;16125:329::-;16184:6;16233:2;16221:9;16212:7;16208:23;16204:32;16201:119;;;16239:79;;:::i;:::-;16201:119;16359:1;16384:53;16429:7;16420:6;16409:9;16405:22;16384:53;:::i;:::-;16374:63;;16330:117;16125:329;;;;:::o;16460:327::-;16518:6;16567:2;16555:9;16546:7;16542:23;16538:32;16535:119;;;16573:79;;:::i;:::-;16535:119;16693:1;16718:52;16762:7;16753:6;16742:9;16738:22;16718:52;:::i;:::-;16708:62;;16664:116;16460:327;;;;:::o;16793:349::-;16862:6;16911:2;16899:9;16890:7;16886:23;16882:32;16879:119;;;16917:79;;:::i;:::-;16879:119;17037:1;17062:63;17117:7;17108:6;17097:9;17093:22;17062:63;:::i;:::-;17052:73;;17008:127;16793:349;;;;:::o;17148:509::-;17217:6;17266:2;17254:9;17245:7;17241:23;17237:32;17234:119;;;17272:79;;:::i;:::-;17234:119;17420:1;17409:9;17405:17;17392:31;17450:18;17442:6;17439:30;17436:117;;;17472:79;;:::i;:::-;17436:117;17577:63;17632:7;17623:6;17612:9;17608:22;17577:63;:::i;:::-;17567:73;;17363:287;17148:509;;;;:::o;17663:329::-;17722:6;17771:2;17759:9;17750:7;17746:23;17742:32;17739:119;;;17777:79;;:::i;:::-;17739:119;17897:1;17922:53;17967:7;17958:6;17947:9;17943:22;17922:53;:::i;:::-;17912:63;;17868:117;17663:329;;;;:::o;17998:704::-;18093:6;18101;18109;18158:2;18146:9;18137:7;18133:23;18129:32;18126:119;;;18164:79;;:::i;:::-;18126:119;18284:1;18309:53;18354:7;18345:6;18334:9;18330:22;18309:53;:::i;:::-;18299:63;;18255:117;18439:2;18428:9;18424:18;18411:32;18470:18;18462:6;18459:30;18456:117;;;18492:79;;:::i;:::-;18456:117;18605:80;18677:7;18668:6;18657:9;18653:22;18605:80;:::i;:::-;18587:98;;;;18382:313;17998:704;;;;;:::o;18708:179::-;18777:10;18798:46;18840:3;18832:6;18798:46;:::i;:::-;18876:4;18871:3;18867:14;18853:28;;18708:179;;;;:::o;18893:118::-;18980:24;18998:5;18980:24;:::i;:::-;18975:3;18968:37;18893:118;;:::o;19017:157::-;19122:45;19142:24;19160:5;19142:24;:::i;:::-;19122:45;:::i;:::-;19117:3;19110:58;19017:157;;:::o;19210:732::-;19329:3;19358:54;19406:5;19358:54;:::i;:::-;19428:86;19507:6;19502:3;19428:86;:::i;:::-;19421:93;;19538:56;19588:5;19538:56;:::i;:::-;19617:7;19648:1;19633:284;19658:6;19655:1;19652:13;19633:284;;;19734:6;19728:13;19761:63;19820:3;19805:13;19761:63;:::i;:::-;19754:70;;19847:60;19900:6;19847:60;:::i;:::-;19837:70;;19693:224;19680:1;19677;19673:9;19668:14;;19633:284;;;19637:14;19933:3;19926:10;;19334:608;;;19210:732;;;;:::o;19948:109::-;20029:21;20044:5;20029:21;:::i;:::-;20024:3;20017:34;19948:109;;:::o;20063:118::-;20150:24;20168:5;20150:24;:::i;:::-;20145:3;20138:37;20063:118;;:::o;20187:157::-;20292:45;20312:24;20330:5;20312:24;:::i;:::-;20292:45;:::i;:::-;20287:3;20280:58;20187:157;;:::o;20350:360::-;20436:3;20464:38;20496:5;20464:38;:::i;:::-;20518:70;20581:6;20576:3;20518:70;:::i;:::-;20511:77;;20597:52;20642:6;20637:3;20630:4;20623:5;20619:16;20597:52;:::i;:::-;20674:29;20696:6;20674:29;:::i;:::-;20669:3;20665:39;20658:46;;20440:270;20350:360;;;;:::o;20716:364::-;20804:3;20832:39;20865:5;20832:39;:::i;:::-;20887:71;20951:6;20946:3;20887:71;:::i;:::-;20880:78;;20967:52;21012:6;21007:3;21000:4;20993:5;20989:16;20967:52;:::i;:::-;21044:29;21066:6;21044:29;:::i;:::-;21039:3;21035:39;21028:46;;20808:272;20716:364;;;;:::o;21086:377::-;21192:3;21220:39;21253:5;21220:39;:::i;:::-;21275:89;21357:6;21352:3;21275:89;:::i;:::-;21268:96;;21373:52;21418:6;21413:3;21406:4;21399:5;21395:16;21373:52;:::i;:::-;21450:6;21445:3;21441:16;21434:23;;21196:267;21086:377;;;;:::o;21493:845::-;21596:3;21633:5;21627:12;21662:36;21688:9;21662:36;:::i;:::-;21714:89;21796:6;21791:3;21714:89;:::i;:::-;21707:96;;21834:1;21823:9;21819:17;21850:1;21845:137;;;;21996:1;21991:341;;;;21812:520;;21845:137;21929:4;21925:9;21914;21910:25;21905:3;21898:38;21965:6;21960:3;21956:16;21949:23;;21845:137;;21991:341;22058:38;22090:5;22058:38;:::i;:::-;22118:1;22132:154;22146:6;22143:1;22140:13;22132:154;;;22220:7;22214:14;22210:1;22205:3;22201:11;22194:35;22270:1;22261:7;22257:15;22246:26;;22168:4;22165:1;22161:12;22156:17;;22132:154;;;22315:6;22310:3;22306:16;22299:23;;21998:334;;21812:520;;21600:738;;21493:845;;;;:::o;22344:366::-;22486:3;22507:67;22571:2;22566:3;22507:67;:::i;:::-;22500:74;;22583:93;22672:3;22583:93;:::i;:::-;22701:2;22696:3;22692:12;22685:19;;22344:366;;;:::o;22716:::-;22858:3;22879:67;22943:2;22938:3;22879:67;:::i;:::-;22872:74;;22955:93;23044:3;22955:93;:::i;:::-;23073:2;23068:3;23064:12;23057:19;;22716:366;;;:::o;23088:::-;23230:3;23251:67;23315:2;23310:3;23251:67;:::i;:::-;23244:74;;23327:93;23416:3;23327:93;:::i;:::-;23445:2;23440:3;23436:12;23429:19;;23088:366;;;:::o;23460:::-;23602:3;23623:67;23687:2;23682:3;23623:67;:::i;:::-;23616:74;;23699:93;23788:3;23699:93;:::i;:::-;23817:2;23812:3;23808:12;23801:19;;23460:366;;;:::o;23832:::-;23974:3;23995:67;24059:2;24054:3;23995:67;:::i;:::-;23988:74;;24071:93;24160:3;24071:93;:::i;:::-;24189:2;24184:3;24180:12;24173:19;;23832:366;;;:::o;24204:::-;24346:3;24367:67;24431:2;24426:3;24367:67;:::i;:::-;24360:74;;24443:93;24532:3;24443:93;:::i;:::-;24561:2;24556:3;24552:12;24545:19;;24204:366;;;:::o;24576:::-;24718:3;24739:67;24803:2;24798:3;24739:67;:::i;:::-;24732:74;;24815:93;24904:3;24815:93;:::i;:::-;24933:2;24928:3;24924:12;24917:19;;24576:366;;;:::o;24948:::-;25090:3;25111:67;25175:2;25170:3;25111:67;:::i;:::-;25104:74;;25187:93;25276:3;25187:93;:::i;:::-;25305:2;25300:3;25296:12;25289:19;;24948:366;;;:::o;25320:::-;25462:3;25483:67;25547:2;25542:3;25483:67;:::i;:::-;25476:74;;25559:93;25648:3;25559:93;:::i;:::-;25677:2;25672:3;25668:12;25661:19;;25320:366;;;:::o;25692:::-;25834:3;25855:67;25919:2;25914:3;25855:67;:::i;:::-;25848:74;;25931:93;26020:3;25931:93;:::i;:::-;26049:2;26044:3;26040:12;26033:19;;25692:366;;;:::o;26064:::-;26206:3;26227:67;26291:2;26286:3;26227:67;:::i;:::-;26220:74;;26303:93;26392:3;26303:93;:::i;:::-;26421:2;26416:3;26412:12;26405:19;;26064:366;;;:::o;26436:::-;26578:3;26599:67;26663:2;26658:3;26599:67;:::i;:::-;26592:74;;26675:93;26764:3;26675:93;:::i;:::-;26793:2;26788:3;26784:12;26777:19;;26436:366;;;:::o;26808:::-;26950:3;26971:67;27035:2;27030:3;26971:67;:::i;:::-;26964:74;;27047:93;27136:3;27047:93;:::i;:::-;27165:2;27160:3;27156:12;27149:19;;26808:366;;;:::o;27180:::-;27322:3;27343:67;27407:2;27402:3;27343:67;:::i;:::-;27336:74;;27419:93;27508:3;27419:93;:::i;:::-;27537:2;27532:3;27528:12;27521:19;;27180:366;;;:::o;27552:::-;27694:3;27715:67;27779:2;27774:3;27715:67;:::i;:::-;27708:74;;27791:93;27880:3;27791:93;:::i;:::-;27909:2;27904:3;27900:12;27893:19;;27552:366;;;:::o;27924:::-;28066:3;28087:67;28151:2;28146:3;28087:67;:::i;:::-;28080:74;;28163:93;28252:3;28163:93;:::i;:::-;28281:2;28276:3;28272:12;28265:19;;27924:366;;;:::o;28296:::-;28438:3;28459:67;28523:2;28518:3;28459:67;:::i;:::-;28452:74;;28535:93;28624:3;28535:93;:::i;:::-;28653:2;28648:3;28644:12;28637:19;;28296:366;;;:::o;28668:::-;28810:3;28831:67;28895:2;28890:3;28831:67;:::i;:::-;28824:74;;28907:93;28996:3;28907:93;:::i;:::-;29025:2;29020:3;29016:12;29009:19;;28668:366;;;:::o;29040:::-;29182:3;29203:67;29267:2;29262:3;29203:67;:::i;:::-;29196:74;;29279:93;29368:3;29279:93;:::i;:::-;29397:2;29392:3;29388:12;29381:19;;29040:366;;;:::o;29412:::-;29554:3;29575:67;29639:2;29634:3;29575:67;:::i;:::-;29568:74;;29651:93;29740:3;29651:93;:::i;:::-;29769:2;29764:3;29760:12;29753:19;;29412:366;;;:::o;29784:::-;29926:3;29947:67;30011:2;30006:3;29947:67;:::i;:::-;29940:74;;30023:93;30112:3;30023:93;:::i;:::-;30141:2;30136:3;30132:12;30125:19;;29784:366;;;:::o;30156:108::-;30233:24;30251:5;30233:24;:::i;:::-;30228:3;30221:37;30156:108;;:::o;30270:118::-;30357:24;30375:5;30357:24;:::i;:::-;30352:3;30345:37;30270:118;;:::o;30394:256::-;30506:3;30521:75;30592:3;30583:6;30521:75;:::i;:::-;30621:2;30616:3;30612:12;30605:19;;30641:3;30634:10;;30394:256;;;;:::o;30656:397::-;30796:3;30811:75;30882:3;30873:6;30811:75;:::i;:::-;30911:2;30906:3;30902:12;30895:19;;30924:75;30995:3;30986:6;30924:75;:::i;:::-;31024:2;31019:3;31015:12;31008:19;;31044:3;31037:10;;30656:397;;;;;:::o;31059:589::-;31284:3;31306:95;31397:3;31388:6;31306:95;:::i;:::-;31299:102;;31418:95;31509:3;31500:6;31418:95;:::i;:::-;31411:102;;31530:92;31618:3;31609:6;31530:92;:::i;:::-;31523:99;;31639:3;31632:10;;31059:589;;;;;;:::o;31654:222::-;31747:4;31785:2;31774:9;31770:18;31762:26;;31798:71;31866:1;31855:9;31851:17;31842:6;31798:71;:::i;:::-;31654:222;;;;:::o;31882:1053::-;32205:4;32243:3;32232:9;32228:19;32220:27;;32257:71;32325:1;32314:9;32310:17;32301:6;32257:71;:::i;:::-;32338:72;32406:2;32395:9;32391:18;32382:6;32338:72;:::i;:::-;32457:9;32451:4;32447:20;32442:2;32431:9;32427:18;32420:48;32485:108;32588:4;32579:6;32485:108;:::i;:::-;32477:116;;32640:9;32634:4;32630:20;32625:2;32614:9;32610:18;32603:48;32668:108;32771:4;32762:6;32668:108;:::i;:::-;32660:116;;32824:9;32818:4;32814:20;32808:3;32797:9;32793:19;32786:49;32852:76;32923:4;32914:6;32852:76;:::i;:::-;32844:84;;31882:1053;;;;;;;;:::o;32941:751::-;33164:4;33202:3;33191:9;33187:19;33179:27;;33216:71;33284:1;33273:9;33269:17;33260:6;33216:71;:::i;:::-;33297:72;33365:2;33354:9;33350:18;33341:6;33297:72;:::i;:::-;33379;33447:2;33436:9;33432:18;33423:6;33379:72;:::i;:::-;33461;33529:2;33518:9;33514:18;33505:6;33461:72;:::i;:::-;33581:9;33575:4;33571:20;33565:3;33554:9;33550:19;33543:49;33609:76;33680:4;33671:6;33609:76;:::i;:::-;33601:84;;32941:751;;;;;;;;:::o;33698:373::-;33841:4;33879:2;33868:9;33864:18;33856:26;;33928:9;33922:4;33918:20;33914:1;33903:9;33899:17;33892:47;33956:108;34059:4;34050:6;33956:108;:::i;:::-;33948:116;;33698:373;;;;:::o;34077:634::-;34298:4;34336:2;34325:9;34321:18;34313:26;;34385:9;34379:4;34375:20;34371:1;34360:9;34356:17;34349:47;34413:108;34516:4;34507:6;34413:108;:::i;:::-;34405:116;;34568:9;34562:4;34558:20;34553:2;34542:9;34538:18;34531:48;34596:108;34699:4;34690:6;34596:108;:::i;:::-;34588:116;;34077:634;;;;;:::o;34717:210::-;34804:4;34842:2;34831:9;34827:18;34819:26;;34855:65;34917:1;34906:9;34902:17;34893:6;34855:65;:::i;:::-;34717:210;;;;:::o;34933:222::-;35026:4;35064:2;35053:9;35049:18;35041:26;;35077:71;35145:1;35134:9;35130:17;35121:6;35077:71;:::i;:::-;34933:222;;;;:::o;35161:313::-;35274:4;35312:2;35301:9;35297:18;35289:26;;35361:9;35355:4;35351:20;35347:1;35336:9;35332:17;35325:47;35389:78;35462:4;35453:6;35389:78;:::i;:::-;35381:86;;35161:313;;;;:::o;35480:419::-;35646:4;35684:2;35673:9;35669:18;35661:26;;35733:9;35727:4;35723:20;35719:1;35708:9;35704:17;35697:47;35761:131;35887:4;35761:131;:::i;:::-;35753:139;;35480:419;;;:::o;35905:::-;36071:4;36109:2;36098:9;36094:18;36086:26;;36158:9;36152:4;36148:20;36144:1;36133:9;36129:17;36122:47;36186:131;36312:4;36186:131;:::i;:::-;36178:139;;35905:419;;;:::o;36330:::-;36496:4;36534:2;36523:9;36519:18;36511:26;;36583:9;36577:4;36573:20;36569:1;36558:9;36554:17;36547:47;36611:131;36737:4;36611:131;:::i;:::-;36603:139;;36330:419;;;:::o;36755:::-;36921:4;36959:2;36948:9;36944:18;36936:26;;37008:9;37002:4;36998:20;36994:1;36983:9;36979:17;36972:47;37036:131;37162:4;37036:131;:::i;:::-;37028:139;;36755:419;;;:::o;37180:::-;37346:4;37384:2;37373:9;37369:18;37361:26;;37433:9;37427:4;37423:20;37419:1;37408:9;37404:17;37397:47;37461:131;37587:4;37461:131;:::i;:::-;37453:139;;37180:419;;;:::o;37605:::-;37771:4;37809:2;37798:9;37794:18;37786:26;;37858:9;37852:4;37848:20;37844:1;37833:9;37829:17;37822:47;37886:131;38012:4;37886:131;:::i;:::-;37878:139;;37605:419;;;:::o;38030:::-;38196:4;38234:2;38223:9;38219:18;38211:26;;38283:9;38277:4;38273:20;38269:1;38258:9;38254:17;38247:47;38311:131;38437:4;38311:131;:::i;:::-;38303:139;;38030:419;;;:::o;38455:::-;38621:4;38659:2;38648:9;38644:18;38636:26;;38708:9;38702:4;38698:20;38694:1;38683:9;38679:17;38672:47;38736:131;38862:4;38736:131;:::i;:::-;38728:139;;38455:419;;;:::o;38880:::-;39046:4;39084:2;39073:9;39069:18;39061:26;;39133:9;39127:4;39123:20;39119:1;39108:9;39104:17;39097:47;39161:131;39287:4;39161:131;:::i;:::-;39153:139;;38880:419;;;:::o;39305:::-;39471:4;39509:2;39498:9;39494:18;39486:26;;39558:9;39552:4;39548:20;39544:1;39533:9;39529:17;39522:47;39586:131;39712:4;39586:131;:::i;:::-;39578:139;;39305:419;;;:::o;39730:::-;39896:4;39934:2;39923:9;39919:18;39911:26;;39983:9;39977:4;39973:20;39969:1;39958:9;39954:17;39947:47;40011:131;40137:4;40011:131;:::i;:::-;40003:139;;39730:419;;;:::o;40155:::-;40321:4;40359:2;40348:9;40344:18;40336:26;;40408:9;40402:4;40398:20;40394:1;40383:9;40379:17;40372:47;40436:131;40562:4;40436:131;:::i;:::-;40428:139;;40155:419;;;:::o;40580:::-;40746:4;40784:2;40773:9;40769:18;40761:26;;40833:9;40827:4;40823:20;40819:1;40808:9;40804:17;40797:47;40861:131;40987:4;40861:131;:::i;:::-;40853:139;;40580:419;;;:::o;41005:::-;41171:4;41209:2;41198:9;41194:18;41186:26;;41258:9;41252:4;41248:20;41244:1;41233:9;41229:17;41222:47;41286:131;41412:4;41286:131;:::i;:::-;41278:139;;41005:419;;;:::o;41430:::-;41596:4;41634:2;41623:9;41619:18;41611:26;;41683:9;41677:4;41673:20;41669:1;41658:9;41654:17;41647:47;41711:131;41837:4;41711:131;:::i;:::-;41703:139;;41430:419;;;:::o;41855:::-;42021:4;42059:2;42048:9;42044:18;42036:26;;42108:9;42102:4;42098:20;42094:1;42083:9;42079:17;42072:47;42136:131;42262:4;42136:131;:::i;:::-;42128:139;;41855:419;;;:::o;42280:::-;42446:4;42484:2;42473:9;42469:18;42461:26;;42533:9;42527:4;42523:20;42519:1;42508:9;42504:17;42497:47;42561:131;42687:4;42561:131;:::i;:::-;42553:139;;42280:419;;;:::o;42705:::-;42871:4;42909:2;42898:9;42894:18;42886:26;;42958:9;42952:4;42948:20;42944:1;42933:9;42929:17;42922:47;42986:131;43112:4;42986:131;:::i;:::-;42978:139;;42705:419;;;:::o;43130:::-;43296:4;43334:2;43323:9;43319:18;43311:26;;43383:9;43377:4;43373:20;43369:1;43358:9;43354:17;43347:47;43411:131;43537:4;43411:131;:::i;:::-;43403:139;;43130:419;;;:::o;43555:::-;43721:4;43759:2;43748:9;43744:18;43736:26;;43808:9;43802:4;43798:20;43794:1;43783:9;43779:17;43772:47;43836:131;43962:4;43836:131;:::i;:::-;43828:139;;43555:419;;;:::o;43980:::-;44146:4;44184:2;44173:9;44169:18;44161:26;;44233:9;44227:4;44223:20;44219:1;44208:9;44204:17;44197:47;44261:131;44387:4;44261:131;:::i;:::-;44253:139;;43980:419;;;:::o;44405:222::-;44498:4;44536:2;44525:9;44521:18;44513:26;;44549:71;44617:1;44606:9;44602:17;44593:6;44549:71;:::i;:::-;44405:222;;;;:::o;44633:332::-;44754:4;44792:2;44781:9;44777:18;44769:26;;44805:71;44873:1;44862:9;44858:17;44849:6;44805:71;:::i;:::-;44886:72;44954:2;44943:9;44939:18;44930:6;44886:72;:::i;:::-;44633:332;;;;;:::o;44971:129::-;45005:6;45032:20;;:::i;:::-;45022:30;;45061:33;45089:4;45081:6;45061:33;:::i;:::-;44971:129;;;:::o;45106:75::-;45139:6;45172:2;45166:9;45156:19;;45106:75;:::o;45187:311::-;45264:4;45354:18;45346:6;45343:30;45340:56;;;45376:18;;:::i;:::-;45340:56;45426:4;45418:6;45414:17;45406:25;;45486:4;45480;45476:15;45468:23;;45187:311;;;:::o;45504:320::-;45590:4;45680:18;45672:6;45669:30;45666:56;;;45702:18;;:::i;:::-;45666:56;45752:4;45744:6;45740:17;45732:25;;45812:4;45806;45802:15;45794:23;;45504:320;;;:::o;45830:311::-;45907:4;45997:18;45989:6;45986:30;45983:56;;;46019:18;;:::i;:::-;45983:56;46069:4;46061:6;46057:17;46049:25;;46129:4;46123;46119:15;46111:23;;45830:311;;;:::o;46147:307::-;46208:4;46298:18;46290:6;46287:30;46284:56;;;46320:18;;:::i;:::-;46284:56;46358:29;46380:6;46358:29;:::i;:::-;46350:37;;46442:4;46436;46432:15;46424:23;;46147:307;;;:::o;46460:308::-;46522:4;46612:18;46604:6;46601:30;46598:56;;;46634:18;;:::i;:::-;46598:56;46672:29;46694:6;46672:29;:::i;:::-;46664:37;;46756:4;46750;46746:15;46738:23;;46460:308;;;:::o;46774:132::-;46841:4;46864:3;46856:11;;46894:4;46889:3;46885:14;46877:22;;46774:132;;;:::o;46912:141::-;46961:4;46984:3;46976:11;;47007:3;47004:1;46997:14;47041:4;47038:1;47028:18;47020:26;;46912:141;;;:::o;47059:114::-;47126:6;47160:5;47154:12;47144:22;;47059:114;;;:::o;47179:98::-;47230:6;47264:5;47258:12;47248:22;;47179:98;;;:::o;47283:99::-;47335:6;47369:5;47363:12;47353:22;;47283:99;;;:::o;47388:113::-;47458:4;47490;47485:3;47481:14;47473:22;;47388:113;;;:::o;47507:184::-;47606:11;47640:6;47635:3;47628:19;47680:4;47675:3;47671:14;47656:29;;47507:184;;;;:::o;47697:168::-;47780:11;47814:6;47809:3;47802:19;47854:4;47849:3;47845:14;47830:29;;47697:168;;;;:::o;47871:169::-;47955:11;47989:6;47984:3;47977:19;48029:4;48024:3;48020:14;48005:29;;47871:169;;;;:::o;48046:148::-;48148:11;48185:3;48170:18;;48046:148;;;;:::o;48200:305::-;48240:3;48259:20;48277:1;48259:20;:::i;:::-;48254:25;;48293:20;48311:1;48293:20;:::i;:::-;48288:25;;48447:1;48379:66;48375:74;48372:1;48369:81;48366:107;;;48453:18;;:::i;:::-;48366:107;48497:1;48494;48490:9;48483:16;;48200:305;;;;:::o;48511:185::-;48551:1;48568:20;48586:1;48568:20;:::i;:::-;48563:25;;48602:20;48620:1;48602:20;:::i;:::-;48597:25;;48641:1;48631:35;;48646:18;;:::i;:::-;48631:35;48688:1;48685;48681:9;48676:14;;48511:185;;;;:::o;48702:348::-;48742:7;48765:20;48783:1;48765:20;:::i;:::-;48760:25;;48799:20;48817:1;48799:20;:::i;:::-;48794:25;;48987:1;48919:66;48915:74;48912:1;48909:81;48904:1;48897:9;48890:17;48886:105;48883:131;;;48994:18;;:::i;:::-;48883:131;49042:1;49039;49035:9;49024:20;;48702:348;;;;:::o;49056:191::-;49096:4;49116:20;49134:1;49116:20;:::i;:::-;49111:25;;49150:20;49168:1;49150:20;:::i;:::-;49145:25;;49189:1;49186;49183:8;49180:34;;;49194:18;;:::i;:::-;49180:34;49239:1;49236;49232:9;49224:17;;49056:191;;;;:::o;49253:96::-;49290:7;49319:24;49337:5;49319:24;:::i;:::-;49308:35;;49253:96;;;:::o;49355:90::-;49389:7;49432:5;49425:13;49418:21;49407:32;;49355:90;;;:::o;49451:77::-;49488:7;49517:5;49506:16;;49451:77;;;:::o;49534:149::-;49570:7;49610:66;49603:5;49599:78;49588:89;;49534:149;;;:::o;49689:126::-;49726:7;49766:42;49759:5;49755:54;49744:65;;49689:126;;;:::o;49821:77::-;49858:7;49887:5;49876:16;;49821:77;;;:::o;49904:154::-;49988:6;49983:3;49978;49965:30;50050:1;50041:6;50036:3;50032:16;50025:27;49904:154;;;:::o;50064:307::-;50132:1;50142:113;50156:6;50153:1;50150:13;50142:113;;;50241:1;50236:3;50232:11;50226:18;50222:1;50217:3;50213:11;50206:39;50178:2;50175:1;50171:10;50166:15;;50142:113;;;50273:6;50270:1;50267:13;50264:101;;;50353:1;50344:6;50339:3;50335:16;50328:27;50264:101;50113:258;50064:307;;;:::o;50377:320::-;50421:6;50458:1;50452:4;50448:12;50438:22;;50505:1;50499:4;50495:12;50526:18;50516:81;;50582:4;50574:6;50570:17;50560:27;;50516:81;50644:2;50636:6;50633:14;50613:18;50610:38;50607:84;;;50663:18;;:::i;:::-;50607:84;50428:269;50377:320;;;:::o;50703:281::-;50786:27;50808:4;50786:27;:::i;:::-;50778:6;50774:40;50916:6;50904:10;50901:22;50880:18;50868:10;50865:34;50862:62;50859:88;;;50927:18;;:::i;:::-;50859:88;50967:10;50963:2;50956:22;50746:238;50703:281;;:::o;50990:233::-;51029:3;51052:24;51070:5;51052:24;:::i;:::-;51043:33;;51098:66;51091:5;51088:77;51085:103;;;51168:18;;:::i;:::-;51085:103;51215:1;51208:5;51204:13;51197:20;;50990:233;;;:::o;51229:100::-;51268:7;51297:26;51317:5;51297:26;:::i;:::-;51286:37;;51229:100;;;:::o;51335:79::-;51374:7;51403:5;51392:16;;51335:79;;;:::o;51420:94::-;51459:7;51488:20;51502:5;51488:20;:::i;:::-;51477:31;;51420:94;;;:::o;51520:176::-;51552:1;51569:20;51587:1;51569:20;:::i;:::-;51564:25;;51603:20;51621:1;51603:20;:::i;:::-;51598:25;;51642:1;51632:35;;51647:18;;:::i;:::-;51632:35;51688:1;51685;51681:9;51676:14;;51520:176;;;;:::o;51702:180::-;51750:77;51747:1;51740:88;51847:4;51844:1;51837:15;51871:4;51868:1;51861:15;51888:180;51936:77;51933:1;51926:88;52033:4;52030:1;52023:15;52057:4;52054:1;52047:15;52074:180;52122:77;52119:1;52112:88;52219:4;52216:1;52209:15;52243:4;52240:1;52233:15;52260:180;52308:77;52305:1;52298:88;52405:4;52402:1;52395:15;52429:4;52426:1;52419:15;52446:180;52494:77;52491:1;52484:88;52591:4;52588:1;52581:15;52615:4;52612:1;52605:15;52632:183;52667:3;52705:1;52687:16;52684:23;52681:128;;;52743:1;52740;52737;52722:23;52765:34;52796:1;52790:8;52765:34;:::i;:::-;52758:41;;52681:128;52632:183;:::o;52821:117::-;52930:1;52927;52920:12;52944:117;53053:1;53050;53043:12;53067:117;53176:1;53173;53166:12;53190:117;53299:1;53296;53289:12;53313:117;53422:1;53419;53412:12;53436:117;53545:1;53542;53535:12;53559:102;53600:6;53651:2;53647:7;53642:2;53635:5;53631:14;53627:28;53617:38;;53559:102;;;:::o;53667:94::-;53700:8;53748:5;53744:2;53740:14;53719:35;;53667:94;;;:::o;53767:106::-;53811:8;53860:5;53855:3;53851:15;53830:36;;53767:106;;;:::o;53879:239::-;54019:34;54015:1;54007:6;54003:14;53996:58;54088:22;54083:2;54075:6;54071:15;54064:47;53879:239;:::o;54124:227::-;54264:34;54260:1;54252:6;54248:14;54241:58;54333:10;54328:2;54320:6;54316:15;54309:35;54124:227;:::o;54357:230::-;54497:34;54493:1;54485:6;54481:14;54474:58;54566:13;54561:2;54553:6;54549:15;54542:38;54357:230;:::o;54593:225::-;54733:34;54729:1;54721:6;54717:14;54710:58;54802:8;54797:2;54789:6;54785:15;54778:33;54593:225;:::o;54824:223::-;54964:34;54960:1;54952:6;54948:14;54941:58;55033:6;55028:2;55020:6;55016:15;55009:31;54824:223;:::o;55053:180::-;55193:32;55189:1;55181:6;55177:14;55170:56;55053:180;:::o;55239:234::-;55379:34;55375:1;55367:6;55363:14;55356:58;55448:17;55443:2;55435:6;55431:15;55424:42;55239:234;:::o;55479:228::-;55619:34;55615:1;55607:6;55603:14;55596:58;55688:11;55683:2;55675:6;55671:15;55664:36;55479:228;:::o;55713:224::-;55853:34;55849:1;55841:6;55837:14;55830:58;55922:7;55917:2;55909:6;55905:15;55898:32;55713:224;:::o;55943:237::-;56083:34;56079:1;56071:6;56067:14;56060:58;56152:20;56147:2;56139:6;56135:15;56128:45;55943:237;:::o;56186:222::-;56326:34;56322:1;56314:6;56310:14;56303:58;56395:5;56390:2;56382:6;56378:15;56371:30;56186:222;:::o;56414:229::-;56554:34;56550:1;56542:6;56538:14;56531:58;56623:12;56618:2;56610:6;56606:15;56599:37;56414:229;:::o;56649:182::-;56789:34;56785:1;56777:6;56773:14;56766:58;56649:182;:::o;56837:230::-;56977:34;56973:1;56965:6;56961:14;56954:58;57046:9;57041:2;57033:6;57029:15;57022:34;56837:230;:::o;57077:240::-;57221:34;57217:1;57209:6;57205:14;57198:58;57294:11;57289:2;57281:6;57277:15;57270:36;57077:240;:::o;57327:::-;57471:34;57467:1;57459:6;57455:14;57448:58;57544:11;57539:2;57531:6;57527:15;57520:36;57327:240;:::o;57577:239::-;57721:34;57717:1;57709:6;57705:14;57698:58;57794:10;57789:2;57781:6;57777:15;57770:35;57577:239;:::o;57826:252::-;57970:34;57966:1;57958:6;57954:14;57947:58;58043:23;58038:2;58030:6;58026:15;58019:48;57826:252;:::o;58088:232::-;58232:34;58228:1;58220:6;58216:14;58209:58;58305:3;58300:2;58292:6;58288:15;58281:28;58088:232;:::o;58330:186::-;58474:30;58470:1;58462:6;58458:14;58451:54;58330:186;:::o;58526:177::-;58670:21;58666:1;58658:6;58654:14;58647:45;58526:177;:::o;58713:783::-;58752:3;58794:4;58776:16;58773:26;58770:39;;;58802:5;;58770:39;58835:20;;:::i;:::-;58914:1;58896:16;58892:24;58889:1;58883:4;58868:49;58951:4;58945:11;59062:16;59055:4;59047:6;59043:17;59040:39;59003:18;58995:6;58992:30;58972:125;58969:166;;;59116:5;;;;58969:166;59170:6;59164:4;59160:17;59210:3;59204:10;59241:18;59233:6;59230:30;59227:43;;;59263:5;;;;;;59227:43;59315:6;59308:4;59303:3;59299:14;59295:27;59378:1;59360:16;59356:24;59350:4;59346:35;59341:3;59338:44;59335:57;;;59385:5;;;;;;;59335:57;59406;59454:6;59448:4;59444:17;59436:6;59432:30;59426:4;59406:57;:::i;:::-;59483:3;59476:10;;58756:740;;;;;58713:783;;:::o;59506:130::-;59583:24;59601:5;59583:24;:::i;:::-;59576:5;59573:35;59563:63;;59622:1;59619;59612:12;59563:63;59506:130;:::o;59646:124::-;59720:21;59735:5;59720:21;:::i;:::-;59713:5;59710:32;59700:60;;59756:1;59753;59746:12;59700:60;59646:124;:::o;59780:130::-;59857:24;59875:5;59857:24;:::i;:::-;59850:5;59847:35;59837:63;;59896:1;59893;59886:12;59837:63;59780:130;:::o;59920:128::-;59996:23;60013:5;59996:23;:::i;:::-;59989:5;59986:34;59976:62;;60034:1;60031;60024:12;59976:62;59920:128;:::o;60058:130::-;60135:24;60153:5;60135:24;:::i;:::-;60128:5;60125:35;60115:63;;60174:1;60171;60164:12;60115:63;60058:130;:::o
Swarm Source
ipfs://465c7086121b0624af69c7e60dcdce2e6a94095e48546279aa0ad387732a6af2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.