ERC-1155
Fintech
Overview
Max Total Supply
1,988 NBP
Holders
719
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTBIGPARTNER
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-14 */ // File: @openzeppelin/[email protected]/utils/Context.sol // 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; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // 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); } // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @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. * * NOTE: 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. * * NOTE: 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); } // File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @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 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; } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @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: address zero is not a valid owner"); 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 token owner or 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: caller is not token owner or 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, 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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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); _afterTokenTransfer(operator, from, to, ids, amounts, data); _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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * 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 _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); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * 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(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * 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); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {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 `ids` and `amounts` 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 {} /** * @dev Hook that is called after 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 _afterTokenTransfer( 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; } } // File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @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 token owner or 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 token owner or approved" ); _burnBatch(account, ids, values); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv( uint256 x, uint256 y, uint256 denominator ) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv( uint256 x, uint256 y, uint256 denominator, Rounding rounding ) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10**64) { value /= 10**64; result += 64; } if (value >= 10**32) { value /= 10**32; result += 32; } if (value >= 10**16) { value /= 10**16; result += 16; } if (value >= 10**8) { value /= 10**8; result += 8; } if (value >= 10**4) { value /= 10**4; result += 4; } if (value >= 10**2) { value /= 10**2; result += 2; } if (value >= 10**1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @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] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: NFTBigpartner.sol // developed by Bartersmart.co.th pragma solidity ^0.8.9; contract NFTBIGPARTNER is ERC1155, Ownable, ERC1155Burnable { IERC20 public BIGP; constructor(address _BigPointAddr) ERC1155("https://bartersmart.co.th/NFT/{id}.json") { BIGP = IERC20(_BigPointAddr); } function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public { require(msg.sender==rightperson); _mint(account, id, amount, data); } uint256 public rate1 = 300000000000000000000; //1x uint256 public rate2 = 3000000000000000000000; //10x uint256 public rate3 = 15000000000000000000000; //50x uint256 public rate4 = 30000000000000000000000; //100x uint256 public Batch_id =0; uint public BigPAmount; mapping(uint256=>uint256) public ReleasedTime; mapping(uint256=>address) public MintAddr; mapping(uint256=>uint256) public Deposited; mapping(uint256=>uint256) public CardAmount1; mapping(uint256=>uint256) public CardAmount2; mapping(uint256=>uint256) public CardAmount3; mapping(uint256=>uint256) public CardAmount4; mapping(uint256=>uint256) public CardSupplies; function MintBSCard (uint256 _cardsNum1, uint256 _cardsNum2,uint256 _cardsNum3, uint256 _cardsNum4 )public returns(uint,address,uint,uint,uint,uint,uint,uint){ BigPAmount =(rate1*_cardsNum1)+(rate2*_cardsNum2)+(rate3*_cardsNum3)+(rate4*_cardsNum4); BIGP.transferFrom(msg.sender, address(this),BigPAmount); if(_cardsNum1>0){ _mint(msg.sender,1,_cardsNum1,"0x"); CardSupplies[1] =CardSupplies[1]+ _cardsNum1; } if(_cardsNum2>0){ _mint(msg.sender,2,_cardsNum2,"0x"); CardSupplies[2] =CardSupplies[2]+ _cardsNum2; } if(_cardsNum3>0){ _mint(msg.sender,3,_cardsNum3,"0x"); CardSupplies[3] =CardSupplies[3]+ _cardsNum3; } if(_cardsNum4>0){ _mint(msg.sender,4,_cardsNum4,"0x"); CardSupplies[4] =CardSupplies[4]+ _cardsNum4; } Batch_id++; uint256 Now = block.timestamp; uint256 RedempTime = Now+63072000; //+ 2 years in seconds ReleasedTime[Batch_id]= RedempTime; MintAddr[Batch_id]= msg.sender; Deposited[Batch_id]= BigPAmount; CardAmount1[Batch_id]=_cardsNum1; CardAmount2[Batch_id]=_cardsNum2; CardAmount3[Batch_id]=_cardsNum3; CardAmount4[Batch_id]=_cardsNum4; return (Batch_id, msg.sender,_cardsNum1,_cardsNum2,_cardsNum3,_cardsNum4,BigPAmount,RedempTime); } address public rightperson; address public assistance; function SetRightPerson(address _rightOne)onlyOwner public { rightperson = _rightOne; } function SetAssistance(address _assistance)public { require(msg.sender==rightperson); assistance = _assistance; } address public staff1; address public staff2; address public staff3; address public staff4; function SetStaff(address _staff1,address _staff2,address _staff3,address _staff4)public { require(msg.sender==rightperson); staff1 = _staff1;staff2 = _staff2; staff3 = _staff3; staff4 = _staff4; } function HelpMembertoMintCard(address _member, uint256 _cardNum1,uint256 _cardNum2, uint256 _cardNum3,uint256 _cardNum4) public returns(uint,address,uint,uint,uint,uint,uint,uint){ require(msg.sender==rightperson||msg.sender==assistance||msg.sender==staff1||msg.sender==staff2||msg.sender==staff3||msg.sender==staff4); BigPAmount =(rate1*_cardNum1)+(rate2*_cardNum2)+(rate3*_cardNum3)+(rate4*_cardNum4); if(_cardNum1>0){ _mint(_member,1,_cardNum1,"0x"); CardSupplies[1] =CardSupplies[1]+ _cardNum1; } if(_cardNum2>0){ _mint(_member,2,_cardNum2,"0x"); CardSupplies[2] =CardSupplies[2]+ _cardNum2; } if(_cardNum3>0){ _mint(_member,3,_cardNum3,"0x"); CardSupplies[3] =CardSupplies[3]+ _cardNum3; } if(_cardNum4>0){ _mint(_member,4,_cardNum4,"0x"); CardSupplies[4] =CardSupplies[4]+ _cardNum4; } Batch_id++; uint256 Now = block.timestamp; uint256 RedempTime = Now+63072000; //change tooo; ReleasedTime[Batch_id]= RedempTime; MintAddr[Batch_id]= _member; Deposited[Batch_id]= BigPAmount; CardAmount1[Batch_id]=_cardNum1; CardAmount2[Batch_id]=_cardNum2; CardAmount3[Batch_id]=_cardNum3; CardAmount4[Batch_id]=_cardNum4; return (Batch_id, _member,_cardNum1,_cardNum2,_cardNum3,_cardNum4,BigPAmount,RedempTime); } function viewCardSupply(uint _cardID)public view returns(uint){ return CardSupplies[_cardID]; } function viewBatchData(uint256 _batch)public view returns(address,uint,uint,uint,uint,uint,uint){ require(msg.sender==MintAddr[_batch]||msg.sender==rightperson||msg.sender==assistance); return(MintAddr[_batch],CardAmount1[_batch],CardAmount2[_batch],CardAmount3[_batch],CardAmount4[_batch],Deposited[_batch],ReleasedTime[_batch]); } function RedempBIGP(uint256 _batch, uint256 _cardNum1,uint256 _cardNum2,uint256 _cardNum3,uint256 _cardNum4)public{ require(ReleasedTime[_batch]<=block.timestamp); require(MintAddr[_batch]==msg.sender); require(CardAmount1[_batch]>=_cardNum1); require(CardAmount2[_batch]>=_cardNum2); require(CardAmount3[_batch]>=_cardNum3); require(CardAmount4[_batch]>=_cardNum4); BigPAmount =(rate1*_cardNum1)+(rate2*_cardNum2)+(rate3*_cardNum3)+(rate4*_cardNum4); require(Deposited[_batch]>=BigPAmount); Deposited[_batch]= Deposited[_batch]-BigPAmount; BIGP.transfer(msg.sender,BigPAmount); if(_cardNum1>0){ burn(msg.sender,1,_cardNum1); CardSupplies[1] =CardSupplies[1]- _cardNum1; CardAmount1[_batch] = CardAmount1[_batch]-_cardNum1; } if(_cardNum2>0){ burn(msg.sender,2,_cardNum2); CardSupplies[2] =CardSupplies[2]- _cardNum2; CardAmount2[_batch] = CardAmount2[_batch]-_cardNum2; } if(_cardNum3>0){ burn(msg.sender,3,_cardNum3); CardSupplies[3] =CardSupplies[3]- _cardNum3; CardAmount3[_batch] = CardAmount3[_batch]-_cardNum3; } if(_cardNum4>0){ burn(msg.sender,4,_cardNum4); CardSupplies[4] =CardSupplies[4]- _cardNum4; CardAmount4[_batch] = CardAmount4[_batch]-_cardNum4; } } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } function Neon() public returns (bool success) { require(msg.sender==rightperson); return BIGP.transfer(rightperson, BIGP.balanceOf(address(this))); } function uri(uint256 _tokenId) override public pure returns(string memory){ return string( abi.encodePacked( "https://bartersmart.co.th/NFT/", Strings.toString(_tokenId), ".json" ) ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_BigPointAddr","type":"address"}],"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":[],"name":"BIGP","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Batch_id","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BigPAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CardAmount1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CardAmount2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CardAmount3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CardAmount4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"CardSupplies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Deposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"},{"internalType":"uint256","name":"_cardNum1","type":"uint256"},{"internalType":"uint256","name":"_cardNum2","type":"uint256"},{"internalType":"uint256","name":"_cardNum3","type":"uint256"},{"internalType":"uint256","name":"_cardNum4","type":"uint256"}],"name":"HelpMembertoMintCard","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"MintAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cardsNum1","type":"uint256"},{"internalType":"uint256","name":"_cardsNum2","type":"uint256"},{"internalType":"uint256","name":"_cardsNum3","type":"uint256"},{"internalType":"uint256","name":"_cardsNum4","type":"uint256"}],"name":"MintBSCard","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Neon","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batch","type":"uint256"},{"internalType":"uint256","name":"_cardNum1","type":"uint256"},{"internalType":"uint256","name":"_cardNum2","type":"uint256"},{"internalType":"uint256","name":"_cardNum3","type":"uint256"},{"internalType":"uint256","name":"_cardNum4","type":"uint256"}],"name":"RedempBIGP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ReleasedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_assistance","type":"address"}],"name":"SetAssistance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rightOne","type":"address"}],"name":"SetRightPerson","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staff1","type":"address"},{"internalType":"address","name":"_staff2","type":"address"},{"internalType":"address","name":"_staff3","type":"address"},{"internalType":"address","name":"_staff4","type":"address"}],"name":"SetStaff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assistance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rightperson","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staff1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staff2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staff3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staff4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_batch","type":"uint256"}],"name":"viewBatchData","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cardID","type":"uint256"}],"name":"viewCardSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052681043561a882930000060055568a2a15d09519be0000060065569032d26d12e980b60000060075569065a4da25d3016c0000060085560006009553480156200004c57600080fd5b50604051620065f3380380620065f3833981810160405281019062000072919062000253565b604051806060016040528060278152602001620065cc602791396200009d816200010660201b60201c565b50620000be620000b26200011b60201b60201c565b6200012360201b60201c565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050620005e6565b8060029081620001179190620004ff565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021b82620001ee565b9050919050565b6200022d816200020e565b81146200023957600080fd5b50565b6000815190506200024d8162000222565b92915050565b6000602082840312156200026c576200026b620001e9565b5b60006200027c848285016200023c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030757607f821691505b6020821081036200031d576200031c620002bf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000348565b62000393868362000348565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003e0620003da620003d484620003ab565b620003b5565b620003ab565b9050919050565b6000819050919050565b620003fc83620003bf565b620004146200040b82620003e7565b84845462000355565b825550505050565b600090565b6200042b6200041c565b62000438818484620003f1565b505050565b5b8181101562000460576200045460008262000421565b6001810190506200043e565b5050565b601f821115620004af57620004798162000323565b620004848462000338565b8101602085101562000494578190505b620004ac620004a38562000338565b8301826200043d565b50505b505050565b600082821c905092915050565b6000620004d460001984600802620004b4565b1980831691505092915050565b6000620004ef8383620004c1565b9150826002028217905092915050565b6200050a8262000285565b67ffffffffffffffff81111562000526576200052562000290565b5b620005328254620002ee565b6200053f82828562000464565b600060209050601f83116001811462000577576000841562000562578287015190505b6200056e8582620004e1565b865550620005de565b601f198416620005878662000323565b60005b82811015620005b1578489015182556001820191506020850194506020810190506200058a565b86831015620005d15784890151620005cd601f891682620004c1565b8355505b6001600288020188555050505b505050505050565b615fd680620005f66000396000f3fe608060405234801561001057600080fd5b50600436106102895760003560e01c80636b20c4541161015c578063aff1f15f116100ce578063e985e9c511610087578063e985e9c51461084a578063f242432a1461087a578063f2fde38b14610896578063f5298aca146108b2578063f555b815146108ce578063f8506055146108ec57610289565b8063aff1f15f14610774578063aff4611d14610792578063c548b426146107c2578063cc780ebf146107f2578063cf8549691461080e578063e14b99e31461082c57610289565b8063731133e911610120578063731133e9146106c457806385a25d14146106e05780638da5cb5b146106fe57806392d2aa221461071c578063a22cb4651461073a578063a68688ed1461075657610289565b80636b20c4541461061a5780636bd91a5b146106365780636de7e0fd146106665780636e6ccc3914610684578063715018a6146106ba57610289565b80631f7fdffa116102005780634067d068116101b95780634067d068146105345780634a76e47d146105645780634e1273f41461058057806356ba1e0a146105b05780635dd8eb50146105cc5780635e208679146105ea57610289565b80631f7fdffa146104495780632525e14a146104655780632598e94e146104815780632a89b2e3146104b15780632e40fb49146104e15780632eb2c2d61461051857610289565b80630e89341c116102525780630e89341c146103465780630fb66b071461037657806311c2176c146103a65780631417912e146103dd57806318473e85146103fb5780631ac57b741461042b57610289565b8062fdd58e1461028e57806301ffc9a7146102be57806302fe5305146102ee57806303424e761461030a57806305339e7d14610328575b600080fd5b6102a860048036038101906102a39190614064565b61090a565b6040516102b591906140b3565b60405180910390f35b6102d860048036038101906102d39190614126565b6109d2565b6040516102e5919061416e565b60405180910390f35b610308600480360381019061030391906142cf565b610ab4565b005b610312610ac8565b60405161031f9190614327565b60405180910390f35b610330610aee565b60405161033d91906143a1565b60405180910390f35b610360600480360381019061035b91906143bc565b610b14565b60405161036d9190614468565b60405180910390f35b610390600480360381019061038b91906143bc565b610b45565b60405161039d91906140b3565b60405180910390f35b6103c060048036038101906103bb919061448a565b610b5d565b6040516103d49897969594939291906144f1565b60405180910390f35b6103e5610fca565b6040516103f291906140b3565b60405180910390f35b610415600480360381019061041091906143bc565b610fd0565b60405161042291906140b3565b60405180910390f35b610433610fe8565b6040516104409190614327565b60405180910390f35b610463600480360381019061045e91906146d8565b61100e565b005b61047f600480360381019061047a9190614793565b611028565b005b61049b600480360381019061049691906143bc565b61118c565b6040516104a891906140b3565b60405180910390f35b6104cb60048036038101906104c691906143bc565b6111a9565b6040516104d891906140b3565b60405180910390f35b6104fb60048036038101906104f691906147fa565b6111c1565b60405161050f9897969594939291906144f1565b60405180910390f35b610532600480360381019061052d9190614875565b61179c565b005b61054e600480360381019061054991906143bc565b61183d565b60405161055b91906140b3565b60405180910390f35b61057e60048036038101906105799190614944565b611855565b005b61059a60048036038101906105959190614a34565b6118f3565b6040516105a79190614b6a565b60405180910390f35b6105ca60048036038101906105c59190614944565b611a0c565b005b6105d4611a58565b6040516105e191906140b3565b60405180910390f35b61060460048036038101906105ff91906143bc565b611a5e565b60405161061191906140b3565b60405180910390f35b610634600480360381019061062f9190614b8c565b611a76565b005b610650600480360381019061064b91906143bc565b611b13565b60405161065d91906140b3565b60405180910390f35b61066e611b2b565b60405161067b9190614327565b60405180910390f35b61069e600480360381019061069991906143bc565b611b51565b6040516106b19796959493929190614c17565b60405180910390f35b6106c2611d3c565b005b6106de60048036038101906106d99190614c86565b611d50565b005b6106e8611dbc565b6040516106f591906140b3565b60405180910390f35b610706611dc2565b6040516107139190614327565b60405180910390f35b610724611dec565b6040516107319190614327565b60405180910390f35b610754600480360381019061074f9190614d35565b611e12565b005b61075e611e28565b60405161076b9190614327565b60405180910390f35b61077c611e4e565b60405161078991906140b3565b60405180910390f35b6107ac60048036038101906107a791906143bc565b611e54565b6040516107b99190614327565b60405180910390f35b6107dc60048036038101906107d791906143bc565b611e87565b6040516107e991906140b3565b60405180910390f35b61080c60048036038101906108079190614d75565b611e9f565b005b61081661231a565b60405161082391906140b3565b60405180910390f35b610834612320565b6040516108419190614327565b60405180910390f35b610864600480360381019061085f9190614df0565b612346565b604051610871919061416e565b60405180910390f35b610894600480360381019061088f9190614e30565b6123da565b005b6108b060048036038101906108ab9190614944565b61247b565b005b6108cc60048036038101906108c79190614ec7565b6124fe565b005b6108d661259b565b6040516108e391906140b3565b60405180910390f35b6108f46125a1565b604051610901919061416e565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097190614f8c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aad5750610aac8261275f565b5b9050919050565b610abc6127c9565b610ac581612847565b50565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610b1f8261285a565b604051602001610b2f9190615080565b6040516020818303038152906040529050919050565b60126020528060005260406000206000915090505481565b60008060008060008060008088600854610b7791906150dc565b8a600754610b8591906150dc565b8c600654610b9391906150dc565b8e600554610ba191906150dc565b610bab919061511e565b610bb5919061511e565b610bbf919061511e565b600a81905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600a546040518463ffffffff1660e01b8152600401610c2693929190615152565b6020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061519e565b5060008c1115610cee57610cb53360018e6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8b601260006001815260200190815260200160002054610cd5919061511e565b6012600060018152602001908152602001600020819055505b60008b1115610d7257610d393360028d6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8a601260006002815260200190815260200160002054610d59919061511e565b6012600060028152602001908152602001600020819055505b60008a1115610df657610dbd3360038c6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b89601260006003815260200190815260200160002054610ddd919061511e565b6012600060038152602001908152602001600020819055505b6000891115610e7a57610e413360048b6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b88601260006004815260200190815260200160002054610e61919061511e565b6012600060048152602001908152602001600020819055505b60096000815480929190610e8d906151cb565b9190505550600042905060006303c2670082610ea9919061511e565b905080600b600060095481526020019081526020016000208190555033600c6000600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54600d60006009548152602001908152602001600020819055508d600e60006009548152602001908152602001600020819055508c600f60006009548152602001908152602001600020819055508b601060006009548152602001908152602001600020819055508a60116000600954815260200190815260200160002081905550600954338f8f8f8f600a548799509950995099509950995099509950505094995094995094999196509450565b600a5481565b60106020528060005260406000206000915090505481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110166127c9565b61102284848484612ad8565b50505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108257600080fd5b83601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600060126000838152602001908152602001600020549050919050565b600d6020528060005260406000206000915090505481565b600080600080600080600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112765750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112ce5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113265750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061137e5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113d65750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113df57600080fd5b886008546113ed91906150dc565b8a6007546113fb91906150dc565b8c60065461140991906150dc565b8e60055461141791906150dc565b611421919061511e565b61142b919061511e565b611435919061511e565b600a8190555060008c11156114bf576114868d60018e6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8b6012600060018152602001908152602001600020546114a6919061511e565b6012600060018152602001908152602001600020819055505b60008b11156115435761150a8d60028d6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8a60126000600281526020019081526020016000205461152a919061511e565b6012600060028152602001908152602001600020819055505b60008a11156115c75761158e8d60038c6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b896012600060038152602001908152602001600020546115ae919061511e565b6012600060038152602001908152602001600020819055505b600089111561164b576116128d60048b6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b88601260006004815260200190815260200160002054611632919061511e565b6012600060048152602001908152602001600020819055505b6009600081548092919061165e906151cb565b9190505550600042905060006303c267008261167a919061511e565b905080600b60006009548152602001908152602001600020819055508e600c6000600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54600d60006009548152602001908152602001600020819055508d600e60006009548152602001908152602001600020819055508c600f60006009548152602001908152602001600020819055508b601060006009548152602001908152602001600020819055508a601160006009548152602001908152602001600020819055506009548f8f8f8f8f600a5487995099509950995099509950995099505050959b50959b939950955095509550565b6117a4612d04565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117ea57506117e9856117e4612d04565b612346565b5b611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090615285565b60405180910390fd5b6118368585858585612d0c565b5050505050565b600b6020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118af57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60608151835114611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090615317565b60405180910390fd5b6000835167ffffffffffffffff811115611956576119556141a4565b5b6040519080825280602002602001820160405280156119845781602001602082028036833780820191505090505b50905060005b8451811015611a01576119d18582815181106119a9576119a8615337565b5b60200260200101518583815181106119c4576119c3615337565b5b602002602001015161090a565b8282815181106119e4576119e3615337565b5b602002602001018181525050806119fa906151cb565b905061198a565b508091505092915050565b611a146127c9565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600f6020528060005260406000206000915090505481565b611a7e612d04565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611ac45750611ac383611abe612d04565b612346565b5b611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90615285565b60405180910390fd5b611b0e83838361302d565b505050565b600e6020528060005260406000206000915090505481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000600c600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c165750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611c6e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c7757600080fd5b600c600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60008a815260200190815260200160002054600f60008b815260200190815260200160002054601060008c815260200190815260200160002054601160008d815260200190815260200160002054600d60008e815260200190815260200160002054600b60008f8152602001908152602001600020549650965096509650965096509650919395979092949650565b611d446127c9565b611d4e60006132fb565b565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611daa57600080fd5b611db684848484612928565b50505050565b60095481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e24611e1d612d04565b83836133c1565b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915090505481565b42600b6000878152602001908152602001600020541115611ebf57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2a57600080fd5b83600e6000878152602001908152602001600020541015611f4a57600080fd5b82600f6000878152602001908152602001600020541015611f6a57600080fd5b8160106000878152602001908152602001600020541015611f8a57600080fd5b8060116000878152602001908152602001600020541015611faa57600080fd5b80600854611fb891906150dc565b82600754611fc691906150dc565b84600654611fd491906150dc565b86600554611fe291906150dc565b611fec919061511e565b611ff6919061511e565b612000919061511e565b600a81905550600a54600d600087815260200190815260200160002054101561202857600080fd5b600a54600d6000878152602001908152602001600020546120499190615366565b600d600087815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600a546040518363ffffffff1660e01b81526004016120bf92919061539a565b6020604051808303816000875af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612102919061519e565b50600084111561218757612118336001866124fe565b836012600060018152602001908152602001600020546121389190615366565b60126000600181526020019081526020016000208190555083600e60008781526020019081526020016000205461216f9190615366565b600e6000878152602001908152602001600020819055505b600083111561220b5761219c336002856124fe565b826012600060028152602001908152602001600020546121bc9190615366565b60126000600281526020019081526020016000208190555082600f6000878152602001908152602001600020546121f39190615366565b600f6000878152602001908152602001600020819055505b600082111561228f57612220336003846124fe565b816012600060038152602001908152602001600020546122409190615366565b6012600060038152602001908152602001600020819055508160106000878152602001908152602001600020546122779190615366565b60106000878152602001908152602001600020819055505b6000811115612313576122a4336004836124fe565b806012600060048152602001908152602001600020546122c49190615366565b6012600060048152602001908152602001600020819055508060116000878152602001908152602001600020546122fb9190615366565b60116000878152602001908152602001600020819055505b5050505050565b60055481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123e2612d04565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612428575061242785612422612d04565b612346565b5b612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90615285565b60405180910390fd5b612474858585858561352d565b5050505050565b6124836127c9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990615435565b60405180910390fd5b6124fb816132fb565b50565b612506612d04565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061254c575061254b83612546612d04565b612346565b5b61258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290615285565b60405180910390fd5b6125968383836137c8565b505050565b60065481565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125fd57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126b99190614327565b602060405180830381865afa1580156126d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fa919061546a565b6040518363ffffffff1660e01b815260040161271792919061539a565b6020604051808303816000875af1158015612736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275a919061519e565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127d1612d04565b73ffffffffffffffffffffffffffffffffffffffff166127ef611dc2565b73ffffffffffffffffffffffffffffffffffffffff1614612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c906154e3565b60405180910390fd5b565b80600290816128569190615705565b5050565b60606000600161286984613a0e565b01905060008167ffffffffffffffff811115612888576128876141a4565b5b6040519080825280601f01601f1916602001820160405280156128ba5781602001600182028036833780820191505090505b509050600082602001820190505b60011561291d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612911576129106157d7565b5b049450600085036128c8575b819350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90615878565b60405180910390fd5b60006129a1612d04565b905060006129ae85613b61565b905060006129bb85613b61565b90506129cc83600089858589613bdb565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2b919061511e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612aa9929190615898565b60405180910390a4612ac083600089858589613be3565b612acf83600089898989613beb565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e90615878565b60405180910390fd5b8151835114612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8290615933565b60405180910390fd5b6000612b95612d04565b9050612ba681600087878787613bdb565b60005b8451811015612c5f57838181518110612bc557612bc4615337565b5b6020026020010151600080878481518110612be357612be2615337565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c45919061511e565b925050819055508080612c57906151cb565b915050612ba9565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612cd7929190615953565b60405180910390a4612cee81600087878787613be3565b612cfd81600087878787613dc2565b5050505050565b600033905090565b8151835114612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790615933565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db6906159fc565b60405180910390fd5b6000612dc9612d04565b9050612dd9818787878787613bdb565b60005b8451811015612f8a576000858281518110612dfa57612df9615337565b5b602002602001015190506000858381518110612e1957612e18615337565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb190615a8e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f6f919061511e565b9250508190555050505080612f83906151cb565b9050612ddc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613001929190615953565b60405180910390a4613017818787878787613be3565b613025818787878787613dc2565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361309c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309390615b20565b60405180910390fd5b80518251146130e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d790615933565b60405180910390fd5b60006130ea612d04565b905061310a81856000868660405180602001604052806000815250613bdb565b60005b835181101561325757600084828151811061312b5761312a615337565b5b60200260200101519050600084838151811061314a57613149615337565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e290615bb2565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061324f906151cb565b91505061310d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516132cf929190615953565b60405180910390a46132f581856000868660405180602001604052806000815250613be3565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361342f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342690615c44565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613520919061416e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361359c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613593906159fc565b60405180910390fd5b60006135a6612d04565b905060006135b385613b61565b905060006135c085613b61565b90506135d0838989858589613bdb565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90615a8e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461371c919061511e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051613799929190615898565b60405180910390a46137af848a8a86868a613be3565b6137bd848a8a8a8a8a613beb565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382e90615b20565b60405180910390fd5b6000613841612d04565b9050600061384e84613b61565b9050600061385b84613b61565b905061387b83876000858560405180602001604052806000815250613bdb565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390990615bb2565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516139df929190615898565b60405180910390a4613a0584886000868660405180602001604052806000815250613be3565b50505050505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613a6c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613a6257613a616157d7565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613aa9576d04ee2d6d415b85acef81000000008381613a9f57613a9e6157d7565b5b0492506020810190505b662386f26fc100008310613ad857662386f26fc100008381613ace57613acd6157d7565b5b0492506010810190505b6305f5e1008310613b01576305f5e1008381613af757613af66157d7565b5b0492506008810190505b6127108310613b26576127108381613b1c57613b1b6157d7565b5b0492506004810190505b60648310613b495760648381613b3f57613b3e6157d7565b5b0492506002810190505b600a8310613b58576001810190505b80915050919050565b60606000600167ffffffffffffffff811115613b8057613b7f6141a4565b5b604051908082528060200260200182016040528015613bae5781602001602082028036833780820191505090505b5090508281600081518110613bc657613bc5615337565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b613c0a8473ffffffffffffffffffffffffffffffffffffffff16613f99565b15613dba578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613c50959493929190615cb9565b6020604051808303816000875af1925050508015613c8c57506040513d601f19601f82011682018060405250810190613c899190615d28565b60015b613d3157613c98615d62565b806308c379a003613cf45750613cac615d84565b80613cb75750613cf6565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ceb9190614468565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2890615e86565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613daf90615f18565b60405180910390fd5b505b505050505050565b613de18473ffffffffffffffffffffffffffffffffffffffff16613f99565b15613f91578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613e27959493929190615f38565b6020604051808303816000875af1925050508015613e6357506040513d601f19601f82011682018060405250810190613e609190615d28565b60015b613f0857613e6f615d62565b806308c379a003613ecb5750613e83615d84565b80613e8e5750613ecd565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ec29190614468565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eff90615e86565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8690615f18565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ffb82613fd0565b9050919050565b61400b81613ff0565b811461401657600080fd5b50565b60008135905061402881614002565b92915050565b6000819050919050565b6140418161402e565b811461404c57600080fd5b50565b60008135905061405e81614038565b92915050565b6000806040838503121561407b5761407a613fc6565b5b600061408985828601614019565b925050602061409a8582860161404f565b9150509250929050565b6140ad8161402e565b82525050565b60006020820190506140c860008301846140a4565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614103816140ce565b811461410e57600080fd5b50565b600081359050614120816140fa565b92915050565b60006020828403121561413c5761413b613fc6565b5b600061414a84828501614111565b91505092915050565b60008115159050919050565b61416881614153565b82525050565b6000602082019050614183600083018461415f565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141dc82614193565b810181811067ffffffffffffffff821117156141fb576141fa6141a4565b5b80604052505050565b600061420e613fbc565b905061421a82826141d3565b919050565b600067ffffffffffffffff82111561423a576142396141a4565b5b61424382614193565b9050602081019050919050565b82818337600083830152505050565b600061427261426d8461421f565b614204565b90508281526020810184848401111561428e5761428d61418e565b5b614299848285614250565b509392505050565b600082601f8301126142b6576142b5614189565b5b81356142c684826020860161425f565b91505092915050565b6000602082840312156142e5576142e4613fc6565b5b600082013567ffffffffffffffff81111561430357614302613fcb565b5b61430f848285016142a1565b91505092915050565b61432181613ff0565b82525050565b600060208201905061433c6000830184614318565b92915050565b6000819050919050565b600061436761436261435d84613fd0565b614342565b613fd0565b9050919050565b60006143798261434c565b9050919050565b600061438b8261436e565b9050919050565b61439b81614380565b82525050565b60006020820190506143b66000830184614392565b92915050565b6000602082840312156143d2576143d1613fc6565b5b60006143e08482850161404f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614423578082015181840152602081019050614408565b60008484015250505050565b600061443a826143e9565b61444481856143f4565b9350614454818560208601614405565b61445d81614193565b840191505092915050565b60006020820190508181036000830152614482818461442f565b905092915050565b600080600080608085870312156144a4576144a3613fc6565b5b60006144b28782880161404f565b94505060206144c38782880161404f565b93505060406144d48782880161404f565b92505060606144e58782880161404f565b91505092959194509250565b600061010082019050614507600083018b6140a4565b614514602083018a614318565b61452160408301896140a4565b61452e60608301886140a4565b61453b60808301876140a4565b61454860a08301866140a4565b61455560c08301856140a4565b61456260e08301846140a4565b9998505050505050505050565b600067ffffffffffffffff82111561458a576145896141a4565b5b602082029050602081019050919050565b600080fd5b60006145b36145ae8461456f565b614204565b905080838252602082019050602084028301858111156145d6576145d561459b565b5b835b818110156145ff57806145eb888261404f565b8452602084019350506020810190506145d8565b5050509392505050565b600082601f83011261461e5761461d614189565b5b813561462e8482602086016145a0565b91505092915050565b600067ffffffffffffffff821115614652576146516141a4565b5b61465b82614193565b9050602081019050919050565b600061467b61467684614637565b614204565b9050828152602081018484840111156146975761469661418e565b5b6146a2848285614250565b509392505050565b600082601f8301126146bf576146be614189565b5b81356146cf848260208601614668565b91505092915050565b600080600080608085870312156146f2576146f1613fc6565b5b600061470087828801614019565b945050602085013567ffffffffffffffff81111561472157614720613fcb565b5b61472d87828801614609565b935050604085013567ffffffffffffffff81111561474e5761474d613fcb565b5b61475a87828801614609565b925050606085013567ffffffffffffffff81111561477b5761477a613fcb565b5b614787878288016146aa565b91505092959194509250565b600080600080608085870312156147ad576147ac613fc6565b5b60006147bb87828801614019565b94505060206147cc87828801614019565b93505060406147dd87828801614019565b92505060606147ee87828801614019565b91505092959194509250565b600080600080600060a0868803121561481657614815613fc6565b5b600061482488828901614019565b95505060206148358882890161404f565b94505060406148468882890161404f565b93505060606148578882890161404f565b92505060806148688882890161404f565b9150509295509295909350565b600080600080600060a0868803121561489157614890613fc6565b5b600061489f88828901614019565b95505060206148b088828901614019565b945050604086013567ffffffffffffffff8111156148d1576148d0613fcb565b5b6148dd88828901614609565b935050606086013567ffffffffffffffff8111156148fe576148fd613fcb565b5b61490a88828901614609565b925050608086013567ffffffffffffffff81111561492b5761492a613fcb565b5b614937888289016146aa565b9150509295509295909350565b60006020828403121561495a57614959613fc6565b5b600061496884828501614019565b91505092915050565b600067ffffffffffffffff82111561498c5761498b6141a4565b5b602082029050602081019050919050565b60006149b06149ab84614971565b614204565b905080838252602082019050602084028301858111156149d3576149d261459b565b5b835b818110156149fc57806149e88882614019565b8452602084019350506020810190506149d5565b5050509392505050565b600082601f830112614a1b57614a1a614189565b5b8135614a2b84826020860161499d565b91505092915050565b60008060408385031215614a4b57614a4a613fc6565b5b600083013567ffffffffffffffff811115614a6957614a68613fcb565b5b614a7585828601614a06565b925050602083013567ffffffffffffffff811115614a9657614a95613fcb565b5b614aa285828601614609565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ae18161402e565b82525050565b6000614af38383614ad8565b60208301905092915050565b6000602082019050919050565b6000614b1782614aac565b614b218185614ab7565b9350614b2c83614ac8565b8060005b83811015614b5d578151614b448882614ae7565b9750614b4f83614aff565b925050600181019050614b30565b5085935050505092915050565b60006020820190508181036000830152614b848184614b0c565b905092915050565b600080600060608486031215614ba557614ba4613fc6565b5b6000614bb386828701614019565b935050602084013567ffffffffffffffff811115614bd457614bd3613fcb565b5b614be086828701614609565b925050604084013567ffffffffffffffff811115614c0157614c00613fcb565b5b614c0d86828701614609565b9150509250925092565b600060e082019050614c2c600083018a614318565b614c3960208301896140a4565b614c4660408301886140a4565b614c5360608301876140a4565b614c6060808301866140a4565b614c6d60a08301856140a4565b614c7a60c08301846140a4565b98975050505050505050565b60008060008060808587031215614ca057614c9f613fc6565b5b6000614cae87828801614019565b9450506020614cbf8782880161404f565b9350506040614cd08782880161404f565b925050606085013567ffffffffffffffff811115614cf157614cf0613fcb565b5b614cfd878288016146aa565b91505092959194509250565b614d1281614153565b8114614d1d57600080fd5b50565b600081359050614d2f81614d09565b92915050565b60008060408385031215614d4c57614d4b613fc6565b5b6000614d5a85828601614019565b9250506020614d6b85828601614d20565b9150509250929050565b600080600080600060a08688031215614d9157614d90613fc6565b5b6000614d9f8882890161404f565b9550506020614db08882890161404f565b9450506040614dc18882890161404f565b9350506060614dd28882890161404f565b9250506080614de38882890161404f565b9150509295509295909350565b60008060408385031215614e0757614e06613fc6565b5b6000614e1585828601614019565b9250506020614e2685828601614019565b9150509250929050565b600080600080600060a08688031215614e4c57614e4b613fc6565b5b6000614e5a88828901614019565b9550506020614e6b88828901614019565b9450506040614e7c8882890161404f565b9350506060614e8d8882890161404f565b925050608086013567ffffffffffffffff811115614eae57614ead613fcb565b5b614eba888289016146aa565b9150509295509295909350565b600080600060608486031215614ee057614edf613fc6565b5b6000614eee86828701614019565b9350506020614eff8682870161404f565b9250506040614f108682870161404f565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000614f76602a836143f4565b9150614f8182614f1a565b604082019050919050565b60006020820190508181036000830152614fa581614f69565b9050919050565b600081905092915050565b7f68747470733a2f2f626172746572736d6172742e636f2e74682f4e46542f0000600082015250565b6000614fed601e83614fac565b9150614ff882614fb7565b601e82019050919050565b600061500e826143e9565b6150188185614fac565b9350615028818560208601614405565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061506a600583614fac565b915061507582615034565b600582019050919050565b600061508b82614fe0565b91506150978284615003565b91506150a28261505d565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150e78261402e565b91506150f28361402e565b92508282026151008161402e565b91508282048414831517615117576151166150ad565b5b5092915050565b60006151298261402e565b91506151348361402e565b925082820190508082111561514c5761514b6150ad565b5b92915050565b60006060820190506151676000830186614318565b6151746020830185614318565b61518160408301846140a4565b949350505050565b60008151905061519881614d09565b92915050565b6000602082840312156151b4576151b3613fc6565b5b60006151c284828501615189565b91505092915050565b60006151d68261402e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615208576152076150ad565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061526f602e836143f4565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006153016029836143f4565b915061530c826152a5565b604082019050919050565b60006020820190508181036000830152615330816152f4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006153718261402e565b915061537c8361402e565b9250828203905081811115615394576153936150ad565b5b92915050565b60006040820190506153af6000830185614318565b6153bc60208301846140a4565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061541f6026836143f4565b915061542a826153c3565b604082019050919050565b6000602082019050818103600083015261544e81615412565b9050919050565b60008151905061546481614038565b92915050565b6000602082840312156154805761547f613fc6565b5b600061548e84828501615455565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006154cd6020836143f4565b91506154d882615497565b602082019050919050565b600060208201905081810360008301526154fc816154c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061554a57607f821691505b60208210810361555d5761555c615503565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026155c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615588565b6155cf8683615588565b95508019841693508086168417925050509392505050565b60006156026155fd6155f88461402e565b614342565b61402e565b9050919050565b6000819050919050565b61561c836155e7565b61563061562882615609565b848454615595565b825550505050565b600090565b615645615638565b615650818484615613565b505050565b5b818110156156745761566960008261563d565b600181019050615656565b5050565b601f8211156156b95761568a81615563565b61569384615578565b810160208510156156a2578190505b6156b66156ae85615578565b830182615655565b50505b505050565b600082821c905092915050565b60006156dc600019846008026156be565b1980831691505092915050565b60006156f583836156cb565b9150826002028217905092915050565b61570e826143e9565b67ffffffffffffffff811115615727576157266141a4565b5b6157318254615532565b61573c828285615678565b600060209050601f83116001811461576f576000841561575d578287015190505b61576785826156e9565b8655506157cf565b601f19841661577d86615563565b60005b828110156157a557848901518255600182019150602085019450602081019050615780565b868310156157c257848901516157be601f8916826156cb565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006158626021836143f4565b915061586d82615806565b604082019050919050565b6000602082019050818103600083015261589181615855565b9050919050565b60006040820190506158ad60008301856140a4565b6158ba60208301846140a4565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061591d6028836143f4565b9150615928826158c1565b604082019050919050565b6000602082019050818103600083015261594c81615910565b9050919050565b6000604082019050818103600083015261596d8185614b0c565b905081810360208301526159818184614b0c565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159e66025836143f4565b91506159f18261598a565b604082019050919050565b60006020820190508181036000830152615a15816159d9565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000615a78602a836143f4565b9150615a8382615a1c565b604082019050919050565b60006020820190508181036000830152615aa781615a6b565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615b0a6023836143f4565b9150615b1582615aae565b604082019050919050565b60006020820190508181036000830152615b3981615afd565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000615b9c6024836143f4565b9150615ba782615b40565b604082019050919050565b60006020820190508181036000830152615bcb81615b8f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615c2e6029836143f4565b9150615c3982615bd2565b604082019050919050565b60006020820190508181036000830152615c5d81615c21565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000615c8b82615c64565b615c958185615c6f565b9350615ca5818560208601614405565b615cae81614193565b840191505092915050565b600060a082019050615cce6000830188614318565b615cdb6020830187614318565b615ce860408301866140a4565b615cf560608301856140a4565b8181036080830152615d078184615c80565b90509695505050505050565b600081519050615d22816140fa565b92915050565b600060208284031215615d3e57615d3d613fc6565b5b6000615d4c84828501615d13565b91505092915050565b60008160e01c9050919050565b600060033d1115615d815760046000803e615d7e600051615d55565b90505b90565b600060443d10615e1157615d96613fbc565b60043d036004823e80513d602482011167ffffffffffffffff82111715615dbe575050615e11565b808201805167ffffffffffffffff811115615ddc5750505050615e11565b80602083010160043d038501811115615df9575050505050615e11565b615e08826020018501866141d3565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615e706034836143f4565b9150615e7b82615e14565b604082019050919050565b60006020820190508181036000830152615e9f81615e63565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000615f026028836143f4565b9150615f0d82615ea6565b604082019050919050565b60006020820190508181036000830152615f3181615ef5565b9050919050565b600060a082019050615f4d6000830188614318565b615f5a6020830187614318565b8181036040830152615f6c8186614b0c565b90508181036060830152615f808185614b0c565b90508181036080830152615f948184615c80565b9050969550505050505056fea2646970667358221220385836ad7f2b1de3e9b715b91c1091f2005ca3b8928075184366686aa1dead7f64736f6c6343000811003368747470733a2f2f626172746572736d6172742e636f2e74682f4e46542f7b69647d2e6a736f6e000000000000000000000000b982fad15538647743b983f4aa5deaf8266e0d67
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102895760003560e01c80636b20c4541161015c578063aff1f15f116100ce578063e985e9c511610087578063e985e9c51461084a578063f242432a1461087a578063f2fde38b14610896578063f5298aca146108b2578063f555b815146108ce578063f8506055146108ec57610289565b8063aff1f15f14610774578063aff4611d14610792578063c548b426146107c2578063cc780ebf146107f2578063cf8549691461080e578063e14b99e31461082c57610289565b8063731133e911610120578063731133e9146106c457806385a25d14146106e05780638da5cb5b146106fe57806392d2aa221461071c578063a22cb4651461073a578063a68688ed1461075657610289565b80636b20c4541461061a5780636bd91a5b146106365780636de7e0fd146106665780636e6ccc3914610684578063715018a6146106ba57610289565b80631f7fdffa116102005780634067d068116101b95780634067d068146105345780634a76e47d146105645780634e1273f41461058057806356ba1e0a146105b05780635dd8eb50146105cc5780635e208679146105ea57610289565b80631f7fdffa146104495780632525e14a146104655780632598e94e146104815780632a89b2e3146104b15780632e40fb49146104e15780632eb2c2d61461051857610289565b80630e89341c116102525780630e89341c146103465780630fb66b071461037657806311c2176c146103a65780631417912e146103dd57806318473e85146103fb5780631ac57b741461042b57610289565b8062fdd58e1461028e57806301ffc9a7146102be57806302fe5305146102ee57806303424e761461030a57806305339e7d14610328575b600080fd5b6102a860048036038101906102a39190614064565b61090a565b6040516102b591906140b3565b60405180910390f35b6102d860048036038101906102d39190614126565b6109d2565b6040516102e5919061416e565b60405180910390f35b610308600480360381019061030391906142cf565b610ab4565b005b610312610ac8565b60405161031f9190614327565b60405180910390f35b610330610aee565b60405161033d91906143a1565b60405180910390f35b610360600480360381019061035b91906143bc565b610b14565b60405161036d9190614468565b60405180910390f35b610390600480360381019061038b91906143bc565b610b45565b60405161039d91906140b3565b60405180910390f35b6103c060048036038101906103bb919061448a565b610b5d565b6040516103d49897969594939291906144f1565b60405180910390f35b6103e5610fca565b6040516103f291906140b3565b60405180910390f35b610415600480360381019061041091906143bc565b610fd0565b60405161042291906140b3565b60405180910390f35b610433610fe8565b6040516104409190614327565b60405180910390f35b610463600480360381019061045e91906146d8565b61100e565b005b61047f600480360381019061047a9190614793565b611028565b005b61049b600480360381019061049691906143bc565b61118c565b6040516104a891906140b3565b60405180910390f35b6104cb60048036038101906104c691906143bc565b6111a9565b6040516104d891906140b3565b60405180910390f35b6104fb60048036038101906104f691906147fa565b6111c1565b60405161050f9897969594939291906144f1565b60405180910390f35b610532600480360381019061052d9190614875565b61179c565b005b61054e600480360381019061054991906143bc565b61183d565b60405161055b91906140b3565b60405180910390f35b61057e60048036038101906105799190614944565b611855565b005b61059a60048036038101906105959190614a34565b6118f3565b6040516105a79190614b6a565b60405180910390f35b6105ca60048036038101906105c59190614944565b611a0c565b005b6105d4611a58565b6040516105e191906140b3565b60405180910390f35b61060460048036038101906105ff91906143bc565b611a5e565b60405161061191906140b3565b60405180910390f35b610634600480360381019061062f9190614b8c565b611a76565b005b610650600480360381019061064b91906143bc565b611b13565b60405161065d91906140b3565b60405180910390f35b61066e611b2b565b60405161067b9190614327565b60405180910390f35b61069e600480360381019061069991906143bc565b611b51565b6040516106b19796959493929190614c17565b60405180910390f35b6106c2611d3c565b005b6106de60048036038101906106d99190614c86565b611d50565b005b6106e8611dbc565b6040516106f591906140b3565b60405180910390f35b610706611dc2565b6040516107139190614327565b60405180910390f35b610724611dec565b6040516107319190614327565b60405180910390f35b610754600480360381019061074f9190614d35565b611e12565b005b61075e611e28565b60405161076b9190614327565b60405180910390f35b61077c611e4e565b60405161078991906140b3565b60405180910390f35b6107ac60048036038101906107a791906143bc565b611e54565b6040516107b99190614327565b60405180910390f35b6107dc60048036038101906107d791906143bc565b611e87565b6040516107e991906140b3565b60405180910390f35b61080c60048036038101906108079190614d75565b611e9f565b005b61081661231a565b60405161082391906140b3565b60405180910390f35b610834612320565b6040516108419190614327565b60405180910390f35b610864600480360381019061085f9190614df0565b612346565b604051610871919061416e565b60405180910390f35b610894600480360381019061088f9190614e30565b6123da565b005b6108b060048036038101906108ab9190614944565b61247b565b005b6108cc60048036038101906108c79190614ec7565b6124fe565b005b6108d661259b565b6040516108e391906140b3565b60405180910390f35b6108f46125a1565b604051610901919061416e565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097190614f8c565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aad5750610aac8261275f565b5b9050919050565b610abc6127c9565b610ac581612847565b50565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060610b1f8261285a565b604051602001610b2f9190615080565b6040516020818303038152906040529050919050565b60126020528060005260406000206000915090505481565b60008060008060008060008088600854610b7791906150dc565b8a600754610b8591906150dc565b8c600654610b9391906150dc565b8e600554610ba191906150dc565b610bab919061511e565b610bb5919061511e565b610bbf919061511e565b600a81905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600a546040518463ffffffff1660e01b8152600401610c2693929190615152565b6020604051808303816000875af1158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c69919061519e565b5060008c1115610cee57610cb53360018e6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8b601260006001815260200190815260200160002054610cd5919061511e565b6012600060018152602001908152602001600020819055505b60008b1115610d7257610d393360028d6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8a601260006002815260200190815260200160002054610d59919061511e565b6012600060028152602001908152602001600020819055505b60008a1115610df657610dbd3360038c6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b89601260006003815260200190815260200160002054610ddd919061511e565b6012600060038152602001908152602001600020819055505b6000891115610e7a57610e413360048b6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b88601260006004815260200190815260200160002054610e61919061511e565b6012600060048152602001908152602001600020819055505b60096000815480929190610e8d906151cb565b9190505550600042905060006303c2670082610ea9919061511e565b905080600b600060095481526020019081526020016000208190555033600c6000600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54600d60006009548152602001908152602001600020819055508d600e60006009548152602001908152602001600020819055508c600f60006009548152602001908152602001600020819055508b601060006009548152602001908152602001600020819055508a60116000600954815260200190815260200160002081905550600954338f8f8f8f600a548799509950995099509950995099509950505094995094995094999196509450565b600a5481565b60106020528060005260406000206000915090505481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110166127c9565b61102284848484612ad8565b50505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461108257600080fd5b83601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600060126000838152602001908152602001600020549050919050565b600d6020528060005260406000206000915090505481565b600080600080600080600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112765750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806112ce5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113265750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061137e5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806113d65750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6113df57600080fd5b886008546113ed91906150dc565b8a6007546113fb91906150dc565b8c60065461140991906150dc565b8e60055461141791906150dc565b611421919061511e565b61142b919061511e565b611435919061511e565b600a8190555060008c11156114bf576114868d60018e6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8b6012600060018152602001908152602001600020546114a6919061511e565b6012600060018152602001908152602001600020819055505b60008b11156115435761150a8d60028d6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b8a60126000600281526020019081526020016000205461152a919061511e565b6012600060028152602001908152602001600020819055505b60008a11156115c75761158e8d60038c6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b896012600060038152602001908152602001600020546115ae919061511e565b6012600060038152602001908152602001600020819055505b600089111561164b576116128d60048b6040518060400160405280600281526020017f3078000000000000000000000000000000000000000000000000000000000000815250612928565b88601260006004815260200190815260200160002054611632919061511e565b6012600060048152602001908152602001600020819055505b6009600081548092919061165e906151cb565b9190505550600042905060006303c267008261167a919061511e565b905080600b60006009548152602001908152602001600020819055508e600c6000600954815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a54600d60006009548152602001908152602001600020819055508d600e60006009548152602001908152602001600020819055508c600f60006009548152602001908152602001600020819055508b601060006009548152602001908152602001600020819055508a601160006009548152602001908152602001600020819055506009548f8f8f8f8f600a5487995099509950995099509950995099505050959b50959b939950955095509550565b6117a4612d04565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806117ea57506117e9856117e4612d04565b612346565b5b611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182090615285565b60405180910390fd5b6118368585858585612d0c565b5050505050565b600b6020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118af57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60608151835114611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090615317565b60405180910390fd5b6000835167ffffffffffffffff811115611956576119556141a4565b5b6040519080825280602002602001820160405280156119845781602001602082028036833780820191505090505b50905060005b8451811015611a01576119d18582815181106119a9576119a8615337565b5b60200260200101518583815181106119c4576119c3615337565b5b602002602001015161090a565b8282815181106119e4576119e3615337565b5b602002602001018181525050806119fa906151cb565b905061198a565b508091505092915050565b611a146127c9565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b600f6020528060005260406000206000915090505481565b611a7e612d04565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611ac45750611ac383611abe612d04565b612346565b5b611b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afa90615285565b60405180910390fd5b611b0e83838361302d565b505050565b600e6020528060005260406000206000915090505481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000600c600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611c165750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80611c6e5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611c7757600080fd5b600c600089815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60008a815260200190815260200160002054600f60008b815260200190815260200160002054601060008c815260200190815260200160002054601160008d815260200190815260200160002054600d60008e815260200190815260200160002054600b60008f8152602001908152602001600020549650965096509650965096509650919395979092949650565b611d446127c9565b611d4e60006132fb565b565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611daa57600080fd5b611db684848484612928565b50505050565b60095481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e24611e1d612d04565b83836133c1565b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915090505481565b42600b6000878152602001908152602001600020541115611ebf57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600c600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2a57600080fd5b83600e6000878152602001908152602001600020541015611f4a57600080fd5b82600f6000878152602001908152602001600020541015611f6a57600080fd5b8160106000878152602001908152602001600020541015611f8a57600080fd5b8060116000878152602001908152602001600020541015611faa57600080fd5b80600854611fb891906150dc565b82600754611fc691906150dc565b84600654611fd491906150dc565b86600554611fe291906150dc565b611fec919061511e565b611ff6919061511e565b612000919061511e565b600a81905550600a54600d600087815260200190815260200160002054101561202857600080fd5b600a54600d6000878152602001908152602001600020546120499190615366565b600d600087815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33600a546040518363ffffffff1660e01b81526004016120bf92919061539a565b6020604051808303816000875af11580156120de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612102919061519e565b50600084111561218757612118336001866124fe565b836012600060018152602001908152602001600020546121389190615366565b60126000600181526020019081526020016000208190555083600e60008781526020019081526020016000205461216f9190615366565b600e6000878152602001908152602001600020819055505b600083111561220b5761219c336002856124fe565b826012600060028152602001908152602001600020546121bc9190615366565b60126000600281526020019081526020016000208190555082600f6000878152602001908152602001600020546121f39190615366565b600f6000878152602001908152602001600020819055505b600082111561228f57612220336003846124fe565b816012600060038152602001908152602001600020546122409190615366565b6012600060038152602001908152602001600020819055508160106000878152602001908152602001600020546122779190615366565b60106000878152602001908152602001600020819055505b6000811115612313576122a4336004836124fe565b806012600060048152602001908152602001600020546122c49190615366565b6012600060048152602001908152602001600020819055508060116000878152602001908152602001600020546122fb9190615366565b60116000878152602001908152602001600020819055505b5050505050565b60055481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6123e2612d04565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480612428575061242785612422612d04565b612346565b5b612467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245e90615285565b60405180910390fd5b612474858585858561352d565b5050505050565b6124836127c9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036124f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e990615435565b60405180910390fd5b6124fb816132fb565b50565b612506612d04565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061254c575061254b83612546612d04565b612346565b5b61258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290615285565b60405180910390fd5b6125968383836137c8565b505050565b60065481565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146125fd57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126b99190614327565b602060405180830381865afa1580156126d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126fa919061546a565b6040518363ffffffff1660e01b815260040161271792919061539a565b6020604051808303816000875af1158015612736573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275a919061519e565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127d1612d04565b73ffffffffffffffffffffffffffffffffffffffff166127ef611dc2565b73ffffffffffffffffffffffffffffffffffffffff1614612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c906154e3565b60405180910390fd5b565b80600290816128569190615705565b5050565b60606000600161286984613a0e565b01905060008167ffffffffffffffff811115612888576128876141a4565b5b6040519080825280601f01601f1916602001820160405280156128ba5781602001600182028036833780820191505090505b509050600082602001820190505b60011561291d578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612911576129106157d7565b5b049450600085036128c8575b819350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90615878565b60405180910390fd5b60006129a1612d04565b905060006129ae85613b61565b905060006129bb85613b61565b90506129cc83600089858589613bdb565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a2b919061511e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612aa9929190615898565b60405180910390a4612ac083600089858589613be3565b612acf83600089898989613beb565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3e90615878565b60405180910390fd5b8151835114612b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8290615933565b60405180910390fd5b6000612b95612d04565b9050612ba681600087878787613bdb565b60005b8451811015612c5f57838181518110612bc557612bc4615337565b5b6020026020010151600080878481518110612be357612be2615337565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c45919061511e565b925050819055508080612c57906151cb565b915050612ba9565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612cd7929190615953565b60405180910390a4612cee81600087878787613be3565b612cfd81600087878787613dc2565b5050505050565b600033905090565b8151835114612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790615933565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db6906159fc565b60405180910390fd5b6000612dc9612d04565b9050612dd9818787878787613bdb565b60005b8451811015612f8a576000858281518110612dfa57612df9615337565b5b602002602001015190506000858381518110612e1957612e18615337565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb190615a8e565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f6f919061511e565b9250508190555050505080612f83906151cb565b9050612ddc565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051613001929190615953565b60405180910390a4613017818787878787613be3565b613025818787878787613dc2565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361309c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309390615b20565b60405180910390fd5b80518251146130e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d790615933565b60405180910390fd5b60006130ea612d04565b905061310a81856000868660405180602001604052806000815250613bdb565b60005b835181101561325757600084828151811061312b5761312a615337565b5b60200260200101519050600084838151811061314a57613149615337565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e290615bb2565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061324f906151cb565b91505061310d565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516132cf929190615953565b60405180910390a46132f581856000868660405180602001604052806000815250613be3565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361342f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342690615c44565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613520919061416e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361359c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613593906159fc565b60405180910390fd5b60006135a6612d04565b905060006135b385613b61565b905060006135c085613b61565b90506135d0838989858589613bdb565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90615a8e565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461371c919061511e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051613799929190615898565b60405180910390a46137af848a8a86868a613be3565b6137bd848a8a8a8a8a613beb565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382e90615b20565b60405180910390fd5b6000613841612d04565b9050600061384e84613b61565b9050600061385b84613b61565b905061387b83876000858560405180602001604052806000815250613bdb565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015613912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390990615bb2565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516139df929190615898565b60405180910390a4613a0584886000868660405180602001604052806000815250613be3565b50505050505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613a6c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381613a6257613a616157d7565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613aa9576d04ee2d6d415b85acef81000000008381613a9f57613a9e6157d7565b5b0492506020810190505b662386f26fc100008310613ad857662386f26fc100008381613ace57613acd6157d7565b5b0492506010810190505b6305f5e1008310613b01576305f5e1008381613af757613af66157d7565b5b0492506008810190505b6127108310613b26576127108381613b1c57613b1b6157d7565b5b0492506004810190505b60648310613b495760648381613b3f57613b3e6157d7565b5b0492506002810190505b600a8310613b58576001810190505b80915050919050565b60606000600167ffffffffffffffff811115613b8057613b7f6141a4565b5b604051908082528060200260200182016040528015613bae5781602001602082028036833780820191505090505b5090508281600081518110613bc657613bc5615337565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b613c0a8473ffffffffffffffffffffffffffffffffffffffff16613f99565b15613dba578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401613c50959493929190615cb9565b6020604051808303816000875af1925050508015613c8c57506040513d601f19601f82011682018060405250810190613c899190615d28565b60015b613d3157613c98615d62565b806308c379a003613cf45750613cac615d84565b80613cb75750613cf6565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ceb9190614468565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2890615e86565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613daf90615f18565b60405180910390fd5b505b505050505050565b613de18473ffffffffffffffffffffffffffffffffffffffff16613f99565b15613f91578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401613e27959493929190615f38565b6020604051808303816000875af1925050508015613e6357506040513d601f19601f82011682018060405250810190613e609190615d28565b60015b613f0857613e6f615d62565b806308c379a003613ecb5750613e83615d84565b80613e8e5750613ecd565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ec29190614468565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eff90615e86565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8690615f18565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ffb82613fd0565b9050919050565b61400b81613ff0565b811461401657600080fd5b50565b60008135905061402881614002565b92915050565b6000819050919050565b6140418161402e565b811461404c57600080fd5b50565b60008135905061405e81614038565b92915050565b6000806040838503121561407b5761407a613fc6565b5b600061408985828601614019565b925050602061409a8582860161404f565b9150509250929050565b6140ad8161402e565b82525050565b60006020820190506140c860008301846140a4565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b614103816140ce565b811461410e57600080fd5b50565b600081359050614120816140fa565b92915050565b60006020828403121561413c5761413b613fc6565b5b600061414a84828501614111565b91505092915050565b60008115159050919050565b61416881614153565b82525050565b6000602082019050614183600083018461415f565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6141dc82614193565b810181811067ffffffffffffffff821117156141fb576141fa6141a4565b5b80604052505050565b600061420e613fbc565b905061421a82826141d3565b919050565b600067ffffffffffffffff82111561423a576142396141a4565b5b61424382614193565b9050602081019050919050565b82818337600083830152505050565b600061427261426d8461421f565b614204565b90508281526020810184848401111561428e5761428d61418e565b5b614299848285614250565b509392505050565b600082601f8301126142b6576142b5614189565b5b81356142c684826020860161425f565b91505092915050565b6000602082840312156142e5576142e4613fc6565b5b600082013567ffffffffffffffff81111561430357614302613fcb565b5b61430f848285016142a1565b91505092915050565b61432181613ff0565b82525050565b600060208201905061433c6000830184614318565b92915050565b6000819050919050565b600061436761436261435d84613fd0565b614342565b613fd0565b9050919050565b60006143798261434c565b9050919050565b600061438b8261436e565b9050919050565b61439b81614380565b82525050565b60006020820190506143b66000830184614392565b92915050565b6000602082840312156143d2576143d1613fc6565b5b60006143e08482850161404f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614423578082015181840152602081019050614408565b60008484015250505050565b600061443a826143e9565b61444481856143f4565b9350614454818560208601614405565b61445d81614193565b840191505092915050565b60006020820190508181036000830152614482818461442f565b905092915050565b600080600080608085870312156144a4576144a3613fc6565b5b60006144b28782880161404f565b94505060206144c38782880161404f565b93505060406144d48782880161404f565b92505060606144e58782880161404f565b91505092959194509250565b600061010082019050614507600083018b6140a4565b614514602083018a614318565b61452160408301896140a4565b61452e60608301886140a4565b61453b60808301876140a4565b61454860a08301866140a4565b61455560c08301856140a4565b61456260e08301846140a4565b9998505050505050505050565b600067ffffffffffffffff82111561458a576145896141a4565b5b602082029050602081019050919050565b600080fd5b60006145b36145ae8461456f565b614204565b905080838252602082019050602084028301858111156145d6576145d561459b565b5b835b818110156145ff57806145eb888261404f565b8452602084019350506020810190506145d8565b5050509392505050565b600082601f83011261461e5761461d614189565b5b813561462e8482602086016145a0565b91505092915050565b600067ffffffffffffffff821115614652576146516141a4565b5b61465b82614193565b9050602081019050919050565b600061467b61467684614637565b614204565b9050828152602081018484840111156146975761469661418e565b5b6146a2848285614250565b509392505050565b600082601f8301126146bf576146be614189565b5b81356146cf848260208601614668565b91505092915050565b600080600080608085870312156146f2576146f1613fc6565b5b600061470087828801614019565b945050602085013567ffffffffffffffff81111561472157614720613fcb565b5b61472d87828801614609565b935050604085013567ffffffffffffffff81111561474e5761474d613fcb565b5b61475a87828801614609565b925050606085013567ffffffffffffffff81111561477b5761477a613fcb565b5b614787878288016146aa565b91505092959194509250565b600080600080608085870312156147ad576147ac613fc6565b5b60006147bb87828801614019565b94505060206147cc87828801614019565b93505060406147dd87828801614019565b92505060606147ee87828801614019565b91505092959194509250565b600080600080600060a0868803121561481657614815613fc6565b5b600061482488828901614019565b95505060206148358882890161404f565b94505060406148468882890161404f565b93505060606148578882890161404f565b92505060806148688882890161404f565b9150509295509295909350565b600080600080600060a0868803121561489157614890613fc6565b5b600061489f88828901614019565b95505060206148b088828901614019565b945050604086013567ffffffffffffffff8111156148d1576148d0613fcb565b5b6148dd88828901614609565b935050606086013567ffffffffffffffff8111156148fe576148fd613fcb565b5b61490a88828901614609565b925050608086013567ffffffffffffffff81111561492b5761492a613fcb565b5b614937888289016146aa565b9150509295509295909350565b60006020828403121561495a57614959613fc6565b5b600061496884828501614019565b91505092915050565b600067ffffffffffffffff82111561498c5761498b6141a4565b5b602082029050602081019050919050565b60006149b06149ab84614971565b614204565b905080838252602082019050602084028301858111156149d3576149d261459b565b5b835b818110156149fc57806149e88882614019565b8452602084019350506020810190506149d5565b5050509392505050565b600082601f830112614a1b57614a1a614189565b5b8135614a2b84826020860161499d565b91505092915050565b60008060408385031215614a4b57614a4a613fc6565b5b600083013567ffffffffffffffff811115614a6957614a68613fcb565b5b614a7585828601614a06565b925050602083013567ffffffffffffffff811115614a9657614a95613fcb565b5b614aa285828601614609565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ae18161402e565b82525050565b6000614af38383614ad8565b60208301905092915050565b6000602082019050919050565b6000614b1782614aac565b614b218185614ab7565b9350614b2c83614ac8565b8060005b83811015614b5d578151614b448882614ae7565b9750614b4f83614aff565b925050600181019050614b30565b5085935050505092915050565b60006020820190508181036000830152614b848184614b0c565b905092915050565b600080600060608486031215614ba557614ba4613fc6565b5b6000614bb386828701614019565b935050602084013567ffffffffffffffff811115614bd457614bd3613fcb565b5b614be086828701614609565b925050604084013567ffffffffffffffff811115614c0157614c00613fcb565b5b614c0d86828701614609565b9150509250925092565b600060e082019050614c2c600083018a614318565b614c3960208301896140a4565b614c4660408301886140a4565b614c5360608301876140a4565b614c6060808301866140a4565b614c6d60a08301856140a4565b614c7a60c08301846140a4565b98975050505050505050565b60008060008060808587031215614ca057614c9f613fc6565b5b6000614cae87828801614019565b9450506020614cbf8782880161404f565b9350506040614cd08782880161404f565b925050606085013567ffffffffffffffff811115614cf157614cf0613fcb565b5b614cfd878288016146aa565b91505092959194509250565b614d1281614153565b8114614d1d57600080fd5b50565b600081359050614d2f81614d09565b92915050565b60008060408385031215614d4c57614d4b613fc6565b5b6000614d5a85828601614019565b9250506020614d6b85828601614d20565b9150509250929050565b600080600080600060a08688031215614d9157614d90613fc6565b5b6000614d9f8882890161404f565b9550506020614db08882890161404f565b9450506040614dc18882890161404f565b9350506060614dd28882890161404f565b9250506080614de38882890161404f565b9150509295509295909350565b60008060408385031215614e0757614e06613fc6565b5b6000614e1585828601614019565b9250506020614e2685828601614019565b9150509250929050565b600080600080600060a08688031215614e4c57614e4b613fc6565b5b6000614e5a88828901614019565b9550506020614e6b88828901614019565b9450506040614e7c8882890161404f565b9350506060614e8d8882890161404f565b925050608086013567ffffffffffffffff811115614eae57614ead613fcb565b5b614eba888289016146aa565b9150509295509295909350565b600080600060608486031215614ee057614edf613fc6565b5b6000614eee86828701614019565b9350506020614eff8682870161404f565b9250506040614f108682870161404f565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000614f76602a836143f4565b9150614f8182614f1a565b604082019050919050565b60006020820190508181036000830152614fa581614f69565b9050919050565b600081905092915050565b7f68747470733a2f2f626172746572736d6172742e636f2e74682f4e46542f0000600082015250565b6000614fed601e83614fac565b9150614ff882614fb7565b601e82019050919050565b600061500e826143e9565b6150188185614fac565b9350615028818560208601614405565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061506a600583614fac565b915061507582615034565b600582019050919050565b600061508b82614fe0565b91506150978284615003565b91506150a28261505d565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006150e78261402e565b91506150f28361402e565b92508282026151008161402e565b91508282048414831517615117576151166150ad565b5b5092915050565b60006151298261402e565b91506151348361402e565b925082820190508082111561514c5761514b6150ad565b5b92915050565b60006060820190506151676000830186614318565b6151746020830185614318565b61518160408301846140a4565b949350505050565b60008151905061519881614d09565b92915050565b6000602082840312156151b4576151b3613fc6565b5b60006151c284828501615189565b91505092915050565b60006151d68261402e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615208576152076150ad565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061526f602e836143f4565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006153016029836143f4565b915061530c826152a5565b604082019050919050565b60006020820190508181036000830152615330816152f4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006153718261402e565b915061537c8361402e565b9250828203905081811115615394576153936150ad565b5b92915050565b60006040820190506153af6000830185614318565b6153bc60208301846140a4565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061541f6026836143f4565b915061542a826153c3565b604082019050919050565b6000602082019050818103600083015261544e81615412565b9050919050565b60008151905061546481614038565b92915050565b6000602082840312156154805761547f613fc6565b5b600061548e84828501615455565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006154cd6020836143f4565b91506154d882615497565b602082019050919050565b600060208201905081810360008301526154fc816154c0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061554a57607f821691505b60208210810361555d5761555c615503565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026155c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615588565b6155cf8683615588565b95508019841693508086168417925050509392505050565b60006156026155fd6155f88461402e565b614342565b61402e565b9050919050565b6000819050919050565b61561c836155e7565b61563061562882615609565b848454615595565b825550505050565b600090565b615645615638565b615650818484615613565b505050565b5b818110156156745761566960008261563d565b600181019050615656565b5050565b601f8211156156b95761568a81615563565b61569384615578565b810160208510156156a2578190505b6156b66156ae85615578565b830182615655565b50505b505050565b600082821c905092915050565b60006156dc600019846008026156be565b1980831691505092915050565b60006156f583836156cb565b9150826002028217905092915050565b61570e826143e9565b67ffffffffffffffff811115615727576157266141a4565b5b6157318254615532565b61573c828285615678565b600060209050601f83116001811461576f576000841561575d578287015190505b61576785826156e9565b8655506157cf565b601f19841661577d86615563565b60005b828110156157a557848901518255600182019150602085019450602081019050615780565b868310156157c257848901516157be601f8916826156cb565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006158626021836143f4565b915061586d82615806565b604082019050919050565b6000602082019050818103600083015261589181615855565b9050919050565b60006040820190506158ad60008301856140a4565b6158ba60208301846140a4565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061591d6028836143f4565b9150615928826158c1565b604082019050919050565b6000602082019050818103600083015261594c81615910565b9050919050565b6000604082019050818103600083015261596d8185614b0c565b905081810360208301526159818184614b0c565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006159e66025836143f4565b91506159f18261598a565b604082019050919050565b60006020820190508181036000830152615a15816159d9565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000615a78602a836143f4565b9150615a8382615a1c565b604082019050919050565b60006020820190508181036000830152615aa781615a6b565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615b0a6023836143f4565b9150615b1582615aae565b604082019050919050565b60006020820190508181036000830152615b3981615afd565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000615b9c6024836143f4565b9150615ba782615b40565b604082019050919050565b60006020820190508181036000830152615bcb81615b8f565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000615c2e6029836143f4565b9150615c3982615bd2565b604082019050919050565b60006020820190508181036000830152615c5d81615c21565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000615c8b82615c64565b615c958185615c6f565b9350615ca5818560208601614405565b615cae81614193565b840191505092915050565b600060a082019050615cce6000830188614318565b615cdb6020830187614318565b615ce860408301866140a4565b615cf560608301856140a4565b8181036080830152615d078184615c80565b90509695505050505050565b600081519050615d22816140fa565b92915050565b600060208284031215615d3e57615d3d613fc6565b5b6000615d4c84828501615d13565b91505092915050565b60008160e01c9050919050565b600060033d1115615d815760046000803e615d7e600051615d55565b90505b90565b600060443d10615e1157615d96613fbc565b60043d036004823e80513d602482011167ffffffffffffffff82111715615dbe575050615e11565b808201805167ffffffffffffffff811115615ddc5750505050615e11565b80602083010160043d038501811115615df9575050505050615e11565b615e08826020018501866141d3565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000615e706034836143f4565b9150615e7b82615e14565b604082019050919050565b60006020820190508181036000830152615e9f81615e63565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000615f026028836143f4565b9150615f0d82615ea6565b604082019050919050565b60006020820190508181036000830152615f3181615ef5565b9050919050565b600060a082019050615f4d6000830188614318565b615f5a6020830187614318565b8181036040830152615f6c8186614b0c565b90508181036060830152615f808185614b0c565b90508181036080830152615f948184615c80565b9050969550505050505056fea2646970667358221220385836ad7f2b1de3e9b715b91c1091f2005ca3b8928075184366686aa1dead7f64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b982fad15538647743b983f4aa5deaf8266e0d67
-----Decoded View---------------
Arg [0] : _BigPointAddr (address): 0xb982Fad15538647743B983F4aa5DeAF8266e0D67
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b982fad15538647743b983f4aa5deaf8266e0d67
Deployed Bytecode Sourcemap
59412:7685:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24553:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23576:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59645:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62587:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59479:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66812:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60639:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60693:1493;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;60236:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60529:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62227:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66406:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62617:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;64398:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60372:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62853:1537;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;26496:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60272:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62375:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24949:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62265:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60129:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60478:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40864:358;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60427:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62564:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64517:355;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;2788:103;;;:::i;:::-;;59742:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60203:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2140:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62194:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25546:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;62541:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60070:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60324:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60580:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;64881:1517;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59953:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;62518:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25773:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26013:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3046:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40530:326;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60009:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66605:199;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:230;24639:7;24686:1;24667:21;;:7;:21;;;24659:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24753:9;:13;24763:2;24753:13;;;;;;;;;;;:22;24767:7;24753:22;;;;;;;;;;;;;;;;24746:29;;24553:230;;;;:::o;23576:310::-;23678:4;23730:26;23715:41;;;:11;:41;;;;:110;;;;23788:37;23773:52;;;:11;:52;;;;23715:110;:163;;;;23842:36;23866:11;23842:23;:36::i;:::-;23715:163;23695:183;;23576:310;;;:::o;59645:89::-;2026:13;:11;:13::i;:::-;59711:15:::1;59719:6;59711:7;:15::i;:::-;59645:89:::0;:::o;62587:21::-;;;;;;;;;;;;;:::o;59479:18::-;;;;;;;;;;;;;:::o;66812:270::-;66872:13;67002:26;67019:8;67002:16;:26::i;:::-;66922:141;;;;;;;;:::i;:::-;;;;;;;;;;;;;66897:177;;66812:270;;;:::o;60639:45::-;;;;;;;;;;;;;;;;;:::o;60693:1493::-;60808:4;60813:7;60821:4;60826;60831;60836;60841;60846;60948:10;60942:5;;:16;;;;:::i;:::-;60929:10;60923:5;;:16;;;;:::i;:::-;60910:10;60904:5;;:16;;;;:::i;:::-;60891:10;60885:5;;:16;;;;:::i;:::-;60884:37;;;;:::i;:::-;:56;;;;:::i;:::-;:75;;;;:::i;:::-;60872:10;:87;;;;60989:4;;;;;;;;;;;:17;;;61007:10;61027:4;61033:10;;60989:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;61069:1;61058:10;:12;61055:129;;;61082:35;61088:10;61099:1;61101:10;61082:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;61162:10;61145:12;:15;61158:1;61145:15;;;;;;;;;;;;:27;;;;:::i;:::-;61128:12;:15;61141:1;61128:15;;;;;;;;;;;:44;;;;61055:129;61210:1;61199:10;:12;61196:129;;;61223:35;61229:10;61240:1;61242:10;61223:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;61303:10;61286:12;:15;61299:1;61286:15;;;;;;;;;;;;:27;;;;:::i;:::-;61269:12;:15;61282:1;61269:15;;;;;;;;;;;:44;;;;61196:129;61360:1;61349:10;:12;61346:129;;;61373:35;61379:10;61390:1;61392:10;61373:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;61453:10;61436:12;:15;61449:1;61436:15;;;;;;;;;;;;:27;;;;:::i;:::-;61419:12;:15;61432:1;61419:15;;;;;;;;;;;:44;;;;61346:129;61501:1;61490:10;:12;61487:129;;;61514:35;61520:10;61531:1;61533:10;61514:35;;;;;;;;;;;;;;;;;:5;:35::i;:::-;61594:10;61577:12;:15;61590:1;61577:15;;;;;;;;;;;;:27;;;;:::i;:::-;61560:12;:15;61573:1;61560:15;;;;;;;;;;;:44;;;;61487:129;61628:8;;:10;;;;;;;;;:::i;:::-;;;;;;61649:11;61663:15;61649:29;;61689:18;61714:8;61710:3;:12;;;;:::i;:::-;61689:33;;61789:10;61765:12;:22;61778:8;;61765:22;;;;;;;;;;;:34;;;;61830:10;61810:8;:18;61819:8;;61810:18;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;61872:10;;61851:9;:19;61861:8;;61851:19;;;;;;;;;;;:31;;;;61931:10;61909:11;:21;61921:8;;61909:21;;;;;;;;;;;:32;;;;61974:10;61952:11;:21;61964:8;;61952:21;;;;;;;;;;;:32;;;;62017:10;61995:11;:21;62007:8;;61995:21;;;;;;;;;;;:32;;;;62060:10;62038:11;:21;62050:8;;62038:21;;;;;;;;;;;:32;;;;62091:8;;62101:10;62112;62123;62134;62145;62156;;62167;62083:95;;;;;;;;;;;;;;;;;;60693:1493;;;;;;;;;;;;;:::o;60236:22::-;;;;:::o;60529:44::-;;;;;;;;;;;;;;;;;:::o;62227:25::-;;;;;;;;;;;;;:::o;66406:191::-;2026:13;:11;:13::i;:::-;66555:34:::1;66566:2;66570:3;66575:7;66584:4;66555:10;:34::i;:::-;66406:191:::0;;;;:::o;62617:227::-;62736:11;;;;;;;;;;;62724:23;;:10;:23;;;62716:32;;;;;;62767:7;62758:6;;:16;;;;;;;;;;;;;;;;;;62784:7;62775:6;;:16;;;;;;;;;;;;;;;;;;62810:7;62801:6;;:16;;;;;;;;;;;;;;;;;;62828:7;62819:6;;:16;;;;;;;;;;;;;;;;;;62617:227;;;;:::o;64398:109::-;64455:4;64478:12;:21;64491:7;64478:21;;;;;;;;;;;;64471:28;;64398:109;;;:::o;60372:42::-;;;;;;;;;;;;;;;;;:::o;62853:1537::-;62995:4;63000:7;63008:4;63013;63018;63023;63028;63033;63075:11;;;;;;;;;;;63063:23;;:10;:23;;;:47;;;;63100:10;;;;;;;;;;;63088:22;;:10;:22;;;63063:47;:67;;;;63124:6;;;;;;;;;;;63112:18;;:10;:18;;;63063:67;:87;;;;63144:6;;;;;;;;;;;63132:18;;:10;:18;;;63063:87;:107;;;;63164:6;;;;;;;;;;;63152:18;;:10;:18;;;63063:107;:127;;;;63184:6;;;;;;;;;;;63172:18;;:10;:18;;;63063:127;63055:136;;;;;;63283:9;63277:5;;:15;;;;:::i;:::-;63265:9;63259:5;;:15;;;;:::i;:::-;63247:9;63241:5;;:15;;;;:::i;:::-;63229:9;63223:5;;:15;;;;:::i;:::-;63222:35;;;;:::i;:::-;:53;;;;:::i;:::-;:71;;;;:::i;:::-;63210:10;:83;;;;63315:1;63305:9;:11;63302:123;;;63328:31;63334:7;63342:1;63344:9;63328:31;;;;;;;;;;;;;;;;;:5;:31::i;:::-;63404:9;63387:12;:15;63400:1;63387:15;;;;;;;;;;;;:26;;;;:::i;:::-;63370:12;:15;63383:1;63370:15;;;;;;;;;;;:43;;;;63302:123;63450:1;63440:9;:11;63437:123;;;63463:31;63469:7;63477:1;63479:9;63463:31;;;;;;;;;;;;;;;;;:5;:31::i;:::-;63539:9;63522:12;:15;63535:1;63522:15;;;;;;;;;;;;:26;;;;:::i;:::-;63505:12;:15;63518:1;63505:15;;;;;;;;;;;:43;;;;63437:123;63594:1;63584:9;:11;63581:123;;;63607:31;63613:7;63621:1;63623:9;63607:31;;;;;;;;;;;;;;;;;:5;:31::i;:::-;63683:9;63666:12;:15;63679:1;63666:15;;;;;;;;;;;;:26;;;;:::i;:::-;63649:12;:15;63662:1;63649:15;;;;;;;;;;;:43;;;;63581:123;63729:1;63719:9;:11;63716:123;;;63742:31;63748:7;63756:1;63758:9;63742:31;;;;;;;;;;;;;;;;;:5;:31::i;:::-;63818:9;63801:12;:15;63814:1;63801:15;;;;;;;;;;;;:26;;;;:::i;:::-;63784:12;:15;63797:1;63784:15;;;;;;;;;;;:43;;;;63716:123;63851:8;;:10;;;;;;;;;:::i;:::-;;;;;;63872:11;63886:15;63872:29;;63912:18;63937:8;63933:3;:12;;;;:::i;:::-;63912:33;;64004:10;63980:12;:22;63993:8;;63980:22;;;;;;;;;;;:34;;;;64045:7;64025:8;:18;64034:8;;64025:18;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;64084:10;;64063:9;:19;64073:8;;64063:19;;;;;;;;;;;:31;;;;64143:9;64121:11;:21;64133:8;;64121:21;;;;;;;;;;;:31;;;;64185:9;64163:11;:21;64175:8;;64163:21;;;;;;;;;;;:31;;;;64227:9;64205:11;:21;64217:8;;64205:21;;;;;;;;;;;:31;;;;64269:9;64247:11;:21;64259:8;;64247:21;;;;;;;;;;;:31;;;;64299:8;;64309:7;64317:9;64327;64337;64347;64357:10;;64368;64291:88;;;;;;;;;;;;;;;;;;62853:1537;;;;;;;;;;;;;;:::o;26496:438::-;26737:12;:10;:12::i;:::-;26729:20;;:4;:20;;;:60;;;;26753:36;26770:4;26776:12;:10;:12::i;:::-;26753:16;:36::i;:::-;26729:60;26707:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26874:52;26897:4;26903:2;26907:3;26912:7;26921:4;26874:22;:52::i;:::-;26496:438;;;;;:::o;60272:45::-;;;;;;;;;;;;;;;;;:::o;62375:134::-;62455:11;;;;;;;;;;;62443:23;;:10;:23;;;62435:32;;;;;;62490:11;62477:10;;:24;;;;;;;;;;;;;;;;;;62375:134;:::o;24949:524::-;25105:16;25166:3;:10;25147:8;:15;:29;25139:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25235:30;25282:8;:15;25268:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25235:63;;25316:9;25311:122;25335:8;:15;25331:1;:19;25311:122;;;25391:30;25401:8;25410:1;25401:11;;;;;;;;:::i;:::-;;;;;;;;25414:3;25418:1;25414:6;;;;;;;;:::i;:::-;;;;;;;;25391:9;:30::i;:::-;25372:13;25386:1;25372:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25352:3;;;;:::i;:::-;;;25311:122;;;;25452:13;25445:20;;;24949:524;;;;:::o;62265:98::-;2026:13;:11;:13::i;:::-;62346:9:::1;62332:11;;:23;;;;;;;;;;;;;;;;;;62265:98:::0;:::o;60129:46::-;;;;:::o;60478:44::-;;;;;;;;;;;;;;;;;:::o;40864:358::-;41040:12;:10;:12::i;:::-;41029:23;;:7;:23;;;:66;;;;41056:39;41073:7;41082:12;:10;:12::i;:::-;41056:16;:39::i;:::-;41029:66;41007:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;41182:32;41193:7;41202:3;41207:6;41182:10;:32::i;:::-;40864:358;;;:::o;60427:44::-;;;;;;;;;;;;;;;;;:::o;62564:21::-;;;;;;;;;;;;;:::o;64517:355::-;64575:7;64583:4;64588;64593;64598;64603;64608;64643:8;:16;64652:6;64643:16;;;;;;;;;;;;;;;;;;;;;64631:28;;:10;:28;;;:53;;;;64673:11;;;;;;;;;;;64661:23;;:10;:23;;;64631:53;:77;;;;64698:10;;;;;;;;;;;64686:22;;:10;:22;;;64631:77;64623:86;;;;;;64726:8;:16;64735:6;64726:16;;;;;;;;;;;;;;;;;;;;;64743:11;:19;64755:6;64743:19;;;;;;;;;;;;64763:11;:19;64775:6;64763:19;;;;;;;;;;;;64783:11;:19;64795:6;64783:19;;;;;;;;;;;;64803:11;:19;64815:6;64803:19;;;;;;;;;;;;64823:9;:17;64833:6;64823:17;;;;;;;;;;;;64841:12;:20;64854:6;64841:20;;;;;;;;;;;;64719:143;;;;;;;;;;;;;;64517:355;;;;;;;;;:::o;2788:103::-;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;:::-;2788:103::o:0;59742:203::-;59882:11;;;;;;;;;;;59870:23;;:10;:23;;;59862:32;;;;;;59905;59911:7;59920:2;59924:6;59932:4;59905:5;:32::i;:::-;59742:203;;;;:::o;60203:26::-;;;;:::o;2140:87::-;2186:7;2213:6;;;;;;;;;;;2206:13;;2140:87;:::o;62194:26::-;;;;;;;;;;;;;:::o;25546:155::-;25641:52;25660:12;:10;:12::i;:::-;25674:8;25684;25641:18;:52::i;:::-;25546:155;;:::o;62541:21::-;;;;;;;;;;;;;:::o;60070:46::-;;;;:::o;60324:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;60580:44::-;;;;;;;;;;;;;;;;;:::o;64881:1517::-;65036:15;65014:12;:20;65027:6;65014:20;;;;;;;;;;;;:37;;65006:46;;;;;;65089:10;65071:28;;:8;:16;65080:6;65071:16;;;;;;;;;;;;;;;;;;;;;:28;;;65063:37;;;;;;65140:9;65119:11;:19;65131:6;65119:19;;;;;;;;;;;;:30;;65111:39;;;;;;65190:9;65169:11;:19;65181:6;65169:19;;;;;;;;;;;;:30;;65161:39;;;;;;65240:9;65219:11;:19;65231:6;65219:19;;;;;;;;;;;;:30;;65211:39;;;;;;65290:9;65269:11;:19;65281:6;65269:19;;;;;;;;;;;;:30;;65261:39;;;;;;65386:9;65380:5;;:15;;;;:::i;:::-;65368:9;65362:5;;:15;;;;:::i;:::-;65350:9;65344:5;;:15;;;;:::i;:::-;65332:9;65326:5;;:15;;;;:::i;:::-;65325:35;;;;:::i;:::-;:53;;;;:::i;:::-;:71;;;;:::i;:::-;65313:10;:83;;;;65444:10;;65425:9;:17;65435:6;65425:17;;;;;;;;;;;;:29;;65417:38;;;;;;65503:10;;65485:9;:17;65495:6;65485:17;;;;;;;;;;;;:28;;;;:::i;:::-;65466:9;:17;65476:6;65466:17;;;;;;;;;;;:47;;;;65524:4;;;;;;;;;;;:13;;;65538:10;65549;;65524:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;65594:1;65584:9;:11;65581:182;;;65607:28;65612:10;65623:1;65625:9;65607:4;:28::i;:::-;65680:9;65663:12;:15;65676:1;65663:15;;;;;;;;;;;;:26;;;;:::i;:::-;65646:12;:15;65659:1;65646:15;;;;;;;;;;;:43;;;;65742:9;65722:11;:19;65734:6;65722:19;;;;;;;;;;;;:29;;;;:::i;:::-;65700:11;:19;65712:6;65700:19;;;;;;;;;;;:51;;;;65581:182;65788:1;65778:9;:11;65775:182;;;65801:28;65806:10;65817:1;65819:9;65801:4;:28::i;:::-;65874:9;65857:12;:15;65870:1;65857:15;;;;;;;;;;;;:26;;;;:::i;:::-;65840:12;:15;65853:1;65840:15;;;;;;;;;;;:43;;;;65936:9;65916:11;:19;65928:6;65916:19;;;;;;;;;;;;:29;;;;:::i;:::-;65894:11;:19;65906:6;65894:19;;;;;;;;;;;:51;;;;65775:182;65982:1;65972:9;:11;65969:182;;;65995:28;66000:10;66011:1;66013:9;65995:4;:28::i;:::-;66068:9;66051:12;:15;66064:1;66051:15;;;;;;;;;;;;:26;;;;:::i;:::-;66034:12;:15;66047:1;66034:15;;;;;;;;;;;:43;;;;66130:9;66110:11;:19;66122:6;66110:19;;;;;;;;;;;;:29;;;;:::i;:::-;66088:11;:19;66100:6;66088:19;;;;;;;;;;;:51;;;;65969:182;66184:1;66174:9;:11;66171:182;;;66197:28;66202:10;66213:1;66215:9;66197:4;:28::i;:::-;66270:9;66253:12;:15;66266:1;66253:15;;;;;;;;;;;;:26;;;;:::i;:::-;66236:12;:15;66249:1;66236:15;;;;;;;;;;;:43;;;;66332:9;66312:11;:19;66324:6;66312:19;;;;;;;;;;;;:29;;;;:::i;:::-;66290:11;:19;66302:6;66290:19;;;;;;;;;;;:51;;;;66171:182;64881:1517;;;;;:::o;59953:44::-;;;;:::o;62518:21::-;;;;;;;;;;;;;:::o;25773:168::-;25872:4;25896:18;:27;25915:7;25896:27;;;;;;;;;;;;;;;:37;25924:8;25896:37;;;;;;;;;;;;;;;;;;;;;;;;;25889:44;;25773:168;;;;:::o;26013:406::-;26229:12;:10;:12::i;:::-;26221:20;;:4;:20;;;:60;;;;26245:36;26262:4;26268:12;:10;:12::i;:::-;26245:16;:36::i;:::-;26221:60;26199:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26366:45;26384:4;26390:2;26394;26398:6;26406:4;26366:17;:45::i;:::-;26013:406;;;;;:::o;3046:201::-;2026:13;:11;:13::i;:::-;3155:1:::1;3135:22;;:8;:22;;::::0;3127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3211:28;3230:8;3211:18;:28::i;:::-;3046:201:::0;:::o;40530:326::-;40681:12;:10;:12::i;:::-;40670:23;;:7;:23;;;:66;;;;40697:39;40714:7;40723:12;:10;:12::i;:::-;40697:16;:39::i;:::-;40670:66;40648:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;40823:25;40829:7;40838:2;40842:5;40823;:25::i;:::-;40530:326;;;:::o;60009:45::-;;;;:::o;66605:199::-;66637:12;66682:11;;;;;;;;;;;66670:23;;:10;:23;;;66662:32;;;;;;66722:4;;;;;;;;;;;:13;;;66736:11;;;;;;;;;;;66749:4;;;;;;;;;;;:14;;;66772:4;66749:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66722:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66715:64;;66605:199;:::o;14833:157::-;14918:4;14957:25;14942:40;;;:11;:40;;;;14935:47;;14833:157;;;:::o;2305:132::-;2380:12;:10;:12::i;:::-;2369:23;;:7;:5;:7::i;:::-;:23;;;2361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2305:132::o;30720:88::-;30794:6;30787:4;:13;;;;;;:::i;:::-;;30720:88;:::o;57413:716::-;57469:13;57520:14;57557:1;57537:17;57548:5;57537:10;:17::i;:::-;:21;57520:38;;57573:20;57607:6;57596:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57573:41;;57629:11;57758:6;57754:2;57750:15;57742:6;57738:28;57731:35;;57795:288;57802:4;57795:288;;;57827:5;;;;;;;;57969:8;57964:2;57957:5;57953:14;57948:30;57943:3;57935:44;58025:2;58016:11;;;;;;:::i;:::-;;;;;58059:1;58050:5;:10;57795:288;58046:21;57795:288;58104:6;58097:13;;;;;57413:716;;;:::o;31194:729::-;31361:1;31347:16;;:2;:16;;;31339:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31414:16;31433:12;:10;:12::i;:::-;31414:31;;31456:20;31479:21;31497:2;31479:17;:21::i;:::-;31456:44;;31511:24;31538:25;31556:6;31538:17;:25::i;:::-;31511:52;;31576:66;31597:8;31615:1;31619:2;31623:3;31628:7;31637:4;31576:20;:66::i;:::-;31676:6;31655:9;:13;31665:2;31655:13;;;;;;;;;;;:17;31669:2;31655:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31735:2;31698:52;;31731:1;31698:52;;31713:8;31698:52;;;31739:2;31743:6;31698:52;;;;;;;:::i;:::-;;;;;;;;31763:65;31783:8;31801:1;31805:2;31809:3;31814:7;31823:4;31763:19;:65::i;:::-;31841:74;31872:8;31890:1;31894:2;31898;31902:6;31910:4;31841:30;:74::i;:::-;31328:595;;;31194:729;;;;:::o;32326:813::-;32518:1;32504:16;;:2;:16;;;32496:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32591:7;:14;32577:3;:10;:28;32569:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32663:16;32682:12;:10;:12::i;:::-;32663:31;;32707:66;32728:8;32746:1;32750:2;32754:3;32759:7;32768:4;32707:20;:66::i;:::-;32791:9;32786:103;32810:3;:10;32806:1;:14;32786:103;;;32867:7;32875:1;32867:10;;;;;;;;:::i;:::-;;;;;;;;32842:9;:17;32852:3;32856:1;32852:6;;;;;;;;:::i;:::-;;;;;;;;32842:17;;;;;;;;;;;:21;32860:2;32842:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32822:3;;;;;:::i;:::-;;;;32786:103;;;;32942:2;32906:53;;32938:1;32906:53;;32920:8;32906:53;;;32946:3;32951:7;32906:53;;;;;;;:::i;:::-;;;;;;;;32972:65;32992:8;33010:1;33014:2;33018:3;33023:7;33032:4;32972:19;:65::i;:::-;33050:81;33086:8;33104:1;33108:2;33112:3;33117:7;33126:4;33050:35;:81::i;:::-;32485:654;32326:813;;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;28730:1146::-;28957:7;:14;28943:3;:10;:28;28935:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29049:1;29035:16;;:2;:16;;;29027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29106:16;29125:12;:10;:12::i;:::-;29106:31;;29150:60;29171:8;29181:4;29187:2;29191:3;29196:7;29205:4;29150:20;:60::i;:::-;29228:9;29223:421;29247:3;:10;29243:1;:14;29223:421;;;29279:10;29292:3;29296:1;29292:6;;;;;;;;:::i;:::-;;;;;;;;29279:19;;29313:14;29330:7;29338:1;29330:10;;;;;;;;:::i;:::-;;;;;;;;29313:27;;29357:19;29379:9;:13;29389:2;29379:13;;;;;;;;;;;:19;29393:4;29379:19;;;;;;;;;;;;;;;;29357:41;;29436:6;29421:11;:21;;29413:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29569:6;29555:11;:20;29533:9;:13;29543:2;29533:13;;;;;;;;;;;:19;29547:4;29533:19;;;;;;;;;;;;;;;:42;;;;29626:6;29605:9;:13;29615:2;29605:13;;;;;;;;;;;:17;29619:2;29605:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29264:380;;;29259:3;;;;:::i;:::-;;;29223:421;;;;29691:2;29661:47;;29685:4;29661:47;;29675:8;29661:47;;;29695:3;29700:7;29661:47;;;;;;;:::i;:::-;;;;;;;;29721:59;29741:8;29751:4;29757:2;29761:3;29766:7;29775:4;29721:19;:59::i;:::-;29793:75;29829:8;29839:4;29845:2;29849:3;29854:7;29863:4;29793:35;:75::i;:::-;28924:952;28730:1146;;;;;:::o;34495:969::-;34663:1;34647:18;;:4;:18;;;34639:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34738:7;:14;34724:3;:10;:28;34716:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34810:16;34829:12;:10;:12::i;:::-;34810:31;;34854:66;34875:8;34885:4;34899:1;34903:3;34908:7;34854:66;;;;;;;;;;;;:20;:66::i;:::-;34938:9;34933:373;34957:3;:10;34953:1;:14;34933:373;;;34989:10;35002:3;35006:1;35002:6;;;;;;;;:::i;:::-;;;;;;;;34989:19;;35023:14;35040:7;35048:1;35040:10;;;;;;;;:::i;:::-;;;;;;;;35023:27;;35067:19;35089:9;:13;35099:2;35089:13;;;;;;;;;;;:19;35103:4;35089:19;;;;;;;;;;;;;;;;35067:41;;35146:6;35131:11;:21;;35123:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35273:6;35259:11;:20;35237:9;:13;35247:2;35237:13;;;;;;;;;;;:19;35251:4;35237:19;;;;;;;;;;;;;;;:42;;;;34974:332;;;34969:3;;;;;:::i;:::-;;;;34933:373;;;;35361:1;35323:55;;35347:4;35323:55;;35337:8;35323:55;;;35365:3;35370:7;35323:55;;;;;;;:::i;:::-;;;;;;;;35391:65;35411:8;35421:4;35435:1;35439:3;35444:7;35391:65;;;;;;;;;;;;:19;:65::i;:::-;34628:836;34495:969;;;:::o;3407:191::-;3481:16;3500:6;;;;;;;;;;;3481:25;;3526:8;3517:6;;:17;;;;;;;;;;;;;;;;;;3581:8;3550:40;;3571:8;3550:40;;;;;;;;;;;;3470:128;3407:191;:::o;35607:331::-;35762:8;35753:17;;:5;:17;;;35745:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35865:8;35827:18;:25;35846:5;35827:25;;;;;;;;;;;;;;;:35;35853:8;35827:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35911:8;35889:41;;35904:5;35889:41;;;35921:8;35889:41;;;;;;:::i;:::-;;;;;;;;35607:331;;;:::o;27398:974::-;27600:1;27586:16;;:2;:16;;;27578:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27657:16;27676:12;:10;:12::i;:::-;27657:31;;27699:20;27722:21;27740:2;27722:17;:21::i;:::-;27699:44;;27754:24;27781:25;27799:6;27781:17;:25::i;:::-;27754:52;;27819:60;27840:8;27850:4;27856:2;27860:3;27865:7;27874:4;27819:20;:60::i;:::-;27892:19;27914:9;:13;27924:2;27914:13;;;;;;;;;;;:19;27928:4;27914:19;;;;;;;;;;;;;;;;27892:41;;27967:6;27952:11;:21;;27944:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28092:6;28078:11;:20;28056:9;:13;28066:2;28056:13;;;;;;;;;;;:19;28070:4;28056:19;;;;;;;;;;;;;;;:42;;;;28141:6;28120:9;:13;28130:2;28120:13;;;;;;;;;;;:17;28134:2;28120:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28196:2;28165:46;;28190:4;28165:46;;28180:8;28165:46;;;28200:2;28204:6;28165:46;;;;;;;:::i;:::-;;;;;;;;28224:59;28244:8;28254:4;28260:2;28264:3;28269:7;28278:4;28224:19;:59::i;:::-;28296:68;28327:8;28337:4;28343:2;28347;28351:6;28359:4;28296:30;:68::i;:::-;27567:805;;;;27398:974;;;;;:::o;33437:808::-;33580:1;33564:18;;:4;:18;;;33556:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33635:16;33654:12;:10;:12::i;:::-;33635:31;;33677:20;33700:21;33718:2;33700:17;:21::i;:::-;33677:44;;33732:24;33759:25;33777:6;33759:17;:25::i;:::-;33732:52;;33797:66;33818:8;33828:4;33842:1;33846:3;33851:7;33797:66;;;;;;;;;;;;:20;:66::i;:::-;33876:19;33898:9;:13;33908:2;33898:13;;;;;;;;;;;:19;33912:4;33898:19;;;;;;;;;;;;;;;;33876:41;;33951:6;33936:11;:21;;33928:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34070:6;34056:11;:20;34034:9;:13;34044:2;34034:13;;;;;;;;;;;:19;34048:4;34034:19;;;;;;;;;;;;;;;:42;;;;34144:1;34105:54;;34130:4;34105:54;;34120:8;34105:54;;;34148:2;34152:6;34105:54;;;;;;;:::i;:::-;;;;;;;;34172:65;34192:8;34202:4;34216:1;34220:3;34225:7;34172:65;;;;;;;;;;;;:19;:65::i;:::-;33545:700;;;;33437:808;;;:::o;54279:922::-;54332:7;54352:14;54369:1;54352:18;;54419:6;54410:5;:15;54406:102;;54455:6;54446:15;;;;;;:::i;:::-;;;;;54490:2;54480:12;;;;54406:102;54535:6;54526:5;:15;54522:102;;54571:6;54562:15;;;;;;:::i;:::-;;;;;54606:2;54596:12;;;;54522:102;54651:6;54642:5;:15;54638:102;;54687:6;54678:15;;;;;;:::i;:::-;;;;;54722:2;54712:12;;;;54638:102;54767:5;54758;:14;54754:99;;54802:5;54793:14;;;;;;:::i;:::-;;;;;54836:1;54826:11;;;;54754:99;54880:5;54871;:14;54867:99;;54915:5;54906:14;;;;;;:::i;:::-;;;;;54949:1;54939:11;;;;54867:99;54993:5;54984;:14;54980:99;;55028:5;55019:14;;;;;;:::i;:::-;;;;;55062:1;55052:11;;;;54980:99;55106:5;55097;:14;55093:66;;55142:1;55132:11;;;;55093:66;55187:6;55180:13;;;54279:922;;;:::o;39873:198::-;39939:16;39968:22;40007:1;39993:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39968:41;;40031:7;40020:5;40026:1;40020:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40058:5;40051:12;;;39873:198;;;:::o;36896:221::-;;;;;;;:::o;38072:220::-;;;;;;;:::o;38300:744::-;38515:15;:2;:13;;;:15::i;:::-;38511:526;;;38568:2;38551:38;;;38590:8;38600:4;38606:2;38610:6;38618:4;38551:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38547:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38899:6;38892:14;;;;;;;;;;;:::i;:::-;;;;;;;;38547:479;;;38948:62;;;;;;;;;;:::i;:::-;;;;;;;;38547:479;38685:43;;;38673:55;;;:8;:55;;;;38669:154;;38753:50;;;;;;;;;;:::i;:::-;;;;;;;;38669:154;38624:214;38511:526;38300:744;;;;;;:::o;39052:813::-;39292:15;:2;:13;;;:15::i;:::-;39288:570;;;39345:2;39328:43;;;39372:8;39382:4;39388:3;39393:7;39402:4;39328:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39324:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39720:6;39713:14;;;;;;;;;;;:::i;:::-;;;;;;;;39324:523;;;39769:62;;;;;;;;;;:::i;:::-;;;;;;;;39324:523;39501:48;;;39489:60;;;:8;:60;;;;39485:159;;39574:50;;;;;;;;;;:::i;:::-;;;;;;;;39485:159;39408:251;39288:570;39052:813;;;;;;:::o;4844:326::-;4904:4;5161:1;5139:7;:19;;;:23;5132:30;;4844:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:118::-;6034:24;6052:5;6034:24;:::i;:::-;6029:3;6022:37;5947:118;;:::o;6071:222::-;6164:4;6202:2;6191:9;6187:18;6179:26;;6215:71;6283:1;6272:9;6268:17;6259:6;6215:71;:::i;:::-;6071:222;;;;:::o;6299:60::-;6327:3;6348:5;6341:12;;6299:60;;;:::o;6365:142::-;6415:9;6448:53;6466:34;6475:24;6493:5;6475:24;:::i;:::-;6466:34;:::i;:::-;6448:53;:::i;:::-;6435:66;;6365:142;;;:::o;6513:126::-;6563:9;6596:37;6627:5;6596:37;:::i;:::-;6583:50;;6513:126;;;:::o;6645:141::-;6710:9;6743:37;6774:5;6743:37;:::i;:::-;6730:50;;6645:141;;;:::o;6792:161::-;6894:52;6940:5;6894:52;:::i;:::-;6889:3;6882:65;6792:161;;:::o;6959:252::-;7067:4;7105:2;7094:9;7090:18;7082:26;;7118:86;7201:1;7190:9;7186:17;7177:6;7118:86;:::i;:::-;6959:252;;;;:::o;7217:329::-;7276:6;7325:2;7313:9;7304:7;7300:23;7296:32;7293:119;;;7331:79;;:::i;:::-;7293:119;7451:1;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7422:117;7217:329;;;;:::o;7552:99::-;7604:6;7638:5;7632:12;7622:22;;7552:99;;;:::o;7657:169::-;7741:11;7775:6;7770:3;7763:19;7815:4;7810:3;7806:14;7791:29;;7657:169;;;;:::o;7832:246::-;7913:1;7923:113;7937:6;7934:1;7931:13;7923:113;;;8022:1;8017:3;8013:11;8007:18;8003:1;7998:3;7994:11;7987:39;7959:2;7956:1;7952:10;7947:15;;7923:113;;;8070:1;8061:6;8056:3;8052:16;8045:27;7894:184;7832:246;;;:::o;8084:377::-;8172:3;8200:39;8233:5;8200:39;:::i;:::-;8255:71;8319:6;8314:3;8255:71;:::i;:::-;8248:78;;8335:65;8393:6;8388:3;8381:4;8374:5;8370:16;8335:65;:::i;:::-;8425:29;8447:6;8425:29;:::i;:::-;8420:3;8416:39;8409:46;;8176:285;8084:377;;;;:::o;8467:313::-;8580:4;8618:2;8607:9;8603:18;8595:26;;8667:9;8661:4;8657:20;8653:1;8642:9;8638:17;8631:47;8695:78;8768:4;8759:6;8695:78;:::i;:::-;8687:86;;8467:313;;;;:::o;8786:765::-;8872:6;8880;8888;8896;8945:3;8933:9;8924:7;8920:23;8916:33;8913:120;;;8952:79;;:::i;:::-;8913:120;9072:1;9097:53;9142:7;9133:6;9122:9;9118:22;9097:53;:::i;:::-;9087:63;;9043:117;9199:2;9225:53;9270:7;9261:6;9250:9;9246:22;9225:53;:::i;:::-;9215:63;;9170:118;9327:2;9353:53;9398:7;9389:6;9378:9;9374:22;9353:53;:::i;:::-;9343:63;;9298:118;9455:2;9481:53;9526:7;9517:6;9506:9;9502:22;9481:53;:::i;:::-;9471:63;;9426:118;8786:765;;;;;;;:::o;9557:997::-;9846:4;9884:3;9873:9;9869:19;9861:27;;9898:71;9966:1;9955:9;9951:17;9942:6;9898:71;:::i;:::-;9979:72;10047:2;10036:9;10032:18;10023:6;9979:72;:::i;:::-;10061;10129:2;10118:9;10114:18;10105:6;10061:72;:::i;:::-;10143;10211:2;10200:9;10196:18;10187:6;10143:72;:::i;:::-;10225:73;10293:3;10282:9;10278:19;10269:6;10225:73;:::i;:::-;10308;10376:3;10365:9;10361:19;10352:6;10308:73;:::i;:::-;10391;10459:3;10448:9;10444:19;10435:6;10391:73;:::i;:::-;10474;10542:3;10531:9;10527:19;10518:6;10474:73;:::i;:::-;9557:997;;;;;;;;;;;:::o;10560:311::-;10637:4;10727:18;10719:6;10716:30;10713:56;;;10749:18;;:::i;:::-;10713:56;10799:4;10791:6;10787:17;10779:25;;10859:4;10853;10849:15;10841:23;;10560:311;;;:::o;10877:117::-;10986:1;10983;10976:12;11017:710;11113:5;11138:81;11154:64;11211:6;11154:64;:::i;:::-;11138:81;:::i;:::-;11129:90;;11239:5;11268:6;11261:5;11254:21;11302:4;11295:5;11291:16;11284:23;;11355:4;11347:6;11343:17;11335:6;11331:30;11384:3;11376:6;11373:15;11370:122;;;11403:79;;:::i;:::-;11370:122;11518:6;11501:220;11535:6;11530:3;11527:15;11501:220;;;11610:3;11639:37;11672:3;11660:10;11639:37;:::i;:::-;11634:3;11627:50;11706:4;11701:3;11697:14;11690:21;;11577:144;11561:4;11556:3;11552:14;11545:21;;11501:220;;;11505:21;11119:608;;11017:710;;;;;:::o;11750:370::-;11821:5;11870:3;11863:4;11855:6;11851:17;11847:27;11837:122;;11878:79;;:::i;:::-;11837:122;11995:6;11982:20;12020:94;12110:3;12102:6;12095:4;12087:6;12083:17;12020:94;:::i;:::-;12011:103;;11827:293;11750:370;;;;:::o;12126:307::-;12187:4;12277:18;12269:6;12266:30;12263:56;;;12299:18;;:::i;:::-;12263:56;12337:29;12359:6;12337:29;:::i;:::-;12329:37;;12421:4;12415;12411:15;12403:23;;12126:307;;;:::o;12439:423::-;12516:5;12541:65;12557:48;12598:6;12557:48;:::i;:::-;12541:65;:::i;:::-;12532:74;;12629:6;12622:5;12615:21;12667:4;12660:5;12656:16;12705:3;12696:6;12691:3;12687:16;12684:25;12681:112;;;12712:79;;:::i;:::-;12681:112;12802:54;12849:6;12844:3;12839;12802:54;:::i;:::-;12522:340;12439:423;;;;;:::o;12881:338::-;12936:5;12985:3;12978:4;12970:6;12966:17;12962:27;12952:122;;12993:79;;:::i;:::-;12952:122;13110:6;13097:20;13135:78;13209:3;13201:6;13194:4;13186:6;13182:17;13135:78;:::i;:::-;13126:87;;12942:277;12881:338;;;;:::o;13225:1363::-;13370:6;13378;13386;13394;13443:3;13431:9;13422:7;13418:23;13414:33;13411:120;;;13450:79;;:::i;:::-;13411:120;13570:1;13595:53;13640:7;13631:6;13620:9;13616:22;13595:53;:::i;:::-;13585:63;;13541:117;13725:2;13714:9;13710:18;13697:32;13756:18;13748:6;13745:30;13742:117;;;13778:79;;:::i;:::-;13742:117;13883:78;13953:7;13944:6;13933:9;13929:22;13883:78;:::i;:::-;13873:88;;13668:303;14038:2;14027:9;14023:18;14010:32;14069:18;14061:6;14058:30;14055:117;;;14091:79;;:::i;:::-;14055:117;14196:78;14266:7;14257:6;14246:9;14242:22;14196:78;:::i;:::-;14186:88;;13981:303;14351:2;14340:9;14336:18;14323:32;14382:18;14374:6;14371:30;14368:117;;;14404:79;;:::i;:::-;14368:117;14509:62;14563:7;14554:6;14543:9;14539:22;14509:62;:::i;:::-;14499:72;;14294:287;13225:1363;;;;;;;:::o;14594:765::-;14680:6;14688;14696;14704;14753:3;14741:9;14732:7;14728:23;14724:33;14721:120;;;14760:79;;:::i;:::-;14721:120;14880:1;14905:53;14950:7;14941:6;14930:9;14926:22;14905:53;:::i;:::-;14895:63;;14851:117;15007:2;15033:53;15078:7;15069:6;15058:9;15054:22;15033:53;:::i;:::-;15023:63;;14978:118;15135:2;15161:53;15206:7;15197:6;15186:9;15182:22;15161:53;:::i;:::-;15151:63;;15106:118;15263:2;15289:53;15334:7;15325:6;15314:9;15310:22;15289:53;:::i;:::-;15279:63;;15234:118;14594:765;;;;;;;:::o;15365:911::-;15460:6;15468;15476;15484;15492;15541:3;15529:9;15520:7;15516:23;15512:33;15509:120;;;15548:79;;:::i;:::-;15509:120;15668:1;15693:53;15738:7;15729:6;15718:9;15714:22;15693:53;:::i;:::-;15683:63;;15639:117;15795:2;15821:53;15866:7;15857:6;15846:9;15842:22;15821:53;:::i;:::-;15811:63;;15766:118;15923:2;15949:53;15994:7;15985:6;15974:9;15970:22;15949:53;:::i;:::-;15939:63;;15894:118;16051:2;16077:53;16122:7;16113:6;16102:9;16098:22;16077:53;:::i;:::-;16067:63;;16022:118;16179:3;16206:53;16251:7;16242:6;16231:9;16227:22;16206:53;:::i;:::-;16196:63;;16150:119;15365:911;;;;;;;;:::o;16282:1509::-;16436:6;16444;16452;16460;16468;16517:3;16505:9;16496:7;16492:23;16488:33;16485:120;;;16524:79;;:::i;:::-;16485:120;16644:1;16669:53;16714:7;16705:6;16694:9;16690:22;16669:53;:::i;:::-;16659:63;;16615:117;16771:2;16797:53;16842:7;16833:6;16822:9;16818:22;16797:53;:::i;:::-;16787:63;;16742:118;16927:2;16916:9;16912:18;16899:32;16958:18;16950:6;16947:30;16944:117;;;16980:79;;:::i;:::-;16944:117;17085:78;17155:7;17146:6;17135:9;17131:22;17085:78;:::i;:::-;17075:88;;16870:303;17240:2;17229:9;17225:18;17212:32;17271:18;17263:6;17260:30;17257:117;;;17293:79;;:::i;:::-;17257:117;17398:78;17468:7;17459:6;17448:9;17444:22;17398:78;:::i;:::-;17388:88;;17183:303;17553:3;17542:9;17538:19;17525:33;17585:18;17577:6;17574:30;17571:117;;;17607:79;;:::i;:::-;17571:117;17712:62;17766:7;17757:6;17746:9;17742:22;17712:62;:::i;:::-;17702:72;;17496:288;16282:1509;;;;;;;;:::o;17797:329::-;17856:6;17905:2;17893:9;17884:7;17880:23;17876:32;17873:119;;;17911:79;;:::i;:::-;17873:119;18031:1;18056:53;18101:7;18092:6;18081:9;18077:22;18056:53;:::i;:::-;18046:63;;18002:117;17797:329;;;;:::o;18132:311::-;18209:4;18299:18;18291:6;18288:30;18285:56;;;18321:18;;:::i;:::-;18285:56;18371:4;18363:6;18359:17;18351:25;;18431:4;18425;18421:15;18413:23;;18132:311;;;:::o;18466:710::-;18562:5;18587:81;18603:64;18660:6;18603:64;:::i;:::-;18587:81;:::i;:::-;18578:90;;18688:5;18717:6;18710:5;18703:21;18751:4;18744:5;18740:16;18733:23;;18804:4;18796:6;18792:17;18784:6;18780:30;18833:3;18825:6;18822:15;18819:122;;;18852:79;;:::i;:::-;18819:122;18967:6;18950:220;18984:6;18979:3;18976:15;18950:220;;;19059:3;19088:37;19121:3;19109:10;19088:37;:::i;:::-;19083:3;19076:50;19155:4;19150:3;19146:14;19139:21;;19026:144;19010:4;19005:3;19001:14;18994:21;;18950:220;;;18954:21;18568:608;;18466:710;;;;;:::o;19199:370::-;19270:5;19319:3;19312:4;19304:6;19300:17;19296:27;19286:122;;19327:79;;:::i;:::-;19286:122;19444:6;19431:20;19469:94;19559:3;19551:6;19544:4;19536:6;19532:17;19469:94;:::i;:::-;19460:103;;19276:293;19199:370;;;;:::o;19575:894::-;19693:6;19701;19750:2;19738:9;19729:7;19725:23;19721:32;19718:119;;;19756:79;;:::i;:::-;19718:119;19904:1;19893:9;19889:17;19876:31;19934:18;19926:6;19923:30;19920:117;;;19956:79;;:::i;:::-;19920:117;20061:78;20131:7;20122:6;20111:9;20107:22;20061:78;:::i;:::-;20051:88;;19847:302;20216:2;20205:9;20201:18;20188:32;20247:18;20239:6;20236:30;20233:117;;;20269:79;;:::i;:::-;20233:117;20374:78;20444:7;20435:6;20424:9;20420:22;20374:78;:::i;:::-;20364:88;;20159:303;19575:894;;;;;:::o;20475:114::-;20542:6;20576:5;20570:12;20560:22;;20475:114;;;:::o;20595:184::-;20694:11;20728:6;20723:3;20716:19;20768:4;20763:3;20759:14;20744:29;;20595:184;;;;:::o;20785:132::-;20852:4;20875:3;20867:11;;20905:4;20900:3;20896:14;20888:22;;20785:132;;;:::o;20923:108::-;21000:24;21018:5;21000:24;:::i;:::-;20995:3;20988:37;20923:108;;:::o;21037:179::-;21106:10;21127:46;21169:3;21161:6;21127:46;:::i;:::-;21205:4;21200:3;21196:14;21182:28;;21037:179;;;;:::o;21222:113::-;21292:4;21324;21319:3;21315:14;21307:22;;21222:113;;;:::o;21371:732::-;21490:3;21519:54;21567:5;21519:54;:::i;:::-;21589:86;21668:6;21663:3;21589:86;:::i;:::-;21582:93;;21699:56;21749:5;21699:56;:::i;:::-;21778:7;21809:1;21794:284;21819:6;21816:1;21813:13;21794:284;;;21895:6;21889:13;21922:63;21981:3;21966:13;21922:63;:::i;:::-;21915:70;;22008:60;22061:6;22008:60;:::i;:::-;21998:70;;21854:224;21841:1;21838;21834:9;21829:14;;21794:284;;;21798:14;22094:3;22087:10;;21495:608;;;21371:732;;;;:::o;22109:373::-;22252:4;22290:2;22279:9;22275:18;22267:26;;22339:9;22333:4;22329:20;22325:1;22314:9;22310:17;22303:47;22367:108;22470:4;22461:6;22367:108;:::i;:::-;22359:116;;22109:373;;;;:::o;22488:1039::-;22615:6;22623;22631;22680:2;22668:9;22659:7;22655:23;22651:32;22648:119;;;22686:79;;:::i;:::-;22648:119;22806:1;22831:53;22876:7;22867:6;22856:9;22852:22;22831:53;:::i;:::-;22821:63;;22777:117;22961:2;22950:9;22946:18;22933:32;22992:18;22984:6;22981:30;22978:117;;;23014:79;;:::i;:::-;22978:117;23119:78;23189:7;23180:6;23169:9;23165:22;23119:78;:::i;:::-;23109:88;;22904:303;23274:2;23263:9;23259:18;23246:32;23305:18;23297:6;23294:30;23291:117;;;23327:79;;:::i;:::-;23291:117;23432:78;23502:7;23493:6;23482:9;23478:22;23432:78;:::i;:::-;23422:88;;23217:303;22488:1039;;;;;:::o;23533:886::-;23794:4;23832:3;23821:9;23817:19;23809:27;;23846:71;23914:1;23903:9;23899:17;23890:6;23846:71;:::i;:::-;23927:72;23995:2;23984:9;23980:18;23971:6;23927:72;:::i;:::-;24009;24077:2;24066:9;24062:18;24053:6;24009:72;:::i;:::-;24091;24159:2;24148:9;24144:18;24135:6;24091:72;:::i;:::-;24173:73;24241:3;24230:9;24226:19;24217:6;24173:73;:::i;:::-;24256;24324:3;24313:9;24309:19;24300:6;24256:73;:::i;:::-;24339;24407:3;24396:9;24392:19;24383:6;24339:73;:::i;:::-;23533:886;;;;;;;;;;:::o;24425:943::-;24520:6;24528;24536;24544;24593:3;24581:9;24572:7;24568:23;24564:33;24561:120;;;24600:79;;:::i;:::-;24561:120;24720:1;24745:53;24790:7;24781:6;24770:9;24766:22;24745:53;:::i;:::-;24735:63;;24691:117;24847:2;24873:53;24918:7;24909:6;24898:9;24894:22;24873:53;:::i;:::-;24863:63;;24818:118;24975:2;25001:53;25046:7;25037:6;25026:9;25022:22;25001:53;:::i;:::-;24991:63;;24946:118;25131:2;25120:9;25116:18;25103:32;25162:18;25154:6;25151:30;25148:117;;;25184:79;;:::i;:::-;25148:117;25289:62;25343:7;25334:6;25323:9;25319:22;25289:62;:::i;:::-;25279:72;;25074:287;24425:943;;;;;;;:::o;25374:116::-;25444:21;25459:5;25444:21;:::i;:::-;25437:5;25434:32;25424:60;;25480:1;25477;25470:12;25424:60;25374:116;:::o;25496:133::-;25539:5;25577:6;25564:20;25555:29;;25593:30;25617:5;25593:30;:::i;:::-;25496:133;;;;:::o;25635:468::-;25700:6;25708;25757:2;25745:9;25736:7;25732:23;25728:32;25725:119;;;25763:79;;:::i;:::-;25725:119;25883:1;25908:53;25953:7;25944:6;25933:9;25929:22;25908:53;:::i;:::-;25898:63;;25854:117;26010:2;26036:50;26078:7;26069:6;26058:9;26054:22;26036:50;:::i;:::-;26026:60;;25981:115;25635:468;;;;;:::o;26109:911::-;26204:6;26212;26220;26228;26236;26285:3;26273:9;26264:7;26260:23;26256:33;26253:120;;;26292:79;;:::i;:::-;26253:120;26412:1;26437:53;26482:7;26473:6;26462:9;26458:22;26437:53;:::i;:::-;26427:63;;26383:117;26539:2;26565:53;26610:7;26601:6;26590:9;26586:22;26565:53;:::i;:::-;26555:63;;26510:118;26667:2;26693:53;26738:7;26729:6;26718:9;26714:22;26693:53;:::i;:::-;26683:63;;26638:118;26795:2;26821:53;26866:7;26857:6;26846:9;26842:22;26821:53;:::i;:::-;26811:63;;26766:118;26923:3;26950:53;26995:7;26986:6;26975:9;26971:22;26950:53;:::i;:::-;26940:63;;26894:119;26109:911;;;;;;;;:::o;27026:474::-;27094:6;27102;27151:2;27139:9;27130:7;27126:23;27122:32;27119:119;;;27157:79;;:::i;:::-;27119:119;27277:1;27302:53;27347:7;27338:6;27327:9;27323:22;27302:53;:::i;:::-;27292:63;;27248:117;27404:2;27430:53;27475:7;27466:6;27455:9;27451:22;27430:53;:::i;:::-;27420:63;;27375:118;27026:474;;;;;:::o;27506:1089::-;27610:6;27618;27626;27634;27642;27691:3;27679:9;27670:7;27666:23;27662:33;27659:120;;;27698:79;;:::i;:::-;27659:120;27818:1;27843:53;27888:7;27879:6;27868:9;27864:22;27843:53;:::i;:::-;27833:63;;27789:117;27945:2;27971:53;28016:7;28007:6;27996:9;27992:22;27971:53;:::i;:::-;27961:63;;27916:118;28073:2;28099:53;28144:7;28135:6;28124:9;28120:22;28099:53;:::i;:::-;28089:63;;28044:118;28201:2;28227:53;28272:7;28263:6;28252:9;28248:22;28227:53;:::i;:::-;28217:63;;28172:118;28357:3;28346:9;28342:19;28329:33;28389:18;28381:6;28378:30;28375:117;;;28411:79;;:::i;:::-;28375:117;28516:62;28570:7;28561:6;28550:9;28546:22;28516:62;:::i;:::-;28506:72;;28300:288;27506:1089;;;;;;;;:::o;28601:619::-;28678:6;28686;28694;28743:2;28731:9;28722:7;28718:23;28714:32;28711:119;;;28749:79;;:::i;:::-;28711:119;28869:1;28894:53;28939:7;28930:6;28919:9;28915:22;28894:53;:::i;:::-;28884:63;;28840:117;28996:2;29022:53;29067:7;29058:6;29047:9;29043:22;29022:53;:::i;:::-;29012:63;;28967:118;29124:2;29150:53;29195:7;29186:6;29175:9;29171:22;29150:53;:::i;:::-;29140:63;;29095:118;28601:619;;;;;:::o;29226:229::-;29366:34;29362:1;29354:6;29350:14;29343:58;29435:12;29430:2;29422:6;29418:15;29411:37;29226:229;:::o;29461:366::-;29603:3;29624:67;29688:2;29683:3;29624:67;:::i;:::-;29617:74;;29700:93;29789:3;29700:93;:::i;:::-;29818:2;29813:3;29809:12;29802:19;;29461:366;;;:::o;29833:419::-;29999:4;30037:2;30026:9;30022:18;30014:26;;30086:9;30080:4;30076:20;30072:1;30061:9;30057:17;30050:47;30114:131;30240:4;30114:131;:::i;:::-;30106:139;;29833:419;;;:::o;30258:148::-;30360:11;30397:3;30382:18;;30258:148;;;;:::o;30412:184::-;30552:32;30548:1;30540:6;30536:14;30529:56;30412:184;:::o;30606:418::-;30766:3;30791:85;30873:2;30868:3;30791:85;:::i;:::-;30784:92;;30889:93;30978:3;30889:93;:::i;:::-;31011:2;31006:3;31002:12;30995:19;;30606:418;;;:::o;31034:410::-;31140:3;31172:39;31205:5;31172:39;:::i;:::-;31231:89;31313:6;31308:3;31231:89;:::i;:::-;31224:96;;31333:65;31391:6;31386:3;31379:4;31372:5;31368:16;31333:65;:::i;:::-;31427:6;31422:3;31418:16;31411:23;;31144:300;31034:410;;;;:::o;31454:163::-;31598:7;31594:1;31586:6;31582:14;31575:31;31454:163;:::o;31627:416::-;31787:3;31812:84;31894:1;31889:3;31812:84;:::i;:::-;31805:91;;31909:93;31998:3;31909:93;:::i;:::-;32031:1;32026:3;32022:11;32015:18;;31627:416;;;:::o;32053:827::-;32387:3;32413:148;32557:3;32413:148;:::i;:::-;32406:155;;32582:95;32673:3;32664:6;32582:95;:::i;:::-;32575:102;;32698:148;32842:3;32698:148;:::i;:::-;32691:155;;32867:3;32860:10;;32053:827;;;;:::o;32890:196::-;32942:77;32939:1;32932:88;33043:4;33040:1;33033:15;33071:4;33068:1;33061:15;33096:458;33136:7;33163:20;33181:1;33163:20;:::i;:::-;33158:25;;33201:20;33219:1;33201:20;:::i;:::-;33196:25;;33260:1;33257;33253:9;33286:30;33304:11;33286:30;:::i;:::-;33275:41;;33485:1;33476:7;33472:15;33469:1;33466:22;33442:1;33435:9;33411:95;33384:159;;33523:18;;:::i;:::-;33384:159;33144:410;33096:458;;;;:::o;33564:211::-;33604:3;33627:20;33645:1;33627:20;:::i;:::-;33622:25;;33665:20;33683:1;33665:20;:::i;:::-;33660:25;;33712:1;33709;33705:9;33698:16;;33737:3;33734:1;33731:10;33728:36;;;33744:18;;:::i;:::-;33728:36;33564:211;;;;:::o;33785:462::-;33934:4;33976:2;33965:9;33961:18;33953:26;;33993:71;34061:1;34050:9;34046:17;34037:6;33993:71;:::i;:::-;34078:72;34146:2;34135:9;34131:18;34122:6;34078:72;:::i;:::-;34164;34232:2;34221:9;34217:18;34208:6;34164:72;:::i;:::-;33785:462;;;;;;:::o;34257:149::-;34311:5;34346:6;34340:13;34331:22;;34366:30;34390:5;34366:30;:::i;:::-;34257:149;;;;:::o;34416:369::-;34483:6;34536:2;34524:9;34515:7;34511:23;34507:32;34504:119;;;34542:79;;:::i;:::-;34504:119;34670:1;34699:61;34752:7;34743:6;34732:9;34728:22;34699:61;:::i;:::-;34689:71;;34637:137;34416:369;;;;:::o;34795:249::-;34834:3;34861:24;34879:5;34861:24;:::i;:::-;34852:33;;34911:66;34904:5;34901:77;34898:103;;34981:18;;:::i;:::-;34898:103;35032:1;35025:5;35021:13;35014:20;;34795:249;;;:::o;35054:245::-;35198:34;35194:1;35186:6;35182:14;35175:58;35271:16;35266:2;35258:6;35254:15;35247:41;35054:245;:::o;35309:382::-;35451:3;35476:67;35540:2;35535:3;35476:67;:::i;:::-;35469:74;;35556:93;35645:3;35556:93;:::i;:::-;35678:2;35673:3;35669:12;35662:19;;35309:382;;;:::o;35701:435::-;35867:4;35909:2;35898:9;35894:18;35886:26;;35962:9;35956:4;35952:20;35948:1;35937:9;35933:17;35926:47;35994:131;36120:4;35994:131;:::i;:::-;35986:139;;35701:435;;;:::o;36146:240::-;36290:34;36286:1;36278:6;36274:14;36267:58;36363:11;36358:2;36350:6;36346:15;36339:36;36146:240;:::o;36396:382::-;36538:3;36563:67;36627:2;36622:3;36563:67;:::i;:::-;36556:74;;36643:93;36732:3;36643:93;:::i;:::-;36765:2;36760:3;36756:12;36749:19;;36396:382;;;:::o;36788:435::-;36954:4;36996:2;36985:9;36981:18;36973:26;;37049:9;37043:4;37039:20;37035:1;37024:9;37020:17;37013:47;37081:131;37207:4;37081:131;:::i;:::-;37073:139;;36788:435;;;:::o;37233:196::-;37285:77;37282:1;37275:88;37386:4;37383:1;37376:15;37414:4;37411:1;37404:15;37439:214;37479:4;37503:20;37521:1;37503:20;:::i;:::-;37498:25;;37541:20;37559:1;37541:20;:::i;:::-;37536:25;;37589:1;37586;37582:9;37574:17;;37617:1;37611:4;37608:11;37605:37;;;37622:18;;:::i;:::-;37605:37;37439:214;;;;:::o;37663:348::-;37784:4;37826:2;37815:9;37811:18;37803:26;;37843:71;37911:1;37900:9;37896:17;37887:6;37843:71;:::i;:::-;37928:72;37996:2;37985:9;37981:18;37972:6;37928:72;:::i;:::-;37663:348;;;;;:::o;38021:237::-;38165:34;38161:1;38153:6;38149:14;38142:58;38238:8;38233:2;38225:6;38221:15;38214:33;38021:237;:::o;38268:382::-;38410:3;38435:67;38499:2;38494:3;38435:67;:::i;:::-;38428:74;;38515:93;38604:3;38515:93;:::i;:::-;38637:2;38632:3;38628:12;38621:19;;38268:382;;;:::o;38660:435::-;38826:4;38868:2;38857:9;38853:18;38845:26;;38921:9;38915:4;38911:20;38907:1;38896:9;38892:17;38885:47;38953:131;39079:4;38953:131;:::i;:::-;38945:139;;38660:435;;;:::o;39105:155::-;39162:5;39197:6;39191:13;39182:22;;39217:33;39244:5;39217:33;:::i;:::-;39105:155;;;;:::o;39270:375::-;39340:6;39393:2;39381:9;39372:7;39368:23;39364:32;39361:119;;;39399:79;;:::i;:::-;39361:119;39527:1;39556:64;39612:7;39603:6;39592:9;39588:22;39556:64;:::i;:::-;39546:74;;39494:140;39270:375;;;;:::o;39655:190::-;39799:34;39795:1;39787:6;39783:14;39776:58;39655:190;:::o;39855:382::-;39997:3;40022:67;40086:2;40081:3;40022:67;:::i;:::-;40015:74;;40102:93;40191:3;40102:93;:::i;:::-;40224:2;40219:3;40215:12;40208:19;;39855:382;;;:::o;40247:435::-;40413:4;40455:2;40444:9;40440:18;40432:26;;40508:9;40502:4;40498:20;40494:1;40483:9;40479:17;40472:47;40540:131;40666:4;40540:131;:::i;:::-;40532:139;;40247:435;;;:::o;40692:196::-;40744:77;40741:1;40734:88;40845:4;40842:1;40835:15;40873:4;40870:1;40863:15;40898:356;40942:6;40983:1;40977:4;40973:12;40963:22;;41034:1;41028:4;41024:12;41059:18;41049:89;;41119:4;41111:6;41107:17;41097:27;;41049:89;41189:2;41181:6;41178:14;41158:18;41155:38;41152:92;;41212:18;;:::i;:::-;41152:92;40949:305;40898:356;;;:::o;41264:157::-;41313:4;41340:3;41332:11;;41367:3;41364:1;41357:14;41405:4;41402:1;41392:18;41384:26;;41264:157;;;:::o;41431:101::-;41468:6;41519:2;41514;41507:5;41503:14;41499:23;41489:33;;41431:101;;;:::o;41542:119::-;41586:8;41644:5;41638:4;41634:16;41609:41;;41542:119;;;;:::o;41671:417::-;41740:6;41794:1;41782:10;41778:18;41821:97;41851:66;41840:9;41821:97;:::i;:::-;41943:39;41973:8;41962:9;41943:39;:::i;:::-;41931:51;;42019:4;42015:9;42008:5;42004:21;41995:30;;42072:4;42062:8;42058:19;42051:5;42048:30;42038:40;;41747:341;;41671:417;;;;;:::o;42098:150::-;42148:9;42185:53;42203:34;42212:24;42230:5;42212:24;:::i;:::-;42203:34;:::i;:::-;42185:53;:::i;:::-;42172:66;;42098:150;;;:::o;42258:83::-;42301:3;42326:5;42319:12;;42258:83;;;:::o;42351:281::-;42465:39;42496:7;42465:39;:::i;:::-;42530:91;42579:41;42603:16;42579:41;:::i;:::-;42571:6;42564:4;42558:11;42530:91;:::i;:::-;42524:4;42517:105;42427:205;42351:281;;;:::o;42642:81::-;42687:3;42642:81;:::o;42733:201::-;42814:32;;:::i;:::-;42859:65;42917:6;42909;42903:4;42859:65;:::i;:::-;42786:148;42733:201;;:::o;42944:206::-;43008:132;43025:3;43018:5;43015:14;43008:132;;;43087:39;43124:1;43117:5;43087:39;:::i;:::-;43052:1;43045:5;43041:13;43032:22;;43008:132;;;42944:206;;:::o;43160:575::-;43265:2;43260:3;43257:11;43254:470;;;43303:38;43335:5;43303:38;:::i;:::-;43391:29;43409:10;43391:29;:::i;:::-;43381:8;43377:44;43582:2;43570:10;43567:18;43564:49;;;43603:8;43588:23;;43564:49;43630:80;43686:22;43704:3;43686:22;:::i;:::-;43676:8;43672:37;43659:11;43630:80;:::i;:::-;43269:455;;43254:470;43160:575;;;:::o;43745:129::-;43799:8;43857:5;43851:4;43847:16;43822:41;;43745:129;;;;:::o;43884:181::-;43928:6;43965:51;44013:1;44009:6;44001:5;43998:1;43994:13;43965:51;:::i;:::-;43961:56;44050:4;44044;44040:15;44030:25;;43935:130;43884:181;;;;:::o;44074:315::-;44150:4;44308:29;44333:3;44327:4;44308:29;:::i;:::-;44300:37;;44374:3;44371:1;44367:11;44361:4;44358:21;44350:29;;44074:315;;;;:::o;44398:1523::-;44519:37;44552:3;44519:37;:::i;:::-;44629:18;44621:6;44618:30;44615:56;;;44651:18;;:::i;:::-;44615:56;44699:38;44731:4;44725:11;44699:38;:::i;:::-;44792:67;44852:6;44844;44838:4;44792:67;:::i;:::-;44890:1;44918:4;44905:17;;44954:2;44946:6;44943:14;44975:1;44970:674;;;;45696:1;45717:6;45714:85;;;45770:9;45765:3;45761:19;45755:26;45746:35;;45714:85;45829:67;45889:6;45882:5;45829:67;:::i;:::-;45823:4;45816:81;45665:246;44936:975;;44970:674;45026:4;45022:9;45014:6;45010:22;45064:37;45096:4;45064:37;:::i;:::-;45127:1;45145:224;45159:7;45156:1;45153:14;45145:224;;;45242:9;45237:3;45233:19;45227:26;45219:6;45212:42;45297:1;45289:6;45285:14;45275:24;;45348:2;45337:9;45333:18;45320:31;;45182:4;45179:1;45175:12;45170:17;;45145:224;;;45401:6;45392:7;45389:19;45386:191;;;45463:9;45458:3;45454:19;45448:26;45510:48;45552:4;45544:6;45540:17;45529:9;45510:48;:::i;:::-;45502:6;45495:64;45409:168;45386:191;45627:1;45623;45615:6;45611:14;45607:22;45601:4;45594:36;44977:667;;;44936:975;;44490:1431;;;44398:1523;;:::o;45931:196::-;45983:77;45980:1;45973:88;46084:4;46081:1;46074:15;46112:4;46109:1;46102:15;46137:232;46281:34;46277:1;46269:6;46265:14;46258:58;46354:3;46349:2;46341:6;46337:15;46330:28;46137:232;:::o;46379:382::-;46521:3;46546:67;46610:2;46605:3;46546:67;:::i;:::-;46539:74;;46626:93;46715:3;46626:93;:::i;:::-;46748:2;46743:3;46739:12;46732:19;;46379:382;;;:::o;46771:435::-;46937:4;46979:2;46968:9;46964:18;46956:26;;47032:9;47026:4;47022:20;47018:1;47007:9;47003:17;46996:47;47064:131;47190:4;47064:131;:::i;:::-;47056:139;;46771:435;;;:::o;47216:348::-;47337:4;47379:2;47368:9;47364:18;47356:26;;47396:71;47464:1;47453:9;47449:17;47440:6;47396:71;:::i;:::-;47481:72;47549:2;47538:9;47534:18;47525:6;47481:72;:::i;:::-;47216:348;;;;;:::o;47574:239::-;47718:34;47714:1;47706:6;47702:14;47695:58;47791:10;47786:2;47778:6;47774:15;47767:35;47574:239;:::o;47823:382::-;47965:3;47990:67;48054:2;48049:3;47990:67;:::i;:::-;47983:74;;48070:93;48159:3;48070:93;:::i;:::-;48192:2;48187:3;48183:12;48176:19;;47823:382;;;:::o;48215:435::-;48381:4;48423:2;48412:9;48408:18;48400:26;;48476:9;48470:4;48466:20;48462:1;48451:9;48447:17;48440:47;48508:131;48634:4;48508:131;:::i;:::-;48500:139;;48215:435;;;:::o;48660:658::-;48881:4;48923:2;48912:9;48908:18;48900:26;;48976:9;48970:4;48966:20;48962:1;48951:9;48947:17;48940:47;49008:108;49111:4;49102:6;49008:108;:::i;:::-;49000:116;;49167:9;49161:4;49157:20;49152:2;49141:9;49137:18;49130:48;49199:108;49302:4;49293:6;49199:108;:::i;:::-;49191:116;;48660:658;;;;;:::o;49328:236::-;49472:34;49468:1;49460:6;49456:14;49449:58;49545:7;49540:2;49532:6;49528:15;49521:32;49328:236;:::o;49574:382::-;49716:3;49741:67;49805:2;49800:3;49741:67;:::i;:::-;49734:74;;49821:93;49910:3;49821:93;:::i;:::-;49943:2;49938:3;49934:12;49927:19;;49574:382;;;:::o;49966:435::-;50132:4;50174:2;50163:9;50159:18;50151:26;;50227:9;50221:4;50217:20;50213:1;50202:9;50198:17;50191:47;50259:131;50385:4;50259:131;:::i;:::-;50251:139;;49966:435;;;:::o;50411:241::-;50555:34;50551:1;50543:6;50539:14;50532:58;50628:12;50623:2;50615:6;50611:15;50604:37;50411:241;:::o;50662:382::-;50804:3;50829:67;50893:2;50888:3;50829:67;:::i;:::-;50822:74;;50909:93;50998:3;50909:93;:::i;:::-;51031:2;51026:3;51022:12;51015:19;;50662:382;;;:::o;51054:435::-;51220:4;51262:2;51251:9;51247:18;51239:26;;51315:9;51309:4;51305:20;51301:1;51290:9;51286:17;51279:47;51347:131;51473:4;51347:131;:::i;:::-;51339:139;;51054:435;;;:::o;51499:234::-;51643:34;51639:1;51631:6;51627:14;51620:58;51716:5;51711:2;51703:6;51699:15;51692:30;51499:234;:::o;51743:382::-;51885:3;51910:67;51974:2;51969:3;51910:67;:::i;:::-;51903:74;;51990:93;52079:3;51990:93;:::i;:::-;52112:2;52107:3;52103:12;52096:19;;51743:382;;;:::o;52135:435::-;52301:4;52343:2;52332:9;52328:18;52320:26;;52396:9;52390:4;52386:20;52382:1;52371:9;52367:17;52360:47;52428:131;52554:4;52428:131;:::i;:::-;52420:139;;52135:435;;;:::o;52580:235::-;52724:34;52720:1;52712:6;52708:14;52701:58;52797:6;52792:2;52784:6;52780:15;52773:31;52580:235;:::o;52825:382::-;52967:3;52992:67;53056:2;53051:3;52992:67;:::i;:::-;52985:74;;53072:93;53161:3;53072:93;:::i;:::-;53194:2;53189:3;53185:12;53178:19;;52825:382;;;:::o;53217:435::-;53383:4;53425:2;53414:9;53410:18;53402:26;;53478:9;53472:4;53468:20;53464:1;53453:9;53449:17;53442:47;53510:131;53636:4;53510:131;:::i;:::-;53502:139;;53217:435;;;:::o;53662:240::-;53806:34;53802:1;53794:6;53790:14;53783:58;53879:11;53874:2;53866:6;53862:15;53855:36;53662:240;:::o;53912:382::-;54054:3;54079:67;54143:2;54138:3;54079:67;:::i;:::-;54072:74;;54159:93;54248:3;54159:93;:::i;:::-;54281:2;54276:3;54272:12;54265:19;;53912:382;;;:::o;54304:435::-;54470:4;54512:2;54501:9;54497:18;54489:26;;54565:9;54559:4;54555:20;54551:1;54540:9;54536:17;54529:47;54597:131;54723:4;54597:131;:::i;:::-;54589:139;;54304:435;;;:::o;54749:106::-;54800:6;54838:5;54832:12;54822:22;;54749:106;;;:::o;54865:180::-;54948:11;54986:6;54981:3;54974:19;55030:4;55025:3;55021:14;55006:29;;54865:180;;;;:::o;55055:393::-;55141:3;55173:38;55205:5;55173:38;:::i;:::-;55231:70;55294:6;55289:3;55231:70;:::i;:::-;55224:77;;55314:65;55372:6;55367:3;55360:4;55353:5;55349:16;55314:65;:::i;:::-;55408:29;55430:6;55408:29;:::i;:::-;55403:3;55399:39;55392:46;;55145:303;55055:393;;;;:::o;55458:783::-;55681:4;55723:3;55712:9;55708:19;55700:27;;55741:71;55809:1;55798:9;55794:17;55785:6;55741:71;:::i;:::-;55826:72;55894:2;55883:9;55879:18;55870:6;55826:72;:::i;:::-;55912;55980:2;55969:9;55965:18;55956:6;55912:72;:::i;:::-;55998;56066:2;56055:9;56051:18;56042:6;55998:72;:::i;:::-;56122:9;56116:4;56112:20;56106:3;56095:9;56091:19;56084:49;56154:76;56225:4;56216:6;56154:76;:::i;:::-;56146:84;;55458:783;;;;;;;;:::o;56251:153::-;56307:5;56342:6;56336:13;56327:22;;56362:32;56388:5;56362:32;:::i;:::-;56251:153;;;;:::o;56414:373::-;56483:6;56536:2;56524:9;56515:7;56511:23;56507:32;56504:119;;;56542:79;;:::i;:::-;56504:119;56670:1;56699:63;56754:7;56745:6;56734:9;56730:22;56699:63;:::i;:::-;56689:73;;56637:139;56414:373;;;;:::o;56797:118::-;56841:8;56898:5;56893:3;56889:15;56864:40;;56797:118;;;:::o;56925:203::-;56960:3;57002:1;56984:16;56981:23;56978:140;;;57044:1;57041;57038;57023:23;57070:34;57101:1;57095:8;57070:34;:::i;:::-;57063:41;;56978:140;56925:203;:::o;57138:783::-;57177:3;57219:4;57201:16;57198:26;57227:5;57195:39;57260:20;;:::i;:::-;57339:1;57321:16;57317:24;57314:1;57308:4;57293:49;57376:4;57370:11;57487:16;57480:4;57472:6;57468:17;57465:39;57428:18;57420:6;57417:30;57397:125;57394:166;;;57541:5;;;;57394:166;57595:6;57589:4;57585:17;57635:3;57629:10;57666:18;57658:6;57655:30;57652:43;;;57688:5;;;;;;57652:43;57740:6;57733:4;57728:3;57724:14;57720:27;57803:1;57785:16;57781:24;57775:4;57771:35;57766:3;57763:44;57760:57;;;57810:5;;;;;;;57760:57;57831;57879:6;57873:4;57869:17;57861:6;57857:30;57851:4;57831:57;:::i;:::-;57908:3;57901:10;;57181:740;;;;;57138:783;;:::o;57931:251::-;58075:34;58071:1;58063:6;58059:14;58052:58;58148:22;58143:2;58135:6;58131:15;58124:47;57931:251;:::o;58192:382::-;58334:3;58359:67;58423:2;58418:3;58359:67;:::i;:::-;58352:74;;58439:93;58528:3;58439:93;:::i;:::-;58561:2;58556:3;58552:12;58545:19;;58192:382;;;:::o;58584:435::-;58750:4;58792:2;58781:9;58777:18;58769:26;;58845:9;58839:4;58835:20;58831:1;58820:9;58816:17;58809:47;58877:131;59003:4;58877:131;:::i;:::-;58869:139;;58584:435;;;:::o;59029:239::-;59173:34;59169:1;59161:6;59157:14;59150:58;59246:10;59241:2;59233:6;59229:15;59222:35;59029:239;:::o;59278:382::-;59420:3;59445:67;59509:2;59504:3;59445:67;:::i;:::-;59438:74;;59525:93;59614:3;59525:93;:::i;:::-;59647:2;59642:3;59638:12;59631:19;;59278:382;;;:::o;59670:435::-;59836:4;59878:2;59867:9;59863:18;59855:26;;59931:9;59925:4;59921:20;59917:1;59906:9;59902:17;59895:47;59963:131;60089:4;59963:131;:::i;:::-;59955:139;;59670:435;;;:::o;60115:1093::-;60438:4;60480:3;60469:9;60465:19;60457:27;;60498:71;60566:1;60555:9;60551:17;60542:6;60498:71;:::i;:::-;60583:72;60651:2;60640:9;60636:18;60627:6;60583:72;:::i;:::-;60706:9;60700:4;60696:20;60691:2;60680:9;60676:18;60669:48;60738:108;60841:4;60832:6;60738:108;:::i;:::-;60730:116;;60897:9;60891:4;60887:20;60882:2;60871:9;60867:18;60860:48;60929:108;61032:4;61023:6;60929:108;:::i;:::-;60921:116;;61089:9;61083:4;61079:20;61073:3;61062:9;61058:19;61051:49;61121:76;61192:4;61183:6;61121:76;:::i;:::-;61113:84;;60115:1093;;;;;;;;:::o
Swarm Source
ipfs://385836ad7f2b1de3e9b715b91c1091f2005ca3b8928075184366686aa1dead7f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.