Latest 25 from a total of 114,289 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Buy Shares | 8529079 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8529071 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8529063 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8529055 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8529047 | 422 days ago | IN | 0 GLMR | 0.0763776 | ||||
| Buy Shares | 8529003 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528999 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528987 | 422 days ago | IN | 0 GLMR | 0.0763776 | ||||
| Buy Shares | 8528947 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528943 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528927 | 422 days ago | IN | 0 GLMR | 0.0763776 | ||||
| Buy Shares | 8528892 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528888 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528876 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528868 | 422 days ago | IN | 0 GLMR | 0.0763776 | ||||
| Buy Shares | 8528832 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528828 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528816 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528808 | 422 days ago | IN | 0 GLMR | 0.0763776 | ||||
| Buy Shares | 8528748 | 422 days ago | IN | 0 GLMR | 0.0763776 | ||||
| Buy Shares | 8528720 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528716 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528704 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528696 | 422 days ago | IN | 0 GLMR | 0.0771096 | ||||
| Buy Shares | 8528688 | 422 days ago | IN | 0 GLMR | 0.0763776 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 8529079 | 422 days ago | 0.10438162 GLMR | ||||
| 8529071 | 422 days ago | 0.10651912 GLMR | ||||
| 8529063 | 422 days ago | 0.10438162 GLMR | ||||
| 8529055 | 422 days ago | 0.10438162 GLMR | ||||
| 8529047 | 422 days ago | 0.10786362 GLMR | ||||
| 8529003 | 422 days ago | 0.10438162 GLMR | ||||
| 8528999 | 422 days ago | 0.10438162 GLMR | ||||
| 8528987 | 422 days ago | 0.10786362 GLMR | ||||
| 8528947 | 422 days ago | 0.10438162 GLMR | ||||
| 8528943 | 422 days ago | 0.10438312 GLMR | ||||
| 8528927 | 422 days ago | 0.10786362 GLMR | ||||
| 8528892 | 422 days ago | 0.10438162 GLMR | ||||
| 8528888 | 422 days ago | 0.10438162 GLMR | ||||
| 8528876 | 422 days ago | 0.10438162 GLMR | ||||
| 8528868 | 422 days ago | 0.10786362 GLMR | ||||
| 8528832 | 422 days ago | 0.10438162 GLMR | ||||
| 8528828 | 422 days ago | 0.10438312 GLMR | ||||
| 8528816 | 422 days ago | 0.10438162 GLMR | ||||
| 8528808 | 422 days ago | 0.10786362 GLMR | ||||
| 8528748 | 422 days ago | 0.10786362 GLMR | ||||
| 8528720 | 422 days ago | 0.10438162 GLMR | ||||
| 8528716 | 422 days ago | 0.10438162 GLMR | ||||
| 8528704 | 422 days ago | 0.10438162 GLMR | ||||
| 8528696 | 422 days ago | 0.10438162 GLMR | ||||
| 8528688 | 422 days ago | 0.10786362 GLMR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SightseaSharesProxyV1
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/**
*Submitted for verification at moonbeam.moonscan.io on 2024-04-15
*/
// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File: @openzeppelin/contracts/interfaces/draft-IERC6093.sol
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
* ```
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/SightseaSharesProxyV1.sol
pragma solidity ^0.8.19;
interface IDelegatedProxy {
function _getPrice(uint256 supply, uint256 amount) external view returns(uint256);
function _getBuyFee(uint256 price) external view returns(uint256);
function _getSellTransactionFee() external view returns(uint256);
function _getBuyTransactionFee() external view returns(uint256);
function _getSubjectFeePercent() external view returns(uint256);
function _getProtocolFeePercent() external view returns(uint256);
function _getSellFee(uint256 price) external view returns(uint256);
function buyShares(address from, address sharesSubject, uint256 amount) external;
function sellShares(address from, address sharesSubject, uint256 amount) external;
}
contract SightseaSharesProxyV1 is Ownable {
using SafeMath for uint256;
ERC20 public currencyToken;
address public currencyTokenAddress;
address public _targetContract;
// SharesSubject => (Holder => Balance)
mapping(address => mapping(address => uint256)) public sharesBalance;
// SharesSubject => Supply
mapping(address => uint256) public sharesSupply;
bool internal _migrate = false;
uint256 internal _userBuyGasRefundAmount = 0;
constructor() Ownable(msg.sender) {}
//*============ MODIFIERS ==========
modifier onlyTargetContract() {
require(msg.sender == _targetContract, "Only allowed contract can call this function");
_;
}
modifier onlyContractOrOwner() {
require(msg.sender == _targetContract || msg.sender == owner(), "Only allowed contract or owner can call this function");
_;
}
modifier onlyMigrate() {
require(_migrate, "Migrate mode disabled");
_;
}
//*============ EVENTS ============
event Trade(
address trader,
address subject,
bool isBuy,
uint256 shareAmount,
uint256 price,
uint256 fee,
uint256 supply
);
event GasRefund(address indexed user, uint256 amount);
//*============ CONFIGS ==========
function setMigrateMode(bool enable) public onlyOwner {
_migrate = enable;
}
//*============ MIGRATE ===========
function buySharesWithoutFee(
address sender,
address sharesSubject,
uint256 amount
) public onlyMigrate {
uint256 supply = sharesSupply[sharesSubject];
uint256 price = getPrice(supply, amount);
uint256 fee = getBuyFee(price);
sharesBalance[sharesSubject][sender] =
sharesBalance[sharesSubject][sender] +
amount;
sharesSupply[sharesSubject] = supply + amount;
emit Trade(
sender,
sharesSubject,
true,
amount,
price,
fee,
supply + amount
);
}
//SETTERS & GETTERS
function setTargetContract(address target) public onlyOwner {
_targetContract = target;
}
function setCurrencyToken(address tokenAddress) public onlyOwner {
currencyToken = ERC20(tokenAddress);
currencyTokenAddress = tokenAddress;
}
//*============ TOKEN ============
function depositGas() public payable {}
function withdrawGas(uint256 amount) public onlyContractOrOwner {
require(amount <= address(this).balance, "Insufficient balance");
payable(msg.sender).transfer(amount);
}
function transferToken(address to, uint256 amount) public onlyContractOrOwner returns (bool) {
currencyToken.transfer(to, amount);
return true;
}
//SHARES INFORMATION
function _getSellTransactionFee() external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getSellTransactionFee.selector)
);
uint256 price = abi.decode(data, (uint256));
return price;
}
function getSellTransactionFee() public view returns (uint256) {
return IDelegatedProxy(address(this))._getSellTransactionFee();
}
function _getBuyTransactionFee() external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getBuyTransactionFee.selector)
);
uint256 price = abi.decode(data, (uint256));
return price;
}
function getBuyTransactionFee() public view returns (uint256) {
return IDelegatedProxy(address(this))._getBuyTransactionFee();
}
function _getSubjectFeePercent() external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getSubjectFeePercent.selector)
);
uint256 price = abi.decode(data, (uint256));
return price;
}
function getSubjectFeePercent() public view returns (uint256) {
return IDelegatedProxy(address(this))._getSubjectFeePercent();
}
function _getProtocolFeePercent() external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getProtocolFeePercent.selector)
);
uint256 price = abi.decode(data, (uint256));
return price;
}
function getProtocolFeePercent() public view returns (uint256) {
return IDelegatedProxy(address(this))._getProtocolFeePercent();
}
function _getPrice(
uint256 supply,
uint256 amount
) external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getPrice.selector, supply, amount)
);
require(success, "Unable to get price");
uint256 price = abi.decode(data, (uint256));
return price;
}
function getPrice(
uint256 supply,
uint256 amount
) public view returns (uint256) {
return IDelegatedProxy(address(this))._getPrice(supply, amount);
}
function setSharesBalance(
address buyer,
address subject,
uint256 amount
) public onlyContractOrOwner returns (bool) {
sharesBalance[subject][buyer] = amount;
return true;
}
function getSharesBalance(
address from,
address subject
) public view returns (uint256) {
return sharesBalance[subject][from];
}
function setSharesSupply(
address subject,
uint256 amount
) public onlyContractOrOwner returns (bool) {
sharesSupply[subject] = amount;
return true;
}
function getSharesSupply(
address subject
) public view returns (uint256) {
return sharesSupply[subject];
}
function getKeyHoldingSupplyOfUser(
address from,
address sharesSubject
) public view returns (uint256) {
return sharesBalance[sharesSubject][from];
}
//=========== BUY SHARE INFORMATION ========
function getBuyPrice(
address sharesSubject,
uint256 amount
) public view returns (uint256) {
return getPrice(sharesSupply[sharesSubject], amount);
}
function _getBuyFee(
uint256 price
) external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getBuyFee.selector, price)
);
require(success, "Unable to get price");
uint256 fee = abi.decode(data, (uint256));
return fee;
}
function getBuyFee(
uint256 price
) public view returns (uint256) {
return IDelegatedProxy(address(this))._getBuyFee(price);
}
function getBuyPriceAfterFee(
address sharesSubject,
uint256 amount
) public view returns (uint256) {
uint256 price = this.getBuyPrice(sharesSubject, amount);
uint256 fee = this.getBuyFee(price);
return price + fee;
}
//=========== SELL SHARE INFORMATION ========
function getSellPrice(
address sharesSubject,
uint256 amount
) public view returns (uint256) {
if (sharesSupply[sharesSubject] == 0) {
return 0;
}
return getPrice(sharesSupply[sharesSubject] - amount, amount);
}
function _getSellFee(
uint256 price
) external returns (uint256) {
(bool success, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(this.getSellFee.selector, price)
);
require(success, "Unable to get price");
uint256 fee = abi.decode(data, (uint256));
return fee;
}
function getSellFee(
uint256 price
) public view returns (uint256) {
return IDelegatedProxy(address(this))._getSellFee(price);
}
function getSellPriceAfterFee(
address sharesSubject,
uint256 amount
) public view returns (uint256) {
uint256 price = this.getSellPrice(sharesSubject, amount);
uint256 fee = this.getSellFee(price);
return price.sub(fee);
}
//=========== BUY SHARE ========
function buyShares(
address sharesSubject,
uint256 amount
) public {
uint256 supply = sharesSupply[sharesSubject];
uint256 price = getPrice(supply, amount);
uint256 fee = getBuyFee(price);
(bool proxySuccess, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(IDelegatedProxy.buyShares.selector, msg.sender, sharesSubject, amount)
);
require(proxySuccess, "Unable to buyShares");
sharesBalance[sharesSubject][msg.sender] =
sharesBalance[sharesSubject][msg.sender] +
amount;
sharesSupply[sharesSubject] = supply + amount;
emit Trade(
msg.sender,
sharesSubject,
true,
amount,
price,
fee,
supply + amount
);
//* REFUND GAS FEE
uint256 gasUsed = gasleft();
uint256 gasRefundAmount = (_userBuyGasRefundAmount + gasUsed) * tx.gasprice;
emit GasRefund(msg.sender, gasRefundAmount);
payable(msg.sender).transfer(gasRefundAmount);
}
//=========== SELL SHARE ========
function sellShares(
address sharesSubject,
uint256 amount
) public {
uint256 supply = sharesSupply[sharesSubject];
uint256 price = getPrice(supply, amount);
uint256 fee = getSellFee(price);
(bool proxySuccess, bytes memory data) = _targetContract.call(
abi.encodeWithSelector(IDelegatedProxy.sellShares.selector, msg.sender, sharesSubject, amount)
);
require(proxySuccess, "Unable to sellShares");
sharesBalance[sharesSubject][msg.sender] =
sharesBalance[sharesSubject][msg.sender] -
amount;
sharesSupply[sharesSubject] = supply - amount;
emit Trade(
msg.sender,
sharesSubject,
false,
amount,
price,
fee,
supply + amount
);
//* REFUND GAS FEE
uint256 gasUsed = gasleft();
uint256 gasRefundAmount = (_userBuyGasRefundAmount + gasUsed) * tx.gasprice;
emit GasRefund(msg.sender, gasRefundAmount);
payable(msg.sender).transfer(gasRefundAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GasRefund","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":"trader","type":"address"},{"indexed":false,"internalType":"address","name":"subject","type":"address"},{"indexed":false,"internalType":"bool","name":"isBuy","type":"bool"},{"indexed":false,"internalType":"uint256","name":"shareAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"supply","type":"uint256"}],"name":"Trade","type":"event"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"_getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getBuyTransactionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"_getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getProtocolFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"_getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getSellTransactionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getSubjectFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_targetContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buyShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buySharesWithoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currencyToken","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBuyPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyTransactionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"sharesSubject","type":"address"}],"name":"getKeyHoldingSupplyOfUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getSellPriceAfterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellTransactionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"subject","type":"address"}],"name":"getSharesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"subject","type":"address"}],"name":"getSharesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubjectFeePercent","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sharesSubject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sellShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"setCurrencyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setMigrateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"subject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSharesBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"subject","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSharesSupply","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"setTargetContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"sharesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sharesSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawGas","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040525f60065f6101000a81548160ff0219169083151502179055505f6007553480156200002d575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000a2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000999190620001be565b60405180910390fd5b620000b381620000ba60201b60201c565b50620001d9565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001a6826200017b565b9050919050565b620001b8816200019a565b82525050565b5f602082019050620001d35f830184620001ad565b92915050565b61361880620001e75f395ff3fe60806040526004361061023a575f3560e01c8063715018a61161012d578063ae9bb692116100aa578063cd3f29e91161006e578063cd3f29e9146108da578063d1038fbf14610904578063d3c3b38914610940578063f2fde38b1461096a578063f9931be0146109925761023a565b8063ae9bb6921461082a578063b16df16614610834578063b51d05341461085e578063c409145014610886578063cb02ae11146108b05761023a565b8063959d6d29116100f1578063959d6d291461072257806399f43aba1461075e5780639ae7178114610788578063a2467c17146107c4578063a7b411ed146107ee5761023a565b8063715018a61461064257806387e05b98146106585780638d549377146106945780638da5cb5b146106d057806391657544146106fa5761023a565b806345a0769a116101bb57806353b737991161017f57806353b73799146105605780635cf4ee911461058a578063603f6b6f146105c65780636945b123146105f05780636b2fa374146106185761023a565b806345a0769a1461045c57806345d6494d146104845780634635256e146104c057806347fc822f146104fc57806349f5bff9146105245761023a565b80632267a89c116102025780632267a89c14610356578063261fe2a91461039257806328e36ab8146103bc5780632d5d9b02146103f857806339a7b078146104345761023a565b8063020235ff1461023e57806309f5b2261461027a5780630f026f6d146102a25780631072cbea146102de5780631ef6f4ed1461031a575b5f80fd5b348015610249575f80fd5b50610264600480360381019061025f9190612d99565b6109ce565b6040516102719190612def565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190612e08565b6109ee565b005b3480156102ad575f80fd5b506102c860048036038101906102c39190612e5d565b610a79565b6040516102d59190612def565b60405180910390f35b3480156102e9575f80fd5b5061030460048036038101906102ff9190612e5d565b610b88565b6040516103119190612eb5565b60405180910390f35b348015610325575f80fd5b50610340600480360381019061033b9190612d99565b610cfc565b60405161034d9190612def565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612e5d565b610d7e565b6040516103899190612def565b60405180910390f35b34801561039d575f80fd5b506103a6610e94565b6040516103b39190612def565b60405180910390f35b3480156103c7575f80fd5b506103e260048036038101906103dd9190612ece565b610faa565b6040516103ef9190612def565b60405180910390f35b348015610403575f80fd5b5061041e60048036038101906104199190612f0c565b611110565b60405161042b9190612eb5565b60405180910390f35b34801561043f575f80fd5b5061045a60048036038101906104559190612f0c565b611265565b005b348015610467575f80fd5b50610482600480360381019061047d9190612f86565b6114b1565b005b34801561048f575f80fd5b506104aa60048036038101906104a59190612fb1565b6114d5565b6040516104b79190612def565b60405180910390f35b3480156104cb575f80fd5b506104e660048036038101906104e19190612e5d565b611555565b6040516104f39190612def565b60405180910390f35b348015610507575f80fd5b50610522600480360381019061051d9190612e08565b6115a5565b005b34801561052f575f80fd5b5061054a60048036038101906105459190612e5d565b6115f0565b6040516105579190612eb5565b60405180910390f35b34801561056b575f80fd5b50610574611709565b6040516105819190612def565b60405180910390f35b348015610595575f80fd5b506105b060048036038101906105ab9190612ece565b61177c565b6040516105bd9190612def565b60405180910390f35b3480156105d1575f80fd5b506105da6117ff565b6040516105e79190612def565b60405180910390f35b3480156105fb575f80fd5b5061061660048036038101906106119190612e5d565b611872565b005b348015610623575f80fd5b5061062c611c69565b6040516106399190613037565b60405180910390f35b34801561064d575f80fd5b50610656611c8e565b005b348015610663575f80fd5b5061067e60048036038101906106799190612fb1565b611ca1565b60405161068b9190612def565b60405180910390f35b34801561069f575f80fd5b506106ba60048036038101906106b59190612d99565b611e04565b6040516106c79190612def565b60405180910390f35b3480156106db575f80fd5b506106e4611e86565b6040516106f1919061305f565b60405180910390f35b348015610705575f80fd5b50610720600480360381019061071b9190612fb1565b611ead565b005b34801561072d575f80fd5b5061074860048036038101906107439190612fb1565b612003565b6040516107559190612def565b60405180910390f35b348015610769575f80fd5b50610772612083565b60405161077f919061305f565b60405180910390f35b348015610793575f80fd5b506107ae60048036038101906107a99190612e5d565b6120a8565b6040516107bb9190612def565b60405180910390f35b3480156107cf575f80fd5b506107d8612150565b6040516107e59190612def565b60405180910390f35b3480156107f9575f80fd5b50610814600480360381019061080f9190612e08565b612266565b6040516108219190612def565b60405180910390f35b6108326122ac565b005b34801561083f575f80fd5b506108486122ae565b6040516108559190612def565b60405180910390f35b348015610869575f80fd5b50610884600480360381019061087f9190612e5d565b612321565b005b348015610891575f80fd5b5061089a612717565b6040516108a79190612def565b60405180910390f35b3480156108bb575f80fd5b506108c461282d565b6040516108d19190612def565b60405180910390f35b3480156108e5575f80fd5b506108ee612943565b6040516108fb9190612def565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190612fb1565b6129b6565b6040516109379190612def565b60405180910390f35b34801561094b575f80fd5b50610954612b19565b604051610961919061305f565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190612e08565b612b3e565b005b34801561099d575f80fd5b506109b860048036038101906109b39190612e08565b612bc2565b6040516109c59190612def565b60405180910390f35b6004602052815f5260405f20602052805f5260405f205f91509150505481565b6109f6612bd7565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f803073ffffffffffffffffffffffffffffffffffffffff16634635256e85856040518363ffffffff1660e01b8152600401610ab6929190613078565b602060405180830381865afa158015610ad1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af591906130b3565b90505f3073ffffffffffffffffffffffffffffffffffffffff166345d6494d836040518263ffffffff1660e01b8152600401610b319190612def565b602060405180830381865afa158015610b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7091906130b3565b90508082610b7e919061310b565b9250505092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c165750610be7611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c906131be565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610cb1929190613078565b6020604051808303815f875af1158015610ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf191906131f0565b506001905092915050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f803073ffffffffffffffffffffffffffffffffffffffff16639ae7178185856040518363ffffffff1660e01b8152600401610dbb929190613078565b602060405180830381865afa158015610dd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfa91906130b3565b90505f3073ffffffffffffffffffffffffffffffffffffffff1663959d6d29836040518263ffffffff1660e01b8152600401610e369190612def565b602060405180830381865afa158015610e51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7591906130b3565b9050610e8a8183612c5e90919063ffffffff16565b9250505092915050565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166353b7379960e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f479190613287565b5f604051808303815f865af19150503d805f8114610f80576040519150601f19603f3d011682016040523d82523d5f602084013e610f85565b606091505b50915091505f81806020019051810190610f9f91906130b3565b905080935050505090565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635cf4ee9160e01b868660405160240161100092919061329d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161106a9190613287565b5f604051808303815f865af19150503d805f81146110a3576040519150601f19603f3d011682016040523d82523d5f602084013e6110a8565b606091505b5091509150816110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e49061330e565b60405180910390fd5b5f8180602001905181019061110291906130b3565b905080935050505092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061119e575061116f611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d4906131be565b60405180910390fd5b8160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600190509392505050565b60065f9054906101000a900460ff166112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613376565b60405180910390fd5b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6112ff828461177c565b90505f61130b826114d5565b90508360045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611391919061310b565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508383611419919061310b565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c82982868660018786868a8a61148e919061310b565b6040516114a19796959493929190613394565b60405180910390a1505050505050565b6114b9612bd7565b8060065f6101000a81548160ff02191690831515021790555050565b5f3073ffffffffffffffffffffffffffffffffffffffff166387e05b98836040518263ffffffff1660e01b815260040161150f9190612def565b602060405180830381865afa15801561152a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154e91906130b3565b9050919050565b5f61159d60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361177c565b905092915050565b6115ad612bd7565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061167e575061164f611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b4906131be565b60405180910390fd5b8160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff1663261fe2a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611753573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177791906130b3565b905090565b5f3073ffffffffffffffffffffffffffffffffffffffff166328e36ab884846040518363ffffffff1660e01b81526004016117b892919061329d565b602060405180830381865afa1580156117d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f791906130b3565b905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff1663c40914506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186d91906130b3565b905090565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6118be828461177c565b90505f6118ca826114d5565b90505f8060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd06f6bd60e01b33898960405160240161192393929190613401565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161198d9190613287565b5f604051808303815f865af19150503d805f81146119c6576040519150601f19603f3d011682016040523d82523d5f602084013e6119cb565b606091505b509150915081611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790613480565b60405180910390fd5b8560045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a94919061310b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508585611b1c919061310b565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c82982338860018988888c8c611b91919061310b565b604051611ba49796959493929190613394565b60405180910390a15f5a90505f3a82600754611bc0919061310b565b611bca919061349e565b90503373ffffffffffffffffffffffffffffffffffffffff167ff68a9415c41c3909766cb5532334c4e2b0aea91d64175652783581cdcda0837f82604051611c129190612def565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611c5d573d5f803e3d5ffd5b50505050505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c96612bd7565b611c9f5f612c73565b565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d6494d60e01b85604051602401611cf59190612def565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611d5f9190613287565b5f604051808303815f865af19150503d805f8114611d98576040519150601f19603f3d011682016040523d82523d5f602084013e611d9d565b606091505b509150915081611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd99061330e565b60405180910390fd5b5f81806020019051810190611df791906130b3565b9050809350505050919050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611f3a5750611f0b611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f70906131be565b60405180910390fd5b47811115611fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb390613529565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611fff573d5f803e3d5ffd5b5050565b5f3073ffffffffffffffffffffffffffffffffffffffff1663d1038fbf836040518263ffffffff1660e01b815260040161203d9190612def565b602060405180830381865afa158015612058573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207c91906130b3565b9050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036120f5575f905061214a565b6121478260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121419190613547565b8361177c565b90505b92915050565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b16df16660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122039190613287565b5f604051808303815f865af19150503d805f811461223c576040519150601f19603f3d011682016040523d82523d5f602084013e612241565b606091505b50915091505f8180602001905181019061225b91906130b3565b905080935050505090565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b565b5f3073ffffffffffffffffffffffffffffffffffffffff1663a2467c176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061231c91906130b3565b905090565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f61236d828461177c565b90505f61237982612003565b90505f8060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc810c1a60e01b3389896040516024016123d293929190613401565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161243c9190613287565b5f604051808303815f865af19150503d805f8114612475576040519150601f19603f3d011682016040523d82523d5f602084013e61247a565b606091505b5091509150816124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b6906135c4565b60405180910390fd5b8560045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125439190613547565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555085856125cb9190613547565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c8298233885f8988888c8c61263f919061310b565b6040516126529796959493929190613394565b60405180910390a15f5a90505f3a8260075461266e919061310b565b612678919061349e565b90503373ffffffffffffffffffffffffffffffffffffffff167ff68a9415c41c3909766cb5532334c4e2b0aea91d64175652783581cdcda0837f826040516126c09190612def565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561270b573d5f803e3d5ffd5b50505050505050505050565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603f6b6f60e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516127ca9190613287565b5f604051808303815f865af19150503d805f8114612803576040519150601f19603f3d011682016040523d82523d5f602084013e612808565b606091505b50915091505f8180602001905181019061282291906130b3565b905080935050505090565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd3f29e960e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516128e09190613287565b5f604051808303815f865af19150503d805f8114612919576040519150601f19603f3d011682016040523d82523d5f602084013e61291e565b606091505b50915091505f8180602001905181019061293891906130b3565b905080935050505090565b5f3073ffffffffffffffffffffffffffffffffffffffff1663cb02ae116040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129b191906130b3565b905090565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663959d6d2960e01b85604051602401612a0a9190612def565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612a749190613287565b5f604051808303815f865af19150503d805f8114612aad576040519150601f19603f3d011682016040523d82523d5f602084013e612ab2565b606091505b509150915081612af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aee9061330e565b60405180910390fd5b5f81806020019051810190612b0c91906130b3565b9050809350505050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612b46612bd7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bb6575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612bad919061305f565b60405180910390fd5b612bbf81612c73565b50565b6005602052805f5260405f205f915090505481565b612bdf612d34565b73ffffffffffffffffffffffffffffffffffffffff16612bfd611e86565b73ffffffffffffffffffffffffffffffffffffffff1614612c5c57612c20612d34565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612c53919061305f565b60405180910390fd5b565b5f8183612c6b9190613547565b905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d6882612d3f565b9050919050565b612d7881612d5e565b8114612d82575f80fd5b50565b5f81359050612d9381612d6f565b92915050565b5f8060408385031215612daf57612dae612d3b565b5b5f612dbc85828601612d85565b9250506020612dcd85828601612d85565b9150509250929050565b5f819050919050565b612de981612dd7565b82525050565b5f602082019050612e025f830184612de0565b92915050565b5f60208284031215612e1d57612e1c612d3b565b5b5f612e2a84828501612d85565b91505092915050565b612e3c81612dd7565b8114612e46575f80fd5b50565b5f81359050612e5781612e33565b92915050565b5f8060408385031215612e7357612e72612d3b565b5b5f612e8085828601612d85565b9250506020612e9185828601612e49565b9150509250929050565b5f8115159050919050565b612eaf81612e9b565b82525050565b5f602082019050612ec85f830184612ea6565b92915050565b5f8060408385031215612ee457612ee3612d3b565b5b5f612ef185828601612e49565b9250506020612f0285828601612e49565b9150509250929050565b5f805f60608486031215612f2357612f22612d3b565b5b5f612f3086828701612d85565b9350506020612f4186828701612d85565b9250506040612f5286828701612e49565b9150509250925092565b612f6581612e9b565b8114612f6f575f80fd5b50565b5f81359050612f8081612f5c565b92915050565b5f60208284031215612f9b57612f9a612d3b565b5b5f612fa884828501612f72565b91505092915050565b5f60208284031215612fc657612fc5612d3b565b5b5f612fd384828501612e49565b91505092915050565b5f819050919050565b5f612fff612ffa612ff584612d3f565b612fdc565b612d3f565b9050919050565b5f61301082612fe5565b9050919050565b5f61302182613006565b9050919050565b61303181613017565b82525050565b5f60208201905061304a5f830184613028565b92915050565b61305981612d5e565b82525050565b5f6020820190506130725f830184613050565b92915050565b5f60408201905061308b5f830185613050565b6130986020830184612de0565b9392505050565b5f815190506130ad81612e33565b92915050565b5f602082840312156130c8576130c7612d3b565b5b5f6130d58482850161309f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61311582612dd7565b915061312083612dd7565b9250828201905080821115613138576131376130de565b5b92915050565b5f82825260208201905092915050565b7f4f6e6c7920616c6c6f77656420636f6e7472616374206f72206f776e657220635f8201527f616e2063616c6c20746869732066756e6374696f6e0000000000000000000000602082015250565b5f6131a860358361313e565b91506131b38261314e565b604082019050919050565b5f6020820190508181035f8301526131d58161319c565b9050919050565b5f815190506131ea81612f5c565b92915050565b5f6020828403121561320557613204612d3b565b5b5f613212848285016131dc565b91505092915050565b5f81519050919050565b5f81905092915050565b5f5b8381101561324c578082015181840152602081019050613231565b5f8484015250505050565b5f6132618261321b565b61326b8185613225565b935061327b81856020860161322f565b80840191505092915050565b5f6132928284613257565b915081905092915050565b5f6040820190506132b05f830185612de0565b6132bd6020830184612de0565b9392505050565b7f556e61626c6520746f20676574207072696365000000000000000000000000005f82015250565b5f6132f860138361313e565b9150613303826132c4565b602082019050919050565b5f6020820190508181035f830152613325816132ec565b9050919050565b7f4d696772617465206d6f64652064697361626c656400000000000000000000005f82015250565b5f61336060158361313e565b915061336b8261332c565b602082019050919050565b5f6020820190508181035f83015261338d81613354565b9050919050565b5f60e0820190506133a75f83018a613050565b6133b46020830189613050565b6133c16040830188612ea6565b6133ce6060830187612de0565b6133db6080830186612de0565b6133e860a0830185612de0565b6133f560c0830184612de0565b98975050505050505050565b5f6060820190506134145f830186613050565b6134216020830185613050565b61342e6040830184612de0565b949350505050565b7f556e61626c6520746f20627579536861726573000000000000000000000000005f82015250565b5f61346a60138361313e565b915061347582613436565b602082019050919050565b5f6020820190508181035f8301526134978161345e565b9050919050565b5f6134a882612dd7565b91506134b383612dd7565b92508282026134c181612dd7565b915082820484148315176134d8576134d76130de565b5b5092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61351360148361313e565b915061351e826134df565b602082019050919050565b5f6020820190508181035f83015261354081613507565b9050919050565b5f61355182612dd7565b915061355c83612dd7565b9250828203905081811115613574576135736130de565b5b92915050565b7f556e61626c6520746f2073656c6c5368617265730000000000000000000000005f82015250565b5f6135ae60148361313e565b91506135b98261357a565b602082019050919050565b5f6020820190508181035f8301526135db816135a2565b905091905056fea2646970667358221220bf6a45779229ea1e98d56e82f8abd823a4426eb4e4a4d783fc3c5c0cc047ed9864736f6c63430008170033
Deployed Bytecode
0x60806040526004361061023a575f3560e01c8063715018a61161012d578063ae9bb692116100aa578063cd3f29e91161006e578063cd3f29e9146108da578063d1038fbf14610904578063d3c3b38914610940578063f2fde38b1461096a578063f9931be0146109925761023a565b8063ae9bb6921461082a578063b16df16614610834578063b51d05341461085e578063c409145014610886578063cb02ae11146108b05761023a565b8063959d6d29116100f1578063959d6d291461072257806399f43aba1461075e5780639ae7178114610788578063a2467c17146107c4578063a7b411ed146107ee5761023a565b8063715018a61461064257806387e05b98146106585780638d549377146106945780638da5cb5b146106d057806391657544146106fa5761023a565b806345a0769a116101bb57806353b737991161017f57806353b73799146105605780635cf4ee911461058a578063603f6b6f146105c65780636945b123146105f05780636b2fa374146106185761023a565b806345a0769a1461045c57806345d6494d146104845780634635256e146104c057806347fc822f146104fc57806349f5bff9146105245761023a565b80632267a89c116102025780632267a89c14610356578063261fe2a91461039257806328e36ab8146103bc5780632d5d9b02146103f857806339a7b078146104345761023a565b8063020235ff1461023e57806309f5b2261461027a5780630f026f6d146102a25780631072cbea146102de5780631ef6f4ed1461031a575b5f80fd5b348015610249575f80fd5b50610264600480360381019061025f9190612d99565b6109ce565b6040516102719190612def565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b9190612e08565b6109ee565b005b3480156102ad575f80fd5b506102c860048036038101906102c39190612e5d565b610a79565b6040516102d59190612def565b60405180910390f35b3480156102e9575f80fd5b5061030460048036038101906102ff9190612e5d565b610b88565b6040516103119190612eb5565b60405180910390f35b348015610325575f80fd5b50610340600480360381019061033b9190612d99565b610cfc565b60405161034d9190612def565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612e5d565b610d7e565b6040516103899190612def565b60405180910390f35b34801561039d575f80fd5b506103a6610e94565b6040516103b39190612def565b60405180910390f35b3480156103c7575f80fd5b506103e260048036038101906103dd9190612ece565b610faa565b6040516103ef9190612def565b60405180910390f35b348015610403575f80fd5b5061041e60048036038101906104199190612f0c565b611110565b60405161042b9190612eb5565b60405180910390f35b34801561043f575f80fd5b5061045a60048036038101906104559190612f0c565b611265565b005b348015610467575f80fd5b50610482600480360381019061047d9190612f86565b6114b1565b005b34801561048f575f80fd5b506104aa60048036038101906104a59190612fb1565b6114d5565b6040516104b79190612def565b60405180910390f35b3480156104cb575f80fd5b506104e660048036038101906104e19190612e5d565b611555565b6040516104f39190612def565b60405180910390f35b348015610507575f80fd5b50610522600480360381019061051d9190612e08565b6115a5565b005b34801561052f575f80fd5b5061054a60048036038101906105459190612e5d565b6115f0565b6040516105579190612eb5565b60405180910390f35b34801561056b575f80fd5b50610574611709565b6040516105819190612def565b60405180910390f35b348015610595575f80fd5b506105b060048036038101906105ab9190612ece565b61177c565b6040516105bd9190612def565b60405180910390f35b3480156105d1575f80fd5b506105da6117ff565b6040516105e79190612def565b60405180910390f35b3480156105fb575f80fd5b5061061660048036038101906106119190612e5d565b611872565b005b348015610623575f80fd5b5061062c611c69565b6040516106399190613037565b60405180910390f35b34801561064d575f80fd5b50610656611c8e565b005b348015610663575f80fd5b5061067e60048036038101906106799190612fb1565b611ca1565b60405161068b9190612def565b60405180910390f35b34801561069f575f80fd5b506106ba60048036038101906106b59190612d99565b611e04565b6040516106c79190612def565b60405180910390f35b3480156106db575f80fd5b506106e4611e86565b6040516106f1919061305f565b60405180910390f35b348015610705575f80fd5b50610720600480360381019061071b9190612fb1565b611ead565b005b34801561072d575f80fd5b5061074860048036038101906107439190612fb1565b612003565b6040516107559190612def565b60405180910390f35b348015610769575f80fd5b50610772612083565b60405161077f919061305f565b60405180910390f35b348015610793575f80fd5b506107ae60048036038101906107a99190612e5d565b6120a8565b6040516107bb9190612def565b60405180910390f35b3480156107cf575f80fd5b506107d8612150565b6040516107e59190612def565b60405180910390f35b3480156107f9575f80fd5b50610814600480360381019061080f9190612e08565b612266565b6040516108219190612def565b60405180910390f35b6108326122ac565b005b34801561083f575f80fd5b506108486122ae565b6040516108559190612def565b60405180910390f35b348015610869575f80fd5b50610884600480360381019061087f9190612e5d565b612321565b005b348015610891575f80fd5b5061089a612717565b6040516108a79190612def565b60405180910390f35b3480156108bb575f80fd5b506108c461282d565b6040516108d19190612def565b60405180910390f35b3480156108e5575f80fd5b506108ee612943565b6040516108fb9190612def565b60405180910390f35b34801561090f575f80fd5b5061092a60048036038101906109259190612fb1565b6129b6565b6040516109379190612def565b60405180910390f35b34801561094b575f80fd5b50610954612b19565b604051610961919061305f565b60405180910390f35b348015610975575f80fd5b50610990600480360381019061098b9190612e08565b612b3e565b005b34801561099d575f80fd5b506109b860048036038101906109b39190612e08565b612bc2565b6040516109c59190612def565b60405180910390f35b6004602052815f5260405f20602052805f5260405f205f91509150505481565b6109f6612bd7565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f803073ffffffffffffffffffffffffffffffffffffffff16634635256e85856040518363ffffffff1660e01b8152600401610ab6929190613078565b602060405180830381865afa158015610ad1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af591906130b3565b90505f3073ffffffffffffffffffffffffffffffffffffffff166345d6494d836040518263ffffffff1660e01b8152600401610b319190612def565b602060405180830381865afa158015610b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7091906130b3565b90508082610b7e919061310b565b9250505092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c165750610be7611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c906131be565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401610cb1929190613078565b6020604051808303815f875af1158015610ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf191906131f0565b506001905092915050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f803073ffffffffffffffffffffffffffffffffffffffff16639ae7178185856040518363ffffffff1660e01b8152600401610dbb929190613078565b602060405180830381865afa158015610dd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dfa91906130b3565b90505f3073ffffffffffffffffffffffffffffffffffffffff1663959d6d29836040518263ffffffff1660e01b8152600401610e369190612def565b602060405180830381865afa158015610e51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7591906130b3565b9050610e8a8183612c5e90919063ffffffff16565b9250505092915050565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166353b7379960e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610f479190613287565b5f604051808303815f865af19150503d805f8114610f80576040519150601f19603f3d011682016040523d82523d5f602084013e610f85565b606091505b50915091505f81806020019051810190610f9f91906130b3565b905080935050505090565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635cf4ee9160e01b868660405160240161100092919061329d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161106a9190613287565b5f604051808303815f865af19150503d805f81146110a3576040519150601f19603f3d011682016040523d82523d5f602084013e6110a8565b606091505b5091509150816110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e49061330e565b60405180910390fd5b5f8180602001905181019061110291906130b3565b905080935050505092915050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061119e575061116f611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d4906131be565b60405180910390fd5b8160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600190509392505050565b60065f9054906101000a900460ff166112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112aa90613376565b60405180910390fd5b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6112ff828461177c565b90505f61130b826114d5565b90508360045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611391919061310b565b60045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508383611419919061310b565b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c82982868660018786868a8a61148e919061310b565b6040516114a19796959493929190613394565b60405180910390a1505050505050565b6114b9612bd7565b8060065f6101000a81548160ff02191690831515021790555050565b5f3073ffffffffffffffffffffffffffffffffffffffff166387e05b98836040518263ffffffff1660e01b815260040161150f9190612def565b602060405180830381865afa15801561152a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154e91906130b3565b9050919050565b5f61159d60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548361177c565b905092915050565b6115ad612bd7565b8060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061167e575061164f611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b4906131be565b60405180910390fd5b8160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff1663261fe2a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611753573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177791906130b3565b905090565b5f3073ffffffffffffffffffffffffffffffffffffffff166328e36ab884846040518363ffffffff1660e01b81526004016117b892919061329d565b602060405180830381865afa1580156117d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f791906130b3565b905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff1663c40914506040518163ffffffff1660e01b8152600401602060405180830381865afa158015611849573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186d91906130b3565b905090565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f6118be828461177c565b90505f6118ca826114d5565b90505f8060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd06f6bd60e01b33898960405160240161192393929190613401565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161198d9190613287565b5f604051808303815f865af19150503d805f81146119c6576040519150601f19603f3d011682016040523d82523d5f602084013e6119cb565b606091505b509150915081611a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0790613480565b60405180910390fd5b8560045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a94919061310b565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508585611b1c919061310b565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c82982338860018988888c8c611b91919061310b565b604051611ba49796959493929190613394565b60405180910390a15f5a90505f3a82600754611bc0919061310b565b611bca919061349e565b90503373ffffffffffffffffffffffffffffffffffffffff167ff68a9415c41c3909766cb5532334c4e2b0aea91d64175652783581cdcda0837f82604051611c129190612def565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611c5d573d5f803e3d5ffd5b50505050505050505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c96612bd7565b611c9f5f612c73565b565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345d6494d60e01b85604051602401611cf59190612def565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611d5f9190613287565b5f604051808303815f865af19150503d805f8114611d98576040519150601f19603f3d011682016040523d82523d5f602084013e611d9d565b606091505b509150915081611de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd99061330e565b60405180910390fd5b5f81806020019051810190611df791906130b3565b9050809350505050919050565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611f3a5750611f0b611e86565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611f79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f70906131be565b60405180910390fd5b47811115611fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb390613529565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611fff573d5f803e3d5ffd5b5050565b5f3073ffffffffffffffffffffffffffffffffffffffff1663d1038fbf836040518263ffffffff1660e01b815260040161203d9190612def565b602060405180830381865afa158015612058573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207c91906130b3565b9050919050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054036120f5575f905061214a565b6121478260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121419190613547565b8361177c565b90505b92915050565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b16df16660e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516122039190613287565b5f604051808303815f865af19150503d805f811461223c576040519150601f19603f3d011682016040523d82523d5f602084013e612241565b606091505b50915091505f8180602001905181019061225b91906130b3565b905080935050505090565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b565b5f3073ffffffffffffffffffffffffffffffffffffffff1663a2467c176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061231c91906130b3565b905090565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f61236d828461177c565b90505f61237982612003565b90505f8060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc810c1a60e01b3389896040516024016123d293929190613401565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161243c9190613287565b5f604051808303815f865af19150503d805f8114612475576040519150601f19603f3d011682016040523d82523d5f602084013e61247a565b606091505b5091509150816124bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b6906135c4565b60405180910390fd5b8560045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546125439190613547565b60045f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555085856125cb9190613547565b60055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507f9adcf0ad0cda63c4d50f26a48925cf6405df27d422a39c456b5f03f661c8298233885f8988888c8c61263f919061310b565b6040516126529796959493929190613394565b60405180910390a15f5a90505f3a8260075461266e919061310b565b612678919061349e565b90503373ffffffffffffffffffffffffffffffffffffffff167ff68a9415c41c3909766cb5532334c4e2b0aea91d64175652783581cdcda0837f826040516126c09190612def565b60405180910390a23373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561270b573d5f803e3d5ffd5b50505050505050505050565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663603f6b6f60e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516127ca9190613287565b5f604051808303815f865af19150503d805f8114612803576040519150601f19603f3d011682016040523d82523d5f602084013e612808565b606091505b50915091505f8180602001905181019061282291906130b3565b905080935050505090565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cd3f29e960e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516128e09190613287565b5f604051808303815f865af19150503d805f8114612919576040519150601f19603f3d011682016040523d82523d5f602084013e61291e565b606091505b50915091505f8180602001905181019061293891906130b3565b905080935050505090565b5f3073ffffffffffffffffffffffffffffffffffffffff1663cb02ae116040518163ffffffff1660e01b8152600401602060405180830381865afa15801561298d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129b191906130b3565b905090565b5f805f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663959d6d2960e01b85604051602401612a0a9190612def565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051612a749190613287565b5f604051808303815f865af19150503d805f8114612aad576040519150601f19603f3d011682016040523d82523d5f602084013e612ab2565b606091505b509150915081612af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aee9061330e565b60405180910390fd5b5f81806020019051810190612b0c91906130b3565b9050809350505050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612b46612bd7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bb6575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401612bad919061305f565b60405180910390fd5b612bbf81612c73565b50565b6005602052805f5260405f205f915090505481565b612bdf612d34565b73ffffffffffffffffffffffffffffffffffffffff16612bfd611e86565b73ffffffffffffffffffffffffffffffffffffffff1614612c5c57612c20612d34565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612c53919061305f565b60405180910390fd5b565b5f8183612c6b9190613547565b905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612d6882612d3f565b9050919050565b612d7881612d5e565b8114612d82575f80fd5b50565b5f81359050612d9381612d6f565b92915050565b5f8060408385031215612daf57612dae612d3b565b5b5f612dbc85828601612d85565b9250506020612dcd85828601612d85565b9150509250929050565b5f819050919050565b612de981612dd7565b82525050565b5f602082019050612e025f830184612de0565b92915050565b5f60208284031215612e1d57612e1c612d3b565b5b5f612e2a84828501612d85565b91505092915050565b612e3c81612dd7565b8114612e46575f80fd5b50565b5f81359050612e5781612e33565b92915050565b5f8060408385031215612e7357612e72612d3b565b5b5f612e8085828601612d85565b9250506020612e9185828601612e49565b9150509250929050565b5f8115159050919050565b612eaf81612e9b565b82525050565b5f602082019050612ec85f830184612ea6565b92915050565b5f8060408385031215612ee457612ee3612d3b565b5b5f612ef185828601612e49565b9250506020612f0285828601612e49565b9150509250929050565b5f805f60608486031215612f2357612f22612d3b565b5b5f612f3086828701612d85565b9350506020612f4186828701612d85565b9250506040612f5286828701612e49565b9150509250925092565b612f6581612e9b565b8114612f6f575f80fd5b50565b5f81359050612f8081612f5c565b92915050565b5f60208284031215612f9b57612f9a612d3b565b5b5f612fa884828501612f72565b91505092915050565b5f60208284031215612fc657612fc5612d3b565b5b5f612fd384828501612e49565b91505092915050565b5f819050919050565b5f612fff612ffa612ff584612d3f565b612fdc565b612d3f565b9050919050565b5f61301082612fe5565b9050919050565b5f61302182613006565b9050919050565b61303181613017565b82525050565b5f60208201905061304a5f830184613028565b92915050565b61305981612d5e565b82525050565b5f6020820190506130725f830184613050565b92915050565b5f60408201905061308b5f830185613050565b6130986020830184612de0565b9392505050565b5f815190506130ad81612e33565b92915050565b5f602082840312156130c8576130c7612d3b565b5b5f6130d58482850161309f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61311582612dd7565b915061312083612dd7565b9250828201905080821115613138576131376130de565b5b92915050565b5f82825260208201905092915050565b7f4f6e6c7920616c6c6f77656420636f6e7472616374206f72206f776e657220635f8201527f616e2063616c6c20746869732066756e6374696f6e0000000000000000000000602082015250565b5f6131a860358361313e565b91506131b38261314e565b604082019050919050565b5f6020820190508181035f8301526131d58161319c565b9050919050565b5f815190506131ea81612f5c565b92915050565b5f6020828403121561320557613204612d3b565b5b5f613212848285016131dc565b91505092915050565b5f81519050919050565b5f81905092915050565b5f5b8381101561324c578082015181840152602081019050613231565b5f8484015250505050565b5f6132618261321b565b61326b8185613225565b935061327b81856020860161322f565b80840191505092915050565b5f6132928284613257565b915081905092915050565b5f6040820190506132b05f830185612de0565b6132bd6020830184612de0565b9392505050565b7f556e61626c6520746f20676574207072696365000000000000000000000000005f82015250565b5f6132f860138361313e565b9150613303826132c4565b602082019050919050565b5f6020820190508181035f830152613325816132ec565b9050919050565b7f4d696772617465206d6f64652064697361626c656400000000000000000000005f82015250565b5f61336060158361313e565b915061336b8261332c565b602082019050919050565b5f6020820190508181035f83015261338d81613354565b9050919050565b5f60e0820190506133a75f83018a613050565b6133b46020830189613050565b6133c16040830188612ea6565b6133ce6060830187612de0565b6133db6080830186612de0565b6133e860a0830185612de0565b6133f560c0830184612de0565b98975050505050505050565b5f6060820190506134145f830186613050565b6134216020830185613050565b61342e6040830184612de0565b949350505050565b7f556e61626c6520746f20627579536861726573000000000000000000000000005f82015250565b5f61346a60138361313e565b915061347582613436565b602082019050919050565b5f6020820190508181035f8301526134978161345e565b9050919050565b5f6134a882612dd7565b91506134b383612dd7565b92508282026134c181612dd7565b915082820484148315176134d8576134d76130de565b5b5092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61351360148361313e565b915061351e826134df565b602082019050919050565b5f6020820190508181035f83015261354081613507565b9050919050565b5f61355182612dd7565b915061355c83612dd7565b9250828203905081811115613574576135736130de565b5b92915050565b7f556e61626c6520746f2073656c6c5368617265730000000000000000000000005f82015250565b5f6135ae60148361313e565b91506135b98261357a565b602082019050919050565b5f6020820190508181035f8301526135db816135a2565b905091905056fea2646970667358221220bf6a45779229ea1e98d56e82f8abd823a4426eb4e4a4d783fc3c5c0cc047ed9864736f6c63430008170033
Deployed Bytecode Sourcemap
33555:11022:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33798:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35886:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40736:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36348:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39241:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41894:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37472:300;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38398:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39000:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35070:662;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34931:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40574:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40010:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35771:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39415:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37780:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38805:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37322:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42220:1151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33639:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31911:103;;;;;;;;;;;;;:::i;:::-;;40204:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39765:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31236:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36146:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41730:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33716:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41069:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36552:302;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39622:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36099:39;;;:::i;:::-;;36862:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43418:1156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37014:300;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37930:302;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38240:144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41358:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33674:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32169:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33907:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33798:68;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35886:165::-;31122:13;:11;:13::i;:::-;35984:12:::1;35962:13;;:35;;;;;;;;;;;;;;;;;;36031:12;36008:20;;:35;;;;;;;;;;;;;;;;;;35886:165:::0;:::o;40736:274::-;40850:7;40870:13;40886:4;:16;;;40903:13;40918:6;40886:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40870:55;;40936:11;40950:4;:14;;;40965:5;40950:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40936:35;;40999:3;40991:5;:11;;;;:::i;:::-;40984:18;;;;40736:274;;;;:::o;36348:170::-;36435:4;34358:15;;;;;;;;;;;34344:29;;:10;:29;;;:54;;;;34391:7;:5;:7::i;:::-;34377:21;;:10;:21;;;34344:54;34336:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;36452:13:::1;;;;;;;;;;;:22;;;36475:2;36479:6;36452:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36506:4;36499:11;;36348:170:::0;;;;:::o;39241:166::-;39344:7;39371:13;:22;39385:7;39371:22;;;;;;;;;;;;;;;:28;39394:4;39371:28;;;;;;;;;;;;;;;;39364:35;;39241:166;;;;:::o;41894:280::-;42009:7;42029:13;42045:4;:17;;;42063:13;42078:6;42045:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42029:56;;42096:11;42110:4;:15;;;42126:5;42110:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42096:36;;42152:14;42162:3;42152:5;:9;;:14;;;;:::i;:::-;42145:21;;;;41894:280;;;;:::o;37472:300::-;37523:7;37544:12;37558:17;37579:15;;;;;;;;;;;:20;;37637:34;;;37614:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37579:104;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37543:140;;;;37696:13;37723:4;37712:27;;;;;;;;;;;;:::i;:::-;37696:43;;37759:5;37752:12;;;;;37472:300;:::o;38398:399::-;38492:7;38513:12;38527:17;38548:15;;;;;;;;;;;:20;;38606:22;;;38630:6;38638;38583:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38548:108;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38512:144;;;;38677:7;38669:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;38721:13;38748:4;38737:27;;;;;;;;;;;;:::i;:::-;38721:43;;38784:5;38777:12;;;;;38398:399;;;;:::o;39000:233::-;39146:4;34358:15;;;;;;;;;;;34344:29;;:10;:29;;;:54;;;;34391:7;:5;:7::i;:::-;34377:21;;:10;:21;;;34344:54;34336:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;39195:6:::1;39163:13;:22;39177:7;39163:22;;;;;;;;;;;;;;;:29;39186:5;39163:29;;;;;;;;;;;;;;;:38;;;;39221:4;39214:11;;39000:233:::0;;;;;:::o;35070:662::-;34526:8;;;;;;;;;;;34518:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;35218:14:::1;35235:12;:27;35248:13;35235:27;;;;;;;;;;;;;;;;35218:44;;35273:13;35289:24;35298:6;35306;35289:8;:24::i;:::-;35273:40;;35324:11;35338:16;35348:5;35338:9;:16::i;:::-;35324:30;;35471:6;35419:13;:28;35433:13;35419:28;;;;;;;;;;;;;;;:36;35448:6;35419:36;;;;;;;;;;;;;;;;:58;;;;:::i;:::-;35367:13;:28;35381:13;35367:28;;;;;;;;;;;;;;;:36;35396:6;35367:36;;;;;;;;;;;;;;;:110;;;;35527:6;35518;:15;;;;:::i;:::-;35488:12;:27;35501:13;35488:27;;;;;;;;;;;;;;;:45;;;;35551:173;35571:6;35592:13;35620:4;35639:6;35660:5;35680:3;35707:6;35698;:15;;;;:::i;:::-;35551:173;;;;;;;;;;;;:::i;:::-;;;;;;;;35207:525;;;35070:662:::0;;;:::o;34931:90::-;31122:13;:11;:13::i;:::-;35007:6:::1;34996:8;;:17;;;;;;;;;;;;;;;;;;34931:90:::0;:::o;40574:154::-;40645:7;40696:4;40672:41;;;40714:5;40672:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40665:55;;40574:154;;;:::o;40010:186::-;40116:7;40143:45;40152:12;:27;40165:13;40152:27;;;;;;;;;;;;;;;;40181:6;40143:8;:45::i;:::-;40136:52;;40010:186;;;;:::o;35771:103::-;31122:13;:11;:13::i;:::-;35860:6:::1;35842:15;;:24;;;;;;;;;;;;;;;;;;35771:103:::0;:::o;39415:199::-;39535:4;34358:15;;;;;;;;;;;34344:29;;:10;:29;;;:54;;;;34391:7;:5;:7::i;:::-;34377:21;;:10;:21;;;34344:54;34336:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;39576:6:::1;39552:12;:21;39565:7;39552:21;;;;;;;;;;;;;;;:30;;;;39602:4;39595:11;;39415:199:::0;;;;:::o;37780:142::-;37833:7;37884:4;37860:52;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37853:61;;37780:142;:::o;38805:187::-;38901:7;38952:4;38928:40;;;38969:6;38977;38928:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38921:63;;38805:187;;;;:::o;37322:142::-;37375:7;37426:4;37402:52;;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37395:61;;37322:142;:::o;42220:1151::-;42321:14;42338:12;:27;42351:13;42338:27;;;;;;;;;;;;;;;;42321:44;;42376:13;42392:24;42401:6;42409;42392:8;:24::i;:::-;42376:40;;42427:11;42441:16;42451:5;42441:9;:16::i;:::-;42427:30;;42471:17;42490;42511:15;;;;;;;;;;;:20;;42569:34;;;42605:10;42617:13;42632:6;42546:93;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42511:139;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42470:180;;;;42671:12;42663:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;42832:6;42776:13;:28;42790:13;42776:28;;;;;;;;;;;;;;;:40;42805:10;42776:40;;;;;;;;;;;;;;;;:62;;;;:::i;:::-;42720:13;:28;42734:13;42720:28;;;;;;;;;;;;;;;:40;42749:10;42720:40;;;;;;;;;;;;;;;:118;;;;42888:6;42879;:15;;;;:::i;:::-;42849:12;:27;42862:13;42849:27;;;;;;;;;;;;;;;:45;;;;42912:177;42932:10;42957:13;42985:4;43004:6;43025:5;43045:3;43072:6;43063;:15;;;;:::i;:::-;42912:177;;;;;;;;;;;;:::i;:::-;;;;;;;;43130:15;43148:9;43130:27;;43168:23;43232:11;43221:7;43195:23;;:33;;;;:::i;:::-;43194:49;;;;:::i;:::-;43168:75;;43269:10;43259:38;;;43281:15;43259:38;;;;;;:::i;:::-;;;;;;;;43326:10;43318:28;;:45;43347:15;43318:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42310:1061;;;;;;;42220:1151;;:::o;33639:26::-;;;;;;;;;;;;;:::o;31911:103::-;31122:13;:11;:13::i;:::-;31976:30:::1;32003:1;31976:18;:30::i;:::-;31911:103::o:0;40204:362::-;40273:7;40294:12;40308:17;40329:15;;;;;;;;;;;:20;;40387:23;;;40412:5;40364:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40329:100;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40293:136;;;;40450:7;40442:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40494:11;40519:4;40508:27;;;;;;;;;;;;:::i;:::-;40494:41;;40555:3;40548:10;;;;;40204:362;;;:::o;39765:187::-;39883:7;39910:13;:28;39924:13;39910:28;;;;;;;;;;;;;;;:34;39939:4;39910:34;;;;;;;;;;;;;;;;39903:41;;39765:187;;;;:::o;31236:87::-;31282:7;31309:6;;;;;;;;;;;31302:13;;31236:87;:::o;36146:194::-;34358:15;;;;;;;;;;;34344:29;;:10;:29;;;:54;;;;34391:7;:5;:7::i;:::-;34377:21;;:10;:21;;;34344:54;34336:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;36239:21:::1;36229:6;:31;;36221:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36304:10;36296:28;;:36;36325:6;36296:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36146:194:::0;:::o;41730:156::-;41802:7;41853:4;41829:42;;;41872:5;41829:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41822:56;;41730:156;;;:::o;33716:30::-;;;;;;;;;;;;;:::o;41069:281::-;41176:7;41231:1;41200:12;:27;41213:13;41200:27;;;;;;;;;;;;;;;;:32;41196:73;;41256:1;41249:8;;;;41196:73;41288:54;41327:6;41297:12;:27;41310:13;41297:27;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;41335:6;41288:8;:54::i;:::-;41281:61;;41069:281;;;;;:::o;36552:302::-;36604:7;36625:12;36639:17;36660:15;;;;;;;;;;;:20;;36718:35;;;36695:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36660:105;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36624:141;;;;36778:13;36805:4;36794:27;;;;;;;;;;;;:::i;:::-;36778:43;;36841:5;36834:12;;;;;36552:302;:::o;39622:135::-;39701:7;39728:12;:21;39741:7;39728:21;;;;;;;;;;;;;;;;39721:28;;39622:135;;;:::o;36099:39::-;:::o;36862:144::-;36916:7;36967:4;36943:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36936:62;;36862:144;:::o;43418:1156::-;43520:14;43537:12;:27;43550:13;43537:27;;;;;;;;;;;;;;;;43520:44;;43575:13;43591:24;43600:6;43608;43591:8;:24::i;:::-;43575:40;;43626:11;43640:17;43651:5;43640:10;:17::i;:::-;43626:31;;43671:17;43690;43711:15;;;;;;;;;;;:20;;43769:35;;;43806:10;43818:13;43833:6;43746:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43711:140;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43670:181;;;;43872:12;43864:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;44034:6;43978:13;:28;43992:13;43978:28;;;;;;;;;;;;;;;:40;44007:10;43978:40;;;;;;;;;;;;;;;;:62;;;;:::i;:::-;43922:13;:28;43936:13;43922:28;;;;;;;;;;;;;;;:40;43951:10;43922:40;;;;;;;;;;;;;;;:118;;;;44090:6;44081;:15;;;;:::i;:::-;44051:12;:27;44064:13;44051:27;;;;;;;;;;;;;;;:45;;;;44114:178;44134:10;44159:13;44187:5;44207:6;44228:5;44248:3;44275:6;44266;:15;;;;:::i;:::-;44114:178;;;;;;;;;;;;:::i;:::-;;;;;;;;44333:15;44351:9;44333:27;;44371:23;44435:11;44424:7;44398:23;;:33;;;;:::i;:::-;44397:49;;;;:::i;:::-;44371:75;;44472:10;44462:38;;;44484:15;44462:38;;;;;;:::i;:::-;;;;;;;;44529:10;44521:28;;:45;44550:15;44521:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43509:1065;;;;;;;43418:1156;;:::o;37014:300::-;37065:7;37086:12;37100:17;37121:15;;;;;;;;;;;:20;;37179:34;;;37156:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37121:104;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37085:140;;;;37238:13;37265:4;37254:27;;;;;;;;;;;;:::i;:::-;37238:43;;37301:5;37294:12;;;;;37014:300;:::o;37930:302::-;37982:7;38003:12;38017:17;38038:15;;;;;;;;;;;:20;;38096:35;;;38073:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38038:105;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38002:141;;;;38156:13;38183:4;38172:27;;;;;;;;;;;;:::i;:::-;38156:43;;38219:5;38212:12;;;;;37930:302;:::o;38240:144::-;38294:7;38345:4;38321:53;;;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38314:62;;38240:144;:::o;41358:364::-;41428:7;41449:12;41463:17;41484:15;;;;;;;;;;;:20;;41542:24;;;41568:5;41519:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41484:101;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41448:137;;;;41606:7;41598:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41650:11;41675:4;41664:27;;;;;;;;;;;;:::i;:::-;41650:41;;41711:3;41704:10;;;;;41358:364;;;:::o;33674:35::-;;;;;;;;;;;;;:::o;32169:220::-;31122:13;:11;:13::i;:::-;32274:1:::1;32254:22;;:8;:22;;::::0;32250:93:::1;;32328:1;32300:31;;;;;;;;;;;:::i;:::-;;;;;;;;32250:93;32353:28;32372:8;32353:18;:28::i;:::-;32169:220:::0;:::o;33907:47::-;;;;;;;;;;;;;;;;;:::o;31401:166::-;31472:12;:10;:12::i;:::-;31461:23;;:7;:5;:7::i;:::-;:23;;;31457:103;;31535:12;:10;:12::i;:::-;31508:40;;;;;;;;;;;:::i;:::-;;;;;;;;31457:103;31401:166::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;32549:191::-;32623:16;32642:6;;;;;;;;;;;32623:25;;32668:8;32659:6;;:17;;;;;;;;;;;;;;;;;;32723:8;32692:40;;32713:8;32692:40;;;;;;;;;;;;32612:128;32549:191;:::o;17971:98::-;18024:7;18051:10;18044:17;;17971:98;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:474::-;909:6;917;966:2;954:9;945:7;941:23;937:32;934:119;;;972:79;;:::i;:::-;934:119;1092:1;1117:53;1162:7;1153:6;1142:9;1138:22;1117:53;:::i;:::-;1107:63;;1063:117;1219:2;1245:53;1290:7;1281:6;1270:9;1266:22;1245:53;:::i;:::-;1235:63;;1190:118;841:474;;;;;:::o;1321:77::-;1358:7;1387:5;1376:16;;1321:77;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:329::-;1815:6;1864:2;1852:9;1843:7;1839:23;1835:32;1832:119;;;1870:79;;:::i;:::-;1832:119;1990:1;2015:53;2060:7;2051:6;2040:9;2036:22;2015:53;:::i;:::-;2005:63;;1961:117;1756:329;;;;:::o;2091:122::-;2164:24;2182:5;2164:24;:::i;:::-;2157:5;2154:35;2144:63;;2203:1;2200;2193:12;2144:63;2091:122;:::o;2219:139::-;2265:5;2303:6;2290:20;2281:29;;2319:33;2346:5;2319:33;:::i;:::-;2219:139;;;;:::o;2364:474::-;2432:6;2440;2489:2;2477:9;2468:7;2464:23;2460:32;2457:119;;;2495:79;;:::i;:::-;2457:119;2615:1;2640:53;2685:7;2676:6;2665:9;2661:22;2640:53;:::i;:::-;2630:63;;2586:117;2742:2;2768:53;2813:7;2804:6;2793:9;2789:22;2768:53;:::i;:::-;2758:63;;2713:118;2364:474;;;;;:::o;2844:90::-;2878:7;2921:5;2914:13;2907:21;2896:32;;2844:90;;;:::o;2940:109::-;3021:21;3036:5;3021:21;:::i;:::-;3016:3;3009:34;2940:109;;:::o;3055:210::-;3142:4;3180:2;3169:9;3165:18;3157:26;;3193:65;3255:1;3244:9;3240:17;3231:6;3193:65;:::i;:::-;3055:210;;;;:::o;3271:474::-;3339:6;3347;3396:2;3384:9;3375:7;3371:23;3367:32;3364:119;;;3402:79;;:::i;:::-;3364:119;3522:1;3547:53;3592:7;3583:6;3572:9;3568:22;3547:53;:::i;:::-;3537:63;;3493:117;3649:2;3675:53;3720:7;3711:6;3700:9;3696:22;3675:53;:::i;:::-;3665:63;;3620:118;3271:474;;;;;:::o;3751:619::-;3828:6;3836;3844;3893:2;3881:9;3872:7;3868:23;3864:32;3861:119;;;3899:79;;:::i;:::-;3861:119;4019:1;4044:53;4089:7;4080:6;4069:9;4065:22;4044:53;:::i;:::-;4034:63;;3990:117;4146:2;4172:53;4217:7;4208:6;4197:9;4193:22;4172:53;:::i;:::-;4162:63;;4117:118;4274:2;4300:53;4345:7;4336:6;4325:9;4321:22;4300:53;:::i;:::-;4290:63;;4245:118;3751:619;;;;;:::o;4376:116::-;4446:21;4461:5;4446:21;:::i;:::-;4439:5;4436:32;4426:60;;4482:1;4479;4472:12;4426:60;4376:116;:::o;4498:133::-;4541:5;4579:6;4566:20;4557:29;;4595:30;4619:5;4595:30;:::i;:::-;4498:133;;;;:::o;4637:323::-;4693:6;4742:2;4730:9;4721:7;4717:23;4713:32;4710:119;;;4748:79;;:::i;:::-;4710:119;4868:1;4893:50;4935:7;4926:6;4915:9;4911:22;4893:50;:::i;:::-;4883:60;;4839:114;4637:323;;;;:::o;4966:329::-;5025:6;5074:2;5062:9;5053:7;5049:23;5045:32;5042:119;;;5080:79;;:::i;:::-;5042:119;5200:1;5225:53;5270:7;5261:6;5250:9;5246:22;5225:53;:::i;:::-;5215:63;;5171:117;4966:329;;;;:::o;5301:60::-;5329:3;5350:5;5343:12;;5301:60;;;:::o;5367:142::-;5417:9;5450:53;5468:34;5477:24;5495:5;5477:24;:::i;:::-;5468:34;:::i;:::-;5450:53;:::i;:::-;5437:66;;5367:142;;;:::o;5515:126::-;5565:9;5598:37;5629:5;5598:37;:::i;:::-;5585:50;;5515:126;;;:::o;5647:140::-;5711:9;5744:37;5775:5;5744:37;:::i;:::-;5731:50;;5647:140;;;:::o;5793:159::-;5894:51;5939:5;5894:51;:::i;:::-;5889:3;5882:64;5793:159;;:::o;5958:250::-;6065:4;6103:2;6092:9;6088:18;6080:26;;6116:85;6198:1;6187:9;6183:17;6174:6;6116:85;:::i;:::-;5958:250;;;;:::o;6214:118::-;6301:24;6319:5;6301:24;:::i;:::-;6296:3;6289:37;6214:118;;:::o;6338:222::-;6431:4;6469:2;6458:9;6454:18;6446:26;;6482:71;6550:1;6539:9;6535:17;6526:6;6482:71;:::i;:::-;6338:222;;;;:::o;6566:332::-;6687:4;6725:2;6714:9;6710:18;6702:26;;6738:71;6806:1;6795:9;6791:17;6782:6;6738:71;:::i;:::-;6819:72;6887:2;6876:9;6872:18;6863:6;6819:72;:::i;:::-;6566:332;;;;;:::o;6904:143::-;6961:5;6992:6;6986:13;6977:22;;7008:33;7035:5;7008:33;:::i;:::-;6904:143;;;;:::o;7053:351::-;7123:6;7172:2;7160:9;7151:7;7147:23;7143:32;7140:119;;;7178:79;;:::i;:::-;7140:119;7298:1;7323:64;7379:7;7370:6;7359:9;7355:22;7323:64;:::i;:::-;7313:74;;7269:128;7053:351;;;;:::o;7410:180::-;7458:77;7455:1;7448:88;7555:4;7552:1;7545:15;7579:4;7576:1;7569:15;7596:191;7636:3;7655:20;7673:1;7655:20;:::i;:::-;7650:25;;7689:20;7707:1;7689:20;:::i;:::-;7684:25;;7732:1;7729;7725:9;7718:16;;7753:3;7750:1;7747:10;7744:36;;;7760:18;;:::i;:::-;7744:36;7596:191;;;;:::o;7793:169::-;7877:11;7911:6;7906:3;7899:19;7951:4;7946:3;7942:14;7927:29;;7793:169;;;;:::o;7968:240::-;8108:34;8104:1;8096:6;8092:14;8085:58;8177:23;8172:2;8164:6;8160:15;8153:48;7968:240;:::o;8214:366::-;8356:3;8377:67;8441:2;8436:3;8377:67;:::i;:::-;8370:74;;8453:93;8542:3;8453:93;:::i;:::-;8571:2;8566:3;8562:12;8555:19;;8214:366;;;:::o;8586:419::-;8752:4;8790:2;8779:9;8775:18;8767:26;;8839:9;8833:4;8829:20;8825:1;8814:9;8810:17;8803:47;8867:131;8993:4;8867:131;:::i;:::-;8859:139;;8586:419;;;:::o;9011:137::-;9065:5;9096:6;9090:13;9081:22;;9112:30;9136:5;9112:30;:::i;:::-;9011:137;;;;:::o;9154:345::-;9221:6;9270:2;9258:9;9249:7;9245:23;9241:32;9238:119;;;9276:79;;:::i;:::-;9238:119;9396:1;9421:61;9474:7;9465:6;9454:9;9450:22;9421:61;:::i;:::-;9411:71;;9367:125;9154:345;;;;:::o;9505:98::-;9556:6;9590:5;9584:12;9574:22;;9505:98;;;:::o;9609:147::-;9710:11;9747:3;9732:18;;9609:147;;;;:::o;9762:246::-;9843:1;9853:113;9867:6;9864:1;9861:13;9853:113;;;9952:1;9947:3;9943:11;9937:18;9933:1;9928:3;9924:11;9917:39;9889:2;9886:1;9882:10;9877:15;;9853:113;;;10000:1;9991:6;9986:3;9982:16;9975:27;9824:184;9762:246;;;:::o;10014:386::-;10118:3;10146:38;10178:5;10146:38;:::i;:::-;10200:88;10281:6;10276:3;10200:88;:::i;:::-;10193:95;;10297:65;10355:6;10350:3;10343:4;10336:5;10332:16;10297:65;:::i;:::-;10387:6;10382:3;10378:16;10371:23;;10122:278;10014:386;;;;:::o;10406:271::-;10536:3;10558:93;10647:3;10638:6;10558:93;:::i;:::-;10551:100;;10668:3;10661:10;;10406:271;;;;:::o;10683:332::-;10804:4;10842:2;10831:9;10827:18;10819:26;;10855:71;10923:1;10912:9;10908:17;10899:6;10855:71;:::i;:::-;10936:72;11004:2;10993:9;10989:18;10980:6;10936:72;:::i;:::-;10683:332;;;;;:::o;11021:169::-;11161:21;11157:1;11149:6;11145:14;11138:45;11021:169;:::o;11196:366::-;11338:3;11359:67;11423:2;11418:3;11359:67;:::i;:::-;11352:74;;11435:93;11524:3;11435:93;:::i;:::-;11553:2;11548:3;11544:12;11537:19;;11196:366;;;:::o;11568:419::-;11734:4;11772:2;11761:9;11757:18;11749:26;;11821:9;11815:4;11811:20;11807:1;11796:9;11792:17;11785:47;11849:131;11975:4;11849:131;:::i;:::-;11841:139;;11568:419;;;:::o;11993:171::-;12133:23;12129:1;12121:6;12117:14;12110:47;11993:171;:::o;12170:366::-;12312:3;12333:67;12397:2;12392:3;12333:67;:::i;:::-;12326:74;;12409:93;12498:3;12409:93;:::i;:::-;12527:2;12522:3;12518:12;12511:19;;12170:366;;;:::o;12542:419::-;12708:4;12746:2;12735:9;12731:18;12723:26;;12795:9;12789:4;12785:20;12781:1;12770:9;12766:17;12759:47;12823:131;12949:4;12823:131;:::i;:::-;12815:139;;12542:419;;;:::o;12967:874::-;13222:4;13260:3;13249:9;13245:19;13237:27;;13274:71;13342:1;13331:9;13327:17;13318:6;13274:71;:::i;:::-;13355:72;13423:2;13412:9;13408:18;13399:6;13355:72;:::i;:::-;13437:66;13499:2;13488:9;13484:18;13475:6;13437:66;:::i;:::-;13513:72;13581:2;13570:9;13566:18;13557:6;13513:72;:::i;:::-;13595:73;13663:3;13652:9;13648:19;13639:6;13595:73;:::i;:::-;13678;13746:3;13735:9;13731:19;13722:6;13678:73;:::i;:::-;13761;13829:3;13818:9;13814:19;13805:6;13761:73;:::i;:::-;12967:874;;;;;;;;;;:::o;13847:442::-;13996:4;14034:2;14023:9;14019:18;14011:26;;14047:71;14115:1;14104:9;14100:17;14091:6;14047:71;:::i;:::-;14128:72;14196:2;14185:9;14181:18;14172:6;14128:72;:::i;:::-;14210;14278:2;14267:9;14263:18;14254:6;14210:72;:::i;:::-;13847:442;;;;;;:::o;14295:169::-;14435:21;14431:1;14423:6;14419:14;14412:45;14295:169;:::o;14470:366::-;14612:3;14633:67;14697:2;14692:3;14633:67;:::i;:::-;14626:74;;14709:93;14798:3;14709:93;:::i;:::-;14827:2;14822:3;14818:12;14811:19;;14470:366;;;:::o;14842:419::-;15008:4;15046:2;15035:9;15031:18;15023:26;;15095:9;15089:4;15085:20;15081:1;15070:9;15066:17;15059:47;15123:131;15249:4;15123:131;:::i;:::-;15115:139;;14842:419;;;:::o;15267:410::-;15307:7;15330:20;15348:1;15330:20;:::i;:::-;15325:25;;15364:20;15382:1;15364:20;:::i;:::-;15359:25;;15419:1;15416;15412:9;15441:30;15459:11;15441:30;:::i;:::-;15430:41;;15620:1;15611:7;15607:15;15604:1;15601:22;15581:1;15574:9;15554:83;15531:139;;15650:18;;:::i;:::-;15531:139;15315:362;15267:410;;;;:::o;15683:170::-;15823:22;15819:1;15811:6;15807:14;15800:46;15683:170;:::o;15859:366::-;16001:3;16022:67;16086:2;16081:3;16022:67;:::i;:::-;16015:74;;16098:93;16187:3;16098:93;:::i;:::-;16216:2;16211:3;16207:12;16200:19;;15859:366;;;:::o;16231:419::-;16397:4;16435:2;16424:9;16420:18;16412:26;;16484:9;16478:4;16474:20;16470:1;16459:9;16455:17;16448:47;16512:131;16638:4;16512:131;:::i;:::-;16504:139;;16231:419;;;:::o;16656:194::-;16696:4;16716:20;16734:1;16716:20;:::i;:::-;16711:25;;16750:20;16768:1;16750:20;:::i;:::-;16745:25;;16794:1;16791;16787:9;16779:17;;16818:1;16812:4;16809:11;16806:37;;;16823:18;;:::i;:::-;16806:37;16656:194;;;;:::o;16856:170::-;16996:22;16992:1;16984:6;16980:14;16973:46;16856:170;:::o;17032:366::-;17174:3;17195:67;17259:2;17254:3;17195:67;:::i;:::-;17188:74;;17271:93;17360:3;17271:93;:::i;:::-;17389:2;17384:3;17380:12;17373:19;;17032:366;;;:::o;17404:419::-;17570:4;17608:2;17597:9;17593:18;17585:26;;17657:9;17651:4;17647:20;17643:1;17632:9;17628:17;17621:47;17685:131;17811:4;17685:131;:::i;:::-;17677:139;;17404:419;;;:::o
Swarm Source
ipfs://bf6a45779229ea1e98d56e82f8abd823a4426eb4e4a4d783fc3c5c0cc047ed98
Loading...
Loading
Loading...
Loading
OVERVIEW
Sightsea is a decentralized social project, designed to connect users with “specialists” who have valuable knowledge and expertise to share.Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Token Allocations
GLMR
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| GLMR | 100.00% | $0.021175 | 0.0774 | $0.001639 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.