Source Code
Overview
ETH Balance
0 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 25 from a total of 920 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
Amount
|
||||
|---|---|---|---|---|---|---|---|---|---|
| End Hunt | 9496357 | 537 days ago | IN | 0 ETH | 0.00000003 | ||||
| End Hunt | 9496340 | 537 days ago | IN | 0 ETH | 0.00000017 | ||||
| Start Hunt | 9493612 | 537 days ago | IN | 0 ETH | 0.00000039 | ||||
| End Hunt | 9493591 | 537 days ago | IN | 0 ETH | 0.00000019 | ||||
| Start Hunt | 9492088 | 537 days ago | IN | 0 ETH | 0.0000004 | ||||
| End Hunt | 9492048 | 537 days ago | IN | 0 ETH | 0.00000019 | ||||
| Start Hunt | 9489426 | 537 days ago | IN | 0 ETH | 0.00000075 | ||||
| End Hunt | 9459875 | 537 days ago | IN | 0 ETH | 0.00000039 | ||||
| Start Hunt | 9459558 | 537 days ago | IN | 0 ETH | 0.00000059 | ||||
| Start Hunt | 9451706 | 538 days ago | IN | 0 ETH | 0.00000033 | ||||
| End Hunt | 9402664 | 539 days ago | IN | 0 ETH | 0.00040285 | ||||
| Start Hunt | 9382118 | 539 days ago | IN | 0 ETH | 0.0004512 | ||||
| End Hunt | 9382108 | 539 days ago | IN | 0 ETH | 0.0004078 | ||||
| Start Hunt | 9353423 | 540 days ago | IN | 0 ETH | 0.00141398 | ||||
| End Hunt | 9313775 | 541 days ago | IN | 0 ETH | 0.00016338 | ||||
| Start Hunt | 9313625 | 541 days ago | IN | 0 ETH | 0.00014854 | ||||
| Start Hunt | 9306085 | 541 days ago | IN | 0 ETH | 0.00047526 | ||||
| End Hunt | 9298701 | 541 days ago | IN | 0 ETH | 0.00012982 | ||||
| Start Hunt | 9297667 | 541 days ago | IN | 0 ETH | 0.00008099 | ||||
| End Hunt | 9297655 | 541 days ago | IN | 0 ETH | 0.00006989 | ||||
| Start Hunt | 9296804 | 541 days ago | IN | 0 ETH | 0.00002535 | ||||
| End Hunt | 9296794 | 541 days ago | IN | 0 ETH | 0.00002176 | ||||
| Start Hunt | 9266883 | 542 days ago | IN | 0 ETH | 0.00105079 | ||||
| Start Hunt | 9260645 | 542 days ago | IN | 0 ETH | 0.00024212 | ||||
| End Hunt | 9249451 | 542 days ago | IN | 0 ETH | 0.00045587 |
Loading...
Loading
Contract Name:
WorldOfBlastGame
Compiler Version
v0.8.25+commit.b61c2a91
Contract Source Code (Solidity)
/**
*Submitted for verification at sepolia.blastscan.io on 2024-06-27
*/
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @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/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.20;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
* {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
* a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the address zero.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @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.
*
* The initial owner is set to the address provided by the deployer. 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;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @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 {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_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/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*
* ==== Security Considerations
*
* There are two important considerations concerning the use of `permit`. The first is that a valid permit signature
* expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be
* considered as an intention to spend the allowance in any specific way. The second is that because permits have
* built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should
* take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be
* generally recommended is:
*
* ```solidity
* function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {
* try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}
* doThing(..., value);
* }
*
* function doThing(..., uint256 value) public {
* token.safeTransferFrom(msg.sender, address(this), value);
* ...
* }
* ```
*
* Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of
* `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also
* {SafeERC20-safeTransferFrom}).
*
* Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so
* contracts should have entry points that don't rely on permit.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*
* CAUTION: See Security Considerations above.
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @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 or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* 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.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @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`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) 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 FailedInnerCall();
}
}
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
/**
* @dev An operation with an ERC20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*
* This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
// and not revert is the subcall reverts.
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
}
}
// File: contracts/Game.sol
pragma solidity ^0.8.0;
enum YieldMode {
AUTOMATIC,
VOID,
CLAIMABLE
}
enum GasMode {
VOID,
CLAIMABLE
}
interface IMonsterContract {
struct Monster {
uint256 id;
string name;
uint256 weight;
}
function drawMonster() external view returns (Monster memory);
}
interface IExtendedERC721 is IERC721 {
function authorizeContract(
address contractAddress,
uint256 tokenId,
bool authorized
) external;
function getItemDetails(uint256 tokenId)
external
view
returns (
string memory name,
string memory description,
uint256 damage,
uint256 attackSpeed,
uint256 durability,
uint256 durabilityPerUse,
uint256 maxDurability,
string memory weaponType,
string memory imageUrl
);
function updateDurability(uint256 tokenId, uint256 newDurability) external;
function setStakedStatus(uint256 tokenId, bool status) external;
}
interface IBlastPoints {
function configurePointsOperator(address operator) external;
function configurePointsOperatorOnBehalf(
address contractAddress,
address operator
) external;
}
interface IBlast {
// configure
function configureContract(
address contractAddress,
YieldMode _yield,
GasMode gasMode,
address governor
) external;
function configure(
YieldMode _yield,
GasMode gasMode,
address governor
) external;
// base configuration options
function configureClaimableYield() external;
function configureClaimableYieldOnBehalf(address contractAddress) external;
function configureAutomaticYield() external;
function configureAutomaticYieldOnBehalf(address contractAddress) external;
function configureVoidYield() external;
function configureVoidYieldOnBehalf(address contractAddress) external;
function configureClaimableGas() external;
function configureClaimableGasOnBehalf(address contractAddress) external;
function configureVoidGas() external;
function configureVoidGasOnBehalf(address contractAddress) external;
function configureGovernor(address _governor) external;
function configureGovernorOnBehalf(
address _newGovernor,
address contractAddress
) external;
// claim yield
function claimYield(
address contractAddress,
address recipientOfYield,
uint256 amount
) external returns (uint256);
function claimAllYield(address contractAddress, address recipientOfYield)
external
returns (uint256);
// claim gas
function claimAllGas(address contractAddress, address recipientOfGas)
external
returns (uint256);
function claimGasAtMinClaimRate(
address contractAddress,
address recipientOfGas,
uint256 minClaimRateBips
) external returns (uint256);
function claimMaxGas(address contractAddress, address recipientOfGas)
external
returns (uint256);
function claimGas(
address contractAddress,
address recipientOfGas,
uint256 gasToClaim,
uint256 gasSecondsToConsume
) external returns (uint256);
// read functions
function readClaimableYield(address contractAddress)
external
view
returns (uint256);
function readYieldConfiguration(address contractAddress)
external
view
returns (uint8);
function readGasParams(address contractAddress)
external
view
returns (
uint256 etherSeconds,
uint256 etherBalance,
uint256 lastUpdated,
GasMode
);
}
interface IERC20Rebasing {
// to reflect the configuration
function configure(YieldMode) external returns (uint256);
// "claimable" yield mode accounts can call this this claim their yield
// to another address
function claim(address recipient, uint256 amount)
external
returns (uint256);
// read the claimable amount for an account
function getClaimableAmount(address account)
external
view
returns (uint256);
}
interface WorldOfBlastDrop {
function handleTokenEarnings(
address to,
uint256 hit,
uint256 damage,
uint256 attackSpeed,
uint256 durability,
uint256 durabilityPerUse
) external returns (uint256);
function handleNFTEarnings(address to) external;
}
contract WorldOfBlastGame is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
IExtendedERC721 public NFTContract;
struct Hunt {
uint256 id;
address hunter;
address location;
uint256 weapon;
uint256 startTime;
uint256 endTime;
IMonsterContract.Monster monster;
}
address[] public locations;
uint256 public huntCount = 1;
address public _operator;
IBlast public constant BLAST =
IBlast(0x4300000000000000000000000000000000000002);
/** BLAST MAINNET
address public constant BLAST_POINTS = 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800;
IERC20Rebasing public constant USDB = IERC20Rebasing(0x4300000000000000000000000000000000000003);
IERC20Rebasing public constant WETH = IERC20Rebasing(0x4300000000000000000000000000000000000004);
**/
/*********************** BLAST TESTNET ***********************/
address public constant BLAST_POINTS =
0x2fc95838c71e76ec69ff817983BFf17c710F34E0;
IERC20Rebasing public constant USDB =
IERC20Rebasing(0x4200000000000000000000000000000000000022);
IERC20Rebasing public constant WETH =
IERC20Rebasing(0x4200000000000000000000000000000000000023);
mapping(address => uint256) public huntStartTimes;
mapping(address => uint256) public activeHuntId;
mapping(uint256 => Hunt) public hunts;
modifier onlyOperator() {
require(msg.sender == _operator, "Only the operator");
_;
}
event OperatorTransferred(
address indexed previousOperator,
address indexed newOperator
);
event HuntHasBegun(
uint256 indexed id,
uint256 startTime,
uint256 weapon,
address hunter,
address location,
string monster
);
event HuntEnd(
uint256 indexed id,
uint256 startTime,
uint256 endTime,
uint256 hitCounter,
uint256 durability
);
event updateNFTContract(address _contract);
event updateDropContract(address _contract);
// handle drop
address public contractDropAddress;
constructor() Ownable(msg.sender) {
_operator = msg.sender;
BLAST.configureAutomaticYield();
BLAST.configureClaimableYield();
BLAST.configureClaimableGas();
BLAST.configureGovernor(msg.sender);
USDB.configure(YieldMode.CLAIMABLE);
WETH.configure(YieldMode.CLAIMABLE);
IBlastPoints(BLAST_POINTS).configurePointsOperator(_operator);
emit OperatorTransferred(address(0), _operator);
}
/*********************** BLAST START ***********************/
function configureContract(
address contractAddress,
YieldMode _yield,
GasMode gasMode,
address governor
) external onlyOwner {
BLAST.configureContract(contractAddress, _yield, gasMode, governor);
}
function configure(
YieldMode _yield,
GasMode gasMode,
address governor
) external onlyOwner {
BLAST.configure(_yield, gasMode, governor);
}
function configureClaimableYieldOnBehalf(address contractAddress)
external
onlyOwner
{
BLAST.configureClaimableYieldOnBehalf(contractAddress);
}
function configureAutomaticYieldOnBehalf(address contractAddress)
external
onlyOwner
{
BLAST.configureAutomaticYieldOnBehalf(contractAddress);
}
function configureVoidYield() external onlyOwner {
BLAST.configureVoidYield();
}
function configureVoidYieldOnBehalf(address contractAddress)
external
onlyOwner
{
BLAST.configureVoidYieldOnBehalf(contractAddress);
}
function configureVoidGas() external onlyOwner {
BLAST.configureVoidGas();
}
function configureVoidGasOnBehalf(address contractAddress)
external
onlyOwner
{
BLAST.configureVoidGasOnBehalf(contractAddress);
}
function configureGovernorOnBehalf(address _newGovernor) public onlyOwner {
_operator = _newGovernor;
BLAST.configureGovernorOnBehalf(_newGovernor, address(this));
emit OperatorTransferred(_operator, _newGovernor);
}
function configurePointsOperatorOnBehalf(address newOperator)
external
onlyOwner
{
_operator = newOperator;
IBlastPoints(_operator).configurePointsOperatorOnBehalf(
address(this),
newOperator
);
}
function configureYieldModeTokens(YieldMode _weth, YieldMode _usdb)
external
onlyOperator
{
USDB.configure(_usdb);
WETH.configure(_weth);
}
function claimYieldTokens(address recipient, uint256 amount)
external
onlyOperator
{
USDB.claim(recipient, amount);
WETH.claim(recipient, amount);
}
function configureClaimableGasOnBehalf(address contractAddress)
external
onlyOperator
{
BLAST.configureClaimableGasOnBehalf(contractAddress);
}
// claim yield
function claimYield(address recipient, uint256 amount)
external
onlyOperator
{
BLAST.claimYield(address(this), recipient, amount);
}
function claimAllYield(address recipient) external onlyOperator {
BLAST.claimAllYield(address(this), recipient);
}
// claim gas
function claimAllGas(address recipientOfGas)
external
onlyOperator
returns (uint256)
{
return BLAST.claimAllGas(address(this), recipientOfGas);
}
function claimGasAtMinClaimRate(
address recipientOfGas,
uint256 minClaimRateBips
) external onlyOperator returns (uint256) {
return
BLAST.claimGasAtMinClaimRate(
address(this),
recipientOfGas,
minClaimRateBips
);
}
function claimMaxGas(address recipientOfGas)
external
onlyOperator
returns (uint256)
{
return BLAST.claimMaxGas(address(this), recipientOfGas);
}
function claimGas(
address recipientOfGas,
uint256 gasToClaim,
uint256 gasSecondsToConsume
) external onlyOperator returns (uint256) {
return
BLAST.claimGas(
address(this),
recipientOfGas,
gasToClaim,
gasSecondsToConsume
);
}
// read functions
function readClaimableYield() external view returns (uint256) {
return BLAST.readClaimableYield(address(this));
}
function readYieldConfiguration() external view returns (uint8) {
return BLAST.readYieldConfiguration(address(this));
}
function readGasParams()
external
view
returns (
uint256 etherSeconds,
uint256 etherBalance,
uint256 lastUpdated,
GasMode
)
{
return BLAST.readGasParams(address(this));
}
/*********************** BLAST END ***********************/
function getActiveHuntDetails(address userAddress)
public
view
returns (
uint256 huntId,
address location,
uint256 weapon,
uint256 startTime,
uint256 endTime,
string memory monsterName,
uint256 monsterWeight
)
{
for (uint256 i = 1; i <= huntCount; i++) {
if (hunts[i].hunter == userAddress && hunts[i].endTime == 0) {
Hunt memory activeHunt = hunts[i];
return (
activeHunt.id,
activeHunt.location,
activeHunt.weapon,
activeHunt.startTime,
activeHunt.endTime,
activeHunt.monster.name,
activeHunt.monster.weight
);
}
}
revert("No active hunt found for this user");
}
function setNFTContract(address _nftContractAddress) public onlyOwner {
NFTContract = IExtendedERC721(_nftContractAddress);
emit updateNFTContract(_nftContractAddress);
}
function setContractDropAddress(address _contractDropAddress)
external
onlyOwner
{
contractDropAddress = _contractDropAddress;
emit updateDropContract(_contractDropAddress);
}
function startHunt(address _location, uint256 nftId)
public
returns (uint256)
{
require(
NFTContract.ownerOf(nftId) == msg.sender,
"Not the owner of the NFT"
);
require(huntStartTimes[msg.sender] == 0, "Hunt already started");
NFTContract.setStakedStatus(nftId, true);
IMonsterContract monsterContract = IMonsterContract(_location);
IMonsterContract.Monster memory monster = monsterContract.drawMonster();
huntCount++;
Hunt memory newHunt = Hunt({
id: huntCount,
hunter: msg.sender,
location: _location,
weapon: nftId,
startTime: block.timestamp,
endTime: 0,
monster: monster
});
hunts[huntCount] = newHunt;
activeHuntId[msg.sender] = huntCount;
huntStartTimes[msg.sender] = block.timestamp;
emit HuntHasBegun(
huntCount,
newHunt.startTime,
nftId,
msg.sender,
_location,
monster.name
);
return huntCount;
}
function handleGameTotalHits(
uint256 attackSpeed,
uint256 startTime,
uint256 endTime
) internal pure returns (uint256) {
require(startTime < endTime, "Start time must be before end time");
uint256 duration = endTime - startTime;
uint256 totalHits = (duration * 10 / 5) * attackSpeed; // hit every 5 seconds
return totalHits;
}
function handleCharacterBattle(
uint256 attackSpeed,
uint256 durability,
uint256 durabilityPerUse,
uint256 startTime,
uint256 endTime
) internal pure returns (uint256, uint256) {
uint256 totalHitsQuantity = handleGameTotalHits(
attackSpeed,
startTime,
endTime
);
// Calculate the maximum number of hits the character can perform before durability reaches zero
uint256 hitsBeforeBroke = durability / durabilityPerUse;
// If the total hits exceed the durability-based hits, adjust the hitsBeforeBroke to totalHitsQuantity
if (hitsBeforeBroke > totalHitsQuantity) {
hitsBeforeBroke = totalHitsQuantity;
}
// Calculate the remaining durability
durability -= hitsBeforeBroke * durabilityPerUse;
if (durability < durabilityPerUse) {
if (durability > 0) {
hitsBeforeBroke++;
}
durability = 0;
}
return (durability, hitsBeforeBroke);
}
function endHunt(uint256 huntId) public {
require(
hunts[huntId].hunter == msg.sender,
"Not the hunter of this hunt"
);
require(hunts[huntId].endTime == 0, "Hunt already ended");
hunts[huntId].endTime = block.timestamp;
huntStartTimes[msg.sender] = 0;
(
,
,
/* string memory name */
/* string memory description */
uint256 damage,
uint256 attackSpeed,
uint256 durability, /* string memory max */
uint256 durabilityPerUse, /* string memory weaponType */
,
,
) = /* string memory imageUrl */
NFTContract.getItemDetails(hunts[huntId].weapon);
activeHuntId[msg.sender] = 0;
// handle nft durability
(uint256 currentDurability, uint256 hitCounter) = handleCharacterBattle(
attackSpeed,
durability,
durabilityPerUse,
hunts[huntId].startTime,
hunts[huntId].endTime
);
emit HuntEnd(
huntId,
hunts[huntId].startTime,
hunts[huntId].endTime,
hitCounter,
currentDurability
);
NFTContract.updateDurability(hunts[huntId].weapon, currentDurability);
NFTContract.setStakedStatus(hunts[huntId].weapon, false);
WorldOfBlastDrop worldOfBlastDrop = WorldOfBlastDrop(
contractDropAddress
);
worldOfBlastDrop.handleTokenEarnings(
msg.sender,
hitCounter,
damage,
attackSpeed,
durability,
durabilityPerUse
);
worldOfBlastDrop.handleNFTEarnings(msg.sender);
}
}Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"hitCounter","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"durability","type":"uint256"}],"name":"HuntEnd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weapon","type":"uint256"},{"indexed":false,"internalType":"address","name":"hunter","type":"address"},{"indexed":false,"internalType":"address","name":"location","type":"address"},{"indexed":false,"internalType":"string","name":"monster","type":"string"}],"name":"HuntHasBegun","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":false,"internalType":"address","name":"_contract","type":"address"}],"name":"updateDropContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_contract","type":"address"}],"name":"updateNFTContract","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_POINTS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTContract","outputs":[{"internalType":"contract IExtendedERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDB","outputs":[{"internalType":"contract IERC20Rebasing","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20Rebasing","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"activeHuntId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipientOfGas","type":"address"}],"name":"claimAllGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"claimAllYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipientOfGas","type":"address"},{"internalType":"uint256","name":"gasToClaim","type":"uint256"},{"internalType":"uint256","name":"gasSecondsToConsume","type":"uint256"}],"name":"claimGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipientOfGas","type":"address"},{"internalType":"uint256","name":"minClaimRateBips","type":"uint256"}],"name":"claimGasAtMinClaimRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipientOfGas","type":"address"}],"name":"claimMaxGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimYieldTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum YieldMode","name":"_yield","type":"uint8"},{"internalType":"enum GasMode","name":"gasMode","type":"uint8"},{"internalType":"address","name":"governor","type":"address"}],"name":"configure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"configureAutomaticYieldOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"configureClaimableGasOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"configureClaimableYieldOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"enum YieldMode","name":"_yield","type":"uint8"},{"internalType":"enum GasMode","name":"gasMode","type":"uint8"},{"internalType":"address","name":"governor","type":"address"}],"name":"configureContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"configureGovernorOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"configurePointsOperatorOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"configureVoidGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"configureVoidGasOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"configureVoidYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"configureVoidYieldOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum YieldMode","name":"_weth","type":"uint8"},{"internalType":"enum YieldMode","name":"_usdb","type":"uint8"}],"name":"configureYieldModeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractDropAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"huntId","type":"uint256"}],"name":"endHunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getActiveHuntDetails","outputs":[{"internalType":"uint256","name":"huntId","type":"uint256"},{"internalType":"address","name":"location","type":"address"},{"internalType":"uint256","name":"weapon","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"string","name":"monsterName","type":"string"},{"internalType":"uint256","name":"monsterWeight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"huntCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"huntStartTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hunts","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"hunter","type":"address"},{"internalType":"address","name":"location","type":"address"},{"internalType":"uint256","name":"weapon","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"weight","type":"uint256"}],"internalType":"struct IMonsterContract.Monster","name":"monster","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"locations","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readClaimableYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readGasParams","outputs":[{"internalType":"uint256","name":"etherSeconds","type":"uint256"},{"internalType":"uint256","name":"etherBalance","type":"uint256"},{"internalType":"uint256","name":"lastUpdated","type":"uint256"},{"internalType":"enum GasMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readYieldConfiguration","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractDropAddress","type":"address"}],"name":"setContractDropAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftContractAddress","type":"address"}],"name":"setNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_location","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"startHunt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526001600355348015610014575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610086575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161007d91906105d6565b60405180910390fd5b610095816104d660201b60201c565b503360045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16637114177a6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561012f575f80fd5b505af1158015610141573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663f098767a6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561019e575f80fd5b505af11580156101b0573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561020d575f80fd5b505af115801561021f573d5f803e3d5ffd5b5050505073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663eb864698336040518263ffffffff1660e01b815260040161027091906105d6565b5f604051808303815f87803b158015610287575f80fd5b505af1158015610299573d5f803e3d5ffd5b5050505073420000000000000000000000000000000000002273ffffffffffffffffffffffffffffffffffffffff16631a33757d60026040518263ffffffff1660e01b81526004016102eb9190610662565b6020604051808303815f875af1158015610307573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032b91906106b2565b5073420000000000000000000000000000000000002373ffffffffffffffffffffffffffffffffffffffff16631a33757d60026040518263ffffffff1660e01b815260040161037a9190610662565b6020604051808303815f875af1158015610396573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ba91906106b2565b50732fc95838c71e76ec69ff817983bff17c710f34e073ffffffffffffffffffffffffffffffffffffffff166336b91f2b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161042991906105d6565b5f604051808303815f87803b158015610440575f80fd5b505af1158015610452573d5f803e3d5ffd5b5050505060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a36106dd565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105c082610597565b9050919050565b6105d0816105b6565b82525050565b5f6020820190506105e95f8301846105c7565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003811061062d5761062c6105ef565b5b50565b5f81905061063d8261061c565b919050565b5f61064c82610630565b9050919050565b61065c81610642565b82525050565b5f6020820190506106755f830184610653565b92915050565b5f80fd5b5f819050919050565b6106918161067f565b811461069b575f80fd5b50565b5f815190506106ac81610688565b92915050565b5f602082840312156106c7576106c661067b565b5b5f6106d48482850161069e565b91505092915050565b61440d806106ea5f395ff3fe608060405234801561000f575f80fd5b506004361061025c575f3560e01c8063908c850211610144578063b9e0db35116100c1578063d39dd68411610085578063d39dd684146106eb578063d851b15814610709578063e00c543f14610725578063eb59acdc1461075b578063f2fde38b14610777578063fb7c1225146107935761025c565b8063b9e0db3514610623578063bcd2bf2514610653578063c2d94aec14610683578063c8992e611461069f578063cd2002f5146106bb5761025c565b8063a1c3272511610108578063a1c3272514610593578063a7ccabdf146105c3578063aa857d98146105df578063ad5c4648146105e9578063b71d6dd4146106075761025c565b8063908c8502146104f1578063925280211461050d57806397d7577614610529578063986ed785146105475780639bf2977a146105775761025c565b806337ebe3a8116101dd5780634c802f38116101a15780634c802f3814610455578063689767861461047157806370b0a8431461048d578063715018a6146104ab57806377d78471146104b55780638da5cb5b146104d35761025c565b806337ebe3a8146103c05780633ba5713e146103dc57806347a279a6146103f8578063491ae348146104165780634b8f9025146104375761025c565b8063272b132311610224578063272b132314610308578063313387d81461033857806331a0edec1461035457806331c2273b14610372578063347ba78f146103905761025c565b806310cb8e661461026057806315f3598b146102905780631869ebda146102c65780632210dfb1146102e257806325449c5b146102ec575b5f80fd5b61027a60048036038101906102759190612edb565b6107b1565b6040516102879190612f1e565b60405180910390f35b6102aa60048036038101906102a59190612f61565b6107c6565b6040516102bd9796959493929190613067565b60405180910390f35b6102e060048036038101906102db91906130db565b6108ef565b005b6102ea610a14565b005b61030660048036038101906103019190612edb565b610a8d565b005b610322600480360381019061031d9190612edb565b610b61565b60405161032f9190612f1e565b60405180910390f35b610352600480360381019061034d919061313c565b610c87565b005b61035c610e36565b60405161036991906131d5565b60405180910390f35b61037a610e4e565b604051610387919061320e565b60405180910390f35b6103aa60048036038101906103a591906130db565b610e73565b6040516103b79190612f1e565b60405180910390f35b6103da60048036038101906103d59190612edb565b61134e565b005b6103f660048036038101906103f19190612edb565b6113d3565b005b610400611458565b60405161040d9190612f1e565b60405180910390f35b61041e61145e565b60405161042e949392919061329a565b60405180910390f35b61043f6114fc565b60405161044c91906132dd565b60405180910390f35b61046f600480360381019061046a9190613319565b611514565b005b61048b60048036038101906104869190612f61565b6115a2565b005b610495611aea565b6040516104a291906132dd565b60405180910390f35b6104b3611b0f565b005b6104bd611b22565b6040516104ca91906132dd565b60405180910390f35b6104db611b47565b6040516104e891906132dd565b60405180910390f35b61050b60048036038101906105069190612edb565b611b6e565b005b61052760048036038101906105229190612edb565b611c7a565b005b610531611cfc565b60405161053e919061339d565b60405180910390f35b610561600480360381019061055c9190612edb565b611d14565b60405161056e9190612f1e565b60405180910390f35b610591600480360381019061058c9190612edb565b611d29565b005b6105ad60048036038101906105a891906133b6565b611e6b565b6040516105ba9190612f1e565b60405180910390f35b6105dd60048036038101906105d89190612edb565b611f97565b005b6105e7612019565b005b6105f1612092565b6040516105fe91906131d5565b60405180910390f35b610621600480360381019061061c9190612edb565b6120aa565b005b61063d60048036038101906106389190612f61565b61212f565b60405161064a91906132dd565b60405180910390f35b61066d600480360381019061066891906130db565b61216a565b60405161067a9190612f1e565b60405180910390f35b61069d60048036038101906106989190612edb565b612293565b005b6106b960048036038101906106b49190613406565b6123b5565b005b6106d560048036038101906106d09190612edb565b612440565b6040516106e29190612f1e565b60405180910390f35b6106f3612566565b6040516107009190612f1e565b60405180910390f35b610723600480360381019061071e91906130db565b6125f8565b005b61073f600480360381019061073a9190612edb565b6127ab565b604051610752979695949392919061349e565b60405180910390f35b61077560048036038101906107709190612edb565b612a88565b005b610791600480360381019061078c9190612edb565b612b0d565b005b61079b612b91565b6040516107a8919061352d565b60405180910390f35b6005602052805f5260405f205f915090505481565b6007602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006016040518060600160405290815f820154815260200160018201805461086090613573565b80601f016020809104026020016040519081016040528092919081815260200182805461088c90613573565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b50505050508152602001600282015481525050905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610975906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663f97196623084846040518463ffffffff1660e01b81526004016109cf9392919061360b565b6020604051808303815f875af11580156109eb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613654565b505050565b610a1c612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16632210dfb16040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610a75575f80fd5b505af1158015610a87573d5f803e3d5ffd5b50505050565b610a95612c23565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b30080ac30836040518363ffffffff1660e01b8152600401610b3192919061367f565b5f604051808303815f87803b158015610b48575f80fd5b505af1158015610b5a573d5f803e3d5ffd5b5050505050565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be8906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30846040518363ffffffff1660e01b8152600401610c4092919061367f565b6020604051808303815f875af1158015610c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c809190613654565b9050919050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d906135ed565b60405180910390fd5b73420000000000000000000000000000000000002273ffffffffffffffffffffffffffffffffffffffff16631a33757d826040518263ffffffff1660e01b8152600401610d6391906136ec565b6020604051808303815f875af1158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190613654565b5073420000000000000000000000000000000000002373ffffffffffffffffffffffffffffffffffffffff16631a33757d836040518263ffffffff1660e01b8152600401610df191906136ec565b6020604051808303815f875af1158015610e0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e319190613654565b505050565b73420000000000000000000000000000000000002281565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610ee59190612f1e565b602060405180830381865afa158015610f00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f249190613719565b73ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061378e565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff0906137f6565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16629c7dc98360016040518363ffffffff1660e01b815260040161105592919061382e565b5f604051808303815f87803b15801561106c575f80fd5b505af115801561107e573d5f803e3d5ffd5b505050505f8390505f8173ffffffffffffffffffffffffffffffffffffffff1663910946146040518163ffffffff1660e01b81526004015f60405180830381865afa1580156110cf573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110f791906139f8565b905060035f81548092919061110b90613a6c565b91905055505f6040518060e0016040528060035481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020014281526020015f81526020018381525090508060075f60035481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f820151815f015560208201518160010190816112609190613c47565b5060408201518160020155505090505060035460065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504260055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506003547f34344be0e0e3acc8ea712a1484536e6640766cbb5c4002a5c693a687e6d8899e826080015187338a8760200151604051611338959493929190613d16565b60405180910390a2600354935050505092915050565b611356612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff166337ebe3a8826040518263ffffffff1660e01b81526004016113a391906132dd565b5f604051808303815f87803b1580156113ba575f80fd5b505af11580156113cc573d5f803e3d5ffd5b5050505050565b6113db612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16633ba5713e826040518263ffffffff1660e01b815260040161142891906132dd565b5f604051808303815f87803b15801561143f575f80fd5b505af1158015611451573d5f803e3d5ffd5b5050505050565b60035481565b5f805f8073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663dde798a4306040518263ffffffff1660e01b81526004016114af91906132dd565b608060405180830381865afa1580156114ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ee9190613d82565b935093509350935090919293565b732fc95838c71e76ec69ff817983bff17c710f34e081565b61151c612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634c802f38858585856040518563ffffffff1660e01b815260040161156f9493929190613de6565b5f604051808303815f87803b158015611586575f80fd5b505af1158015611598573d5f803e3d5ffd5b5050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff1660075f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613e73565b60405180910390fd5b5f60075f8381526020019081526020015f206005015414611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613edb565b60405180910390fd5b4260075f8381526020019081526020015f20600501819055505f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f805f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373004ca060075f8881526020019081526020015f20600301546040518263ffffffff1660e01b81526004016117669190612f1e565b5f60405180830381865afa158015611780573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906117a89190613ef9565b505050955095509550955050505f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f8061182e85858560075f8c81526020019081526020015f206004015460075f8d81526020019081526020015f2060050154612caa565b91509150867fd29ed6119709d0a8bca374240d1e20458a6c20ca2bb6ba99f70cb7ab9c3468af60075f8a81526020019081526020015f206004015460075f8b81526020019081526020015f20600501548486604051611890949392919061402d565b60405180910390a260015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fea609d260075f8a81526020019081526020015f2060030154846040518363ffffffff1660e01b8152600401611908929190614070565b5f604051808303815f87803b15801561191f575f80fd5b505af1158015611931573d5f803e3d5ffd5b5050505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16629c7dc960075f8a81526020019081526020015f20600301545f6040518363ffffffff1660e01b81526004016119a492919061382e565b5f604051808303815f87803b1580156119bb575f80fd5b505af11580156119cd573d5f803e3d5ffd5b505050505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e387b3eb33848a8a8a8a6040518763ffffffff1660e01b8152600401611a3996959493929190614097565b6020604051808303815f875af1158015611a55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a799190613654565b508073ffffffffffffffffffffffffffffffffffffffff1663021d595f336040518263ffffffff1660e01b8152600401611ab391906132dd565b5f604051808303815f87803b158015611aca575f80fd5b505af1158015611adc573d5f803e3d5ffd5b505050505050505050505050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b17612c23565b611b205f612d23565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663908c8502826040518263ffffffff1660e01b8152600401611c4a91906132dd565b5f604051808303815f87803b158015611c61575f80fd5b505af1158015611c73573d5f803e3d5ffd5b5050505050565b611c82612c23565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f57c6c7c534ab0177dd16274fce1e360404e7859c1226799158ad19fc4be9a7f881604051611cf191906132dd565b60405180910390a150565b73430000000000000000000000000000000000000281565b6006602052805f5260405f205f915090505481565b611d31612c23565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16630ca12c4b82306040518363ffffffff1660e01b8152600401611dc092919061367f565b5f604051808303815f87803b158015611dd7575f80fd5b505af1158015611de9573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a350565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef2906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663fafce39e308686866040518563ffffffff1660e01b8152600401611f4e94939291906140f6565b6020604051808303815f875af1158015611f6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8e9190613654565b90509392505050565b611f9f612c23565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f78627f2b1e2947581494488c01eb6e09ee8153174a80438e3af7402e015a930f8160405161200e91906132dd565b60405180910390a150565b612021612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663aa857d986040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561207a575f80fd5b505af115801561208c573d5f803e3d5ffd5b50505050565b73420000000000000000000000000000000000002381565b6120b2612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663b71d6dd4826040518263ffffffff1660e01b81526004016120ff91906132dd565b5f604051808303815f87803b158015612116575f80fd5b505af1158015612128573d5f803e3d5ffd5b5050505050565b6002818154811061213e575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f1906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16630951888f3085856040518463ffffffff1660e01b815260040161224b9392919061360b565b6020604051808303815f875af1158015612267573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228b9190613654565b905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612319906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663860043b630836040518363ffffffff1660e01b815260040161237192919061367f565b6020604051808303815f875af115801561238d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b19190613654565b5050565b6123bd612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663c8992e618484846040518463ffffffff1660e01b815260040161240e93929190614139565b5f604051808303815f87803b158015612425575f80fd5b505af1158015612437573d5f803e3d5ffd5b50505050505050565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663662aa11d30846040518363ffffffff1660e01b815260040161251f92919061367f565b6020604051808303815f875af115801561253b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255f9190613654565b9050919050565b5f73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663ec3278e8306040518263ffffffff1660e01b81526004016125b491906132dd565b602060405180830381865afa1580156125cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f39190613654565b905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267e906135ed565b60405180910390fd5b73420000000000000000000000000000000000002273ffffffffffffffffffffffffffffffffffffffff1663aad3ec9683836040518363ffffffff1660e01b81526004016126d692919061416e565b6020604051808303815f875af11580156126f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127169190613654565b5073420000000000000000000000000000000000002373ffffffffffffffffffffffffffffffffffffffff1663aad3ec9683836040518363ffffffff1660e01b815260040161276692919061416e565b6020604051808303815f875af1158015612782573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a69190613654565b505050565b5f805f805f60605f80600190505b6003548111612a41578873ffffffffffffffffffffffffffffffffffffffff1660075f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561284357505f60075f8381526020019081526020015f2060050154145b15612a2e575f60075f8381526020019081526020015f206040518060e00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820154815260200160058201548152602001600682016040518060600160405290815f820154815260200160018201805461295f90613573565b80601f016020809104026020016040519081016040528092919081815260200182805461298b90613573565b80156129d65780601f106129ad576101008083540402835291602001916129d6565b820191905f5260205f20905b8154815290600101906020018083116129b957829003601f168201915b50505050508152602001600282015481525050815250509050805f01518160400151826060015183608001518460a001518560c00151602001518660c001516040015198509850985098509850985098505050612a7d565b8080612a3990613a6c565b9150506127b9565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7490614205565b60405180910390fd5b919395979092949650565b612a90612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663eb59acdc826040518263ffffffff1660e01b8152600401612add91906132dd565b5f604051808303815f87803b158015612af4575f80fd5b505af1158015612b06573d5f803e3d5ffd5b5050505050565b612b15612c23565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b85575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612b7c91906132dd565b60405180910390fd5b612b8e81612d23565b50565b5f73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663fd8c4b9d306040518263ffffffff1660e01b8152600401612bdf91906132dd565b602060405180830381865afa158015612bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1e919061424d565b905090565b612c2b612de4565b73ffffffffffffffffffffffffffffffffffffffff16612c49611b47565b73ffffffffffffffffffffffffffffffffffffffff1614612ca857612c6c612de4565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612c9f91906132dd565b60405180910390fd5b565b5f805f612cb8888686612deb565b90505f8688612cc791906142a5565b905081811115612cd5578190505b8681612ce191906142d5565b88612cec9190614316565b975086881015612d11575f881115612d0d578080612d0990613a6c565b9150505b5f97505b87819350935050509550959350505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f818310612e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e25906143b9565b60405180910390fd5b5f8383612e3b9190614316565b90505f856005600a84612e4e91906142d5565b612e5891906142a5565b612e6291906142d5565b905080925050509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612eaa82612e81565b9050919050565b612eba81612ea0565b8114612ec4575f80fd5b50565b5f81359050612ed581612eb1565b92915050565b5f60208284031215612ef057612eef612e79565b5b5f612efd84828501612ec7565b91505092915050565b5f819050919050565b612f1881612f06565b82525050565b5f602082019050612f315f830184612f0f565b92915050565b612f4081612f06565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f60208284031215612f7657612f75612e79565b5b5f612f8384828501612f4d565b91505092915050565b612f9581612ea0565b82525050565b612fa481612f06565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612fec82612faa565b612ff68185612fb4565b9350613006818560208601612fc4565b61300f81612fd2565b840191505092915050565b5f606083015f83015161302f5f860182612f9b565b50602083015184820360208601526130478282612fe2565b915050604083015161305c6040860182612f9b565b508091505092915050565b5f60e08201905061307a5f83018a612f0f565b6130876020830189612f8c565b6130946040830188612f8c565b6130a16060830187612f0f565b6130ae6080830186612f0f565b6130bb60a0830185612f0f565b81810360c08301526130cd818461301a565b905098975050505050505050565b5f80604083850312156130f1576130f0612e79565b5b5f6130fe85828601612ec7565b925050602061310f85828601612f4d565b9150509250929050565b60038110613125575f80fd5b50565b5f8135905061313681613119565b92915050565b5f806040838503121561315257613151612e79565b5b5f61315f85828601613128565b925050602061317085828601613128565b9150509250929050565b5f819050919050565b5f61319d61319861319384612e81565b61317a565b612e81565b9050919050565b5f6131ae82613183565b9050919050565b5f6131bf826131a4565b9050919050565b6131cf816131b5565b82525050565b5f6020820190506131e85f8301846131c6565b92915050565b5f6131f8826131a4565b9050919050565b613208816131ee565b82525050565b5f6020820190506132215f8301846131ff565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002811061326557613264613227565b5b50565b5f81905061327582613254565b919050565b5f61328482613268565b9050919050565b6132948161327a565b82525050565b5f6080820190506132ad5f830187612f0f565b6132ba6020830186612f0f565b6132c76040830185612f0f565b6132d4606083018461328b565b95945050505050565b5f6020820190506132f05f830184612f8c565b92915050565b60028110613302575f80fd5b50565b5f81359050613313816132f6565b92915050565b5f805f806080858703121561333157613330612e79565b5b5f61333e87828801612ec7565b945050602061334f87828801613128565b935050604061336087828801613305565b925050606061337187828801612ec7565b91505092959194509250565b5f613387826131a4565b9050919050565b6133978161337d565b82525050565b5f6020820190506133b05f83018461338e565b92915050565b5f805f606084860312156133cd576133cc612e79565b5b5f6133da86828701612ec7565b93505060206133eb86828701612f4d565b92505060406133fc86828701612f4d565b9150509250925092565b5f805f6060848603121561341d5761341c612e79565b5b5f61342a86828701613128565b935050602061343b86828701613305565b925050604061344c86828701612ec7565b9150509250925092565b5f82825260208201905092915050565b5f61347082612faa565b61347a8185613456565b935061348a818560208601612fc4565b61349381612fd2565b840191505092915050565b5f60e0820190506134b15f83018a612f0f565b6134be6020830189612f8c565b6134cb6040830188612f0f565b6134d86060830187612f0f565b6134e56080830186612f0f565b81810360a08301526134f78185613466565b905061350660c0830184612f0f565b98975050505050505050565b5f60ff82169050919050565b61352781613512565b82525050565b5f6020820190506135405f83018461351e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061358a57607f821691505b60208210810361359d5761359c613546565b5b50919050565b7f4f6e6c7920746865206f70657261746f720000000000000000000000000000005f82015250565b5f6135d7601183613456565b91506135e2826135a3565b602082019050919050565b5f6020820190508181035f830152613604816135cb565b9050919050565b5f60608201905061361e5f830186612f8c565b61362b6020830185612f8c565b6136386040830184612f0f565b949350505050565b5f8151905061364e81612f37565b92915050565b5f6020828403121561366957613668612e79565b5b5f61367684828501613640565b91505092915050565b5f6040820190506136925f830185612f8c565b61369f6020830184612f8c565b9392505050565b600381106136b7576136b6613227565b5b50565b5f8190506136c7826136a6565b919050565b5f6136d6826136ba565b9050919050565b6136e6816136cc565b82525050565b5f6020820190506136ff5f8301846136dd565b92915050565b5f8151905061371381612eb1565b92915050565b5f6020828403121561372e5761372d612e79565b5b5f61373b84828501613705565b91505092915050565b7f4e6f7420746865206f776e6572206f6620746865204e465400000000000000005f82015250565b5f613778601883613456565b915061378382613744565b602082019050919050565b5f6020820190508181035f8301526137a58161376c565b9050919050565b7f48756e7420616c726561647920737461727465640000000000000000000000005f82015250565b5f6137e0601483613456565b91506137eb826137ac565b602082019050919050565b5f6020820190508181035f83015261380d816137d4565b9050919050565b5f8115159050919050565b61382881613814565b82525050565b5f6040820190506138415f830185612f0f565b61384e602083018461381f565b9392505050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61388f82612fd2565b810181811067ffffffffffffffff821117156138ae576138ad613859565b5b80604052505050565b5f6138c0612e70565b90506138cc8282613886565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156138f7576138f6613859565b5b61390082612fd2565b9050602081019050919050565b5f61391f61391a846138dd565b6138b7565b90508281526020810184848401111561393b5761393a6138d9565b5b613946848285612fc4565b509392505050565b5f82601f830112613962576139616138d5565b5b815161397284826020860161390d565b91505092915050565b5f606082840312156139905761398f613855565b5b61399a60606138b7565b90505f6139a984828501613640565b5f83015250602082015167ffffffffffffffff8111156139cc576139cb6138d1565b5b6139d88482850161394e565b60208301525060406139ec84828501613640565b60408301525092915050565b5f60208284031215613a0d57613a0c612e79565b5b5f82015167ffffffffffffffff811115613a2a57613a29612e7d565b5b613a368482850161397b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a7682612f06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613aa857613aa7613a3f565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613b0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ad4565b613b198683613ad4565b95508019841693508086168417925050509392505050565b5f613b4b613b46613b4184612f06565b61317a565b612f06565b9050919050565b5f819050919050565b613b6483613b31565b613b78613b7082613b52565b848454613ae0565b825550505050565b5f90565b613b8c613b80565b613b97818484613b5b565b505050565b5b81811015613bba57613baf5f82613b84565b600181019050613b9d565b5050565b601f821115613bff57613bd081613ab3565b613bd984613ac5565b81016020851015613be8578190505b613bfc613bf485613ac5565b830182613b9c565b50505b505050565b5f82821c905092915050565b5f613c1f5f1984600802613c04565b1980831691505092915050565b5f613c378383613c10565b9150826002028217905092915050565b613c5082612faa565b67ffffffffffffffff811115613c6957613c68613859565b5b613c738254613573565b613c7e828285613bbe565b5f60209050601f831160018114613caf575f8415613c9d578287015190505b613ca78582613c2c565b865550613d0e565b601f198416613cbd86613ab3565b5f5b82811015613ce457848901518255600182019150602085019450602081019050613cbf565b86831015613d015784890151613cfd601f891682613c10565b8355505b6001600288020188555050505b505050505050565b5f60a082019050613d295f830188612f0f565b613d366020830187612f0f565b613d436040830186612f8c565b613d506060830185612f8c565b8181036080830152613d628184613466565b90509695505050505050565b5f81519050613d7c816132f6565b92915050565b5f805f8060808587031215613d9a57613d99612e79565b5b5f613da787828801613640565b9450506020613db887828801613640565b9350506040613dc987828801613640565b9250506060613dda87828801613d6e565b91505092959194509250565b5f608082019050613df95f830187612f8c565b613e0660208301866136dd565b613e13604083018561328b565b613e206060830184612f8c565b95945050505050565b7f4e6f74207468652068756e746572206f6620746869732068756e7400000000005f82015250565b5f613e5d601b83613456565b9150613e6882613e29565b602082019050919050565b5f6020820190508181035f830152613e8a81613e51565b9050919050565b7f48756e7420616c726561647920656e64656400000000000000000000000000005f82015250565b5f613ec5601283613456565b9150613ed082613e91565b602082019050919050565b5f6020820190508181035f830152613ef281613eb9565b9050919050565b5f805f805f805f805f6101208a8c031215613f1757613f16612e79565b5b5f8a015167ffffffffffffffff811115613f3457613f33612e7d565b5b613f408c828d0161394e565b99505060208a015167ffffffffffffffff811115613f6157613f60612e7d565b5b613f6d8c828d0161394e565b9850506040613f7e8c828d01613640565b9750506060613f8f8c828d01613640565b9650506080613fa08c828d01613640565b95505060a0613fb18c828d01613640565b94505060c0613fc28c828d01613640565b93505060e08a015167ffffffffffffffff811115613fe357613fe2612e7d565b5b613fef8c828d0161394e565b9250506101008a015167ffffffffffffffff81111561401157614010612e7d565b5b61401d8c828d0161394e565b9150509295985092959850929598565b5f6080820190506140405f830187612f0f565b61404d6020830186612f0f565b61405a6040830185612f0f565b6140676060830184612f0f565b95945050505050565b5f6040820190506140835f830185612f0f565b6140906020830184612f0f565b9392505050565b5f60c0820190506140aa5f830189612f8c565b6140b76020830188612f0f565b6140c46040830187612f0f565b6140d16060830186612f0f565b6140de6080830185612f0f565b6140eb60a0830184612f0f565b979650505050505050565b5f6080820190506141095f830187612f8c565b6141166020830186612f8c565b6141236040830185612f0f565b6141306060830184612f0f565b95945050505050565b5f60608201905061414c5f8301866136dd565b614159602083018561328b565b6141666040830184612f8c565b949350505050565b5f6040820190506141815f830185612f8c565b61418e6020830184612f0f565b9392505050565b7f4e6f206163746976652068756e7420666f756e6420666f7220746869732075735f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141ef602283613456565b91506141fa82614195565b604082019050919050565b5f6020820190508181035f83015261421c816141e3565b9050919050565b61422c81613512565b8114614236575f80fd5b50565b5f8151905061424781614223565b92915050565b5f6020828403121561426257614261612e79565b5b5f61426f84828501614239565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142af82612f06565b91506142ba83612f06565b9250826142ca576142c9614278565b5b828204905092915050565b5f6142df82612f06565b91506142ea83612f06565b92508282026142f881612f06565b9150828204841483151761430f5761430e613a3f565b5b5092915050565b5f61432082612f06565b915061432b83612f06565b925082820390508181111561434357614342613a3f565b5b92915050565b7f53746172742074696d65206d757374206265206265666f726520656e642074695f8201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143a3602283613456565b91506143ae82614349565b604082019050919050565b5f6020820190508181035f8301526143d081614397565b905091905056fea2646970667358221220d727d40cb4e613e8daf7ba7b5ccc0cb052b930e06354c5a9973d5c66405431d364736f6c63430008190033
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061025c575f3560e01c8063908c850211610144578063b9e0db35116100c1578063d39dd68411610085578063d39dd684146106eb578063d851b15814610709578063e00c543f14610725578063eb59acdc1461075b578063f2fde38b14610777578063fb7c1225146107935761025c565b8063b9e0db3514610623578063bcd2bf2514610653578063c2d94aec14610683578063c8992e611461069f578063cd2002f5146106bb5761025c565b8063a1c3272511610108578063a1c3272514610593578063a7ccabdf146105c3578063aa857d98146105df578063ad5c4648146105e9578063b71d6dd4146106075761025c565b8063908c8502146104f1578063925280211461050d57806397d7577614610529578063986ed785146105475780639bf2977a146105775761025c565b806337ebe3a8116101dd5780634c802f38116101a15780634c802f3814610455578063689767861461047157806370b0a8431461048d578063715018a6146104ab57806377d78471146104b55780638da5cb5b146104d35761025c565b806337ebe3a8146103c05780633ba5713e146103dc57806347a279a6146103f8578063491ae348146104165780634b8f9025146104375761025c565b8063272b132311610224578063272b132314610308578063313387d81461033857806331a0edec1461035457806331c2273b14610372578063347ba78f146103905761025c565b806310cb8e661461026057806315f3598b146102905780631869ebda146102c65780632210dfb1146102e257806325449c5b146102ec575b5f80fd5b61027a60048036038101906102759190612edb565b6107b1565b6040516102879190612f1e565b60405180910390f35b6102aa60048036038101906102a59190612f61565b6107c6565b6040516102bd9796959493929190613067565b60405180910390f35b6102e060048036038101906102db91906130db565b6108ef565b005b6102ea610a14565b005b61030660048036038101906103019190612edb565b610a8d565b005b610322600480360381019061031d9190612edb565b610b61565b60405161032f9190612f1e565b60405180910390f35b610352600480360381019061034d919061313c565b610c87565b005b61035c610e36565b60405161036991906131d5565b60405180910390f35b61037a610e4e565b604051610387919061320e565b60405180910390f35b6103aa60048036038101906103a591906130db565b610e73565b6040516103b79190612f1e565b60405180910390f35b6103da60048036038101906103d59190612edb565b61134e565b005b6103f660048036038101906103f19190612edb565b6113d3565b005b610400611458565b60405161040d9190612f1e565b60405180910390f35b61041e61145e565b60405161042e949392919061329a565b60405180910390f35b61043f6114fc565b60405161044c91906132dd565b60405180910390f35b61046f600480360381019061046a9190613319565b611514565b005b61048b60048036038101906104869190612f61565b6115a2565b005b610495611aea565b6040516104a291906132dd565b60405180910390f35b6104b3611b0f565b005b6104bd611b22565b6040516104ca91906132dd565b60405180910390f35b6104db611b47565b6040516104e891906132dd565b60405180910390f35b61050b60048036038101906105069190612edb565b611b6e565b005b61052760048036038101906105229190612edb565b611c7a565b005b610531611cfc565b60405161053e919061339d565b60405180910390f35b610561600480360381019061055c9190612edb565b611d14565b60405161056e9190612f1e565b60405180910390f35b610591600480360381019061058c9190612edb565b611d29565b005b6105ad60048036038101906105a891906133b6565b611e6b565b6040516105ba9190612f1e565b60405180910390f35b6105dd60048036038101906105d89190612edb565b611f97565b005b6105e7612019565b005b6105f1612092565b6040516105fe91906131d5565b60405180910390f35b610621600480360381019061061c9190612edb565b6120aa565b005b61063d60048036038101906106389190612f61565b61212f565b60405161064a91906132dd565b60405180910390f35b61066d600480360381019061066891906130db565b61216a565b60405161067a9190612f1e565b60405180910390f35b61069d60048036038101906106989190612edb565b612293565b005b6106b960048036038101906106b49190613406565b6123b5565b005b6106d560048036038101906106d09190612edb565b612440565b6040516106e29190612f1e565b60405180910390f35b6106f3612566565b6040516107009190612f1e565b60405180910390f35b610723600480360381019061071e91906130db565b6125f8565b005b61073f600480360381019061073a9190612edb565b6127ab565b604051610752979695949392919061349e565b60405180910390f35b61077560048036038101906107709190612edb565b612a88565b005b610791600480360381019061078c9190612edb565b612b0d565b005b61079b612b91565b6040516107a8919061352d565b60405180910390f35b6005602052805f5260405f205f915090505481565b6007602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004015490806005015490806006016040518060600160405290815f820154815260200160018201805461086090613573565b80601f016020809104026020016040519081016040528092919081815260200182805461088c90613573565b80156108d75780601f106108ae576101008083540402835291602001916108d7565b820191905f5260205f20905b8154815290600101906020018083116108ba57829003601f168201915b50505050508152602001600282015481525050905087565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610975906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663f97196623084846040518463ffffffff1660e01b81526004016109cf9392919061360b565b6020604051808303815f875af11580156109eb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0f9190613654565b505050565b610a1c612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16632210dfb16040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610a75575f80fd5b505af1158015610a87573d5f803e3d5ffd5b50505050565b610a95612c23565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b30080ac30836040518363ffffffff1660e01b8152600401610b3192919061367f565b5f604051808303815f87803b158015610b48575f80fd5b505af1158015610b5a573d5f803e3d5ffd5b5050505050565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be8906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663954fa5ee30846040518363ffffffff1660e01b8152600401610c4092919061367f565b6020604051808303815f875af1158015610c5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c809190613654565b9050919050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d906135ed565b60405180910390fd5b73420000000000000000000000000000000000002273ffffffffffffffffffffffffffffffffffffffff16631a33757d826040518263ffffffff1660e01b8152600401610d6391906136ec565b6020604051808303815f875af1158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190613654565b5073420000000000000000000000000000000000002373ffffffffffffffffffffffffffffffffffffffff16631a33757d836040518263ffffffff1660e01b8152600401610df191906136ec565b6020604051808303815f875af1158015610e0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e319190613654565b505050565b73420000000000000000000000000000000000002281565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f3373ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401610ee59190612f1e565b602060405180830381865afa158015610f00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f249190613719565b73ffffffffffffffffffffffffffffffffffffffff1614610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061378e565b60405180910390fd5b5f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff0906137f6565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16629c7dc98360016040518363ffffffff1660e01b815260040161105592919061382e565b5f604051808303815f87803b15801561106c575f80fd5b505af115801561107e573d5f803e3d5ffd5b505050505f8390505f8173ffffffffffffffffffffffffffffffffffffffff1663910946146040518163ffffffff1660e01b81526004015f60405180830381865afa1580156110cf573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110f791906139f8565b905060035f81548092919061110b90613a6c565b91905055505f6040518060e0016040528060035481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020014281526020015f81526020018381525090508060075f60035481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015f820151815f015560208201518160010190816112609190613c47565b5060408201518160020155505090505060035460065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055504260055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506003547f34344be0e0e3acc8ea712a1484536e6640766cbb5c4002a5c693a687e6d8899e826080015187338a8760200151604051611338959493929190613d16565b60405180910390a2600354935050505092915050565b611356612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff166337ebe3a8826040518263ffffffff1660e01b81526004016113a391906132dd565b5f604051808303815f87803b1580156113ba575f80fd5b505af11580156113cc573d5f803e3d5ffd5b5050505050565b6113db612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16633ba5713e826040518263ffffffff1660e01b815260040161142891906132dd565b5f604051808303815f87803b15801561143f575f80fd5b505af1158015611451573d5f803e3d5ffd5b5050505050565b60035481565b5f805f8073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663dde798a4306040518263ffffffff1660e01b81526004016114af91906132dd565b608060405180830381865afa1580156114ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ee9190613d82565b935093509350935090919293565b732fc95838c71e76ec69ff817983bff17c710f34e081565b61151c612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16634c802f38858585856040518563ffffffff1660e01b815260040161156f9493929190613de6565b5f604051808303815f87803b158015611586575f80fd5b505af1158015611598573d5f803e3d5ffd5b5050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff1660075f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613e73565b60405180910390fd5b5f60075f8381526020019081526020015f206005015414611699576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169090613edb565b60405180910390fd5b4260075f8381526020019081526020015f20600501819055505f60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f805f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373004ca060075f8881526020019081526020015f20600301546040518263ffffffff1660e01b81526004016117669190612f1e565b5f60405180830381865afa158015611780573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906117a89190613ef9565b505050955095509550955050505f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f8061182e85858560075f8c81526020019081526020015f206004015460075f8d81526020019081526020015f2060050154612caa565b91509150867fd29ed6119709d0a8bca374240d1e20458a6c20ca2bb6ba99f70cb7ab9c3468af60075f8a81526020019081526020015f206004015460075f8b81526020019081526020015f20600501548486604051611890949392919061402d565b60405180910390a260015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fea609d260075f8a81526020019081526020015f2060030154846040518363ffffffff1660e01b8152600401611908929190614070565b5f604051808303815f87803b15801561191f575f80fd5b505af1158015611931573d5f803e3d5ffd5b5050505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16629c7dc960075f8a81526020019081526020015f20600301545f6040518363ffffffff1660e01b81526004016119a492919061382e565b5f604051808303815f87803b1580156119bb575f80fd5b505af11580156119cd573d5f803e3d5ffd5b505050505f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663e387b3eb33848a8a8a8a6040518763ffffffff1660e01b8152600401611a3996959493929190614097565b6020604051808303815f875af1158015611a55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a799190613654565b508073ffffffffffffffffffffffffffffffffffffffff1663021d595f336040518263ffffffff1660e01b8152600401611ab391906132dd565b5f604051808303815f87803b158015611aca575f80fd5b505af1158015611adc573d5f803e3d5ffd5b505050505050505050505050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b17612c23565b611b205f612d23565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663908c8502826040518263ffffffff1660e01b8152600401611c4a91906132dd565b5f604051808303815f87803b158015611c61575f80fd5b505af1158015611c73573d5f803e3d5ffd5b5050505050565b611c82612c23565b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f57c6c7c534ab0177dd16274fce1e360404e7859c1226799158ad19fc4be9a7f881604051611cf191906132dd565b60405180910390a150565b73430000000000000000000000000000000000000281565b6006602052805f5260405f205f915090505481565b611d31612c23565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16630ca12c4b82306040518363ffffffff1660e01b8152600401611dc092919061367f565b5f604051808303815f87803b158015611dd7575f80fd5b505af1158015611de9573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f74da04524d50c64947f5dd5381ef1a4dca5cba8ed1d816243f9e48aa0b5617ed60405160405180910390a350565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef2906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663fafce39e308686866040518563ffffffff1660e01b8152600401611f4e94939291906140f6565b6020604051808303815f875af1158015611f6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8e9190613654565b90509392505050565b611f9f612c23565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f78627f2b1e2947581494488c01eb6e09ee8153174a80438e3af7402e015a930f8160405161200e91906132dd565b60405180910390a150565b612021612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663aa857d986040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561207a575f80fd5b505af115801561208c573d5f803e3d5ffd5b50505050565b73420000000000000000000000000000000000002381565b6120b2612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663b71d6dd4826040518263ffffffff1660e01b81526004016120ff91906132dd565b5f604051808303815f87803b158015612116575f80fd5b505af1158015612128573d5f803e3d5ffd5b5050505050565b6002818154811061213e575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f1906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff16630951888f3085856040518463ffffffff1660e01b815260040161224b9392919061360b565b6020604051808303815f875af1158015612267573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228b9190613654565b905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612322576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612319906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663860043b630836040518363ffffffff1660e01b815260040161237192919061367f565b6020604051808303815f875af115801561238d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123b19190613654565b5050565b6123bd612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663c8992e618484846040518463ffffffff1660e01b815260040161240e93929190614139565b5f604051808303815f87803b158015612425575f80fd5b505af1158015612437573d5f803e3d5ffd5b50505050505050565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c7906135ed565b60405180910390fd5b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663662aa11d30846040518363ffffffff1660e01b815260040161251f92919061367f565b6020604051808303815f875af115801561253b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255f9190613654565b9050919050565b5f73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663ec3278e8306040518263ffffffff1660e01b81526004016125b491906132dd565b602060405180830381865afa1580156125cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125f39190613654565b905090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267e906135ed565b60405180910390fd5b73420000000000000000000000000000000000002273ffffffffffffffffffffffffffffffffffffffff1663aad3ec9683836040518363ffffffff1660e01b81526004016126d692919061416e565b6020604051808303815f875af11580156126f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127169190613654565b5073420000000000000000000000000000000000002373ffffffffffffffffffffffffffffffffffffffff1663aad3ec9683836040518363ffffffff1660e01b815260040161276692919061416e565b6020604051808303815f875af1158015612782573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a69190613654565b505050565b5f805f805f60605f80600190505b6003548111612a41578873ffffffffffffffffffffffffffffffffffffffff1660075f8381526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561284357505f60075f8381526020019081526020015f2060050154145b15612a2e575f60075f8381526020019081526020015f206040518060e00160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820154815260200160058201548152602001600682016040518060600160405290815f820154815260200160018201805461295f90613573565b80601f016020809104026020016040519081016040528092919081815260200182805461298b90613573565b80156129d65780601f106129ad576101008083540402835291602001916129d6565b820191905f5260205f20905b8154815290600101906020018083116129b957829003601f168201915b50505050508152602001600282015481525050815250509050805f01518160400151826060015183608001518460a001518560c00151602001518660c001516040015198509850985098509850985098505050612a7d565b8080612a3990613a6c565b9150506127b9565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7490614205565b60405180910390fd5b919395979092949650565b612a90612c23565b73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663eb59acdc826040518263ffffffff1660e01b8152600401612add91906132dd565b5f604051808303815f87803b158015612af4575f80fd5b505af1158015612b06573d5f803e3d5ffd5b5050505050565b612b15612c23565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b85575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612b7c91906132dd565b60405180910390fd5b612b8e81612d23565b50565b5f73430000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1663fd8c4b9d306040518263ffffffff1660e01b8152600401612bdf91906132dd565b602060405180830381865afa158015612bfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c1e919061424d565b905090565b612c2b612de4565b73ffffffffffffffffffffffffffffffffffffffff16612c49611b47565b73ffffffffffffffffffffffffffffffffffffffff1614612ca857612c6c612de4565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612c9f91906132dd565b60405180910390fd5b565b5f805f612cb8888686612deb565b90505f8688612cc791906142a5565b905081811115612cd5578190505b8681612ce191906142d5565b88612cec9190614316565b975086881015612d11575f881115612d0d578080612d0990613a6c565b9150505b5f97505b87819350935050509550959350505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f818310612e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e25906143b9565b60405180910390fd5b5f8383612e3b9190614316565b90505f856005600a84612e4e91906142d5565b612e5891906142a5565b612e6291906142d5565b905080925050509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612eaa82612e81565b9050919050565b612eba81612ea0565b8114612ec4575f80fd5b50565b5f81359050612ed581612eb1565b92915050565b5f60208284031215612ef057612eef612e79565b5b5f612efd84828501612ec7565b91505092915050565b5f819050919050565b612f1881612f06565b82525050565b5f602082019050612f315f830184612f0f565b92915050565b612f4081612f06565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f60208284031215612f7657612f75612e79565b5b5f612f8384828501612f4d565b91505092915050565b612f9581612ea0565b82525050565b612fa481612f06565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612fec82612faa565b612ff68185612fb4565b9350613006818560208601612fc4565b61300f81612fd2565b840191505092915050565b5f606083015f83015161302f5f860182612f9b565b50602083015184820360208601526130478282612fe2565b915050604083015161305c6040860182612f9b565b508091505092915050565b5f60e08201905061307a5f83018a612f0f565b6130876020830189612f8c565b6130946040830188612f8c565b6130a16060830187612f0f565b6130ae6080830186612f0f565b6130bb60a0830185612f0f565b81810360c08301526130cd818461301a565b905098975050505050505050565b5f80604083850312156130f1576130f0612e79565b5b5f6130fe85828601612ec7565b925050602061310f85828601612f4d565b9150509250929050565b60038110613125575f80fd5b50565b5f8135905061313681613119565b92915050565b5f806040838503121561315257613151612e79565b5b5f61315f85828601613128565b925050602061317085828601613128565b9150509250929050565b5f819050919050565b5f61319d61319861319384612e81565b61317a565b612e81565b9050919050565b5f6131ae82613183565b9050919050565b5f6131bf826131a4565b9050919050565b6131cf816131b5565b82525050565b5f6020820190506131e85f8301846131c6565b92915050565b5f6131f8826131a4565b9050919050565b613208816131ee565b82525050565b5f6020820190506132215f8301846131ff565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002811061326557613264613227565b5b50565b5f81905061327582613254565b919050565b5f61328482613268565b9050919050565b6132948161327a565b82525050565b5f6080820190506132ad5f830187612f0f565b6132ba6020830186612f0f565b6132c76040830185612f0f565b6132d4606083018461328b565b95945050505050565b5f6020820190506132f05f830184612f8c565b92915050565b60028110613302575f80fd5b50565b5f81359050613313816132f6565b92915050565b5f805f806080858703121561333157613330612e79565b5b5f61333e87828801612ec7565b945050602061334f87828801613128565b935050604061336087828801613305565b925050606061337187828801612ec7565b91505092959194509250565b5f613387826131a4565b9050919050565b6133978161337d565b82525050565b5f6020820190506133b05f83018461338e565b92915050565b5f805f606084860312156133cd576133cc612e79565b5b5f6133da86828701612ec7565b93505060206133eb86828701612f4d565b92505060406133fc86828701612f4d565b9150509250925092565b5f805f6060848603121561341d5761341c612e79565b5b5f61342a86828701613128565b935050602061343b86828701613305565b925050604061344c86828701612ec7565b9150509250925092565b5f82825260208201905092915050565b5f61347082612faa565b61347a8185613456565b935061348a818560208601612fc4565b61349381612fd2565b840191505092915050565b5f60e0820190506134b15f83018a612f0f565b6134be6020830189612f8c565b6134cb6040830188612f0f565b6134d86060830187612f0f565b6134e56080830186612f0f565b81810360a08301526134f78185613466565b905061350660c0830184612f0f565b98975050505050505050565b5f60ff82169050919050565b61352781613512565b82525050565b5f6020820190506135405f83018461351e565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061358a57607f821691505b60208210810361359d5761359c613546565b5b50919050565b7f4f6e6c7920746865206f70657261746f720000000000000000000000000000005f82015250565b5f6135d7601183613456565b91506135e2826135a3565b602082019050919050565b5f6020820190508181035f830152613604816135cb565b9050919050565b5f60608201905061361e5f830186612f8c565b61362b6020830185612f8c565b6136386040830184612f0f565b949350505050565b5f8151905061364e81612f37565b92915050565b5f6020828403121561366957613668612e79565b5b5f61367684828501613640565b91505092915050565b5f6040820190506136925f830185612f8c565b61369f6020830184612f8c565b9392505050565b600381106136b7576136b6613227565b5b50565b5f8190506136c7826136a6565b919050565b5f6136d6826136ba565b9050919050565b6136e6816136cc565b82525050565b5f6020820190506136ff5f8301846136dd565b92915050565b5f8151905061371381612eb1565b92915050565b5f6020828403121561372e5761372d612e79565b5b5f61373b84828501613705565b91505092915050565b7f4e6f7420746865206f776e6572206f6620746865204e465400000000000000005f82015250565b5f613778601883613456565b915061378382613744565b602082019050919050565b5f6020820190508181035f8301526137a58161376c565b9050919050565b7f48756e7420616c726561647920737461727465640000000000000000000000005f82015250565b5f6137e0601483613456565b91506137eb826137ac565b602082019050919050565b5f6020820190508181035f83015261380d816137d4565b9050919050565b5f8115159050919050565b61382881613814565b82525050565b5f6040820190506138415f830185612f0f565b61384e602083018461381f565b9392505050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61388f82612fd2565b810181811067ffffffffffffffff821117156138ae576138ad613859565b5b80604052505050565b5f6138c0612e70565b90506138cc8282613886565b919050565b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff8211156138f7576138f6613859565b5b61390082612fd2565b9050602081019050919050565b5f61391f61391a846138dd565b6138b7565b90508281526020810184848401111561393b5761393a6138d9565b5b613946848285612fc4565b509392505050565b5f82601f830112613962576139616138d5565b5b815161397284826020860161390d565b91505092915050565b5f606082840312156139905761398f613855565b5b61399a60606138b7565b90505f6139a984828501613640565b5f83015250602082015167ffffffffffffffff8111156139cc576139cb6138d1565b5b6139d88482850161394e565b60208301525060406139ec84828501613640565b60408301525092915050565b5f60208284031215613a0d57613a0c612e79565b5b5f82015167ffffffffffffffff811115613a2a57613a29612e7d565b5b613a368482850161397b565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613a7682612f06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613aa857613aa7613a3f565b5b600182019050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613b0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613ad4565b613b198683613ad4565b95508019841693508086168417925050509392505050565b5f613b4b613b46613b4184612f06565b61317a565b612f06565b9050919050565b5f819050919050565b613b6483613b31565b613b78613b7082613b52565b848454613ae0565b825550505050565b5f90565b613b8c613b80565b613b97818484613b5b565b505050565b5b81811015613bba57613baf5f82613b84565b600181019050613b9d565b5050565b601f821115613bff57613bd081613ab3565b613bd984613ac5565b81016020851015613be8578190505b613bfc613bf485613ac5565b830182613b9c565b50505b505050565b5f82821c905092915050565b5f613c1f5f1984600802613c04565b1980831691505092915050565b5f613c378383613c10565b9150826002028217905092915050565b613c5082612faa565b67ffffffffffffffff811115613c6957613c68613859565b5b613c738254613573565b613c7e828285613bbe565b5f60209050601f831160018114613caf575f8415613c9d578287015190505b613ca78582613c2c565b865550613d0e565b601f198416613cbd86613ab3565b5f5b82811015613ce457848901518255600182019150602085019450602081019050613cbf565b86831015613d015784890151613cfd601f891682613c10565b8355505b6001600288020188555050505b505050505050565b5f60a082019050613d295f830188612f0f565b613d366020830187612f0f565b613d436040830186612f8c565b613d506060830185612f8c565b8181036080830152613d628184613466565b90509695505050505050565b5f81519050613d7c816132f6565b92915050565b5f805f8060808587031215613d9a57613d99612e79565b5b5f613da787828801613640565b9450506020613db887828801613640565b9350506040613dc987828801613640565b9250506060613dda87828801613d6e565b91505092959194509250565b5f608082019050613df95f830187612f8c565b613e0660208301866136dd565b613e13604083018561328b565b613e206060830184612f8c565b95945050505050565b7f4e6f74207468652068756e746572206f6620746869732068756e7400000000005f82015250565b5f613e5d601b83613456565b9150613e6882613e29565b602082019050919050565b5f6020820190508181035f830152613e8a81613e51565b9050919050565b7f48756e7420616c726561647920656e64656400000000000000000000000000005f82015250565b5f613ec5601283613456565b9150613ed082613e91565b602082019050919050565b5f6020820190508181035f830152613ef281613eb9565b9050919050565b5f805f805f805f805f6101208a8c031215613f1757613f16612e79565b5b5f8a015167ffffffffffffffff811115613f3457613f33612e7d565b5b613f408c828d0161394e565b99505060208a015167ffffffffffffffff811115613f6157613f60612e7d565b5b613f6d8c828d0161394e565b9850506040613f7e8c828d01613640565b9750506060613f8f8c828d01613640565b9650506080613fa08c828d01613640565b95505060a0613fb18c828d01613640565b94505060c0613fc28c828d01613640565b93505060e08a015167ffffffffffffffff811115613fe357613fe2612e7d565b5b613fef8c828d0161394e565b9250506101008a015167ffffffffffffffff81111561401157614010612e7d565b5b61401d8c828d0161394e565b9150509295985092959850929598565b5f6080820190506140405f830187612f0f565b61404d6020830186612f0f565b61405a6040830185612f0f565b6140676060830184612f0f565b95945050505050565b5f6040820190506140835f830185612f0f565b6140906020830184612f0f565b9392505050565b5f60c0820190506140aa5f830189612f8c565b6140b76020830188612f0f565b6140c46040830187612f0f565b6140d16060830186612f0f565b6140de6080830185612f0f565b6140eb60a0830184612f0f565b979650505050505050565b5f6080820190506141095f830187612f8c565b6141166020830186612f8c565b6141236040830185612f0f565b6141306060830184612f0f565b95945050505050565b5f60608201905061414c5f8301866136dd565b614159602083018561328b565b6141666040830184612f8c565b949350505050565b5f6040820190506141815f830185612f8c565b61418e6020830184612f0f565b9392505050565b7f4e6f206163746976652068756e7420666f756e6420666f7220746869732075735f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141ef602283613456565b91506141fa82614195565b604082019050919050565b5f6020820190508181035f83015261421c816141e3565b9050919050565b61422c81613512565b8114614236575f80fd5b50565b5f8151905061424781614223565b92915050565b5f6020828403121561426257614261612e79565b5b5f61426f84828501614239565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6142af82612f06565b91506142ba83612f06565b9250826142ca576142c9614278565b5b828204905092915050565b5f6142df82612f06565b91506142ea83612f06565b92508282026142f881612f06565b9150828204841483151761430f5761430e613a3f565b5b5092915050565b5f61432082612f06565b915061432b83612f06565b925082820390508181111561434357614342613a3f565b5b92915050565b7f53746172742074696d65206d757374206265206265666f726520656e642074695f8201527f6d65000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143a3602283613456565b91506143ae82614349565b604082019050919050565b5f6020820190508181035f8301526143d081614397565b905091905056fea2646970667358221220d727d40cb4e613e8daf7ba7b5ccc0cb052b930e06354c5a9973d5c66405431d364736f6c63430008190033
Deployed Bytecode Sourcemap
40985:13341:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42287:49;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42399:37;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;46299:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44880:90;;;:::i;:::-;;45409:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46630:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45694:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42059:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41097:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49782:1186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44221:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44410;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41396:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48037:277;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;41960:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43766:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52498:1825;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41431:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16262:103;;;:::i;:::-;;43169:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15587:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46089:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49553:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41464:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42343:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45153:248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47365:365;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49352:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44599:94;;;:::i;:::-;;42173:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44701:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41363:26;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46829:329;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46476:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44027:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47166:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47761:127;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45887:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48390:954;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;44978:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16520:220;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47896:133;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42287:49;;;;;;;;;;;;;;;;;:::o;42399:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46299:169::-;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;46410:16;;;46435:4;46442:9;46453:6;46410:50;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46299:169:::0;;:::o;44880:90::-;15473:13;:11;:13::i;:::-;41511:42:::1;44938:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44880:90::o:0;45409:277::-;15473:13;:11;:13::i;:::-;45536:11:::1;45524:9;;:23;;;;;;;;;;;;;;;;;;45571:9;;;;;;;;;;;45558:55;;;45636:4;45656:11;45558:120;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45409:277:::0;:::o;46630:191::-;46733:7;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;46765:17;;;46791:4;46798:14;46765:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46758:55;;46630:191:::0;;;:::o;45694:185::-;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42121:42:::1;45818:14;;;45833:5;45818:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42235:42;45850:14;;;45865:5;45850:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45694:185:::0;;:::o;42059:105::-;42121:42;42059:105;:::o;41097:34::-;;;;;;;;;;;;;:::o;49782:1186::-;49869:7;49946:10;49916:40;;:11;;;;;;;;;;;:19;;;49936:5;49916:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;;;49894:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;50059:1;50029:14;:26;50044:10;50029:26;;;;;;;;;;;;;;;;:31;50021:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50098:11;;;;;;;;;;;:27;;;50126:5;50133:4;50098:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50151:32;50203:9;50151:62;;50226:39;50268:15;:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50226:71;;50310:9;;:11;;;;;;;;;:::i;:::-;;;;;;50334:19;50356:237;;;;;;;;50380:9;;50356:237;;;;50412:10;50356:237;;;;;;50447:9;50356:237;;;;;;50479:5;50356:237;;;;50510:15;50356:237;;;;50549:1;50356:237;;;;50574:7;50356:237;;;50334:259;;50625:7;50606:5;:16;50612:9;;50606:16;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;50672:9;;50645:12;:24;50658:10;50645:24;;;;;;;;;;;;;;;:36;;;;50723:15;50694:14;:26;50709:10;50694:26;;;;;;;;;;;;;;;:44;;;;50783:9;;50756:175;50807:7;:17;;;50839:5;50859:10;50884:9;50908:7;:12;;;50756:175;;;;;;;;;;:::i;:::-;;;;;;;;50951:9;;50944:16;;;;;49782:1186;;;;:::o;44221:181::-;15473:13;:11;:13::i;:::-;41511:42:::1;44340:37;;;44378:15;44340:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44221:181:::0;:::o;44410:::-;15473:13;:11;:13::i;:::-;41511:42:::1;44529:37;;;44567:15;44529:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44410:181:::0;:::o;41396:28::-;;;;:::o;48037:277::-;48126:20;48161;48196:19;48230:7;41511:42;48272:19;;;48300:4;48272:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48265:41;;;;;;;;48037:277;;;;:::o;41960:90::-;42008:42;41960:90;:::o;43766:253::-;15473:13;:11;:13::i;:::-;41511:42:::1;43944:23;;;43968:15;43985:6;43993:7;44002:8;43944:67;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;43766:253:::0;;;;:::o;52498:1825::-;52595:10;52571:34;;:5;:13;52577:6;52571:13;;;;;;;;;;;:20;;;;;;;;;;;;:34;;;52549:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;52704:1;52679:5;:13;52685:6;52679:13;;;;;;;;;;;:21;;;:26;52671:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;52763:15;52739:5;:13;52745:6;52739:13;;;;;;;;;;;:21;;:39;;;;52818:1;52789:14;:26;52804:10;52789:26;;;;;;;;;;;;;;;:30;;;;52958:14;52987:19;53021:18;53078:24;53220:11;;;;;;;;;;;:26;;;53247:5;:13;53253:6;53247:13;;;;;;;;;;;:20;;;53220:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52830:438;;;;;;;;;;;;;53308:1;53281:12;:24;53294:10;53281:24;;;;;;;;;;;;;;;:28;;;;53357:25;53384:18;53406:188;53442:11;53468:10;53493:16;53524:5;:13;53530:6;53524:13;;;;;;;;;;;:23;;;53562:5;:13;53568:6;53562:13;;;;;;;;;;;:21;;;53406;:188::i;:::-;53356:238;;;;53634:6;53612:170;53655:5;:13;53661:6;53655:13;;;;;;;;;;;:23;;;53693:5;:13;53699:6;53693:13;;;;;;;;;;;:21;;;53729:10;53754:17;53612:170;;;;;;;;;:::i;:::-;;;;;;;;53795:11;;;;;;;;;;;:28;;;53824:5;:13;53830:6;53824:13;;;;;;;;;;;:20;;;53846:17;53795:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53877:11;;;;;;;;;;;:27;;;53905:5;:13;53911:6;53905:13;;;;;;;;;;;:20;;;53927:5;53877:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53946:33;54013:19;;;;;;;;;;;53946:97;;54056:16;:36;;;54107:10;54132;54157:6;54178:11;54204:10;54229:16;54056:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;54269:16;:34;;;54304:10;54269:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52538:1785;;;;;;;52498:1825;:::o;41431:24::-;;;;;;;;;;;;;:::o;16262:103::-;15473:13;:11;:13::i;:::-;16327:30:::1;16354:1;16327:18;:30::i;:::-;16262:103::o:0;43169:34::-;;;;;;;;;;;;;:::o;15587:87::-;15633:7;15660:6;;;;;;;;;;;15653:13;;15587:87;:::o;46089:180::-;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;46209:35;;;46245:15;46209:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46089:180:::0;:::o;49553:221::-;15473:13;:11;:13::i;:::-;49690:20:::1;49668:19;;:42;;;;;;;;;;;;;;;;;;49726:40;49745:20;49726:40;;;;;;:::i;:::-;;;;;;;;49553:221:::0;:::o;41464:90::-;41511:42;41464:90;:::o;42343:47::-;;;;;;;;;;;;;;;;;:::o;45153:248::-;15473:13;:11;:13::i;:::-;45250:12:::1;45238:9;;:24;;;;;;;;;;;;;;;;;;41511:42;45273:31;;;45305:12;45327:4;45273:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45380:12;45349:44;;45369:9;;;;;;;;;;;45349:44;;;;;;;;;;;;45153:248:::0;:::o;47365:365::-;47521:7;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;47561:14;;;47602:4;47626:14;47659:10;47688:19;47561:161;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47541:181;;47365:365:::0;;;;;:::o;49352:193::-;15473:13;:11;:13::i;:::-;49463:19:::1;49433:11;;:50;;;;;;;;;;;;;;;;;;49499:38;49517:19;49499:38;;;;;;:::i;:::-;;;;;;;;49352:193:::0;:::o;44599:94::-;15473:13;:11;:13::i;:::-;41511:42:::1;44659:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44599:94::o:0;42173:105::-;42235:42;42173:105;:::o;44701:171::-;15473:13;:11;:13::i;:::-;41511:42:::1;44815:32;;;44848:15;44815:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44701:171:::0;:::o;41363:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46829:329::-;46967:7;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;47007:28;;;47062:4;47086:14;47119:16;47007:143;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46987:163;;46829:329:::0;;;;:::o;46476:128::-;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;46551:19;;;46579:4;46586:9;46551:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46476:128:::0;:::o;44027:186::-;15473:13;:11;:13::i;:::-;41511:42:::1;44163:15;;;44179:6;44187:7;44196:8;44163:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44027:186:::0;;;:::o;47166:191::-;47269:7;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41511:42:::1;47301:17;;;47327:4;47334:14;47301:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47294:55;;47166:191:::0;;;:::o;47761:127::-;47814:7;41511:42;47841:24;;;47874:4;47841:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47834:46;;47761:127;:::o;45887:194::-;42502:9;;;;;;;;;;;42488:23;;:10;:23;;;42480:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42121:42:::1;46004:10;;;46015:9;46026:6;46004:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42235:42;46044:10;;;46055:9;46066:6;46044:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45887:194:::0;;:::o;48390:954::-;48503:14;48532:16;48563:14;48592:17;48624:15;48654:25;48694:21;48748:9;48760:1;48748:13;;48743:537;48768:9;;48763:1;:14;48743:537;;48822:11;48803:30;;:5;:8;48809:1;48803:8;;;;;;;;;;;:15;;;;;;;;;;;;:30;;;:55;;;;;48857:1;48837:5;:8;48843:1;48837:8;;;;;;;;;;;:16;;;:21;48803:55;48799:470;;;48879:22;48904:5;:8;48910:1;48904:8;;;;;;;;;;;48879:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48961:10;:13;;;48997:10;:19;;;49039:10;:17;;;49079:10;:20;;;49122:10;:18;;;49163:10;:18;;;:23;;;49209:10;:18;;;:25;;;48931:322;;;;;;;;;;;;;;;;;;48799:470;48779:3;;;;;:::i;:::-;;;;48743:537;;;;49292:44;;;;;;;;;;:::i;:::-;;;;;;;;48390:954;;;;;;;;;;:::o;44978:167::-;15473:13;:11;:13::i;:::-;41511:42:::1;45090:30;;;45121:15;45090:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44978:167:::0;:::o;16520:220::-;15473:13;:11;:13::i;:::-;16625:1:::1;16605:22;;:8;:22;;::::0;16601:93:::1;;16679:1;16651:31;;;;;;;;;;;:::i;:::-;;;;;;;;16601:93;16704:28;16723:8;16704:18;:28::i;:::-;16520:220:::0;:::o;47896:133::-;47953:5;41511:42;47978:28;;;48015:4;47978:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47971:50;;47896:133;:::o;15752:166::-;15823:12;:10;:12::i;:::-;15812:23;;:7;:5;:7::i;:::-;:23;;;15808:103;;15886:12;:10;:12::i;:::-;15859:40;;;;;;;;;;;:::i;:::-;;;;;;;;15808:103;15752:166::o;51384:1106::-;51593:7;51602;51622:25;51650:102;51684:11;51710:9;51734:7;51650:19;:102::i;:::-;51622:130;;51871:23;51910:16;51897:10;:29;;;;:::i;:::-;51871:55;;52073:17;52055:15;:35;52051:103;;;52125:17;52107:35;;52051:103;52245:16;52227:15;:34;;;;:::i;:::-;52213:48;;;;;:::i;:::-;;;52291:16;52278:10;:29;52274:162;;;52341:1;52328:10;:14;52324:72;;;52363:17;;;;;:::i;:::-;;;;52324:72;52423:1;52410:14;;52274:162;52454:10;52466:15;52446:36;;;;;;51384:1106;;;;;;;;:::o;16900:191::-;16974:16;16993:6;;;;;;;;;;;16974:25;;17019:8;17010:6;;:17;;;;;;;;;;;;;;;;;;17074:8;17043:40;;17064:8;17043:40;;;;;;;;;;;;16963:128;16900:191;:::o;13596:98::-;13649:7;13676:10;13669:17;;13596:98;:::o;50976:400::-;51119:7;51159;51147:9;:19;51139:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;51216:16;51245:9;51235:7;:19;;;;:::i;:::-;51216:38;;51265:17;51307:11;51302:1;51297:2;51286:8;:13;;;;:::i;:::-;:17;;;;:::i;:::-;51285:33;;;;:::i;:::-;51265:53;;51359:9;51352:16;;;;50976:400;;;;;:::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:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:118::-;2306:24;2324:5;2306:24;:::i;:::-;2301:3;2294:37;2219:118;;:::o;2343:108::-;2420:24;2438:5;2420:24;:::i;:::-;2415:3;2408:37;2343:108;;:::o;2457:99::-;2509:6;2543:5;2537:12;2527:22;;2457:99;;;:::o;2562:159::-;2636:11;2670:6;2665:3;2658:19;2710:4;2705:3;2701:14;2686:29;;2562:159;;;;:::o;2727:139::-;2816:6;2811:3;2806;2800:23;2857:1;2848:6;2843:3;2839:16;2832:27;2727:139;;;:::o;2872:102::-;2913:6;2964:2;2960:7;2955:2;2948:5;2944:14;2940:28;2930:38;;2872:102;;;:::o;2980:357::-;3058:3;3086:39;3119:5;3086:39;:::i;:::-;3141:61;3195:6;3190:3;3141:61;:::i;:::-;3134:68;;3211:65;3269:6;3264:3;3257:4;3250:5;3246:16;3211:65;:::i;:::-;3301:29;3323:6;3301:29;:::i;:::-;3296:3;3292:39;3285:46;;3062:275;2980:357;;;;:::o;3417:780::-;3536:3;3572:4;3567:3;3563:14;3657:4;3650:5;3646:16;3640:23;3676:63;3733:4;3728:3;3724:14;3710:12;3676:63;:::i;:::-;3587:162;3831:4;3824:5;3820:16;3814:23;3884:3;3878:4;3874:14;3867:4;3862:3;3858:14;3851:38;3910:73;3978:4;3964:12;3910:73;:::i;:::-;3902:81;;3759:235;4078:4;4071:5;4067:16;4061:23;4097:63;4154:4;4149:3;4145:14;4131:12;4097:63;:::i;:::-;4004:166;4187:4;4180:11;;3541:656;3417:780;;;;:::o;4203:1037::-;4514:4;4552:3;4541:9;4537:19;4529:27;;4566:71;4634:1;4623:9;4619:17;4610:6;4566:71;:::i;:::-;4647:72;4715:2;4704:9;4700:18;4691:6;4647:72;:::i;:::-;4729;4797:2;4786:9;4782:18;4773:6;4729:72;:::i;:::-;4811;4879:2;4868:9;4864:18;4855:6;4811:72;:::i;:::-;4893:73;4961:3;4950:9;4946:19;4937:6;4893:73;:::i;:::-;4976;5044:3;5033:9;5029:19;5020:6;4976:73;:::i;:::-;5097:9;5091:4;5087:20;5081:3;5070:9;5066:19;5059:49;5125:108;5228:4;5219:6;5125:108;:::i;:::-;5117:116;;4203:1037;;;;;;;;;;:::o;5246:474::-;5314:6;5322;5371:2;5359:9;5350:7;5346:23;5342:32;5339:119;;;5377:79;;:::i;:::-;5339:119;5497:1;5522:53;5567:7;5558:6;5547:9;5543:22;5522:53;:::i;:::-;5512:63;;5468:117;5624:2;5650:53;5695:7;5686:6;5675:9;5671:22;5650:53;:::i;:::-;5640:63;;5595:118;5246:474;;;;;:::o;5726:113::-;5813:1;5806:5;5803:12;5793:40;;5829:1;5826;5819:12;5793:40;5726:113;:::o;5845:167::-;5905:5;5943:6;5930:20;5921:29;;5959:47;6000:5;5959:47;:::i;:::-;5845:167;;;;:::o;6018:530::-;6114:6;6122;6171:2;6159:9;6150:7;6146:23;6142:32;6139:119;;;6177:79;;:::i;:::-;6139:119;6297:1;6322:67;6381:7;6372:6;6361:9;6357:22;6322:67;:::i;:::-;6312:77;;6268:131;6438:2;6464:67;6523:7;6514:6;6503:9;6499:22;6464:67;:::i;:::-;6454:77;;6409:132;6018:530;;;;;:::o;6554:60::-;6582:3;6603:5;6596:12;;6554:60;;;:::o;6620:142::-;6670:9;6703:53;6721:34;6730:24;6748:5;6730:24;:::i;:::-;6721:34;:::i;:::-;6703:53;:::i;:::-;6690:66;;6620:142;;;:::o;6768:126::-;6818:9;6851:37;6882:5;6851:37;:::i;:::-;6838:50;;6768:126;;;:::o;6900:149::-;6973:9;7006:37;7037:5;7006:37;:::i;:::-;6993:50;;6900:149;;;:::o;7055:177::-;7165:60;7219:5;7165:60;:::i;:::-;7160:3;7153:73;7055:177;;:::o;7238:268::-;7354:4;7392:2;7381:9;7377:18;7369:26;;7405:94;7496:1;7485:9;7481:17;7472:6;7405:94;:::i;:::-;7238:268;;;;:::o;7512:150::-;7586:9;7619:37;7650:5;7619:37;:::i;:::-;7606:50;;7512:150;;;:::o;7668:179::-;7779:61;7834:5;7779:61;:::i;:::-;7774:3;7767:74;7668:179;;:::o;7853:270::-;7970:4;8008:2;7997:9;7993:18;7985:26;;8021:95;8113:1;8102:9;8098:17;8089:6;8021:95;:::i;:::-;7853:270;;;;:::o;8129:180::-;8177:77;8174:1;8167:88;8274:4;8271:1;8264:15;8298:4;8295:1;8288:15;8315:117;8400:1;8393:5;8390:12;8380:46;;8406:18;;:::i;:::-;8380:46;8315:117;:::o;8438:135::-;8487:7;8516:5;8505:16;;8522:45;8561:5;8522:45;:::i;:::-;8438:135;;;:::o;8579:::-;8639:9;8672:36;8702:5;8672:36;:::i;:::-;8659:49;;8579:135;;;:::o;8720:151::-;8817:47;8858:5;8817:47;:::i;:::-;8812:3;8805:60;8720:151;;:::o;8877:573::-;9064:4;9102:3;9091:9;9087:19;9079:27;;9116:71;9184:1;9173:9;9169:17;9160:6;9116:71;:::i;:::-;9197:72;9265:2;9254:9;9250:18;9241:6;9197:72;:::i;:::-;9279;9347:2;9336:9;9332:18;9323:6;9279:72;:::i;:::-;9361:82;9439:2;9428:9;9424:18;9415:6;9361:82;:::i;:::-;8877:573;;;;;;;:::o;9456:222::-;9549:4;9587:2;9576:9;9572:18;9564:26;;9600:71;9668:1;9657:9;9653:17;9644:6;9600:71;:::i;:::-;9456:222;;;;:::o;9684:111::-;9769:1;9762:5;9759:12;9749:40;;9785:1;9782;9775:12;9749:40;9684:111;:::o;9801:163::-;9859:5;9897:6;9884:20;9875:29;;9913:45;9952:5;9913:45;:::i;:::-;9801:163;;;;:::o;9970:817::-;10082:6;10090;10098;10106;10155:3;10143:9;10134:7;10130:23;10126:33;10123:120;;;10162:79;;:::i;:::-;10123:120;10282:1;10307:53;10352:7;10343:6;10332:9;10328:22;10307:53;:::i;:::-;10297:63;;10253:117;10409:2;10435:67;10494:7;10485:6;10474:9;10470:22;10435:67;:::i;:::-;10425:77;;10380:132;10551:2;10577:65;10634:7;10625:6;10614:9;10610:22;10577:65;:::i;:::-;10567:75;;10522:130;10691:2;10717:53;10762:7;10753:6;10742:9;10738:22;10717:53;:::i;:::-;10707:63;;10662:118;9970:817;;;;;;;:::o;10793:141::-;10858:9;10891:37;10922:5;10891:37;:::i;:::-;10878:50;;10793:141;;;:::o;10940:161::-;11042:52;11088:5;11042:52;:::i;:::-;11037:3;11030:65;10940:161;;:::o;11107:252::-;11215:4;11253:2;11242:9;11238:18;11230:26;;11266:86;11349:1;11338:9;11334:17;11325:6;11266:86;:::i;:::-;11107:252;;;;:::o;11365:619::-;11442:6;11450;11458;11507:2;11495:9;11486:7;11482:23;11478:32;11475:119;;;11513:79;;:::i;:::-;11475:119;11633:1;11658:53;11703:7;11694:6;11683:9;11679:22;11658:53;:::i;:::-;11648:63;;11604:117;11760:2;11786:53;11831:7;11822:6;11811:9;11807:22;11786:53;:::i;:::-;11776:63;;11731:118;11888:2;11914:53;11959:7;11950:6;11939:9;11935:22;11914:53;:::i;:::-;11904:63;;11859:118;11365:619;;;;;:::o;11990:671::-;12093:6;12101;12109;12158:2;12146:9;12137:7;12133:23;12129:32;12126:119;;;12164:79;;:::i;:::-;12126:119;12284:1;12309:67;12368:7;12359:6;12348:9;12344:22;12309:67;:::i;:::-;12299:77;;12255:131;12425:2;12451:65;12508:7;12499:6;12488:9;12484:22;12451:65;:::i;:::-;12441:75;;12396:130;12565:2;12591:53;12636:7;12627:6;12616:9;12612:22;12591:53;:::i;:::-;12581:63;;12536:118;11990:671;;;;;:::o;12667:169::-;12751:11;12785:6;12780:3;12773:19;12825:4;12820:3;12816:14;12801:29;;12667:169;;;;:::o;12842:377::-;12930:3;12958:39;12991:5;12958:39;:::i;:::-;13013:71;13077:6;13072:3;13013:71;:::i;:::-;13006:78;;13093:65;13151:6;13146:3;13139:4;13132:5;13128:16;13093:65;:::i;:::-;13183:29;13205:6;13183:29;:::i;:::-;13178:3;13174:39;13167:46;;12934:285;12842:377;;;;:::o;13225:977::-;13506:4;13544:3;13533:9;13529:19;13521:27;;13558:71;13626:1;13615:9;13611:17;13602:6;13558:71;:::i;:::-;13639:72;13707:2;13696:9;13692:18;13683:6;13639:72;:::i;:::-;13721;13789:2;13778:9;13774:18;13765:6;13721:72;:::i;:::-;13803;13871:2;13860:9;13856:18;13847:6;13803:72;:::i;:::-;13885:73;13953:3;13942:9;13938:19;13929:6;13885:73;:::i;:::-;14006:9;14000:4;13996:20;13990:3;13979:9;13975:19;13968:49;14034:78;14107:4;14098:6;14034:78;:::i;:::-;14026:86;;14122:73;14190:3;14179:9;14175:19;14166:6;14122:73;:::i;:::-;13225:977;;;;;;;;;;:::o;14208:86::-;14243:7;14283:4;14276:5;14272:16;14261:27;;14208:86;;;:::o;14300:112::-;14383:22;14399:5;14383:22;:::i;:::-;14378:3;14371:35;14300:112;;:::o;14418:214::-;14507:4;14545:2;14534:9;14530:18;14522:26;;14558:67;14622:1;14611:9;14607:17;14598:6;14558:67;:::i;:::-;14418:214;;;;:::o;14638:180::-;14686:77;14683:1;14676:88;14783:4;14780:1;14773:15;14807:4;14804:1;14797:15;14824:320;14868:6;14905:1;14899:4;14895:12;14885:22;;14952:1;14946:4;14942:12;14973:18;14963:81;;15029:4;15021:6;15017:17;15007:27;;14963:81;15091:2;15083:6;15080:14;15060:18;15057:38;15054:84;;15110:18;;:::i;:::-;15054:84;14875:269;14824:320;;;:::o;15150:167::-;15290:19;15286:1;15278:6;15274:14;15267:43;15150:167;:::o;15323:366::-;15465:3;15486:67;15550:2;15545:3;15486:67;:::i;:::-;15479:74;;15562:93;15651:3;15562:93;:::i;:::-;15680:2;15675:3;15671:12;15664:19;;15323:366;;;:::o;15695:419::-;15861:4;15899:2;15888:9;15884:18;15876:26;;15948:9;15942:4;15938:20;15934:1;15923:9;15919:17;15912:47;15976:131;16102:4;15976:131;:::i;:::-;15968:139;;15695:419;;;:::o;16120:442::-;16269:4;16307:2;16296:9;16292:18;16284:26;;16320:71;16388:1;16377:9;16373:17;16364:6;16320:71;:::i;:::-;16401:72;16469:2;16458:9;16454:18;16445:6;16401:72;:::i;:::-;16483;16551:2;16540:9;16536:18;16527:6;16483:72;:::i;:::-;16120:442;;;;;;:::o;16568:143::-;16625:5;16656:6;16650:13;16641:22;;16672:33;16699:5;16672:33;:::i;:::-;16568:143;;;;:::o;16717:351::-;16787:6;16836:2;16824:9;16815:7;16811:23;16807:32;16804:119;;;16842:79;;:::i;:::-;16804:119;16962:1;16987:64;17043:7;17034:6;17023:9;17019:22;16987:64;:::i;:::-;16977:74;;16933:128;16717:351;;;;:::o;17074:332::-;17195:4;17233:2;17222:9;17218:18;17210:26;;17246:71;17314:1;17303:9;17299:17;17290:6;17246:71;:::i;:::-;17327:72;17395:2;17384:9;17380:18;17371:6;17327:72;:::i;:::-;17074:332;;;;;:::o;17412:119::-;17499:1;17492:5;17489:12;17479:46;;17505:18;;:::i;:::-;17479:46;17412:119;:::o;17537:139::-;17588:7;17617:5;17606:16;;17623:47;17664:5;17623:47;:::i;:::-;17537:139;;;:::o;17682:::-;17744:9;17777:38;17809:5;17777:38;:::i;:::-;17764:51;;17682:139;;;:::o;17827:155::-;17926:49;17969:5;17926:49;:::i;:::-;17921:3;17914:62;17827:155;;:::o;17988:246::-;18093:4;18131:2;18120:9;18116:18;18108:26;;18144:83;18224:1;18213:9;18209:17;18200:6;18144:83;:::i;:::-;17988:246;;;;:::o;18240:143::-;18297:5;18328:6;18322:13;18313:22;;18344:33;18371:5;18344:33;:::i;:::-;18240:143;;;;:::o;18389:351::-;18459:6;18508:2;18496:9;18487:7;18483:23;18479:32;18476:119;;;18514:79;;:::i;:::-;18476:119;18634:1;18659:64;18715:7;18706:6;18695:9;18691:22;18659:64;:::i;:::-;18649:74;;18605:128;18389:351;;;;:::o;18746:174::-;18886:26;18882:1;18874:6;18870:14;18863:50;18746:174;:::o;18926:366::-;19068:3;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;18926:366;;;:::o;19298:419::-;19464:4;19502:2;19491:9;19487:18;19479:26;;19551:9;19545:4;19541:20;19537:1;19526:9;19522:17;19515:47;19579:131;19705:4;19579:131;:::i;:::-;19571:139;;19298:419;;;:::o;19723:170::-;19863:22;19859:1;19851:6;19847:14;19840:46;19723:170;:::o;19899:366::-;20041:3;20062:67;20126:2;20121:3;20062:67;:::i;:::-;20055:74;;20138:93;20227:3;20138:93;:::i;:::-;20256:2;20251:3;20247:12;20240:19;;19899:366;;;:::o;20271:419::-;20437:4;20475:2;20464:9;20460:18;20452:26;;20524:9;20518:4;20514:20;20510:1;20499:9;20495:17;20488:47;20552:131;20678:4;20552:131;:::i;:::-;20544:139;;20271:419;;;:::o;20696:90::-;20730:7;20773:5;20766:13;20759:21;20748:32;;20696:90;;;:::o;20792:109::-;20873:21;20888:5;20873:21;:::i;:::-;20868:3;20861:34;20792:109;;:::o;20907:320::-;21022:4;21060:2;21049:9;21045:18;21037:26;;21073:71;21141:1;21130:9;21126:17;21117:6;21073:71;:::i;:::-;21154:66;21216:2;21205:9;21201:18;21192:6;21154:66;:::i;:::-;20907:320;;;;;:::o;21233:117::-;21342:1;21339;21332:12;21356:180;21404:77;21401:1;21394:88;21501:4;21498:1;21491:15;21525:4;21522:1;21515:15;21542:281;21625:27;21647:4;21625:27;:::i;:::-;21617:6;21613:40;21755:6;21743:10;21740:22;21719:18;21707:10;21704:34;21701:62;21698:88;;;21766:18;;:::i;:::-;21698:88;21806:10;21802:2;21795:22;21585:238;21542:281;;:::o;21829:129::-;21863:6;21890:20;;:::i;:::-;21880:30;;21919:33;21947:4;21939:6;21919:33;:::i;:::-;21829:129;;;:::o;21964:117::-;22073:1;22070;22063:12;22087:117;22196:1;22193;22186:12;22210:117;22319:1;22316;22309:12;22333:308;22395:4;22485:18;22477:6;22474:30;22471:56;;;22507:18;;:::i;:::-;22471:56;22545:29;22567:6;22545:29;:::i;:::-;22537:37;;22629:4;22623;22619:15;22611:23;;22333:308;;;:::o;22647:434::-;22736:5;22761:66;22777:49;22819:6;22777:49;:::i;:::-;22761:66;:::i;:::-;22752:75;;22850:6;22843:5;22836:21;22888:4;22881:5;22877:16;22926:3;22917:6;22912:3;22908:16;22905:25;22902:112;;;22933:79;;:::i;:::-;22902:112;23023:52;23068:6;23063:3;23058;23023:52;:::i;:::-;22742:339;22647:434;;;;;:::o;23101:355::-;23168:5;23217:3;23210:4;23202:6;23198:17;23194:27;23184:122;;23225:79;;:::i;:::-;23184:122;23335:6;23329:13;23360:90;23446:3;23438:6;23431:4;23423:6;23419:17;23360:90;:::i;:::-;23351:99;;23174:282;23101:355;;;;:::o;23501:942::-;23586:5;23630:4;23618:9;23613:3;23609:19;23605:30;23602:117;;;23638:79;;:::i;:::-;23602:117;23737:21;23753:4;23737:21;:::i;:::-;23728:30;;23815:1;23855:60;23911:3;23902:6;23891:9;23887:22;23855:60;:::i;:::-;23848:4;23841:5;23837:16;23830:86;23768:159;24007:2;23996:9;23992:18;23986:25;24038:18;24030:6;24027:30;24024:117;;;24060:79;;:::i;:::-;24024:117;24180:70;24246:3;24237:6;24226:9;24222:22;24180:70;:::i;:::-;24173:4;24166:5;24162:16;24155:96;23937:325;24323:2;24364:60;24420:3;24411:6;24400:9;24396:22;24364:60;:::i;:::-;24357:4;24350:5;24346:16;24339:86;24272:164;23501:942;;;;:::o;24449:554::-;24544:6;24593:2;24581:9;24572:7;24568:23;24564:32;24561:119;;;24599:79;;:::i;:::-;24561:119;24740:1;24729:9;24725:17;24719:24;24770:18;24762:6;24759:30;24756:117;;;24792:79;;:::i;:::-;24756:117;24897:89;24978:7;24969:6;24958:9;24954:22;24897:89;:::i;:::-;24887:99;;24690:306;24449:554;;;;:::o;25009:180::-;25057:77;25054:1;25047:88;25154:4;25151:1;25144:15;25178:4;25175:1;25168:15;25195:233;25234:3;25257:24;25275:5;25257:24;:::i;:::-;25248:33;;25303:66;25296:5;25293:77;25290:103;;25373:18;;:::i;:::-;25290:103;25420:1;25413:5;25409:13;25402:20;;25195:233;;;:::o;25434:141::-;25483:4;25506:3;25498:11;;25529:3;25526:1;25519:14;25563:4;25560:1;25550:18;25542:26;;25434:141;;;:::o;25581:93::-;25618:6;25665:2;25660;25653:5;25649:14;25645:23;25635:33;;25581:93;;;:::o;25680:107::-;25724:8;25774:5;25768:4;25764:16;25743:37;;25680:107;;;;:::o;25793:393::-;25862:6;25912:1;25900:10;25896:18;25935:97;25965:66;25954:9;25935:97;:::i;:::-;26053:39;26083:8;26072:9;26053:39;:::i;:::-;26041:51;;26125:4;26121:9;26114:5;26110:21;26101:30;;26174:4;26164:8;26160:19;26153:5;26150:30;26140:40;;25869:317;;25793:393;;;;;:::o;26192:142::-;26242:9;26275:53;26293:34;26302:24;26320:5;26302:24;:::i;:::-;26293:34;:::i;:::-;26275:53;:::i;:::-;26262:66;;26192:142;;;:::o;26340:75::-;26383:3;26404:5;26397:12;;26340:75;;;:::o;26421:269::-;26531:39;26562:7;26531:39;:::i;:::-;26592:91;26641:41;26665:16;26641:41;:::i;:::-;26633:6;26626:4;26620:11;26592:91;:::i;:::-;26586:4;26579:105;26497:193;26421:269;;;:::o;26696:73::-;26741:3;26696:73;:::o;26775:189::-;26852:32;;:::i;:::-;26893:65;26951:6;26943;26937:4;26893:65;:::i;:::-;26828:136;26775:189;;:::o;26970:186::-;27030:120;27047:3;27040:5;27037:14;27030:120;;;27101:39;27138:1;27131:5;27101:39;:::i;:::-;27074:1;27067:5;27063:13;27054:22;;27030:120;;;26970:186;;:::o;27162:543::-;27263:2;27258:3;27255:11;27252:446;;;27297:38;27329:5;27297:38;:::i;:::-;27381:29;27399:10;27381:29;:::i;:::-;27371:8;27367:44;27564:2;27552:10;27549:18;27546:49;;;27585:8;27570:23;;27546:49;27608:80;27664:22;27682:3;27664:22;:::i;:::-;27654:8;27650:37;27637:11;27608:80;:::i;:::-;27267:431;;27252:446;27162:543;;;:::o;27711:117::-;27765:8;27815:5;27809:4;27805:16;27784:37;;27711:117;;;;:::o;27834:169::-;27878:6;27911:51;27959:1;27955:6;27947:5;27944:1;27940:13;27911:51;:::i;:::-;27907:56;27992:4;27986;27982:15;27972:25;;27885:118;27834:169;;;;:::o;28008:295::-;28084:4;28230:29;28255:3;28249:4;28230:29;:::i;:::-;28222:37;;28292:3;28289:1;28285:11;28279:4;28276:21;28268:29;;28008:295;;;;:::o;28308:1395::-;28425:37;28458:3;28425:37;:::i;:::-;28527:18;28519:6;28516:30;28513:56;;;28549:18;;:::i;:::-;28513:56;28593:38;28625:4;28619:11;28593:38;:::i;:::-;28678:67;28738:6;28730;28724:4;28678:67;:::i;:::-;28772:1;28796:4;28783:17;;28828:2;28820:6;28817:14;28845:1;28840:618;;;;29502:1;29519:6;29516:77;;;29568:9;29563:3;29559:19;29553:26;29544:35;;29516:77;29619:67;29679:6;29672:5;29619:67;:::i;:::-;29613:4;29606:81;29475:222;28810:887;;28840:618;28892:4;28888:9;28880:6;28876:22;28926:37;28958:4;28926:37;:::i;:::-;28985:1;28999:208;29013:7;29010:1;29007:14;28999:208;;;29092:9;29087:3;29083:19;29077:26;29069:6;29062:42;29143:1;29135:6;29131:14;29121:24;;29190:2;29179:9;29175:18;29162:31;;29036:4;29033:1;29029:12;29024:17;;28999:208;;;29235:6;29226:7;29223:19;29220:179;;;29293:9;29288:3;29284:19;29278:26;29336:48;29378:4;29370:6;29366:17;29355:9;29336:48;:::i;:::-;29328:6;29321:64;29243:156;29220:179;29445:1;29441;29433:6;29429:14;29425:22;29419:4;29412:36;28847:611;;;28810:887;;28400:1303;;;28308:1395;;:::o;29709:755::-;29934:4;29972:3;29961:9;29957:19;29949:27;;29986:71;30054:1;30043:9;30039:17;30030:6;29986:71;:::i;:::-;30067:72;30135:2;30124:9;30120:18;30111:6;30067:72;:::i;:::-;30149;30217:2;30206:9;30202:18;30193:6;30149:72;:::i;:::-;30231;30299:2;30288:9;30284:18;30275:6;30231:72;:::i;:::-;30351:9;30345:4;30341:20;30335:3;30324:9;30320:19;30313:49;30379:78;30452:4;30443:6;30379:78;:::i;:::-;30371:86;;29709:755;;;;;;;;:::o;30470:167::-;30539:5;30570:6;30564:13;30555:22;;30586:45;30625:5;30586:45;:::i;:::-;30470:167;;;;:::o;30643:844::-;30752:6;30760;30768;30776;30825:3;30813:9;30804:7;30800:23;30796:33;30793:120;;;30832:79;;:::i;:::-;30793:120;30952:1;30977:64;31033:7;31024:6;31013:9;31009:22;30977:64;:::i;:::-;30967:74;;30923:128;31090:2;31116:64;31172:7;31163:6;31152:9;31148:22;31116:64;:::i;:::-;31106:74;;31061:129;31229:2;31255:64;31311:7;31302:6;31291:9;31287:22;31255:64;:::i;:::-;31245:74;;31200:129;31368:2;31394:76;31462:7;31453:6;31442:9;31438:22;31394:76;:::i;:::-;31384:86;;31339:141;30643:844;;;;;;;:::o;31493:597::-;31692:4;31730:3;31719:9;31715:19;31707:27;;31744:71;31812:1;31801:9;31797:17;31788:6;31744:71;:::i;:::-;31825:84;31905:2;31894:9;31890:18;31881:6;31825:84;:::i;:::-;31919:82;31997:2;31986:9;31982:18;31973:6;31919:82;:::i;:::-;32011:72;32079:2;32068:9;32064:18;32055:6;32011:72;:::i;:::-;31493:597;;;;;;;:::o;32096:177::-;32236:29;32232:1;32224:6;32220:14;32213:53;32096:177;:::o;32279:366::-;32421:3;32442:67;32506:2;32501:3;32442:67;:::i;:::-;32435:74;;32518:93;32607:3;32518:93;:::i;:::-;32636:2;32631:3;32627:12;32620:19;;32279:366;;;:::o;32651:419::-;32817:4;32855:2;32844:9;32840:18;32832:26;;32904:9;32898:4;32894:20;32890:1;32879:9;32875:17;32868:47;32932:131;33058:4;32932:131;:::i;:::-;32924:139;;32651:419;;;:::o;33076:168::-;33216:20;33212:1;33204:6;33200:14;33193:44;33076:168;:::o;33250:366::-;33392:3;33413:67;33477:2;33472:3;33413:67;:::i;:::-;33406:74;;33489:93;33578:3;33489:93;:::i;:::-;33607:2;33602:3;33598:12;33591:19;;33250:366;;;:::o;33622:419::-;33788:4;33826:2;33815:9;33811:18;33803:26;;33875:9;33869:4;33865:20;33861:1;33850:9;33846:17;33839:47;33903:131;34029:4;33903:131;:::i;:::-;33895:139;;33622:419;;;:::o;34047:2297::-;34229:6;34237;34245;34253;34261;34269;34277;34285;34293;34342:3;34330:9;34321:7;34317:23;34313:33;34310:120;;;34349:79;;:::i;:::-;34310:120;34490:1;34479:9;34475:17;34469:24;34520:18;34512:6;34509:30;34506:117;;;34542:79;;:::i;:::-;34506:117;34647:74;34713:7;34704:6;34693:9;34689:22;34647:74;:::i;:::-;34637:84;;34440:291;34791:2;34780:9;34776:18;34770:25;34822:18;34814:6;34811:30;34808:117;;;34844:79;;:::i;:::-;34808:117;34949:74;35015:7;35006:6;34995:9;34991:22;34949:74;:::i;:::-;34939:84;;34741:292;35072:2;35098:64;35154:7;35145:6;35134:9;35130:22;35098:64;:::i;:::-;35088:74;;35043:129;35211:2;35237:64;35293:7;35284:6;35273:9;35269:22;35237:64;:::i;:::-;35227:74;;35182:129;35350:3;35377:64;35433:7;35424:6;35413:9;35409:22;35377:64;:::i;:::-;35367:74;;35321:130;35490:3;35517:64;35573:7;35564:6;35553:9;35549:22;35517:64;:::i;:::-;35507:74;;35461:130;35630:3;35657:64;35713:7;35704:6;35693:9;35689:22;35657:64;:::i;:::-;35647:74;;35601:130;35791:3;35780:9;35776:19;35770:26;35823:18;35815:6;35812:30;35809:117;;;35845:79;;:::i;:::-;35809:117;35950:74;36016:7;36007:6;35996:9;35992:22;35950:74;:::i;:::-;35940:84;;35741:293;36094:3;36083:9;36079:19;36073:26;36126:18;36118:6;36115:30;36112:117;;;36148:79;;:::i;:::-;36112:117;36253:74;36319:7;36310:6;36299:9;36295:22;36253:74;:::i;:::-;36243:84;;36044:293;34047:2297;;;;;;;;;;;:::o;36350:553::-;36527:4;36565:3;36554:9;36550:19;36542:27;;36579:71;36647:1;36636:9;36632:17;36623:6;36579:71;:::i;:::-;36660:72;36728:2;36717:9;36713:18;36704:6;36660:72;:::i;:::-;36742;36810:2;36799:9;36795:18;36786:6;36742:72;:::i;:::-;36824;36892:2;36881:9;36877:18;36868:6;36824:72;:::i;:::-;36350:553;;;;;;;:::o;36909:332::-;37030:4;37068:2;37057:9;37053:18;37045:26;;37081:71;37149:1;37138:9;37134:17;37125:6;37081:71;:::i;:::-;37162:72;37230:2;37219:9;37215:18;37206:6;37162:72;:::i;:::-;36909:332;;;;;:::o;37247:775::-;37480:4;37518:3;37507:9;37503:19;37495:27;;37532:71;37600:1;37589:9;37585:17;37576:6;37532:71;:::i;:::-;37613:72;37681:2;37670:9;37666:18;37657:6;37613:72;:::i;:::-;37695;37763:2;37752:9;37748:18;37739:6;37695:72;:::i;:::-;37777;37845:2;37834:9;37830:18;37821:6;37777:72;:::i;:::-;37859:73;37927:3;37916:9;37912:19;37903:6;37859:73;:::i;:::-;37942;38010:3;37999:9;37995:19;37986:6;37942:73;:::i;:::-;37247:775;;;;;;;;;:::o;38028:553::-;38205:4;38243:3;38232:9;38228:19;38220:27;;38257:71;38325:1;38314:9;38310:17;38301:6;38257:71;:::i;:::-;38338:72;38406:2;38395:9;38391:18;38382:6;38338:72;:::i;:::-;38420;38488:2;38477:9;38473:18;38464:6;38420:72;:::i;:::-;38502;38570:2;38559:9;38555:18;38546:6;38502:72;:::i;:::-;38028:553;;;;;;;:::o;38587:486::-;38758:4;38796:2;38785:9;38781:18;38773:26;;38809:83;38889:1;38878:9;38874:17;38865:6;38809:83;:::i;:::-;38902:82;38980:2;38969:9;38965:18;38956:6;38902:82;:::i;:::-;38994:72;39062:2;39051:9;39047:18;39038:6;38994:72;:::i;:::-;38587:486;;;;;;:::o;39079:332::-;39200:4;39238:2;39227:9;39223:18;39215:26;;39251:71;39319:1;39308:9;39304:17;39295:6;39251:71;:::i;:::-;39332:72;39400:2;39389:9;39385:18;39376:6;39332:72;:::i;:::-;39079:332;;;;;:::o;39417:221::-;39557:34;39553:1;39545:6;39541:14;39534:58;39626:4;39621:2;39613:6;39609:15;39602:29;39417:221;:::o;39644:366::-;39786:3;39807:67;39871:2;39866:3;39807:67;:::i;:::-;39800:74;;39883:93;39972:3;39883:93;:::i;:::-;40001:2;39996:3;39992:12;39985:19;;39644:366;;;:::o;40016:419::-;40182:4;40220:2;40209:9;40205:18;40197:26;;40269:9;40263:4;40259:20;40255:1;40244:9;40240:17;40233:47;40297:131;40423:4;40297:131;:::i;:::-;40289:139;;40016:419;;;:::o;40441:118::-;40512:22;40528:5;40512:22;:::i;:::-;40505:5;40502:33;40492:61;;40549:1;40546;40539:12;40492:61;40441:118;:::o;40565:139::-;40620:5;40651:6;40645:13;40636:22;;40667:31;40692:5;40667:31;:::i;:::-;40565:139;;;;:::o;40710:347::-;40778:6;40827:2;40815:9;40806:7;40802:23;40798:32;40795:119;;;40833:79;;:::i;:::-;40795:119;40953:1;40978:62;41032:7;41023:6;41012:9;41008:22;40978:62;:::i;:::-;40968:72;;40924:126;40710:347;;;;:::o;41063:180::-;41111:77;41108:1;41101:88;41208:4;41205:1;41198:15;41232:4;41229:1;41222:15;41249:185;41289:1;41306:20;41324:1;41306:20;:::i;:::-;41301:25;;41340:20;41358:1;41340:20;:::i;:::-;41335:25;;41379:1;41369:35;;41384:18;;:::i;:::-;41369:35;41426:1;41423;41419:9;41414:14;;41249:185;;;;:::o;41440:410::-;41480:7;41503:20;41521:1;41503:20;:::i;:::-;41498:25;;41537:20;41555:1;41537:20;:::i;:::-;41532:25;;41592:1;41589;41585:9;41614:30;41632:11;41614:30;:::i;:::-;41603:41;;41793:1;41784:7;41780:15;41777:1;41774:22;41754:1;41747:9;41727:83;41704:139;;41823:18;;:::i;:::-;41704:139;41488:362;41440:410;;;;:::o;41856:194::-;41896:4;41916:20;41934:1;41916:20;:::i;:::-;41911:25;;41950:20;41968:1;41950:20;:::i;:::-;41945:25;;41994:1;41991;41987:9;41979:17;;42018:1;42012:4;42009:11;42006:37;;;42023:18;;:::i;:::-;42006:37;41856:194;;;;:::o;42056:221::-;42196:34;42192:1;42184:6;42180:14;42173:58;42265:4;42260:2;42252:6;42248:15;42241:29;42056:221;:::o;42283:366::-;42425:3;42446:67;42510:2;42505:3;42446:67;:::i;:::-;42439:74;;42522:93;42611:3;42522:93;:::i;:::-;42640:2;42635:3;42631:12;42624:19;;42283:366;;;:::o;42655:419::-;42821:4;42859:2;42848:9;42844:18;42836:26;;42908:9;42902:4;42898:20;42894:1;42883:9;42879:17;42872:47;42936:131;43062:4;42936:131;:::i;:::-;42928:139;;42655:419;;;:::o
Swarm Source
ipfs://d727d40cb4e613e8daf7ba7b5ccc0cb052b930e06354c5a9973d5c66405431d3
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.