Source Code
Latest 25 from a total of 151 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Run | 57305494 | 51 days ago | IN | 0 S | 0.0075594 | ||||
| Run | 57305449 | 51 days ago | IN | 0 S | 0.00809214 | ||||
| Run | 57305248 | 51 days ago | IN | 0 S | 0.00819696 | ||||
| Run | 54434817 | 78 days ago | IN | 0 S | 0.0084713 | ||||
| Run | 51538721 | 96 days ago | IN | 0 S | 0.0081132 | ||||
| Run | 51538678 | 96 days ago | IN | 0 S | 0.00784416 | ||||
| Run | 51538634 | 96 days ago | IN | 0 S | 0.00885471 | ||||
| Run | 51538608 | 96 days ago | IN | 0 S | 0.00886146 | ||||
| Run | 51197212 | 99 days ago | IN | 0 S | 0.00743638 | ||||
| Run | 50972610 | 101 days ago | IN | 0 S | 0.01034713 | ||||
| Run | 50972533 | 101 days ago | IN | 0 S | 0.00811242 | ||||
| Run | 50972474 | 101 days ago | IN | 0 S | 0.00892366 | ||||
| Run | 50972415 | 101 days ago | IN | 0 S | 0.01125293 | ||||
| Run | 50972370 | 101 days ago | IN | 0 S | 0.00740239 | ||||
| Run | 50972293 | 101 days ago | IN | 0 S | 0.00740239 | ||||
| Run | 50972255 | 101 days ago | IN | 0 S | 0.00775006 | ||||
| Run | 50816897 | 102 days ago | IN | 0 S | 0.00693128 | ||||
| Run | 50816866 | 102 days ago | IN | 0 S | 0.00690907 | ||||
| Run | 50417486 | 105 days ago | IN | 0 S | 0.00695749 | ||||
| Run | 50417374 | 105 days ago | IN | 0 S | 0.00696341 | ||||
| Run | 50417333 | 105 days ago | IN | 0 S | 0.00693133 | ||||
| Run | 49873558 | 109 days ago | IN | 0 S | 0.00743594 | ||||
| Run | 49872359 | 109 days ago | IN | 0 S | 0.00294651 | ||||
| Run | 49872301 | 109 days ago | IN | 0 S | 0.00782267 | ||||
| Run | 49872149 | 109 days ago | IN | 0 S | 0.00739744 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
JointBoatGame
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at SonicScan.org on 2025-09-08
*/
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @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.
*/
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].
*/
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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @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;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @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, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/security/Pausable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.3/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: jboat.sol
pragma solidity ^0.8.19;
/*
* JOINT BOAT GAME - Play with $JOINT tokens using existing BoatNFTs
*
* - Use existing BoatNFTs from the main BoatGame
* - Run with $JOINT stakes (20k–420k range)
* - Same odds and multipliers as BoatGame
* - Same NFT burn/downgrade on failure as BoatGame
* - Upgrades still done through original BoatGame with $BOAT
* - When players lose, $JOINT stays in contract for future payouts
* - Treasury fee system for contract revenue
*
* Pinned OpenZeppelin v4.8.3 imports.
*/
interface IBoatNFT {
function ownerOf(uint256 tokenId) external view returns (address);
function levelOf(uint256 tokenId) external view returns (uint8);
function gameBurn(uint256 tokenId) external;
function gameSetLevel(uint256 tokenId, uint8 newLevel) external;
}
interface IBoatGame {
function upgrade(uint256 tokenId) external;
}
contract JointBoatGame is Ownable, Pausable, ReentrancyGuard {
using SafeERC20 for IERC20;
IERC20 public immutable JOINT;
IBoatNFT public NFT;
IBoatGame public BOAT_GAME;
uint256 public minStake = 7_800 ether; // 7.8k $JOINT min (configurable)
uint256 public maxStake = 78_000 ether; // 78k $JOINT max (configurable)
uint256 public runCooldown = 10 minutes;
uint16 public capBps = 500; // max % of pool per single win (5% - more conservative)
address public treasury;
uint16 public treasuryBps = 0; // optional skim from stakes (<=10%)
// Maximum absolute payouts per level for additional protection
mapping(uint8 => uint256) public maxPayoutAbs;
mapping(uint256 => uint256) public lastRunAt;
mapping(uint256 => uint256) public nonceOf;
struct Stats { uint64 runsStarted; uint64 runsWon; uint64 boatsLost; }
mapping(address => Stats) public stats;
event JointRun(address indexed user, uint256 indexed tokenId, uint8 level, uint256 stake, bool success, uint256 rewardPaid);
event BoatBurned(uint256 indexed tokenId, uint8 level);
event BoatDowngraded(uint256 indexed tokenId, uint8 fromLevel, uint8 toLevel);
event Seeded(uint256 amount);
event NFTUpdated(address indexed oldNft, address indexed newNft);
event BoatGameUpdated(address indexed oldGame, address indexed newGame);
constructor(IERC20 jointToken, IBoatNFT boatNft, IBoatGame boatGame) {
require(address(jointToken) != address(0) && address(boatNft) != address(0) && address(boatGame) != address(0), "zero addr");
JOINT = jointToken;
NFT = boatNft;
BOAT_GAME = boatGame;
// Initialize with final deployment parameters
minStake = 7_800 ether; // 7.8k $JOINT min
maxStake = 78_000 ether; // 78k $JOINT max
// Set final level parameters
levelSuccessBps[1] = 5000; // 50%
levelSuccessBps[2] = 5500; // 55%
levelSuccessBps[3] = 6000; // 60%
levelSuccessBps[4] = 6500; // 65%
levelMultiplierBps[1] = 15000; // 1.50x
levelMultiplierBps[2] = 16000; // 1.60x
levelMultiplierBps[3] = 16500; // 1.65x
levelMultiplierBps[4] = 17000; // 1.70x
// Set conservative maximum absolute payouts per level (set to 0 for unlimited)
maxPayoutAbs[1] = 0; // Unlimited
maxPayoutAbs[2] = 0; // Unlimited
maxPayoutAbs[3] = 0; // Unlimited
maxPayoutAbs[4] = 0; // Unlimited
}
// ===== Core Game Function =====
function run(uint256 tokenId, uint256 stake) external whenNotPaused nonReentrant {
require(NFT.ownerOf(tokenId) == msg.sender, "Not owner");
require(stake >= minStake && stake <= maxStake, "Stake out of bounds");
uint8 lvl = NFT.levelOf(tokenId);
require(lvl >= 1 && lvl <= 4, "Invalid level");
uint256 last = lastRunAt[tokenId];
require(block.timestamp >= last + runCooldown, "Cooldown");
lastRunAt[tokenId] = block.timestamp;
// Collect stake with optional treasury fee
_collect(msg.sender, stake);
stats[msg.sender].runsStarted += 1;
// Same odds as BoatGame
bool success = (_rng(tokenId) % 10_000) < _getSuccessBps(lvl);
uint256 rewardPaid = 0;
if (success) {
uint256 rawReward = (stake * _getRewardMultBps(lvl)) / 10_000;
uint256 poolBal = JOINT.balanceOf(address(this));
// Apply pool percentage cap (like BoatGame)
uint256 capByPool = (poolBal * capBps) / 10_000;
uint256 capped = rawReward;
if (capByPool > 0 && capped > capByPool) capped = capByPool;
// Apply absolute maximum payout cap
uint256 maxAbs = maxPayoutAbs[lvl];
if (maxAbs > 0 && capped > maxAbs) capped = maxAbs;
require(poolBal >= capped, "Insufficient pool");
rewardPaid = capped;
JOINT.safeTransfer(msg.sender, rewardPaid);
stats[msg.sender].runsWon += 1;
} else {
// Same NFT damage as BoatGame
if (lvl == 1) {
// Level 1: Burn (same as BoatGame)
NFT.gameBurn(tokenId);
stats[msg.sender].boatsLost += 1;
emit BoatBurned(tokenId, lvl);
} else {
// Level 2-4: Downgrade (same as BoatGame)
NFT.gameSetLevel(tokenId, lvl - 1);
emit BoatDowngraded(tokenId, lvl, lvl - 1);
}
}
// If fail, stake remains in contract for future payouts
emit JointRun(msg.sender, tokenId, lvl, stake, success, rewardPaid);
}
// ===== Boat Upgrades (delegated to original BoatGame) =====
function upgradeBoat(uint256 tokenId) external whenNotPaused nonReentrant {
// User must approve $BOAT to BoatGame contract separately
BOAT_GAME.upgrade(tokenId);
}
// ===== Admin Functions =====
function seedRewards(uint256 amount) external onlyOwner {
JOINT.safeTransferFrom(msg.sender, address(this), amount);
emit Seeded(amount);
}
function setCooldown(uint256 seconds_) external onlyOwner {
runCooldown = seconds_;
}
/// @notice Update the BoatNFT contract address. Recommended to pause first.
function setNFT(IBoatNFT newNft) external onlyOwner {
require(address(newNft) != address(0), "zero addr");
address old = address(NFT);
NFT = newNft;
emit NFTUpdated(old, address(newNft));
}
/// @notice Update the BoatGame contract used for upgrades.
function setBoatGame(IBoatGame newGame) external onlyOwner {
require(address(newGame) != address(0), "zero addr");
address old = address(BOAT_GAME);
BOAT_GAME = newGame;
emit BoatGameUpdated(old, address(newGame));
}
function setMinMaxStake(uint256 min_, uint256 max_) external onlyOwner {
require(min_ > 0 && max_ >= min_, "Bad stake bounds");
minStake = min_;
maxStake = max_;
}
function setTreasury(address _treasury, uint16 _bps) external onlyOwner {
require(_bps <= 1_000, "Max 10%");
treasury = _treasury;
treasuryBps = _bps;
}
// Add configurable level parameters
mapping(uint8 => uint16) public levelSuccessBps;
mapping(uint8 => uint16) public levelMultiplierBps;
function setLevelParams(uint8 lvl, uint16 successBps, uint8 /* failMode */) external onlyOwner {
require(lvl >= 1 && lvl <= 4, "Invalid level");
require(successBps <= 10000, "Invalid success rate");
levelSuccessBps[lvl] = successBps;
// failMode ignored - using same logic as hardcoded (L1 burns, L2-4 downgrade)
}
function setStakeParams(uint8 lvl, uint256 minStake_, uint256 maxStake_, uint16 rewardMultBps, uint256 maxPayoutAbs_) external onlyOwner {
require(lvl >= 1 && lvl <= 4, "Invalid level");
require(rewardMultBps <= 50000, "Invalid multiplier"); // max 5x
levelMultiplierBps[lvl] = rewardMultBps;
maxPayoutAbs[lvl] = maxPayoutAbs_;
// Only update global stakes on level 1 to keep them uniform
if (lvl == 1) {
require(minStake_ > 0 && maxStake_ >= minStake_, "Bad stake bounds");
minStake = minStake_;
maxStake = maxStake_;
}
}
function pause() external onlyOwner { _pause(); }
function unpause() external onlyOwner { _unpause(); }
function withdrawJOINT(uint256 amount, address to) external onlyOwner nonReentrant {
require(to != address(0), "JointBoatGame:zero");
JOINT.safeTransfer(to, amount);
}
function withdrawETH(uint256 amount, address payable to) external onlyOwner nonReentrant {
require(to != address(0), "JointBoatGame:zero");
(bool ok, ) = to.call{value: amount}("");
require(ok, "ETH transfer failed");
}
// ===== Views =====
function getStats(address user) external view returns (Stats memory) {
return stats[user];
}
function poolBalance() external view returns (uint256) {
return JOINT.balanceOf(address(this));
}
// ===== Internal Functions =====
function _collect(address from, uint256 amount) internal {
if (amount == 0) return;
if (treasury != address(0) && treasuryBps > 0) {
uint256 toTreasury = (amount * treasuryBps) / 10_000;
if (toTreasury > 0) JOINT.safeTransferFrom(from, treasury, toTreasury);
JOINT.safeTransferFrom(from, address(this), amount - toTreasury);
} else {
JOINT.safeTransferFrom(from, address(this), amount);
}
}
// Use configurable odds
function _getSuccessBps(uint8 lvl) internal view returns (uint16) {
uint16 rate = levelSuccessBps[lvl];
return rate > 0 ? rate : 5000; // Default to 50% if not set
}
// Use configurable multipliers
function _getRewardMultBps(uint8 lvl) internal view returns (uint16) {
uint16 mult = levelMultiplierBps[lvl];
return mult > 0 ? mult : 15000; // Default to 1.50x if not set
}
function _rng(uint256 tokenId) internal returns (uint256) {
uint256 n = ++nonceOf[tokenId];
return uint256(keccak256(abi.encodePacked(
blockhash(block.number - 1), block.timestamp, msg.sender, tokenId, n, address(this), JOINT.balanceOf(address(this))
)));
}
/// @dev Allow receiving ETH
receive() external payable {}
/// @dev Register my contract on Sonic FeeM
function registerMe() external onlyOwner {
(bool _success,) = address(0xDC2B0D2Dd2b7759D97D50db4eabDC36973110830).call(
abi.encodeWithSignature("selfRegister(uint256)", 92)
);
require(_success, "FeeM registration failed");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC20","name":"jointToken","type":"address"},{"internalType":"contract IBoatNFT","name":"boatNft","type":"address"},{"internalType":"contract IBoatGame","name":"boatGame","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"}],"name":"BoatBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"fromLevel","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"toLevel","type":"uint8"}],"name":"BoatDowngraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldGame","type":"address"},{"indexed":true,"internalType":"address","name":"newGame","type":"address"}],"name":"BoatGameUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"stake","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"uint256","name":"rewardPaid","type":"uint256"}],"name":"JointRun","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldNft","type":"address"},{"indexed":true,"internalType":"address","name":"newNft","type":"address"}],"name":"NFTUpdated","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Seeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BOAT_GAME","outputs":[{"internalType":"contract IBoatGame","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JOINT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT","outputs":[{"internalType":"contract IBoatNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStats","outputs":[{"components":[{"internalType":"uint64","name":"runsStarted","type":"uint64"},{"internalType":"uint64","name":"runsWon","type":"uint64"},{"internalType":"uint64","name":"boatsLost","type":"uint64"}],"internalType":"struct JointBoatGame.Stats","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastRunAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"levelMultiplierBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"levelSuccessBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"maxPayoutAbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerMe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"stake","type":"uint256"}],"name":"run","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"runCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"seedRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBoatGame","name":"newGame","type":"address"}],"name":"setBoatGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"seconds_","type":"uint256"}],"name":"setCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"lvl","type":"uint8"},{"internalType":"uint16","name":"successBps","type":"uint16"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"setLevelParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"min_","type":"uint256"},{"internalType":"uint256","name":"max_","type":"uint256"}],"name":"setMinMaxStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBoatNFT","name":"newNft","type":"address"}],"name":"setNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"lvl","type":"uint8"},{"internalType":"uint256","name":"minStake_","type":"uint256"},{"internalType":"uint256","name":"maxStake_","type":"uint256"},{"internalType":"uint16","name":"rewardMultBps","type":"uint16"},{"internalType":"uint256","name":"maxPayoutAbs_","type":"uint256"}],"name":"setStakeParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"uint16","name":"_bps","type":"uint16"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stats","outputs":[{"internalType":"uint64","name":"runsStarted","type":"uint64"},{"internalType":"uint64","name":"runsWon","type":"uint64"},{"internalType":"uint64","name":"boatsLost","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryBps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"upgradeBoat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawJOINT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040526901a6d6beb1d42ee000006004556910846372f249d4c000006005556102586006556101f4600760006101000a81548161ffff021916908361ffff1602179055506000600760166101000a81548161ffff021916908361ffff1602179055503480156200007057600080fd5b506040516200497d3803806200497d833981810160405281019062000096919062000687565b620000b6620000aa620004b360201b60201c565b620004bb60201b60201c565b60008060146101000a81548160ff02191690831515021790555060018081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001425750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156200017c5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b620001be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b59062000744565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506901a6d6beb1d42ee000006004819055506910846372f249d4c00000600581905550611388600c6000600160ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555061157c600c6000600260ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550611770600c6000600360ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550611964600c6000600460ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550613a98600d6000600160ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550613e80600d6000600260ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550614074600d6000600360ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550614268600d6000600460ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550600060086000600160ff16815260200190815260200160002081905550600060086000600260ff16815260200190815260200160002081905550600060086000600360ff16815260200190815260200160002081905550600060086000600460ff1681526020019081526020016000208190555050505062000766565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005b18262000584565b9050919050565b6000620005c582620005a4565b9050919050565b620005d781620005b8565b8114620005e357600080fd5b50565b600081519050620005f781620005cc565b92915050565b60006200060a82620005a4565b9050919050565b6200061c81620005fd565b81146200062857600080fd5b50565b6000815190506200063c8162000611565b92915050565b60006200064f82620005a4565b9050919050565b620006618162000642565b81146200066d57600080fd5b50565b600081519050620006818162000656565b92915050565b600080600060608486031215620006a357620006a26200057f565b5b6000620006b386828701620005e6565b9350506020620006c6868287016200062b565b9250506040620006d98682870162000670565b9150509250925092565b600082825260208201905092915050565b7f7a65726f20616464720000000000000000000000000000000000000000000000600082015250565b60006200072c600983620006e3565b91506200073982620006f4565b602082019050919050565b600060208201905081810360008301526200075f816200071d565b9050919050565b6080516141bc620007c1600039600081816108c701528181610ed5015281816113b5015281816115200152818161198601528181611ce90152818161241b01528181612474015281816124c7015261259d01526141bc6000f3fe6080604052600436106102135760003560e01c806364f4fd2f1161011857806396365d44116100a0578063c23f85d61161006f578063c23f85d61461074a578063d986754f14610787578063ea1b28e0146107c4578063f2fde38b146107ef578063f56e9c66146108185761021a565b806396365d44146106b45780639a198d61146106df578063a262377e146106f6578063bf685f261461071f5761021a565b80637c0b8de2116100e75780637c0b8de2146105cb5780638456cb59146105f65780638bcdcbf31461060d5780638da5cb5b1461064c5780638f9dc067146106775761021a565b806364f4fd2f146105115780636ccbae5f1461054e578063715018a61461058b5780637357f5d2146105a25761021a565b80633f4ba83a1161019b5780634fc3f41a1161016a5780634fc3f41a1461042c5780635c975abb146104555780635f2855a21461048057806361ae0edb146104a957806361d027b3146104e65761021a565b80633f4ba83a146103985780634178e174146103af5780634b241491146103d85780634dc10ea1146104015761021a565b8063245f3c9d116101e2578063245f3c9d146102c557806328a66f62146102f057806336118b5214610319578063375b3c0a146103425780633dc7e7b61461036d5761021a565b806307794ec51461021f5780630cfa31f9146102485780631104084b146102715780631685758b1461029a5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612ad7565b610841565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b51565b610917565b005b34801561027d57600080fd5b5061029860048036038101906102939190612bcf565b6109ca565b005b3480156102a657600080fd5b506102af610b07565b6040516102bc9190612c0b565b60405180910390f35b3480156102d157600080fd5b506102da610b1b565b6040516102e79190612c85565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612ca0565b610b41565b005b34801561032557600080fd5b50610340600480360381019061033b9190612d0b565b610be9565b005b34801561034e57600080fd5b50610357610d21565b6040516103649190612d5a565b60405180910390f35b34801561037957600080fd5b50610382610d27565b60405161038f9190612d5a565b60405180910390f35b3480156103a457600080fd5b506103ad610d2d565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612dae565b610d3f565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612e01565b610e20565b005b34801561040d57600080fd5b50610416610e89565b6040516104239190612c0b565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612ca0565b610e9d565b005b34801561046157600080fd5b5061046a610eaf565b6040516104779190612e5c565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190612ca0565b610ec5565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612ca0565b610f54565b6040516104dd9190612d5a565b60405180910390f35b3480156104f257600080fd5b506104fb610f6c565b6040516105089190612e86565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190612ea1565b610f92565b6040516105459190612c0b565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190612ca0565b610fb3565b6040516105829190612d5a565b60405180910390f35b34801561059757600080fd5b506105a0610fcb565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612e01565b610fdf565b005b3480156105d757600080fd5b506105e06118a3565b6040516105ed9190612eef565b60405180910390f35b34801561060257600080fd5b5061060b6118c9565b005b34801561061957600080fd5b50610634600480360381019061062f9190612f0a565b6118db565b60405161064393929190612f5a565b60405180910390f35b34801561065857600080fd5b50610661611941565b60405161066e9190612e86565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190612ea1565b61196a565b6040516106ab9190612d5a565b60405180910390f35b3480156106c057600080fd5b506106c9611982565b6040516106d69190612d5a565b60405180910390f35b3480156106eb57600080fd5b506106f4611a23565b005b34801561070257600080fd5b5061071d60048036038101906107189190612f91565b611b7d565b005b34801561072b57600080fd5b50610734611ce7565b604051610741919061302d565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190612f0a565b611d0b565b60405161077e9190613099565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190612ea1565b611dfa565b6040516107bb9190612c0b565b60405180910390f35b3480156107d057600080fd5b506107d9611e1b565b6040516107e69190612d5a565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190612f0a565b611e21565b005b34801561082457600080fd5b5061083f600480360381019061083a91906130f2565b611ea4565b005b610849611fe1565b61085161205f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b79061317c565b60405180910390fd5b61090b81837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166120ae9092919063ffffffff16565b610913612134565b5050565b61091f611fe1565b6103e88161ffff161115610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f906131e8565b60405180910390fd5b81600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760166101000a81548161ffff021916908361ffff1602179055505050565b6109d2611fe1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890613254565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f85c8dbe769a46b5afd9c6b919673e23bb2ee9a30987540d04a0fb0e81e9c3be060405160405180910390a35050565b600760009054906101000a900461ffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b4961213d565b610b5161205f565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345977d03826040518263ffffffff1660e01b8152600401610bac9190612d5a565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050610be6612134565b50565b610bf1611fe1565b610bf961205f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061317c565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1683604051610c8e906132a5565b60006040518083038185875af1925050503d8060008114610ccb576040519150601f19603f3d011682016040523d82523d6000602084013e610cd0565b606091505b5050905080610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613306565b60405180910390fd5b50610d1d612134565b5050565b60045481565b60065481565b610d35611fe1565b610d3d612187565b565b610d47611fe1565b60018360ff1610158015610d5f575060048360ff1611155b610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613372565b60405180910390fd5b6127108261ffff161115610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde906133de565b60405180910390fd5b81600c60008560ff1660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550505050565b610e28611fe1565b600082118015610e385750818110155b610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e9061344a565b60405180910390fd5b81600481905550806005819055505050565b600760169054906101000a900461ffff1681565b610ea5611fe1565b8060068190555050565b60008060149054906101000a900460ff16905090565b610ecd611fe1565b610f1a3330837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b7ffe8b095e1a768e83a862933c32f2bd9b62b7b87f8fc8843d83ccce205208b65681604051610f499190612d5a565b60405180910390a150565b60096020528060005260406000206000915090505481565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900461ffff1681565b600a6020528060005260406000206000915090505481565b610fd3611fe1565b610fdd6000612272565b565b610fe761213d565b610fef61205f565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016110619190612d5a565b602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a2919061347f565b73ffffffffffffffffffffffffffffffffffffffff16146110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef906134f8565b60405180910390fd5b600454811015801561110c57506005548111155b61114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613564565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d5e3032846040518263ffffffff1660e01b81526004016111a89190612d5a565b602060405180830381865afa1580156111c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e99190613599565b905060018160ff1610158015611203575060048160ff1611155b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613372565b60405180910390fd5b6000600960008581526020019081526020016000205490506006548161126891906135f5565b4210156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613675565b60405180910390fd5b4260096000868152602001908152602001600020819055506112cc3384612336565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff166113329190613695565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600061136383612512565b61ffff166127106113738761255d565b61137d9190613700565b109050600081156115fa5760006127106113968661266c565b61ffff16876113a59190613731565b6113af9190613773565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161140c9190612e86565b602060405180830381865afa158015611429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144d91906137b9565b90506000612710600760009054906101000a900461ffff1661ffff16836114749190613731565b61147e9190613773565b9050600083905060008211801561149457508181115b1561149d578190505b6000600860008a60ff1660ff1681526020019081526020016000205490506000811180156114ca57508082115b156114d3578091505b81841015611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613832565b60405180910390fd5b81955061156433877f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166120ae9092919063ffffffff16565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff166115ca9190613695565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505061183e565b60018460ff160361175b57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f027853d876040518263ffffffff1660e01b81526004016116609190612d5a565b600060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a900467ffffffffffffffff166116f89190613695565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550857f05139056af4c648a0337e523d83577a91f8e2f98f00dff0a07e27779b629b4978560405161174e9190613861565b60405180910390a261183d565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663609cce09876001876117a7919061387c565b6040518363ffffffff1660e01b81526004016117c49291906138b1565b600060405180830381600087803b1580156117de57600080fd5b505af11580156117f2573d6000803e3d6000fd5b50505050857fb9f80e491efadd87d4cec014f984df9dac1223ff2a219ee0629056fa573773b285600187611826919061387c565b6040516118349291906138da565b60405180910390a25b5b853373ffffffffffffffffffffffffffffffffffffffff167f095a15929b253753c568b422987e1aeeaf1355de5429c6b8926e82d66d4365298688868660405161188b9493929190613903565b60405180910390a35050505061189f612134565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118d1611fe1565b6118d96126b7565b565b600b6020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16905083565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915090505481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119dd9190612e86565b602060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e91906137b9565b905090565b611a2b611fe1565b600073dc2b0d2dd2b7759d97d50db4eabdc3697311083073ffffffffffffffffffffffffffffffffffffffff16605c604051602401611a6a9190613983565b6040516020818303038152906040527f1e60fd14000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611af49190613a04565b6000604051808303816000865af19150503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b5050905080611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613a67565b60405180910390fd5b50565b611b85611fe1565b60018560ff1610158015611b9d575060048560ff1611155b611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613372565b60405180910390fd5b61c3508261ffff161115611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613ad3565b60405180910390fd5b81600d60008760ff1660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555080600860008760ff1660ff1681526020019081526020016000208190555060018560ff1603611ce057600084118015611c925750838310155b611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc89061344a565b60405180910390fd5b83600481905550826005819055505b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611d136129ff565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050919050565b600d6020528060005260406000206000915054906101000a900461ffff1681565b60055481565b611e29611fe1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613b65565b60405180910390fd5b611ea181612272565b50565b611eac611fe1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290613254565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7b323ed82caf0009b41e3227f7afc3b9406e27e148dffa2cd63aecde1daf13db60405160405180910390a35050565b611fe961271a565b73ffffffffffffffffffffffffffffffffffffffff16612007611941565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613bd1565b60405180910390fd5b565b6002600154036120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b90613c3d565b60405180910390fd5b6002600181905550565b61212f8363a9059cbb60e01b84846040516024016120cd929190613c5d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612722565b505050565b60018081905550565b612145610eaf565b15612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90613cd2565b60405180910390fd5b565b61218f6127e9565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121d261271a565b6040516121df9190612e86565b60405180910390a1565b61226c846323b872dd60e01b85858560405160240161220a93929190613cf2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612722565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081031561250e57600073ffffffffffffffffffffffffffffffffffffffff16600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156123b257506000600760169054906101000a900461ffff1661ffff16115b156124bf576000612710600760169054906101000a900461ffff1661ffff16836123dc9190613731565b6123e69190613773565b905060008111156124615761246083600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b5b6124b9833083856124729190613d29565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b5061250d565b61250c8230837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b5b5b5050565b600080600c60008460ff1660ff16815260200190815260200160002060009054906101000a900461ffff16905060008161ffff161161255357611388612555565b805b915050919050565b600080600a60008481526020019081526020016000206000815461258090613d5d565b91905081905590506001436125959190613d29565b4042338584307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125f49190612e86565b602060405180830381865afa158015612611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263591906137b9565b60405160200161264b9796959493929190613e39565b6040516020818303038152906040528051906020012060001c915050919050565b600080600d60008460ff1660ff16815260200190815260200160002060009054906101000a900461ffff16905060008161ffff16116126ad57613a986126af565b805b915050919050565b6126bf61213d565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861270361271a565b6040516127109190612e86565b60405180910390a1565b600033905090565b6000612784826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128329092919063ffffffff16565b90506000815111156127e457808060200190518101906127a49190613ee6565b6127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90613f85565b60405180910390fd5b5b505050565b6127f1610eaf565b612830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282790613ff1565b60405180910390fd5b565b6060612841848460008561284a565b90509392505050565b60608247101561288f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288690614083565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128b89190613a04565b60006040518083038185875af1925050503d80600081146128f5576040519150601f19603f3d011682016040523d82523d6000602084013e6128fa565b606091505b509150915061290b87838387612917565b92505050949350505050565b60608315612979576000835103612971576129318561298c565b612970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612967906140ef565b60405180910390fd5b5b829050612984565b61298383836129af565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129c25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f69190614164565b60405180910390fd5b6040518060600160405280600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600080fd5b6000819050919050565b612a5681612a43565b8114612a6157600080fd5b50565b600081359050612a7381612a4d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aa482612a79565b9050919050565b612ab481612a99565b8114612abf57600080fd5b50565b600081359050612ad181612aab565b92915050565b60008060408385031215612aee57612aed612a3e565b5b6000612afc85828601612a64565b9250506020612b0d85828601612ac2565b9150509250929050565b600061ffff82169050919050565b612b2e81612b17565b8114612b3957600080fd5b50565b600081359050612b4b81612b25565b92915050565b60008060408385031215612b6857612b67612a3e565b5b6000612b7685828601612ac2565b9250506020612b8785828601612b3c565b9150509250929050565b6000612b9c82612a99565b9050919050565b612bac81612b91565b8114612bb757600080fd5b50565b600081359050612bc981612ba3565b92915050565b600060208284031215612be557612be4612a3e565b5b6000612bf384828501612bba565b91505092915050565b612c0581612b17565b82525050565b6000602082019050612c206000830184612bfc565b92915050565b6000819050919050565b6000612c4b612c46612c4184612a79565b612c26565b612a79565b9050919050565b6000612c5d82612c30565b9050919050565b6000612c6f82612c52565b9050919050565b612c7f81612c64565b82525050565b6000602082019050612c9a6000830184612c76565b92915050565b600060208284031215612cb657612cb5612a3e565b5b6000612cc484828501612a64565b91505092915050565b6000612cd882612a79565b9050919050565b612ce881612ccd565b8114612cf357600080fd5b50565b600081359050612d0581612cdf565b92915050565b60008060408385031215612d2257612d21612a3e565b5b6000612d3085828601612a64565b9250506020612d4185828601612cf6565b9150509250929050565b612d5481612a43565b82525050565b6000602082019050612d6f6000830184612d4b565b92915050565b600060ff82169050919050565b612d8b81612d75565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600080600060608486031215612dc757612dc6612a3e565b5b6000612dd586828701612d99565b9350506020612de686828701612b3c565b9250506040612df786828701612d99565b9150509250925092565b60008060408385031215612e1857612e17612a3e565b5b6000612e2685828601612a64565b9250506020612e3785828601612a64565b9150509250929050565b60008115159050919050565b612e5681612e41565b82525050565b6000602082019050612e716000830184612e4d565b92915050565b612e8081612a99565b82525050565b6000602082019050612e9b6000830184612e77565b92915050565b600060208284031215612eb757612eb6612a3e565b5b6000612ec584828501612d99565b91505092915050565b6000612ed982612c52565b9050919050565b612ee981612ece565b82525050565b6000602082019050612f046000830184612ee0565b92915050565b600060208284031215612f2057612f1f612a3e565b5b6000612f2e84828501612ac2565b91505092915050565b600067ffffffffffffffff82169050919050565b612f5481612f37565b82525050565b6000606082019050612f6f6000830186612f4b565b612f7c6020830185612f4b565b612f896040830184612f4b565b949350505050565b600080600080600060a08688031215612fad57612fac612a3e565b5b6000612fbb88828901612d99565b9550506020612fcc88828901612a64565b9450506040612fdd88828901612a64565b9350506060612fee88828901612b3c565b9250506080612fff88828901612a64565b9150509295509295909350565b600061301782612c52565b9050919050565b6130278161300c565b82525050565b6000602082019050613042600083018461301e565b92915050565b61305181612f37565b82525050565b60608201600082015161306d6000850182613048565b5060208201516130806020850182613048565b5060408201516130936040850182613048565b50505050565b60006060820190506130ae6000830184613057565b92915050565b60006130bf82612a99565b9050919050565b6130cf816130b4565b81146130da57600080fd5b50565b6000813590506130ec816130c6565b92915050565b60006020828403121561310857613107612a3e565b5b6000613116848285016130dd565b91505092915050565b600082825260208201905092915050565b7f4a6f696e74426f617447616d653a7a65726f0000000000000000000000000000600082015250565b600061316660128361311f565b915061317182613130565b602082019050919050565b6000602082019050818103600083015261319581613159565b9050919050565b7f4d61782031302500000000000000000000000000000000000000000000000000600082015250565b60006131d260078361311f565b91506131dd8261319c565b602082019050919050565b60006020820190508181036000830152613201816131c5565b9050919050565b7f7a65726f20616464720000000000000000000000000000000000000000000000600082015250565b600061323e60098361311f565b915061324982613208565b602082019050919050565b6000602082019050818103600083015261326d81613231565b9050919050565b600081905092915050565b50565b600061328f600083613274565b915061329a8261327f565b600082019050919050565b60006132b082613282565b9150819050919050565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b60006132f060138361311f565b91506132fb826132ba565b602082019050919050565b6000602082019050818103600083015261331f816132e3565b9050919050565b7f496e76616c6964206c6576656c00000000000000000000000000000000000000600082015250565b600061335c600d8361311f565b915061336782613326565b602082019050919050565b6000602082019050818103600083015261338b8161334f565b9050919050565b7f496e76616c696420737563636573732072617465000000000000000000000000600082015250565b60006133c860148361311f565b91506133d382613392565b602082019050919050565b600060208201905081810360008301526133f7816133bb565b9050919050565b7f426164207374616b6520626f756e647300000000000000000000000000000000600082015250565b600061343460108361311f565b915061343f826133fe565b602082019050919050565b6000602082019050818103600083015261346381613427565b9050919050565b60008151905061347981612aab565b92915050565b60006020828403121561349557613494612a3e565b5b60006134a38482850161346a565b91505092915050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006134e260098361311f565b91506134ed826134ac565b602082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b7f5374616b65206f7574206f6620626f756e647300000000000000000000000000600082015250565b600061354e60138361311f565b915061355982613518565b602082019050919050565b6000602082019050818103600083015261357d81613541565b9050919050565b60008151905061359381612d82565b92915050565b6000602082840312156135af576135ae612a3e565b5b60006135bd84828501613584565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360082612a43565b915061360b83612a43565b9250828201905080821115613623576136226135c6565b5b92915050565b7f436f6f6c646f776e000000000000000000000000000000000000000000000000600082015250565b600061365f60088361311f565b915061366a82613629565b602082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b60006136a082612f37565b91506136ab83612f37565b9250828201905067ffffffffffffffff8111156136cb576136ca6135c6565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061370b82612a43565b915061371683612a43565b925082613726576137256136d1565b5b828206905092915050565b600061373c82612a43565b915061374783612a43565b925082820261375581612a43565b9150828204841483151761376c5761376b6135c6565b5b5092915050565b600061377e82612a43565b915061378983612a43565b925082613799576137986136d1565b5b828204905092915050565b6000815190506137b381612a4d565b92915050565b6000602082840312156137cf576137ce612a3e565b5b60006137dd848285016137a4565b91505092915050565b7f496e73756666696369656e7420706f6f6c000000000000000000000000000000600082015250565b600061381c60118361311f565b9150613827826137e6565b602082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b61385b81612d75565b82525050565b60006020820190506138766000830184613852565b92915050565b600061388782612d75565b915061389283612d75565b9250828203905060ff8111156138ab576138aa6135c6565b5b92915050565b60006040820190506138c66000830185612d4b565b6138d36020830184613852565b9392505050565b60006040820190506138ef6000830185613852565b6138fc6020830184613852565b9392505050565b60006080820190506139186000830187613852565b6139256020830186612d4b565b6139326040830185612e4d565b61393f6060830184612d4b565b95945050505050565b6000819050919050565b600061396d61396861396384613948565b612c26565b612d75565b9050919050565b61397d81613952565b82525050565b60006020820190506139986000830184613974565b92915050565b600081519050919050565b60005b838110156139c75780820151818401526020810190506139ac565b60008484015250505050565b60006139de8261399e565b6139e88185613274565b93506139f88185602086016139a9565b80840191505092915050565b6000613a1082846139d3565b915081905092915050565b7f4665654d20726567697374726174696f6e206661696c65640000000000000000600082015250565b6000613a5160188361311f565b9150613a5c82613a1b565b602082019050919050565b60006020820190508181036000830152613a8081613a44565b9050919050565b7f496e76616c6964206d756c7469706c6965720000000000000000000000000000600082015250565b6000613abd60128361311f565b9150613ac882613a87565b602082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b4f60268361311f565b9150613b5a82613af3565b604082019050919050565b60006020820190508181036000830152613b7e81613b42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bbb60208361311f565b9150613bc682613b85565b602082019050919050565b60006020820190508181036000830152613bea81613bae565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613c27601f8361311f565b9150613c3282613bf1565b602082019050919050565b60006020820190508181036000830152613c5681613c1a565b9050919050565b6000604082019050613c726000830185612e77565b613c7f6020830184612d4b565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613cbc60108361311f565b9150613cc782613c86565b602082019050919050565b60006020820190508181036000830152613ceb81613caf565b9050919050565b6000606082019050613d076000830186612e77565b613d146020830185612e77565b613d216040830184612d4b565b949350505050565b6000613d3482612a43565b9150613d3f83612a43565b9250828203905081811115613d5757613d566135c6565b5b92915050565b6000613d6882612a43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d9a57613d996135c6565b5b600182019050919050565b6000819050919050565b6000819050919050565b613dca613dc582613da5565b613daf565b82525050565b6000819050919050565b613deb613de682612a43565b613dd0565b82525050565b60008160601b9050919050565b6000613e0982613df1565b9050919050565b6000613e1b82613dfe565b9050919050565b613e33613e2e82612a99565b613e10565b82525050565b6000613e45828a613db9565b602082019150613e558289613dda565b602082019150613e658288613e22565b601482019150613e758287613dda565b602082019150613e858286613dda565b602082019150613e958285613e22565b601482019150613ea58284613dda565b60208201915081905098975050505050505050565b613ec381612e41565b8114613ece57600080fd5b50565b600081519050613ee081613eba565b92915050565b600060208284031215613efc57613efb612a3e565b5b6000613f0a84828501613ed1565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613f6f602a8361311f565b9150613f7a82613f13565b604082019050919050565b60006020820190508181036000830152613f9e81613f62565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613fdb60148361311f565b9150613fe682613fa5565b602082019050919050565b6000602082019050818103600083015261400a81613fce565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061406d60268361311f565b915061407882614011565b604082019050919050565b6000602082019050818103600083015261409c81614060565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006140d9601d8361311f565b91506140e4826140a3565b602082019050919050565b60006020820190508181036000830152614108816140cc565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006141368261410f565b614140818561311f565b93506141508185602086016139a9565b6141598161411a565b840191505092915050565b6000602082019050818103600083015261417e818461412b565b90509291505056fea264697066735822122052c0b96d21a560179d847d6b80014d457e645cd868922415f5bb59f75bf8975d64736f6c63430008130033000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7600000000000000000000000075f5ee19bc352d19b1791684fadf23b948edaba30000000000000000000000009c895cb1b83e78194b1968aba7934554a2eb7a11
Deployed Bytecode
0x6080604052600436106102135760003560e01c806364f4fd2f1161011857806396365d44116100a0578063c23f85d61161006f578063c23f85d61461074a578063d986754f14610787578063ea1b28e0146107c4578063f2fde38b146107ef578063f56e9c66146108185761021a565b806396365d44146106b45780639a198d61146106df578063a262377e146106f6578063bf685f261461071f5761021a565b80637c0b8de2116100e75780637c0b8de2146105cb5780638456cb59146105f65780638bcdcbf31461060d5780638da5cb5b1461064c5780638f9dc067146106775761021a565b806364f4fd2f146105115780636ccbae5f1461054e578063715018a61461058b5780637357f5d2146105a25761021a565b80633f4ba83a1161019b5780634fc3f41a1161016a5780634fc3f41a1461042c5780635c975abb146104555780635f2855a21461048057806361ae0edb146104a957806361d027b3146104e65761021a565b80633f4ba83a146103985780634178e174146103af5780634b241491146103d85780634dc10ea1146104015761021a565b8063245f3c9d116101e2578063245f3c9d146102c557806328a66f62146102f057806336118b5214610319578063375b3c0a146103425780633dc7e7b61461036d5761021a565b806307794ec51461021f5780630cfa31f9146102485780631104084b146102715780631685758b1461029a5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612ad7565b610841565b005b34801561025457600080fd5b5061026f600480360381019061026a9190612b51565b610917565b005b34801561027d57600080fd5b5061029860048036038101906102939190612bcf565b6109ca565b005b3480156102a657600080fd5b506102af610b07565b6040516102bc9190612c0b565b60405180910390f35b3480156102d157600080fd5b506102da610b1b565b6040516102e79190612c85565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190612ca0565b610b41565b005b34801561032557600080fd5b50610340600480360381019061033b9190612d0b565b610be9565b005b34801561034e57600080fd5b50610357610d21565b6040516103649190612d5a565b60405180910390f35b34801561037957600080fd5b50610382610d27565b60405161038f9190612d5a565b60405180910390f35b3480156103a457600080fd5b506103ad610d2d565b005b3480156103bb57600080fd5b506103d660048036038101906103d19190612dae565b610d3f565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190612e01565b610e20565b005b34801561040d57600080fd5b50610416610e89565b6040516104239190612c0b565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612ca0565b610e9d565b005b34801561046157600080fd5b5061046a610eaf565b6040516104779190612e5c565b60405180910390f35b34801561048c57600080fd5b506104a760048036038101906104a29190612ca0565b610ec5565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190612ca0565b610f54565b6040516104dd9190612d5a565b60405180910390f35b3480156104f257600080fd5b506104fb610f6c565b6040516105089190612e86565b60405180910390f35b34801561051d57600080fd5b5061053860048036038101906105339190612ea1565b610f92565b6040516105459190612c0b565b60405180910390f35b34801561055a57600080fd5b5061057560048036038101906105709190612ca0565b610fb3565b6040516105829190612d5a565b60405180910390f35b34801561059757600080fd5b506105a0610fcb565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190612e01565b610fdf565b005b3480156105d757600080fd5b506105e06118a3565b6040516105ed9190612eef565b60405180910390f35b34801561060257600080fd5b5061060b6118c9565b005b34801561061957600080fd5b50610634600480360381019061062f9190612f0a565b6118db565b60405161064393929190612f5a565b60405180910390f35b34801561065857600080fd5b50610661611941565b60405161066e9190612e86565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190612ea1565b61196a565b6040516106ab9190612d5a565b60405180910390f35b3480156106c057600080fd5b506106c9611982565b6040516106d69190612d5a565b60405180910390f35b3480156106eb57600080fd5b506106f4611a23565b005b34801561070257600080fd5b5061071d60048036038101906107189190612f91565b611b7d565b005b34801561072b57600080fd5b50610734611ce7565b604051610741919061302d565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190612f0a565b611d0b565b60405161077e9190613099565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190612ea1565b611dfa565b6040516107bb9190612c0b565b60405180910390f35b3480156107d057600080fd5b506107d9611e1b565b6040516107e69190612d5a565b60405180910390f35b3480156107fb57600080fd5b5061081660048036038101906108119190612f0a565b611e21565b005b34801561082457600080fd5b5061083f600480360381019061083a91906130f2565b611ea4565b005b610849611fe1565b61085161205f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b79061317c565b60405180910390fd5b61090b81837f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166120ae9092919063ffffffff16565b610913612134565b5050565b61091f611fe1565b6103e88161ffff161115610968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095f906131e8565b60405180910390fd5b81600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760166101000a81548161ffff021916908361ffff1602179055505050565b6109d2611fe1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3890613254565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f85c8dbe769a46b5afd9c6b919673e23bb2ee9a30987540d04a0fb0e81e9c3be060405160405180910390a35050565b600760009054906101000a900461ffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b4961213d565b610b5161205f565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345977d03826040518263ffffffff1660e01b8152600401610bac9190612d5a565b600060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b50505050610be6612134565b50565b610bf1611fe1565b610bf961205f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5f9061317c565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1683604051610c8e906132a5565b60006040518083038185875af1925050503d8060008114610ccb576040519150601f19603f3d011682016040523d82523d6000602084013e610cd0565b606091505b5050905080610d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0b90613306565b60405180910390fd5b50610d1d612134565b5050565b60045481565b60065481565b610d35611fe1565b610d3d612187565b565b610d47611fe1565b60018360ff1610158015610d5f575060048360ff1611155b610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613372565b60405180910390fd5b6127108261ffff161115610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde906133de565b60405180910390fd5b81600c60008560ff1660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff160217905550505050565b610e28611fe1565b600082118015610e385750818110155b610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e9061344a565b60405180910390fd5b81600481905550806005819055505050565b600760169054906101000a900461ffff1681565b610ea5611fe1565b8060068190555050565b60008060149054906101000a900460ff16905090565b610ecd611fe1565b610f1a3330837f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b7ffe8b095e1a768e83a862933c32f2bd9b62b7b87f8fc8843d83ccce205208b65681604051610f499190612d5a565b60405180910390a150565b60096020528060005260406000206000915090505481565b600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900461ffff1681565b600a6020528060005260406000206000915090505481565b610fd3611fe1565b610fdd6000612272565b565b610fe761213d565b610fef61205f565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016110619190612d5a565b602060405180830381865afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a2919061347f565b73ffffffffffffffffffffffffffffffffffffffff16146110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef906134f8565b60405180910390fd5b600454811015801561110c57506005548111155b61114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613564565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d5e3032846040518263ffffffff1660e01b81526004016111a89190612d5a565b602060405180830381865afa1580156111c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111e99190613599565b905060018160ff1610158015611203575060048160ff1611155b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613372565b60405180910390fd5b6000600960008581526020019081526020016000205490506006548161126891906135f5565b4210156112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190613675565b60405180910390fd5b4260096000868152602001908152602001600020819055506112cc3384612336565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff166113329190613695565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600061136383612512565b61ffff166127106113738761255d565b61137d9190613700565b109050600081156115fa5760006127106113968661266c565b61ffff16876113a59190613731565b6113af9190613773565b905060007f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161140c9190612e86565b602060405180830381865afa158015611429573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144d91906137b9565b90506000612710600760009054906101000a900461ffff1661ffff16836114749190613731565b61147e9190613773565b9050600083905060008211801561149457508181115b1561149d578190505b6000600860008a60ff1660ff1681526020019081526020016000205490506000811180156114ca57508082115b156114d3578091505b81841015611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90613832565b60405180910390fd5b81955061156433877f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166120ae9092919063ffffffff16565b6001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff166115ca9190613695565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505050505061183e565b60018460ff160361175b57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f027853d876040518263ffffffff1660e01b81526004016116609190612d5a565b600060405180830381600087803b15801561167a57600080fd5b505af115801561168e573d6000803e3d6000fd5b505050506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a900467ffffffffffffffff166116f89190613695565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550857f05139056af4c648a0337e523d83577a91f8e2f98f00dff0a07e27779b629b4978560405161174e9190613861565b60405180910390a261183d565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663609cce09876001876117a7919061387c565b6040518363ffffffff1660e01b81526004016117c49291906138b1565b600060405180830381600087803b1580156117de57600080fd5b505af11580156117f2573d6000803e3d6000fd5b50505050857fb9f80e491efadd87d4cec014f984df9dac1223ff2a219ee0629056fa573773b285600187611826919061387c565b6040516118349291906138da565b60405180910390a25b5b853373ffffffffffffffffffffffffffffffffffffffff167f095a15929b253753c568b422987e1aeeaf1355de5429c6b8926e82d66d4365298688868660405161188b9493929190613903565b60405180910390a35050505061189f612134565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118d1611fe1565b6118d96126b7565b565b600b6020528060005260406000206000915090508060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16908060000160109054906101000a900467ffffffffffffffff16905083565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528060005260406000206000915090505481565b60007f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119dd9190612e86565b602060405180830381865afa1580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e91906137b9565b905090565b611a2b611fe1565b600073dc2b0d2dd2b7759d97d50db4eabdc3697311083073ffffffffffffffffffffffffffffffffffffffff16605c604051602401611a6a9190613983565b6040516020818303038152906040527f1e60fd14000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611af49190613a04565b6000604051808303816000865af19150503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b5050905080611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613a67565b60405180910390fd5b50565b611b85611fe1565b60018560ff1610158015611b9d575060048560ff1611155b611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613372565b60405180910390fd5b61c3508261ffff161115611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613ad3565b60405180910390fd5b81600d60008760ff1660ff16815260200190815260200160002060006101000a81548161ffff021916908361ffff16021790555080600860008760ff1660ff1681526020019081526020016000208190555060018560ff1603611ce057600084118015611c925750838310155b611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc89061344a565b60405180910390fd5b83600481905550826005819055505b5050505050565b7f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7681565b611d136129ff565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050919050565b600d6020528060005260406000206000915054906101000a900461ffff1681565b60055481565b611e29611fe1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8f90613b65565b60405180910390fd5b611ea181612272565b50565b611eac611fe1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1290613254565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f7b323ed82caf0009b41e3227f7afc3b9406e27e148dffa2cd63aecde1daf13db60405160405180910390a35050565b611fe961271a565b73ffffffffffffffffffffffffffffffffffffffff16612007611941565b73ffffffffffffffffffffffffffffffffffffffff161461205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205490613bd1565b60405180910390fd5b565b6002600154036120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b90613c3d565b60405180910390fd5b6002600181905550565b61212f8363a9059cbb60e01b84846040516024016120cd929190613c5d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612722565b505050565b60018081905550565b612145610eaf565b15612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90613cd2565b60405180910390fd5b565b61218f6127e9565b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6121d261271a565b6040516121df9190612e86565b60405180910390a1565b61226c846323b872dd60e01b85858560405160240161220a93929190613cf2565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612722565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081031561250e57600073ffffffffffffffffffffffffffffffffffffffff16600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156123b257506000600760169054906101000a900461ffff1661ffff16115b156124bf576000612710600760169054906101000a900461ffff1661ffff16836123dc9190613731565b6123e69190613773565b905060008111156124615761246083600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16837f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b5b6124b9833083856124729190613d29565b7f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b5061250d565b61250c8230837f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166121e9909392919063ffffffff16565b5b5b5050565b600080600c60008460ff1660ff16815260200190815260200160002060009054906101000a900461ffff16905060008161ffff161161255357611388612555565b805b915050919050565b600080600a60008481526020019081526020016000206000815461258090613d5d565b91905081905590506001436125959190613d29565b4042338584307f000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125f49190612e86565b602060405180830381865afa158015612611573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263591906137b9565b60405160200161264b9796959493929190613e39565b6040516020818303038152906040528051906020012060001c915050919050565b600080600d60008460ff1660ff16815260200190815260200160002060009054906101000a900461ffff16905060008161ffff16116126ad57613a986126af565b805b915050919050565b6126bf61213d565b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861270361271a565b6040516127109190612e86565b60405180910390a1565b600033905090565b6000612784826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128329092919063ffffffff16565b90506000815111156127e457808060200190518101906127a49190613ee6565b6127e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da90613f85565b60405180910390fd5b5b505050565b6127f1610eaf565b612830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282790613ff1565b60405180910390fd5b565b6060612841848460008561284a565b90509392505050565b60608247101561288f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288690614083565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128b89190613a04565b60006040518083038185875af1925050503d80600081146128f5576040519150601f19603f3d011682016040523d82523d6000602084013e6128fa565b606091505b509150915061290b87838387612917565b92505050949350505050565b60608315612979576000835103612971576129318561298c565b612970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612967906140ef565b60405180910390fd5b5b829050612984565b61298383836129af565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156129c25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f69190614164565b60405180910390fd5b6040518060600160405280600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600080fd5b6000819050919050565b612a5681612a43565b8114612a6157600080fd5b50565b600081359050612a7381612a4d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612aa482612a79565b9050919050565b612ab481612a99565b8114612abf57600080fd5b50565b600081359050612ad181612aab565b92915050565b60008060408385031215612aee57612aed612a3e565b5b6000612afc85828601612a64565b9250506020612b0d85828601612ac2565b9150509250929050565b600061ffff82169050919050565b612b2e81612b17565b8114612b3957600080fd5b50565b600081359050612b4b81612b25565b92915050565b60008060408385031215612b6857612b67612a3e565b5b6000612b7685828601612ac2565b9250506020612b8785828601612b3c565b9150509250929050565b6000612b9c82612a99565b9050919050565b612bac81612b91565b8114612bb757600080fd5b50565b600081359050612bc981612ba3565b92915050565b600060208284031215612be557612be4612a3e565b5b6000612bf384828501612bba565b91505092915050565b612c0581612b17565b82525050565b6000602082019050612c206000830184612bfc565b92915050565b6000819050919050565b6000612c4b612c46612c4184612a79565b612c26565b612a79565b9050919050565b6000612c5d82612c30565b9050919050565b6000612c6f82612c52565b9050919050565b612c7f81612c64565b82525050565b6000602082019050612c9a6000830184612c76565b92915050565b600060208284031215612cb657612cb5612a3e565b5b6000612cc484828501612a64565b91505092915050565b6000612cd882612a79565b9050919050565b612ce881612ccd565b8114612cf357600080fd5b50565b600081359050612d0581612cdf565b92915050565b60008060408385031215612d2257612d21612a3e565b5b6000612d3085828601612a64565b9250506020612d4185828601612cf6565b9150509250929050565b612d5481612a43565b82525050565b6000602082019050612d6f6000830184612d4b565b92915050565b600060ff82169050919050565b612d8b81612d75565b8114612d9657600080fd5b50565b600081359050612da881612d82565b92915050565b600080600060608486031215612dc757612dc6612a3e565b5b6000612dd586828701612d99565b9350506020612de686828701612b3c565b9250506040612df786828701612d99565b9150509250925092565b60008060408385031215612e1857612e17612a3e565b5b6000612e2685828601612a64565b9250506020612e3785828601612a64565b9150509250929050565b60008115159050919050565b612e5681612e41565b82525050565b6000602082019050612e716000830184612e4d565b92915050565b612e8081612a99565b82525050565b6000602082019050612e9b6000830184612e77565b92915050565b600060208284031215612eb757612eb6612a3e565b5b6000612ec584828501612d99565b91505092915050565b6000612ed982612c52565b9050919050565b612ee981612ece565b82525050565b6000602082019050612f046000830184612ee0565b92915050565b600060208284031215612f2057612f1f612a3e565b5b6000612f2e84828501612ac2565b91505092915050565b600067ffffffffffffffff82169050919050565b612f5481612f37565b82525050565b6000606082019050612f6f6000830186612f4b565b612f7c6020830185612f4b565b612f896040830184612f4b565b949350505050565b600080600080600060a08688031215612fad57612fac612a3e565b5b6000612fbb88828901612d99565b9550506020612fcc88828901612a64565b9450506040612fdd88828901612a64565b9350506060612fee88828901612b3c565b9250506080612fff88828901612a64565b9150509295509295909350565b600061301782612c52565b9050919050565b6130278161300c565b82525050565b6000602082019050613042600083018461301e565b92915050565b61305181612f37565b82525050565b60608201600082015161306d6000850182613048565b5060208201516130806020850182613048565b5060408201516130936040850182613048565b50505050565b60006060820190506130ae6000830184613057565b92915050565b60006130bf82612a99565b9050919050565b6130cf816130b4565b81146130da57600080fd5b50565b6000813590506130ec816130c6565b92915050565b60006020828403121561310857613107612a3e565b5b6000613116848285016130dd565b91505092915050565b600082825260208201905092915050565b7f4a6f696e74426f617447616d653a7a65726f0000000000000000000000000000600082015250565b600061316660128361311f565b915061317182613130565b602082019050919050565b6000602082019050818103600083015261319581613159565b9050919050565b7f4d61782031302500000000000000000000000000000000000000000000000000600082015250565b60006131d260078361311f565b91506131dd8261319c565b602082019050919050565b60006020820190508181036000830152613201816131c5565b9050919050565b7f7a65726f20616464720000000000000000000000000000000000000000000000600082015250565b600061323e60098361311f565b915061324982613208565b602082019050919050565b6000602082019050818103600083015261326d81613231565b9050919050565b600081905092915050565b50565b600061328f600083613274565b915061329a8261327f565b600082019050919050565b60006132b082613282565b9150819050919050565b7f455448207472616e73666572206661696c656400000000000000000000000000600082015250565b60006132f060138361311f565b91506132fb826132ba565b602082019050919050565b6000602082019050818103600083015261331f816132e3565b9050919050565b7f496e76616c6964206c6576656c00000000000000000000000000000000000000600082015250565b600061335c600d8361311f565b915061336782613326565b602082019050919050565b6000602082019050818103600083015261338b8161334f565b9050919050565b7f496e76616c696420737563636573732072617465000000000000000000000000600082015250565b60006133c860148361311f565b91506133d382613392565b602082019050919050565b600060208201905081810360008301526133f7816133bb565b9050919050565b7f426164207374616b6520626f756e647300000000000000000000000000000000600082015250565b600061343460108361311f565b915061343f826133fe565b602082019050919050565b6000602082019050818103600083015261346381613427565b9050919050565b60008151905061347981612aab565b92915050565b60006020828403121561349557613494612a3e565b5b60006134a38482850161346a565b91505092915050565b7f4e6f74206f776e65720000000000000000000000000000000000000000000000600082015250565b60006134e260098361311f565b91506134ed826134ac565b602082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b7f5374616b65206f7574206f6620626f756e647300000000000000000000000000600082015250565b600061354e60138361311f565b915061355982613518565b602082019050919050565b6000602082019050818103600083015261357d81613541565b9050919050565b60008151905061359381612d82565b92915050565b6000602082840312156135af576135ae612a3e565b5b60006135bd84828501613584565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360082612a43565b915061360b83612a43565b9250828201905080821115613623576136226135c6565b5b92915050565b7f436f6f6c646f776e000000000000000000000000000000000000000000000000600082015250565b600061365f60088361311f565b915061366a82613629565b602082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b60006136a082612f37565b91506136ab83612f37565b9250828201905067ffffffffffffffff8111156136cb576136ca6135c6565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061370b82612a43565b915061371683612a43565b925082613726576137256136d1565b5b828206905092915050565b600061373c82612a43565b915061374783612a43565b925082820261375581612a43565b9150828204841483151761376c5761376b6135c6565b5b5092915050565b600061377e82612a43565b915061378983612a43565b925082613799576137986136d1565b5b828204905092915050565b6000815190506137b381612a4d565b92915050565b6000602082840312156137cf576137ce612a3e565b5b60006137dd848285016137a4565b91505092915050565b7f496e73756666696369656e7420706f6f6c000000000000000000000000000000600082015250565b600061381c60118361311f565b9150613827826137e6565b602082019050919050565b6000602082019050818103600083015261384b8161380f565b9050919050565b61385b81612d75565b82525050565b60006020820190506138766000830184613852565b92915050565b600061388782612d75565b915061389283612d75565b9250828203905060ff8111156138ab576138aa6135c6565b5b92915050565b60006040820190506138c66000830185612d4b565b6138d36020830184613852565b9392505050565b60006040820190506138ef6000830185613852565b6138fc6020830184613852565b9392505050565b60006080820190506139186000830187613852565b6139256020830186612d4b565b6139326040830185612e4d565b61393f6060830184612d4b565b95945050505050565b6000819050919050565b600061396d61396861396384613948565b612c26565b612d75565b9050919050565b61397d81613952565b82525050565b60006020820190506139986000830184613974565b92915050565b600081519050919050565b60005b838110156139c75780820151818401526020810190506139ac565b60008484015250505050565b60006139de8261399e565b6139e88185613274565b93506139f88185602086016139a9565b80840191505092915050565b6000613a1082846139d3565b915081905092915050565b7f4665654d20726567697374726174696f6e206661696c65640000000000000000600082015250565b6000613a5160188361311f565b9150613a5c82613a1b565b602082019050919050565b60006020820190508181036000830152613a8081613a44565b9050919050565b7f496e76616c6964206d756c7469706c6965720000000000000000000000000000600082015250565b6000613abd60128361311f565b9150613ac882613a87565b602082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b4f60268361311f565b9150613b5a82613af3565b604082019050919050565b60006020820190508181036000830152613b7e81613b42565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bbb60208361311f565b9150613bc682613b85565b602082019050919050565b60006020820190508181036000830152613bea81613bae565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613c27601f8361311f565b9150613c3282613bf1565b602082019050919050565b60006020820190508181036000830152613c5681613c1a565b9050919050565b6000604082019050613c726000830185612e77565b613c7f6020830184612d4b565b9392505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613cbc60108361311f565b9150613cc782613c86565b602082019050919050565b60006020820190508181036000830152613ceb81613caf565b9050919050565b6000606082019050613d076000830186612e77565b613d146020830185612e77565b613d216040830184612d4b565b949350505050565b6000613d3482612a43565b9150613d3f83612a43565b9250828203905081811115613d5757613d566135c6565b5b92915050565b6000613d6882612a43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d9a57613d996135c6565b5b600182019050919050565b6000819050919050565b6000819050919050565b613dca613dc582613da5565b613daf565b82525050565b6000819050919050565b613deb613de682612a43565b613dd0565b82525050565b60008160601b9050919050565b6000613e0982613df1565b9050919050565b6000613e1b82613dfe565b9050919050565b613e33613e2e82612a99565b613e10565b82525050565b6000613e45828a613db9565b602082019150613e558289613dda565b602082019150613e658288613e22565b601482019150613e758287613dda565b602082019150613e858286613dda565b602082019150613e958285613e22565b601482019150613ea58284613dda565b60208201915081905098975050505050505050565b613ec381612e41565b8114613ece57600080fd5b50565b600081519050613ee081613eba565b92915050565b600060208284031215613efc57613efb612a3e565b5b6000613f0a84828501613ed1565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613f6f602a8361311f565b9150613f7a82613f13565b604082019050919050565b60006020820190508181036000830152613f9e81613f62565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613fdb60148361311f565b9150613fe682613fa5565b602082019050919050565b6000602082019050818103600083015261400a81613fce565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061406d60268361311f565b915061407882614011565b604082019050919050565b6000602082019050818103600083015261409c81614060565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006140d9601d8361311f565b91506140e4826140a3565b602082019050919050565b60006020820190508181036000830152614108816140cc565b9050919050565b600081519050919050565b6000601f19601f8301169050919050565b60006141368261410f565b614140818561311f565b93506141508185602086016139a9565b6141598161411a565b840191505092915050565b6000602082019050818103600083015261417e818461412b565b90509291505056fea264697066735822122052c0b96d21a560179d847d6b80014d457e645cd868922415f5bb59f75bf8975d64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb7600000000000000000000000075f5ee19bc352d19b1791684fadf23b948edaba30000000000000000000000009c895cb1b83e78194b1968aba7934554a2eb7a11
-----Decoded View---------------
Arg [0] : jointToken (address): 0xC046dCb16592FBb3F9fA0C629b8D93090dD4cB76
Arg [1] : boatNft (address): 0x75f5EE19Bc352d19B1791684faDf23b948EDaBA3
Arg [2] : boatGame (address): 0x9C895cb1b83E78194B1968aBA7934554A2Eb7a11
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c046dcb16592fbb3f9fa0c629b8d93090dd4cb76
Arg [1] : 00000000000000000000000075f5ee19bc352d19b1791684fadf23b948edaba3
Arg [2] : 0000000000000000000000009c895cb1b83e78194b1968aba7934554a2eb7a11
Deployed Bytecode Sourcemap
29726:10262:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37564:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36085:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35609:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30133:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29891:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34706:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37762:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29926:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30087:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37503:53;;;;;;;;;;;;;:::i;:::-;;36440:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35878:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30268:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35107:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25059:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34937:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30478:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30238:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36323:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30529:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27977:103;;;;;;;;;;;;;:::i;:::-;;32388:2243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29865:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37448:49;;;;;;;;;;;;;:::i;:::-;;30656:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;27329:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30424:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38167:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39716:269;;;;;;;;;;;;;:::i;:::-;;36807:629;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29829:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38047:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36377:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30007:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28235:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35302:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37564:190;27215:13;:11;:13::i;:::-;21786:21:::1;:19;:21::i;:::-;37680:1:::2;37666:16;;:2;:16;;::::0;37658:47:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;37716:30;37735:2;37739:6;37716:5;:18;;;;:30;;;;;:::i;:::-;21830:20:::1;:18;:20::i;:::-;37564:190:::0;;:::o;36085:188::-;27215:13;:11;:13::i;:::-;36185:5:::1;36177:4;:13;;;;36169:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;36225:9;36214:8;;:20;;;;;;;;;;;;;;;;;;36260:4;36246:11;;:18;;;;;;;;;;;;;;;;;;36085:188:::0;;:::o;35609:257::-;27215:13;:11;:13::i;:::-;35715:1:::1;35687:30;;35695:7;35687:30;;::::0;35679:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35742:11;35764:9;;;;;;;;;;;35742:32;;35797:7;35785:9;;:19;;;;;;;;;;;;;;;;;;35849:7;35820:38;;35836:3;35820:38;;;;;;;;;;;;35668:198;35609:257:::0;:::o;30133:27::-;;;;;;;;;;;;;:::o;29891:26::-;;;;;;;;;;;;;:::o;34706:187::-;24664:19;:17;:19::i;:::-;21786:21:::1;:19;:21::i;:::-;34859:9:::2;;;;;;;;;;;:17;;;34877:7;34859:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;21830:20:::1;:18;:20::i;:::-;34706:187:::0;:::o;37762:251::-;27215:13;:11;:13::i;:::-;21786:21:::1;:19;:21::i;:::-;37884:1:::2;37870:16;;:2;:16;;::::0;37862:47:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;37921:7;37934:2;:7;;37949:6;37934:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37920:40;;;37979:2;37971:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;37851:162;21830:20:::1;:18;:20::i;:::-;37762:251:::0;;:::o;29926:37::-;;;;:::o;30087:39::-;;;;:::o;37503:53::-;27215:13;:11;:13::i;:::-;37543:10:::1;:8;:10::i;:::-;37503:53::o:0;36440:355::-;27215:13;:11;:13::i;:::-;36561:1:::1;36554:3;:8;;;;:20;;;;;36573:1;36566:3;:8;;;;36554:20;36546:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36625:5;36611:10;:19;;;;36603:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;36689:10;36666:15;:20;36682:3;36666:20;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;36440:355:::0;;;:::o;35878:195::-;27215:13;:11;:13::i;:::-;35975:1:::1;35968:4;:8;:24;;;;;35988:4;35980;:12;;35968:24;35960:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36035:4;36024:8;:15;;;;36061:4;36050:8;:15;;;;35878:195:::0;;:::o;30268:30::-;;;;;;;;;;;;;:::o;35107:101::-;27215:13;:11;:13::i;:::-;35191:8:::1;35177:11;:22;;;;35107:101:::0;:::o;25059:86::-;25106:4;25130:7;;;;;;;;;;;25123:14;;25059:86;:::o;34937:162::-;27215:13;:11;:13::i;:::-;35004:57:::1;35027:10;35047:4;35054:6;35004:5;:22;;;;:57;;;;;;:::i;:::-;35077:14;35084:6;35077:14;;;;;;:::i;:::-;;;;;;;;34937:162:::0;:::o;30478:44::-;;;;;;;;;;;;;;;;;:::o;30238:23::-;;;;;;;;;;;;;:::o;36323:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;30529:42::-;;;;;;;;;;;;;;;;;:::o;27977:103::-;27215:13;:11;:13::i;:::-;28042:30:::1;28069:1;28042:18;:30::i;:::-;27977:103::o:0;32388:2243::-;24664:19;:17;:19::i;:::-;21786:21:::1;:19;:21::i;:::-;32512:10:::2;32488:34;;:3;;;;;;;;;;;:11;;;32500:7;32488:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;32480:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32564:8;;32555:5;:17;;:38;;;;;32585:8;;32576:5;:17;;32555:38;32547:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32630:9;32642:3;;;;;;;;;;;:11;;;32654:7;32642:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32630:32;;32688:1;32681:3;:8;;;;:20;;;;;32700:1;32693:3;:8;;;;32681:20;32673:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32732:12;32747:9;:18;32757:7;32747:18;;;;;;;;;;;;32732:33;;32810:11;;32803:4;:18;;;;:::i;:::-;32784:15;:37;;32776:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32866:15;32845:9;:18;32855:7;32845:18;;;;;;;;;;;:36;;;;32947:27;32956:10;32968:5;32947:8;:27::i;:::-;33018:1;32985:5;:17;32991:10;32985:17;;;;;;;;;;;;;;;:29;;;:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33066:12;33108:19;33123:3;33108:14;:19::i;:::-;33081:46;;33098:6;33082:13;33087:7;33082:4;:13::i;:::-;:22;;;;:::i;:::-;33081:46;33066:61;;33138:18;33185:7;33181:1297;;;33209:17;33264:6;33238:22;33256:3;33238:17;:22::i;:::-;33230:30;;:5;:30;;;;:::i;:::-;33229:41;;;;:::i;:::-;33209:61;;33285:15;33303:5;:15;;;33327:4;33303:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33285:48;;33420:17;33461:6;33451;;;;;;;;;;;33441:16;;:7;:16;;;;:::i;:::-;33440:27;;;;:::i;:::-;33420:47;;33482:14;33499:9;33482:26;;33539:1;33527:9;:13;:35;;;;;33553:9;33544:6;:18;33527:35;33523:59;;;33573:9;33564:18;;33523:59;33661:14;33678:12;:17;33691:3;33678:17;;;;;;;;;;;;;;;;33661:34;;33723:1;33714:6;:10;:29;;;;;33737:6;33728;:15;33714:29;33710:50;;;33754:6;33745:15;;33710:50;33808:6;33797:7;:17;;33789:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;33864:6;33851:19;;33885:42;33904:10;33916;33885:5;:18;;;;:42;;;;;:::i;:::-;33971:1;33942:5;:17;33948:10;33942:17;;;;;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33194:790;;;;;33181:1297;;;34060:1;34053:3;:8;;::::0;34049:418:::2;;34135:3;;;;;;;;;;;:12;;;34148:7;34135:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34206:1;34175:5;:17;34181:10;34175:17;;;;;;;;;;;;;;;:27;;;:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34242:7;34231:24;34251:3;34231:24;;;;;;:::i;:::-;;;;;;;;34049:418;;;34356:3;;;;;;;;;;;:16;;;34373:7;34388:1;34382:3;:7;;;;:::i;:::-;34356:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34429:7;34414:37;34438:3;34449:1;34443:3;:7;;;;:::i;:::-;34414:37;;;;;;;:::i;:::-;;;;;;;;34049:418;33181:1297;34582:7;34570:10;34561:62;;;34591:3;34596:5;34603:7;34612:10;34561:62;;;;;;;;;:::i;:::-;;;;;;;;32469:2162;;;;21830:20:::1;:18;:20::i;:::-;32388:2243:::0;;:::o;29865:19::-;;;;;;;;;;;;;:::o;37448:49::-;27215:13;:11;:13::i;:::-;37486:8:::1;:6;:8::i;:::-;37448:49::o:0;30656:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27329:87::-;27375:7;27402:6;;;;;;;;;;;27395:13;;27329:87;:::o;30424:45::-;;;;;;;;;;;;;;;;;:::o;38167:113::-;38213:7;38241:5;:15;;;38265:4;38241:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38234:37;;38167:113;:::o;39716:269::-;27215:13;:11;:13::i;:::-;39769::::1;39795:42;39787:56;;39907:2;39858:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39787:134;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39768:153;;;39940:8;39932:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;39757:228;39716:269::o:0;36807:629::-;27215:13;:11;:13::i;:::-;36970:1:::1;36963:3;:8;;;;:20;;;;;36982:1;36975:3;:8;;;;36963:20;36955:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37037:5;37020:13;:22;;;;37012:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;37112:13;37086:18;:23;37105:3;37086:23;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37156:13;37136:12;:17;37149:3;37136:17;;;;;;;;;;;;;;;:33;;;;37261:1;37254:3;:8;;::::0;37250:179:::1;;37299:1;37287:9;:13;:39;;;;;37317:9;37304;:22;;37287:39;37279:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37373:9;37362:8;:20;;;;37408:9;37397:8;:20;;;;37250:179;36807:629:::0;;;;;:::o;29829:29::-;;;:::o;38047:108::-;38102:12;;:::i;:::-;38135:5;:11;38141:4;38135:11;;;;;;;;;;;;;;;38128:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38047:108;;;:::o;36377:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;30007:38::-;;;;:::o;28235:201::-;27215:13;:11;:13::i;:::-;28344:1:::1;28324:22;;:8;:22;;::::0;28316:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28400:28;28419:8;28400:18;:28::i;:::-;28235:201:::0;:::o;35302:230::-;27215:13;:11;:13::i;:::-;35400:1:::1;35373:29;;35381:6;35373:29;;::::0;35365:51:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35427:11;35449:3;;;;;;;;;;;35427:26;;35470:6;35464:3;;:12;;;;;;;;;;;;;;;;;;35516:6;35492:32;;35503:3;35492:32;;;;;;;;;;;;35354:178;35302:230:::0;:::o;27494:132::-;27569:12;:10;:12::i;:::-;27558:23;;:7;:5;:7::i;:::-;:23;;;27550:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27494:132::o;21866:293::-;21268:1;22000:7;;:19;21992:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21268:1;22133:7;:18;;;;21866:293::o;15598:211::-;15715:86;15735:5;15765:23;;;15790:2;15794:5;15742:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15715:19;:86::i;:::-;15598:211;;;:::o;22167:213::-;21224:1;22350:7;:22;;;;22167:213::o;25218:108::-;25289:8;:6;:8::i;:::-;25288:9;25280:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:108::o;25914:120::-;24923:16;:14;:16::i;:::-;25983:5:::1;25973:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;26004:22;26013:12;:10;:12::i;:::-;26004:22;;;;;;:::i;:::-;;;;;;;;25914:120::o:0;15817:248::-;15961:96;15981:5;16011:27;;;16040:4;16046:2;16050:5;15988:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15961:19;:96::i;:::-;15817:248;;;;:::o;28596:191::-;28670:16;28689:6;;;;;;;;;;;28670:25;;28715:8;28706:6;;:17;;;;;;;;;;;;;;;;;;28770:8;28739:40;;28760:8;28739:40;;;;;;;;;;;;28659:128;28596:191;:::o;38327:483::-;38409:1;38399:6;:11;38395:24;38412:7;38395:24;38453:1;38433:22;;:8;;;;;;;;;;;:22;;;;:41;;;;;38473:1;38459:11;;;;;;;;;;;:15;;;38433:41;38429:374;;;38491:18;38537:6;38522:11;;;;;;;;;;;38513:20;;:6;:20;;;;:::i;:::-;38512:31;;;;:::i;:::-;38491:52;;38575:1;38562:10;:14;38558:70;;;38578:50;38601:4;38607:8;;;;;;;;;;;38617:10;38578:5;:22;;;;:50;;;;;;:::i;:::-;38558:70;38643:64;38666:4;38680;38696:10;38687:6;:19;;;;:::i;:::-;38643:5;:22;;;;:64;;;;;;:::i;:::-;38476:243;38429:374;;;38740:51;38763:4;38777;38784:6;38740:5;:22;;;;:51;;;;;;:::i;:::-;38429:374;38327:483;;;:::o;38848:188::-;38906:6;38925:11;38939:15;:20;38955:3;38939:20;;;;;;;;;;;;;;;;;;;;;;;;;38925:34;;38984:1;38977:4;:8;;;:22;;38995:4;38977:22;;;38988:4;38977:22;38970:29;;;38848:188;;;:::o;39286:302::-;39335:7;39355:9;39369:7;:16;39377:7;39369:16;;;;;;;;;;;;39367:18;;;;;:::i;:::-;;;;;;;39355:30;;39477:1;39462:12;:16;;;;:::i;:::-;39452:27;39481:15;39498:10;39510:7;39519:1;39530:4;39537:5;:15;;;39561:4;39537:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39421:157;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39411:168;;;;;;39403:177;;39396:184;;;39286:302;;;:::o;39081:197::-;39142:6;39161:11;39175:18;:23;39194:3;39175:23;;;;;;;;;;;;;;;;;;;;;;;;;39161:37;;39223:1;39216:4;:8;;;:23;;39234:5;39216:23;;;39227:4;39216:23;39209:30;;;39081:197;;;:::o;25655:118::-;24664:19;:17;:19::i;:::-;25725:4:::1;25715:7;;:14;;;;;;;;;;;;;;;;;;25745:20;25752:12;:10;:12::i;:::-;25745:20;;;;;;:::i;:::-;;;;;;;;25655:118::o:0;23119:98::-;23172:7;23199:10;23192:17;;23119:98;:::o;18665:716::-;19089:23;19115:69;19143:4;19115:69;;;;;;;;;;;;;;;;;19123:5;19115:27;;;;:69;;;;;:::i;:::-;19089:95;;19219:1;19199:10;:17;:21;19195:179;;;19296:10;19285:30;;;;;;;;;;;;:::i;:::-;19277:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;19195:179;18735:646;18665:716;;:::o;25403:108::-;25470:8;:6;:8::i;:::-;25462:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;25403:108::o;9393:229::-;9530:12;9562:52;9584:6;9592:4;9598:1;9601:12;9562:21;:52::i;:::-;9555:59;;9393:229;;;;;:::o;10513:455::-;10683:12;10741:5;10716:21;:30;;10708:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10801:12;10815:23;10842:6;:11;;10861:5;10868:4;10842:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10800:73;;;;10891:69;10918:6;10926:7;10935:10;10947:12;10891:26;:69::i;:::-;10884:76;;;;10513:455;;;;;;:::o;13086:644::-;13271:12;13300:7;13296:427;;;13349:1;13328:10;:17;:22;13324:290;;13546:18;13557:6;13546:10;:18::i;:::-;13538:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13324:290;13635:10;13628:17;;;;13296:427;13678:33;13686:10;13698:12;13678:7;:33::i;:::-;13086:644;;;;;;;:::o;6636:326::-;6696:4;6953:1;6931:7;:19;;;:23;6924:30;;6636:326;;;:::o;14272:552::-;14453:1;14433:10;:17;:21;14429:388;;;14665:10;14659:17;14722:15;14709:10;14705:2;14701:19;14694:44;14429:388;14792:12;14785:20;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:126::-;727:7;767:42;760:5;756:54;745:65;;690:126;;;:::o;822:96::-;859:7;888:24;906:5;888:24;:::i;:::-;877:35;;822:96;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:89::-;1713:7;1753:6;1746:5;1742:18;1731:29;;1677:89;;;:::o;1772:120::-;1844:23;1861:5;1844:23;:::i;:::-;1837:5;1834:34;1824:62;;1882:1;1879;1872:12;1824:62;1772:120;:::o;1898:137::-;1943:5;1981:6;1968:20;1959:29;;1997:32;2023:5;1997:32;:::i;:::-;1898:137;;;;:::o;2041:472::-;2108:6;2116;2165:2;2153:9;2144:7;2140:23;2136:32;2133:119;;;2171:79;;:::i;:::-;2133:119;2291:1;2316:53;2361:7;2352:6;2341:9;2337:22;2316:53;:::i;:::-;2306:63;;2262:117;2418:2;2444:52;2488:7;2479:6;2468:9;2464:22;2444:52;:::i;:::-;2434:62;;2389:117;2041:472;;;;;:::o;2519:114::-;2574:7;2603:24;2621:5;2603:24;:::i;:::-;2592:35;;2519:114;;;:::o;2639:158::-;2730:42;2766:5;2730:42;:::i;:::-;2723:5;2720:53;2710:81;;2787:1;2784;2777:12;2710:81;2639:158;:::o;2803:175::-;2867:5;2905:6;2892:20;2883:29;;2921:51;2966:5;2921:51;:::i;:::-;2803:175;;;;:::o;2984:365::-;3061:6;3110:2;3098:9;3089:7;3085:23;3081:32;3078:119;;;3116:79;;:::i;:::-;3078:119;3236:1;3261:71;3324:7;3315:6;3304:9;3300:22;3261:71;:::i;:::-;3251:81;;3207:135;2984:365;;;;:::o;3355:115::-;3440:23;3457:5;3440:23;:::i;:::-;3435:3;3428:36;3355:115;;:::o;3476:218::-;3567:4;3605:2;3594:9;3590:18;3582:26;;3618:69;3684:1;3673:9;3669:17;3660:6;3618:69;:::i;:::-;3476:218;;;;:::o;3700:60::-;3728:3;3749:5;3742:12;;3700:60;;;:::o;3766:142::-;3816:9;3849:53;3867:34;3876:24;3894:5;3876:24;:::i;:::-;3867:34;:::i;:::-;3849:53;:::i;:::-;3836:66;;3766:142;;;:::o;3914:126::-;3964:9;3997:37;4028:5;3997:37;:::i;:::-;3984:50;;3914:126;;;:::o;4046:144::-;4114:9;4147:37;4178:5;4147:37;:::i;:::-;4134:50;;4046:144;;;:::o;4196:167::-;4301:55;4350:5;4301:55;:::i;:::-;4296:3;4289:68;4196:167;;:::o;4369:258::-;4480:4;4518:2;4507:9;4503:18;4495:26;;4531:89;4617:1;4606:9;4602:17;4593:6;4531:89;:::i;:::-;4369:258;;;;:::o;4633:329::-;4692:6;4741:2;4729:9;4720:7;4716:23;4712:32;4709:119;;;4747:79;;:::i;:::-;4709:119;4867:1;4892:53;4937:7;4928:6;4917:9;4913:22;4892:53;:::i;:::-;4882:63;;4838:117;4633:329;;;;:::o;4968:104::-;5013:7;5042:24;5060:5;5042:24;:::i;:::-;5031:35;;4968:104;;;:::o;5078:138::-;5159:32;5185:5;5159:32;:::i;:::-;5152:5;5149:43;5139:71;;5206:1;5203;5196:12;5139:71;5078:138;:::o;5222:155::-;5276:5;5314:6;5301:20;5292:29;;5330:41;5365:5;5330:41;:::i;:::-;5222:155;;;;:::o;5383:490::-;5459:6;5467;5516:2;5504:9;5495:7;5491:23;5487:32;5484:119;;;5522:79;;:::i;:::-;5484:119;5642:1;5667:53;5712:7;5703:6;5692:9;5688:22;5667:53;:::i;:::-;5657:63;;5613:117;5769:2;5795:61;5848:7;5839:6;5828:9;5824:22;5795:61;:::i;:::-;5785:71;;5740:126;5383:490;;;;;:::o;5879:118::-;5966:24;5984:5;5966:24;:::i;:::-;5961:3;5954:37;5879:118;;:::o;6003:222::-;6096:4;6134:2;6123:9;6119:18;6111:26;;6147:71;6215:1;6204:9;6200:17;6191:6;6147:71;:::i;:::-;6003:222;;;;:::o;6231:86::-;6266:7;6306:4;6299:5;6295:16;6284:27;;6231:86;;;:::o;6323:118::-;6394:22;6410:5;6394:22;:::i;:::-;6387:5;6384:33;6374:61;;6431:1;6428;6421:12;6374:61;6323:118;:::o;6447:135::-;6491:5;6529:6;6516:20;6507:29;;6545:31;6570:5;6545:31;:::i;:::-;6447:135;;;;:::o;6588:609::-;6660:6;6668;6676;6725:2;6713:9;6704:7;6700:23;6696:32;6693:119;;;6731:79;;:::i;:::-;6693:119;6851:1;6876:51;6919:7;6910:6;6899:9;6895:22;6876:51;:::i;:::-;6866:61;;6822:115;6976:2;7002:52;7046:7;7037:6;7026:9;7022:22;7002:52;:::i;:::-;6992:62;;6947:117;7103:2;7129:51;7172:7;7163:6;7152:9;7148:22;7129:51;:::i;:::-;7119:61;;7074:116;6588:609;;;;;:::o;7203:474::-;7271:6;7279;7328:2;7316:9;7307:7;7303:23;7299:32;7296:119;;;7334:79;;:::i;:::-;7296:119;7454:1;7479:53;7524:7;7515:6;7504:9;7500:22;7479:53;:::i;:::-;7469:63;;7425:117;7581:2;7607:53;7652:7;7643:6;7632:9;7628:22;7607:53;:::i;:::-;7597:63;;7552:118;7203:474;;;;;:::o;7683:90::-;7717:7;7760:5;7753:13;7746:21;7735:32;;7683:90;;;:::o;7779:109::-;7860:21;7875:5;7860:21;:::i;:::-;7855:3;7848:34;7779:109;;:::o;7894:210::-;7981:4;8019:2;8008:9;8004:18;7996:26;;8032:65;8094:1;8083:9;8079:17;8070:6;8032:65;:::i;:::-;7894:210;;;;:::o;8110:118::-;8197:24;8215:5;8197:24;:::i;:::-;8192:3;8185:37;8110:118;;:::o;8234:222::-;8327:4;8365:2;8354:9;8350:18;8342:26;;8378:71;8446:1;8435:9;8431:17;8422:6;8378:71;:::i;:::-;8234:222;;;;:::o;8462:325::-;8519:6;8568:2;8556:9;8547:7;8543:23;8539:32;8536:119;;;8574:79;;:::i;:::-;8536:119;8694:1;8719:51;8762:7;8753:6;8742:9;8738:22;8719:51;:::i;:::-;8709:61;;8665:115;8462:325;;;;:::o;8793:143::-;8860:9;8893:37;8924:5;8893:37;:::i;:::-;8880:50;;8793:143;;;:::o;8942:165::-;9046:54;9094:5;9046:54;:::i;:::-;9041:3;9034:67;8942:165;;:::o;9113:256::-;9223:4;9261:2;9250:9;9246:18;9238:26;;9274:88;9359:1;9348:9;9344:17;9335:6;9274:88;:::i;:::-;9113:256;;;;:::o;9375:329::-;9434:6;9483:2;9471:9;9462:7;9458:23;9454:32;9451:119;;;9489:79;;:::i;:::-;9451:119;9609:1;9634:53;9679:7;9670:6;9659:9;9655:22;9634:53;:::i;:::-;9624:63;;9580:117;9375:329;;;;:::o;9710:101::-;9746:7;9786:18;9779:5;9775:30;9764:41;;9710:101;;;:::o;9817:115::-;9902:23;9919:5;9902:23;:::i;:::-;9897:3;9890:36;9817:115;;:::o;9938:430::-;10081:4;10119:2;10108:9;10104:18;10096:26;;10132:69;10198:1;10187:9;10183:17;10174:6;10132:69;:::i;:::-;10211:70;10277:2;10266:9;10262:18;10253:6;10211:70;:::i;:::-;10291;10357:2;10346:9;10342:18;10333:6;10291:70;:::i;:::-;9938:430;;;;;;:::o;10374:905::-;10466:6;10474;10482;10490;10498;10547:3;10535:9;10526:7;10522:23;10518:33;10515:120;;;10554:79;;:::i;:::-;10515:120;10674:1;10699:51;10742:7;10733:6;10722:9;10718:22;10699:51;:::i;:::-;10689:61;;10645:115;10799:2;10825:53;10870:7;10861:6;10850:9;10846:22;10825:53;:::i;:::-;10815:63;;10770:118;10927:2;10953:53;10998:7;10989:6;10978:9;10974:22;10953:53;:::i;:::-;10943:63;;10898:118;11055:2;11081:52;11125:7;11116:6;11105:9;11101:22;11081:52;:::i;:::-;11071:62;;11026:117;11182:3;11209:53;11254:7;11245:6;11234:9;11230:22;11209:53;:::i;:::-;11199:63;;11153:119;10374:905;;;;;;;;:::o;11285:139::-;11348:9;11381:37;11412:5;11381:37;:::i;:::-;11368:50;;11285:139;;;:::o;11430:157::-;11530:50;11574:5;11530:50;:::i;:::-;11525:3;11518:63;11430:157;;:::o;11593:248::-;11699:4;11737:2;11726:9;11722:18;11714:26;;11750:84;11831:1;11820:9;11816:17;11807:6;11750:84;:::i;:::-;11593:248;;;;:::o;11847:105::-;11922:23;11939:5;11922:23;:::i;:::-;11917:3;11910:36;11847:105;;:::o;12022:686::-;12165:4;12160:3;12156:14;12259:4;12252:5;12248:16;12242:23;12278:61;12333:4;12328:3;12324:14;12310:12;12278:61;:::i;:::-;12180:169;12434:4;12427:5;12423:16;12417:23;12453:61;12508:4;12503:3;12499:14;12485:12;12453:61;:::i;:::-;12359:165;12611:4;12604:5;12600:16;12594:23;12630:61;12685:4;12680:3;12676:14;12662:12;12630:61;:::i;:::-;12534:167;12134:574;12022:686;;:::o;12714:314::-;12853:4;12891:2;12880:9;12876:18;12868:26;;12904:117;13018:1;13007:9;13003:17;12994:6;12904:117;:::i;:::-;12714:314;;;;:::o;13034:113::-;13088:7;13117:24;13135:5;13117:24;:::i;:::-;13106:35;;13034:113;;;:::o;13153:156::-;13243:41;13278:5;13243:41;:::i;:::-;13236:5;13233:52;13223:80;;13299:1;13296;13289:12;13223:80;13153:156;:::o;13315:173::-;13378:5;13416:6;13403:20;13394:29;;13432:50;13476:5;13432:50;:::i;:::-;13315:173;;;;:::o;13494:363::-;13570:6;13619:2;13607:9;13598:7;13594:23;13590:32;13587:119;;;13625:79;;:::i;:::-;13587:119;13745:1;13770:70;13832:7;13823:6;13812:9;13808:22;13770:70;:::i;:::-;13760:80;;13716:134;13494:363;;;;:::o;13863:169::-;13947:11;13981:6;13976:3;13969:19;14021:4;14016:3;14012:14;13997:29;;13863:169;;;;:::o;14038:168::-;14178:20;14174:1;14166:6;14162:14;14155:44;14038:168;:::o;14212:366::-;14354:3;14375:67;14439:2;14434:3;14375:67;:::i;:::-;14368:74;;14451:93;14540:3;14451:93;:::i;:::-;14569:2;14564:3;14560:12;14553:19;;14212:366;;;:::o;14584:419::-;14750:4;14788:2;14777:9;14773:18;14765:26;;14837:9;14831:4;14827:20;14823:1;14812:9;14808:17;14801:47;14865:131;14991:4;14865:131;:::i;:::-;14857:139;;14584:419;;;:::o;15009:157::-;15149:9;15145:1;15137:6;15133:14;15126:33;15009:157;:::o;15172:365::-;15314:3;15335:66;15399:1;15394:3;15335:66;:::i;:::-;15328:73;;15410:93;15499:3;15410:93;:::i;:::-;15528:2;15523:3;15519:12;15512:19;;15172:365;;;:::o;15543:419::-;15709:4;15747:2;15736:9;15732:18;15724:26;;15796:9;15790:4;15786:20;15782:1;15771:9;15767:17;15760:47;15824:131;15950:4;15824:131;:::i;:::-;15816:139;;15543:419;;;:::o;15968:159::-;16108:11;16104:1;16096:6;16092:14;16085:35;15968:159;:::o;16133:365::-;16275:3;16296:66;16360:1;16355:3;16296:66;:::i;:::-;16289:73;;16371:93;16460:3;16371:93;:::i;:::-;16489:2;16484:3;16480:12;16473:19;;16133:365;;;:::o;16504:419::-;16670:4;16708:2;16697:9;16693:18;16685:26;;16757:9;16751:4;16747:20;16743:1;16732:9;16728:17;16721:47;16785:131;16911:4;16785:131;:::i;:::-;16777:139;;16504:419;;;:::o;16929:147::-;17030:11;17067:3;17052:18;;16929:147;;;;:::o;17082:114::-;;:::o;17202:398::-;17361:3;17382:83;17463:1;17458:3;17382:83;:::i;:::-;17375:90;;17474:93;17563:3;17474:93;:::i;:::-;17592:1;17587:3;17583:11;17576:18;;17202:398;;;:::o;17606:379::-;17790:3;17812:147;17955:3;17812:147;:::i;:::-;17805:154;;17976:3;17969:10;;17606:379;;;:::o;17991:169::-;18131:21;18127:1;18119:6;18115:14;18108:45;17991:169;:::o;18166:366::-;18308:3;18329:67;18393:2;18388:3;18329:67;:::i;:::-;18322:74;;18405:93;18494:3;18405:93;:::i;:::-;18523:2;18518:3;18514:12;18507:19;;18166:366;;;:::o;18538:419::-;18704:4;18742:2;18731:9;18727:18;18719:26;;18791:9;18785:4;18781:20;18777:1;18766:9;18762:17;18755:47;18819:131;18945:4;18819:131;:::i;:::-;18811:139;;18538:419;;;:::o;18963:163::-;19103:15;19099:1;19091:6;19087:14;19080:39;18963:163;:::o;19132:366::-;19274:3;19295:67;19359:2;19354:3;19295:67;:::i;:::-;19288:74;;19371:93;19460:3;19371:93;:::i;:::-;19489:2;19484:3;19480:12;19473:19;;19132:366;;;:::o;19504:419::-;19670:4;19708:2;19697:9;19693:18;19685:26;;19757:9;19751:4;19747:20;19743:1;19732:9;19728:17;19721:47;19785:131;19911:4;19785:131;:::i;:::-;19777:139;;19504:419;;;:::o;19929:170::-;20069:22;20065:1;20057:6;20053:14;20046:46;19929:170;:::o;20105:366::-;20247:3;20268:67;20332:2;20327:3;20268:67;:::i;:::-;20261:74;;20344:93;20433:3;20344:93;:::i;:::-;20462:2;20457:3;20453:12;20446:19;;20105:366;;;:::o;20477:419::-;20643:4;20681:2;20670:9;20666:18;20658:26;;20730:9;20724:4;20720:20;20716:1;20705:9;20701:17;20694:47;20758:131;20884:4;20758:131;:::i;:::-;20750:139;;20477:419;;;:::o;20902:166::-;21042:18;21038:1;21030:6;21026:14;21019:42;20902:166;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:143::-;21928:5;21959:6;21953:13;21944:22;;21975:33;22002:5;21975:33;:::i;:::-;21871:143;;;;:::o;22020:351::-;22090:6;22139:2;22127:9;22118:7;22114:23;22110:32;22107:119;;;22145:79;;:::i;:::-;22107:119;22265:1;22290:64;22346:7;22337:6;22326:9;22322:22;22290:64;:::i;:::-;22280:74;;22236:128;22020:351;;;;:::o;22377:159::-;22517:11;22513:1;22505:6;22501:14;22494:35;22377:159;:::o;22542:365::-;22684:3;22705:66;22769:1;22764:3;22705:66;:::i;:::-;22698:73;;22780:93;22869:3;22780:93;:::i;:::-;22898:2;22893:3;22889:12;22882:19;;22542:365;;;:::o;22913:419::-;23079:4;23117:2;23106:9;23102:18;23094:26;;23166:9;23160:4;23156:20;23152:1;23141:9;23137:17;23130:47;23194:131;23320:4;23194:131;:::i;:::-;23186:139;;22913:419;;;:::o;23338:169::-;23478:21;23474:1;23466:6;23462:14;23455:45;23338:169;:::o;23513:366::-;23655:3;23676:67;23740:2;23735:3;23676:67;:::i;:::-;23669:74;;23752:93;23841:3;23752:93;:::i;:::-;23870:2;23865:3;23861:12;23854:19;;23513:366;;;:::o;23885:419::-;24051:4;24089:2;24078:9;24074:18;24066:26;;24138:9;24132:4;24128:20;24124:1;24113:9;24109:17;24102:47;24166:131;24292:4;24166:131;:::i;:::-;24158:139;;23885:419;;;:::o;24310:139::-;24365:5;24396:6;24390:13;24381:22;;24412:31;24437:5;24412:31;:::i;:::-;24310:139;;;;:::o;24455:347::-;24523:6;24572:2;24560:9;24551:7;24547:23;24543:32;24540:119;;;24578:79;;:::i;:::-;24540:119;24698:1;24723:62;24777:7;24768:6;24757:9;24753:22;24723:62;:::i;:::-;24713:72;;24669:126;24455:347;;;;:::o;24808:180::-;24856:77;24853:1;24846:88;24953:4;24950:1;24943:15;24977:4;24974:1;24967:15;24994:191;25034:3;25053:20;25071:1;25053:20;:::i;:::-;25048:25;;25087:20;25105:1;25087:20;:::i;:::-;25082:25;;25130:1;25127;25123:9;25116:16;;25151:3;25148:1;25145:10;25142:36;;;25158:18;;:::i;:::-;25142:36;24994:191;;;;:::o;25191:158::-;25331:10;25327:1;25319:6;25315:14;25308:34;25191:158;:::o;25355:365::-;25497:3;25518:66;25582:1;25577:3;25518:66;:::i;:::-;25511:73;;25593:93;25682:3;25593:93;:::i;:::-;25711:2;25706:3;25702:12;25695:19;;25355:365;;;:::o;25726:419::-;25892:4;25930:2;25919:9;25915:18;25907:26;;25979:9;25973:4;25969:20;25965:1;25954:9;25950:17;25943:47;26007:131;26133:4;26007:131;:::i;:::-;25999:139;;25726:419;;;:::o;26151:205::-;26190:3;26209:19;26226:1;26209:19;:::i;:::-;26204:24;;26242:19;26259:1;26242:19;:::i;:::-;26237:24;;26284:1;26281;26277:9;26270:16;;26307:18;26302:3;26299:27;26296:53;;;26329:18;;:::i;:::-;26296:53;26151:205;;;;:::o;26362:180::-;26410:77;26407:1;26400:88;26507:4;26504:1;26497:15;26531:4;26528:1;26521:15;26548:176;26580:1;26597:20;26615:1;26597:20;:::i;:::-;26592:25;;26631:20;26649:1;26631:20;:::i;:::-;26626:25;;26670:1;26660:35;;26675:18;;:::i;:::-;26660:35;26716:1;26713;26709:9;26704:14;;26548:176;;;;:::o;26730:410::-;26770:7;26793:20;26811:1;26793:20;:::i;:::-;26788:25;;26827:20;26845:1;26827:20;:::i;:::-;26822:25;;26882:1;26879;26875:9;26904:30;26922:11;26904:30;:::i;:::-;26893:41;;27083:1;27074:7;27070:15;27067:1;27064:22;27044:1;27037:9;27017:83;26994:139;;27113:18;;:::i;:::-;26994:139;26778:362;26730:410;;;;:::o;27146:185::-;27186:1;27203:20;27221:1;27203:20;:::i;:::-;27198:25;;27237:20;27255:1;27237:20;:::i;:::-;27232:25;;27276:1;27266:35;;27281:18;;:::i;:::-;27266:35;27323:1;27320;27316:9;27311:14;;27146:185;;;;:::o;27337:143::-;27394:5;27425:6;27419:13;27410:22;;27441:33;27468:5;27441:33;:::i;:::-;27337:143;;;;:::o;27486:351::-;27556:6;27605:2;27593:9;27584:7;27580:23;27576:32;27573:119;;;27611:79;;:::i;:::-;27573:119;27731:1;27756:64;27812:7;27803:6;27792:9;27788:22;27756:64;:::i;:::-;27746:74;;27702:128;27486:351;;;;:::o;27843:167::-;27983:19;27979:1;27971:6;27967:14;27960:43;27843:167;:::o;28016:366::-;28158:3;28179:67;28243:2;28238:3;28179:67;:::i;:::-;28172:74;;28255:93;28344:3;28255:93;:::i;:::-;28373:2;28368:3;28364:12;28357:19;;28016:366;;;:::o;28388:419::-;28554:4;28592:2;28581:9;28577:18;28569:26;;28641:9;28635:4;28631:20;28627:1;28616:9;28612:17;28605:47;28669:131;28795:4;28669:131;:::i;:::-;28661:139;;28388:419;;;:::o;28813:112::-;28896:22;28912:5;28896:22;:::i;:::-;28891:3;28884:35;28813:112;;:::o;28931:214::-;29020:4;29058:2;29047:9;29043:18;29035:26;;29071:67;29135:1;29124:9;29120:17;29111:6;29071:67;:::i;:::-;28931:214;;;;:::o;29151:191::-;29189:4;29209:18;29225:1;29209:18;:::i;:::-;29204:23;;29241:18;29257:1;29241:18;:::i;:::-;29236:23;;29283:1;29280;29276:9;29268:17;;29307:4;29301;29298:14;29295:40;;;29315:18;;:::i;:::-;29295:40;29151:191;;;;:::o;29348:324::-;29465:4;29503:2;29492:9;29488:18;29480:26;;29516:71;29584:1;29573:9;29569:17;29560:6;29516:71;:::i;:::-;29597:68;29661:2;29650:9;29646:18;29637:6;29597:68;:::i;:::-;29348:324;;;;;:::o;29678:316::-;29791:4;29829:2;29818:9;29814:18;29806:26;;29842:67;29906:1;29895:9;29891:17;29882:6;29842:67;:::i;:::-;29919:68;29983:2;29972:9;29968:18;29959:6;29919:68;:::i;:::-;29678:316;;;;;:::o;30000:533::-;30167:4;30205:3;30194:9;30190:19;30182:27;;30219:67;30283:1;30272:9;30268:17;30259:6;30219:67;:::i;:::-;30296:72;30364:2;30353:9;30349:18;30340:6;30296:72;:::i;:::-;30378:66;30440:2;30429:9;30425:18;30416:6;30378:66;:::i;:::-;30454:72;30522:2;30511:9;30507:18;30498:6;30454:72;:::i;:::-;30000:533;;;;;;;:::o;30539:86::-;30585:7;30614:5;30603:16;;30539:86;;;:::o;30631:156::-;30688:9;30721:60;30737:43;30746:33;30773:5;30746:33;:::i;:::-;30737:43;:::i;:::-;30721:60;:::i;:::-;30708:73;;30631:156;;;:::o;30793:145::-;30887:44;30925:5;30887:44;:::i;:::-;30882:3;30875:57;30793:145;;:::o;30944:236::-;31044:4;31082:2;31071:9;31067:18;31059:26;;31095:78;31170:1;31159:9;31155:17;31146:6;31095:78;:::i;:::-;30944:236;;;;:::o;31186:98::-;31237:6;31271:5;31265:12;31255:22;;31186:98;;;:::o;31290:246::-;31371:1;31381:113;31395:6;31392:1;31389:13;31381:113;;;31480:1;31475:3;31471:11;31465:18;31461:1;31456:3;31452:11;31445:39;31417:2;31414:1;31410:10;31405:15;;31381:113;;;31528:1;31519:6;31514:3;31510:16;31503:27;31352:184;31290:246;;;:::o;31542:386::-;31646:3;31674:38;31706:5;31674:38;:::i;:::-;31728:88;31809:6;31804:3;31728:88;:::i;:::-;31721:95;;31825:65;31883:6;31878:3;31871:4;31864:5;31860:16;31825:65;:::i;:::-;31915:6;31910:3;31906:16;31899:23;;31650:278;31542:386;;;;:::o;31934:271::-;32064:3;32086:93;32175:3;32166:6;32086:93;:::i;:::-;32079:100;;32196:3;32189:10;;31934:271;;;;:::o;32211:174::-;32351:26;32347:1;32339:6;32335:14;32328:50;32211:174;:::o;32391:366::-;32533:3;32554:67;32618:2;32613:3;32554:67;:::i;:::-;32547:74;;32630:93;32719:3;32630:93;:::i;:::-;32748:2;32743:3;32739:12;32732:19;;32391:366;;;:::o;32763:419::-;32929:4;32967:2;32956:9;32952:18;32944:26;;33016:9;33010:4;33006:20;33002:1;32991:9;32987:17;32980:47;33044:131;33170:4;33044:131;:::i;:::-;33036:139;;32763:419;;;:::o;33188:168::-;33328:20;33324:1;33316:6;33312:14;33305:44;33188:168;:::o;33362:366::-;33504:3;33525:67;33589:2;33584:3;33525:67;:::i;:::-;33518:74;;33601:93;33690:3;33601:93;:::i;:::-;33719:2;33714:3;33710:12;33703:19;;33362:366;;;:::o;33734:419::-;33900:4;33938:2;33927:9;33923:18;33915:26;;33987:9;33981:4;33977:20;33973:1;33962:9;33958:17;33951:47;34015:131;34141:4;34015:131;:::i;:::-;34007:139;;33734:419;;;:::o;34159:225::-;34299:34;34295:1;34287:6;34283:14;34276:58;34368:8;34363:2;34355:6;34351:15;34344:33;34159:225;:::o;34390:366::-;34532:3;34553:67;34617:2;34612:3;34553:67;:::i;:::-;34546:74;;34629:93;34718:3;34629:93;:::i;:::-;34747:2;34742:3;34738:12;34731:19;;34390:366;;;:::o;34762:419::-;34928:4;34966:2;34955:9;34951:18;34943:26;;35015:9;35009:4;35005:20;35001:1;34990:9;34986:17;34979:47;35043:131;35169:4;35043:131;:::i;:::-;35035:139;;34762:419;;;:::o;35187:182::-;35327:34;35323:1;35315:6;35311:14;35304:58;35187:182;:::o;35375:366::-;35517:3;35538:67;35602:2;35597:3;35538:67;:::i;:::-;35531:74;;35614:93;35703:3;35614:93;:::i;:::-;35732:2;35727:3;35723:12;35716:19;;35375:366;;;:::o;35747:419::-;35913:4;35951:2;35940:9;35936:18;35928:26;;36000:9;35994:4;35990:20;35986:1;35975:9;35971:17;35964:47;36028:131;36154:4;36028:131;:::i;:::-;36020:139;;35747:419;;;:::o;36172:181::-;36312:33;36308:1;36300:6;36296:14;36289:57;36172:181;:::o;36359:366::-;36501:3;36522:67;36586:2;36581:3;36522:67;:::i;:::-;36515:74;;36598:93;36687:3;36598:93;:::i;:::-;36716:2;36711:3;36707:12;36700:19;;36359:366;;;:::o;36731:419::-;36897:4;36935:2;36924:9;36920:18;36912:26;;36984:9;36978:4;36974:20;36970:1;36959:9;36955:17;36948:47;37012:131;37138:4;37012:131;:::i;:::-;37004:139;;36731:419;;;:::o;37156:332::-;37277:4;37315:2;37304:9;37300:18;37292:26;;37328:71;37396:1;37385:9;37381:17;37372:6;37328:71;:::i;:::-;37409:72;37477:2;37466:9;37462:18;37453:6;37409:72;:::i;:::-;37156:332;;;;;:::o;37494:166::-;37634:18;37630:1;37622:6;37618:14;37611:42;37494:166;:::o;37666:366::-;37808:3;37829:67;37893:2;37888:3;37829:67;:::i;:::-;37822:74;;37905:93;37994:3;37905:93;:::i;:::-;38023:2;38018:3;38014:12;38007:19;;37666:366;;;:::o;38038:419::-;38204:4;38242:2;38231:9;38227:18;38219:26;;38291:9;38285:4;38281:20;38277:1;38266:9;38262:17;38255:47;38319:131;38445:4;38319:131;:::i;:::-;38311:139;;38038:419;;;:::o;38463:442::-;38612:4;38650:2;38639:9;38635:18;38627:26;;38663:71;38731:1;38720:9;38716:17;38707:6;38663:71;:::i;:::-;38744:72;38812:2;38801:9;38797:18;38788:6;38744:72;:::i;:::-;38826;38894:2;38883:9;38879:18;38870:6;38826:72;:::i;:::-;38463:442;;;;;;:::o;38911:194::-;38951:4;38971:20;38989:1;38971:20;:::i;:::-;38966:25;;39005:20;39023:1;39005:20;:::i;:::-;39000:25;;39049:1;39046;39042:9;39034:17;;39073:1;39067:4;39064:11;39061:37;;;39078:18;;:::i;:::-;39061:37;38911:194;;;;:::o;39111:233::-;39150:3;39173:24;39191:5;39173:24;:::i;:::-;39164:33;;39219:66;39212:5;39209:77;39206:103;;39289:18;;:::i;:::-;39206:103;39336:1;39329:5;39325:13;39318:20;;39111:233;;;:::o;39350:77::-;39387:7;39416:5;39405:16;;39350:77;;;:::o;39433:79::-;39472:7;39501:5;39490:16;;39433:79;;;:::o;39518:157::-;39623:45;39643:24;39661:5;39643:24;:::i;:::-;39623:45;:::i;:::-;39618:3;39611:58;39518:157;;:::o;39681:79::-;39720:7;39749:5;39738:16;;39681:79;;;:::o;39766:157::-;39871:45;39891:24;39909:5;39891:24;:::i;:::-;39871:45;:::i;:::-;39866:3;39859:58;39766:157;;:::o;39929:94::-;39962:8;40010:5;40006:2;40002:14;39981:35;;39929:94;;;:::o;40029:::-;40068:7;40097:20;40111:5;40097:20;:::i;:::-;40086:31;;40029:94;;;:::o;40129:100::-;40168:7;40197:26;40217:5;40197:26;:::i;:::-;40186:37;;40129:100;;;:::o;40235:157::-;40340:45;40360:24;40378:5;40360:24;:::i;:::-;40340:45;:::i;:::-;40335:3;40328:58;40235:157;;:::o;40398:1102::-;40678:3;40693:75;40764:3;40755:6;40693:75;:::i;:::-;40793:2;40788:3;40784:12;40777:19;;40806:75;40877:3;40868:6;40806:75;:::i;:::-;40906:2;40901:3;40897:12;40890:19;;40919:75;40990:3;40981:6;40919:75;:::i;:::-;41019:2;41014:3;41010:12;41003:19;;41032:75;41103:3;41094:6;41032:75;:::i;:::-;41132:2;41127:3;41123:12;41116:19;;41145:75;41216:3;41207:6;41145:75;:::i;:::-;41245:2;41240:3;41236:12;41229:19;;41258:75;41329:3;41320:6;41258:75;:::i;:::-;41358:2;41353:3;41349:12;41342:19;;41371:75;41442:3;41433:6;41371:75;:::i;:::-;41471:2;41466:3;41462:12;41455:19;;41491:3;41484:10;;40398:1102;;;;;;;;;;:::o;41506:116::-;41576:21;41591:5;41576:21;:::i;:::-;41569:5;41566:32;41556:60;;41612:1;41609;41602:12;41556:60;41506:116;:::o;41628:137::-;41682:5;41713:6;41707:13;41698:22;;41729:30;41753:5;41729:30;:::i;:::-;41628:137;;;;:::o;41771:345::-;41838:6;41887:2;41875:9;41866:7;41862:23;41858:32;41855:119;;;41893:79;;:::i;:::-;41855:119;42013:1;42038:61;42091:7;42082:6;42071:9;42067:22;42038:61;:::i;:::-;42028:71;;41984:125;41771:345;;;;:::o;42122:229::-;42262:34;42258:1;42250:6;42246:14;42239:58;42331:12;42326:2;42318:6;42314:15;42307:37;42122:229;:::o;42357:366::-;42499:3;42520:67;42584:2;42579:3;42520:67;:::i;:::-;42513:74;;42596:93;42685:3;42596:93;:::i;:::-;42714:2;42709:3;42705:12;42698:19;;42357:366;;;:::o;42729:419::-;42895:4;42933:2;42922:9;42918:18;42910:26;;42982:9;42976:4;42972:20;42968:1;42957:9;42953:17;42946:47;43010:131;43136:4;43010:131;:::i;:::-;43002:139;;42729:419;;;:::o;43154:170::-;43294:22;43290:1;43282:6;43278:14;43271:46;43154:170;:::o;43330:366::-;43472:3;43493:67;43557:2;43552:3;43493:67;:::i;:::-;43486:74;;43569:93;43658:3;43569:93;:::i;:::-;43687:2;43682:3;43678:12;43671:19;;43330:366;;;:::o;43702:419::-;43868:4;43906:2;43895:9;43891:18;43883:26;;43955:9;43949:4;43945:20;43941:1;43930:9;43926:17;43919:47;43983:131;44109:4;43983:131;:::i;:::-;43975:139;;43702:419;;;:::o;44127:225::-;44267:34;44263:1;44255:6;44251:14;44244:58;44336:8;44331:2;44323:6;44319:15;44312:33;44127:225;:::o;44358:366::-;44500:3;44521:67;44585:2;44580:3;44521:67;:::i;:::-;44514:74;;44597:93;44686:3;44597:93;:::i;:::-;44715:2;44710:3;44706:12;44699:19;;44358:366;;;:::o;44730:419::-;44896:4;44934:2;44923:9;44919:18;44911:26;;44983:9;44977:4;44973:20;44969:1;44958:9;44954:17;44947:47;45011:131;45137:4;45011:131;:::i;:::-;45003:139;;44730:419;;;:::o;45155:179::-;45295:31;45291:1;45283:6;45279:14;45272:55;45155:179;:::o;45340:366::-;45482:3;45503:67;45567:2;45562:3;45503:67;:::i;:::-;45496:74;;45579:93;45668:3;45579:93;:::i;:::-;45697:2;45692:3;45688:12;45681:19;;45340:366;;;:::o;45712:419::-;45878:4;45916:2;45905:9;45901:18;45893:26;;45965:9;45959:4;45955:20;45951:1;45940:9;45936:17;45929:47;45993:131;46119:4;45993:131;:::i;:::-;45985:139;;45712:419;;;:::o;46137:99::-;46189:6;46223:5;46217:12;46207:22;;46137:99;;;:::o;46242:102::-;46283:6;46334:2;46330:7;46325:2;46318:5;46314:14;46310:28;46300:38;;46242:102;;;:::o;46350:377::-;46438:3;46466:39;46499:5;46466:39;:::i;:::-;46521:71;46585:6;46580:3;46521:71;:::i;:::-;46514:78;;46601:65;46659:6;46654:3;46647:4;46640:5;46636:16;46601:65;:::i;:::-;46691:29;46713:6;46691:29;:::i;:::-;46686:3;46682:39;46675:46;;46442:285;46350:377;;;;:::o;46733:313::-;46846:4;46884:2;46873:9;46869:18;46861:26;;46933:9;46927:4;46923:20;46919:1;46908:9;46904:17;46897:47;46961:78;47034:4;47025:6;46961:78;:::i;:::-;46953:86;;46733:313;;;;:::o
Swarm Source
ipfs://52c0b96d21a560179d847d6b80014d457e645cd868922415f5bb59f75bf8975d
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.