Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 117 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unstake | 19921910 | 651 days ago | IN | 0 ETH | 0.00212308 | ||||
| Unstake | 19921878 | 651 days ago | IN | 0 ETH | 0.001244 | ||||
| Unstake | 19224617 | 749 days ago | IN | 0 ETH | 0.00574656 | ||||
| Unstake | 19224350 | 749 days ago | IN | 0 ETH | 0.00746976 | ||||
| Stake | 19056327 | 773 days ago | IN | 0 ETH | 0.00122074 | ||||
| Unstake | 18945957 | 788 days ago | IN | 0 ETH | 0.00820705 | ||||
| Unstake | 18945865 | 788 days ago | IN | 0 ETH | 0.00383969 | ||||
| Stake | 18945853 | 788 days ago | IN | 0 ETH | 0.04067061 | ||||
| Unstake | 18945852 | 788 days ago | IN | 0 ETH | 0.00397066 | ||||
| Stake | 18124972 | 903 days ago | IN | 0 ETH | 0.00395304 | ||||
| Payout | 18124965 | 903 days ago | IN | 0 ETH | 0.00104074 | ||||
| Payout | 18124965 | 903 days ago | IN | 0 ETH | 0.00100746 | ||||
| Payout | 17973425 | 924 days ago | IN | 0 ETH | 0.0011876 | ||||
| Payout | 17973425 | 924 days ago | IN | 0 ETH | 0.00267966 | ||||
| Payout | 17973376 | 924 days ago | IN | 0 ETH | 0.0027538 | ||||
| Payout | 17691942 | 964 days ago | IN | 0 ETH | 0.00267431 | ||||
| Payout | 17384017 | 1007 days ago | IN | 0 ETH | 0.00303014 | ||||
| Payout | 17144948 | 1041 days ago | IN | 0 ETH | 0.00434271 | ||||
| Payout | 17144601 | 1041 days ago | IN | 0 ETH | 0.00480667 | ||||
| Payout | 17128241 | 1043 days ago | IN | 0 ETH | 0.00442118 | ||||
| Payout | 17114687 | 1045 days ago | IN | 0 ETH | 0.00105267 | ||||
| Stake | 17113678 | 1045 days ago | IN | 0 ETH | 0.00678482 | ||||
| Payout | 17063239 | 1052 days ago | IN | 0 ETH | 0.00344718 | ||||
| Payout | 17063234 | 1052 days ago | IN | 0 ETH | 0.00421435 | ||||
| Unstake | 17057208 | 1053 days ago | IN | 0 ETH | 0.00644528 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Transfer | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921910 | 651 days ago | 0 ETH | |||||
| Transfer | 19921878 | 651 days ago | 0 ETH | |||||
| Transfer From | 19921878 | 651 days ago | 0 ETH | |||||
| Transfer | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224617 | 749 days ago | 0 ETH | |||||
| Transfer | 19224350 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224350 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224350 | 749 days ago | 0 ETH | |||||
| Transfer From | 19224350 | 749 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AmmoStake
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-02-04
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: contracts/mamstaking.sol
pragma solidity ^0.8.6;
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
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 substraction 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;
}
}
}
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
contract AmmoStake is Ownable, IERC721Receiver, ReentrancyGuard {
using SafeMath for uint256;
IERC721 public mam;
IERC721 public mutant;
IERC20 public token;
struct Collection {
uint16[] ids;
uint256 numberStaked;
uint16[] remainingIds;
uint256 tokenStakedAt;
bool daily;
address owner;
}
mapping(uint16 => mapping(address => Collection)) public collection;
mapping(address => uint16) public collectionsByAddress;
mapping(uint16 => address) public collectionsById;
mapping(uint16 => uint256) public totalStakedByCollection;
mapping(address => bool) public blacklistedUsers;
uint256 public dayRate = 1;
uint256 public period = 45; //number of days
uint16 public collectionCount = 1;
uint256 public totalStaked;
uint256 public mutantStaked;
uint256 public amountPaid;
uint256 public decimals = 18;
bool public lockingPeriodEnforced = false;
bool public escapeHatchOpen = false;
event Staked(address indexed, uint256, uint16[]);
event Unstake(address indexed, uint256);
event Payout(address indexed, uint256);
event DayRateChange(uint256);
event PeriodChange(uint256);
constructor(address _token) {
token = IERC20(_token);
}
function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) {
return IERC721Receiver.onERC721Received.selector;
}
function addNewCollection(address _nft) external onlyOwner {
require(collectionsByAddress[_nft] == 0, "Collection already added");
collectionsByAddress[_nft] = collectionCount;
collectionsById[collectionCount] = _nft;
collectionCount++;
}
function getCollectionById(uint16 _id) external view returns (address){
return collectionsById[_id];
}
function getCollectionByAddress(address _addr) external view returns (uint16){
return collectionsByAddress[_addr];
}
function stake(uint16[] memory tokenIds, uint16 collectionId) external {
require(!blacklistedUsers[msg.sender], "User is blacklisted");
require(collectionsById[collectionId] != address(0), "Invalid collection Id");
IERC721 nft = IERC721(collectionsById[collectionId]);
uint256 quantity = tokenIds.length;
collection[collectionId][msg.sender].tokenStakedAt = block.timestamp;
collection[collectionId][msg.sender].numberStaked+= quantity;
collection[collectionId][msg.sender].owner = msg.sender;
collection[collectionId][msg.sender].daily = false;
totalStakedByCollection[collectionId]+= quantity;
totalStaked+=quantity;
for(uint8 i; i < tokenIds.length; i++) {
collection[collectionId][msg.sender].ids.push(tokenIds[i]);
nft.safeTransferFrom(msg.sender, address(this), tokenIds[i]);
}
emit Staked(msg.sender, quantity, tokenIds);
}
function calculateTime(address _owner, uint16 _type) public view returns (uint256) {
uint256 timeElapsed;
timeElapsed = block.timestamp - collection[_type][_owner].tokenStakedAt;
return timeElapsed;
}
function calculateTokens(address _owner, uint16 _type) external view returns (uint256) {
uint256 _payout;
uint256 time = calculateTime(_owner, _type);
_payout = dayRate * time * collection[_type][_owner].numberStaked;
uint256 totalPayout = _payout *(10**decimals);
return totalPayout.div(86400);
}
function unstakeById(address _owner, uint16 tokenId, uint16 _type) external nonReentrant {
require(!blacklistedUsers[msg.sender], "User is blacklisted");
require(collection[_type][_owner].owner == msg.sender, "Can't unstake someone else's nfts");
require(tokenId != 0, "tokenId cannot be zero");
IERC721 nft = IERC721(collectionsById[_type]);
bool exists = false;
uint256 time = calculateTime(_owner, _type);
uint256 _payout;
if(!collection[_type][_owner].daily && lockingPeriodEnforced) {
require(time >= period*86400, "Staking period has not ended");
}
for(uint8 i; i < collection[_type][_owner].ids.length; i++) {
if(collection[_type][_owner].ids[i] == tokenId) {
nft.transferFrom(address(this), msg.sender, tokenId);
delete collection[_type][_owner].ids[i];
exists = true;
}
}
if(exists) {
totalStaked--;
totalStakedByCollection[_type]--;
collection[_type][_owner].numberStaked--;
_payout = dayRate * time;
uint256 totalPayout = _payout *(10**decimals);
uint256 totalPayoutPS = totalPayout.div(86400);
amountPaid+= totalPayoutPS;
token.transfer(msg.sender, totalPayoutPS);
collection[_type][_owner].daily = true;
collection[_type][_owner].tokenStakedAt = block.timestamp;
emit Unstake(msg.sender, totalPayout);
} else {
revert("tokenId not staked or nonexistent");
}
}
function payout(address _owner, uint16 _type) external nonReentrant {
require(!blacklistedUsers[msg.sender], "User is blacklisted");
require(collection[_type][_owner].owner == msg.sender, "Can't initiate someone else's payout");
uint256 time = calculateTime(_owner, _type);
uint256 _payout = dayRate * time * collection[_type][_owner].numberStaked;
if(!collection[_type][_owner].daily && lockingPeriodEnforced) {
require(time >= period*86400, "Staking period has not ended");
}
uint256 totalPayout = _payout *(10**decimals);
uint256 totalPayoutPS = totalPayout.div(86400);
amountPaid+= totalPayoutPS;
token.transfer(_owner, totalPayoutPS);
collection[_type][_owner].daily = true;
collection[_type][_owner].tokenStakedAt = block.timestamp;
emit Payout(_owner, totalPayout);
}
function unstake(address _owner, uint16 _type) external nonReentrant {
require(!blacklistedUsers[msg.sender], "User is blacklisted");
require(collection[_type][_owner].owner == msg.sender, "Can't unstake someone else's nfts");
IERC721 nft = IERC721(collectionsById[_type]);
uint256 time = calculateTime(_owner, _type);
uint256 _payout = dayRate * time * collection[_type][_owner].numberStaked;
if(!collection[_type][_owner].daily && lockingPeriodEnforced) {
require(time >= period*86400, "Staking period has not ended");
}
for(uint8 i; i< collection[_type][_owner].ids.length; i++) {
if(collection[_type][_owner].ids[i] != 0) {
collection[_type][_owner].remainingIds.push(collection[_type][_owner].ids[i]);
}
}
for(uint8 i; i < collection[_type][_owner].remainingIds.length; i++) {
nft.transferFrom(address(this), msg.sender, collection[_type][_owner].remainingIds[i]);
}
uint256 totalPayout = _payout *(10**decimals);
uint256 totalPayoutPS = totalPayout.div(86400);
amountPaid+= totalPayoutPS;
token.transfer(msg.sender, totalPayoutPS);
totalStaked-=collection[_type][_owner].numberStaked;
totalStakedByCollection[_type] -= collection[_type][_owner].numberStaked;
delete collection[_type][_owner];
emit Unstake(msg.sender, totalPayoutPS);
}
function setTokenAddress(address _newToken) external onlyOwner {
token = IERC20(_newToken);
}
function setDayRate(uint256 _newRate) external onlyOwner {
require(_newRate != 0, "rate cannot be zero");
dayRate = _newRate;
emit DayRateChange(_newRate);
}
function enforceLockingPeriod(bool _state) external onlyOwner {
lockingPeriodEnforced = _state;
}
/* This function can be triggered if for some reason holders are unable to
unstake their nfts.*/
function openEscapeHatch(bool _state) external onlyOwner {
escapeHatchOpen = _state;
}
/* EscapeHatchWithdrawal should only be called as a last resort if the contract is hacked or compromised
* in any way. It is designed to allow the user to withdraw NFTs by id at minimum cost and without regard
* for updating states or any other actions that would cause the function to be more expensive. Only use
* this function if you do not plan on using this contract any further.
*Note: escapeHatchOpen must first be set to true by the owner.
*@param _owner - user address
*@param _type - collectionId
*@param _ids - array containing tokenIds belonging to user
*/
function escapeHatchWithdrawal(address _owner, uint8 _type, uint16[] calldata _ids) external {
require(escapeHatchOpen, "Escape hatch is closed");
IERC721 nft = IERC721(collectionsById[_type]);
require(collection[_type][_owner].owner == msg.sender, "Can't unstake someone else's nft");
for(uint8 i; i < _ids.length; i++) {
nft.transferFrom(address(this), _owner, _ids[i]);
}
}
function setPeriod(uint256 _time) external onlyOwner {
period = _time;
emit PeriodChange(_time);
}
function getEligibility(address _owner, uint8 _type) external view returns(bool) {
bool eligible;
eligible = collection[_type][_owner].daily;
return eligible;
}
function setRewardEligible(address _owner, uint8 _type, bool _state) external onlyOwner {
collection[_type][_owner].daily = _state;
}
function getNumberStaked(address _owner, uint16 _type) external view returns (uint256){
return collection[_type][_owner].numberStaked;
}
function getIds(address _owner, uint16 _type) external view returns (uint16[] memory){
return collection[_type][_owner].ids;
}
function blacklistUser(address _owner) external onlyOwner {
blacklistedUsers[_owner] = true;
}
function removeFromBlacklist(address _owner) external onlyOwner {
blacklistedUsers[_owner] = false;
}
function emergencyTokenWithdraw() external onlyOwner {
uint256 balance = token.balanceOf(address(this));
token.transfer(msg.sender, balance );
}
//This is to remove the native currency of the network (e.g. ETH, BNB, MATIC, etc.)
function emergencyWithdraw() public onlyOwner nonReentrant {
// This will payout the owner the contract balance.
// Do not remove this otherwise you will not be able to withdraw the funds.
// =============================================================================
(bool os, ) = payable(owner()).call{value: address(this).balance}("");
require(os);
// =============================================================================
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"DayRateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Payout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PeriodChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint16[]","name":"","type":"uint16[]"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Unstake","type":"event"},{"inputs":[{"internalType":"address","name":"_nft","type":"address"}],"name":"addNewCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"amountPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"blacklistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklistedUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"calculateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"calculateTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"address","name":"","type":"address"}],"name":"collection","outputs":[{"internalType":"uint256","name":"numberStaked","type":"uint256"},{"internalType":"uint256","name":"tokenStakedAt","type":"uint256"},{"internalType":"bool","name":"daily","type":"bool"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collectionsByAddress","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"collectionsById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dayRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyTokenWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"enforceLockingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"escapeHatchOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"uint16[]","name":"_ids","type":"uint16[]"}],"name":"escapeHatchWithdrawal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getCollectionByAddress","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getCollectionById","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint8","name":"_type","type":"uint8"}],"name":"getEligibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"getIds","outputs":[{"internalType":"uint16[]","name":"","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"getNumberStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockingPeriodEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mam","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mutant","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mutantStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"openEscapeHatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRate","type":"uint256"}],"name":"setDayRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint8","name":"_type","type":"uint8"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRewardEligible","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newToken","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"tokenIds","type":"uint16[]"},{"internalType":"uint16","name":"collectionId","type":"uint16"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"totalStakedByCollection","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":"_owner","type":"address"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"uint16","name":"_type","type":"uint16"}],"name":"unstakeById","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526001600a819055602d600b55600c805461ffff19908116909217905560126010556011805490911690553480156200003b57600080fd5b5060405162002b7c38038062002b7c8339810160408190526200005e91620000e3565b620000693362000093565b60018055600480546001600160a01b0319166001600160a01b039290921691909117905562000115565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215620000f657600080fd5b81516001600160a01b03811681146200010e57600080fd5b9392505050565b612a5780620001256000396000f3fe60806040526004361061026b5760003560e01c8063817b1cd211610144578063db2e21bc116100b6578063f002804a1161007a578063f002804a14610854578063f2fde38b1461088e578063fae6c434146108ae578063fc0c546a146108ce578063fcbca456146108ee578063fde8f8bf1461090e57600080fd5b8063db2e21bc14610779578063ddc9cb3f1461078e578063e5884b07146107db578063e74cb9c7146107f5578063ef78d4fd1461083e57600080fd5b8063b416022e11610108578063b416022e1461062e578063ce7a794f1461064e578063d113d28b146106da578063d2a53c3d146106fa578063d57f966b1461071a578063da31ed701461074857600080fd5b8063817b1cd2146105a55780638da5cb5b146105bb57806393aefa76146105d9578063a632e6f8146105ee578063a8547e491461060e57600080fd5b806332cb29f7116101dd57806350cff695116101a157806350cff695146104e457806351c64e0814610504578063537df3b61461052457806368a3418914610544578063715018a6146105715780637ad7b1c91461058657600080fd5b806332cb29f7146104585780634044956c146104785780634524280b1461048e57806345838841146104ae5780634d586b42146104ce57600080fd5b8063150b7a021161022f578063150b7a021461034c578063216340c31461039157806322c0aec7146103b557806326a4e8d2146103f55780632ff9d78914610415578063313ce5671461044257600080fd5b8063032c0ba4146102775780630bbc2e15146102995780630f3a9f65146102b957806310a82de9146102d957806311009b421461032c57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b506102976102923660046122e4565b610948565b005b3480156102a557600080fd5b506102976102b4366004612387565b610adb565b3480156102c557600080fd5b506102976102d43660046123ba565b610dc0565b3480156102e557600080fd5b5061030f6102f43660046123d3565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561033857600080fd5b5060035461030f906001600160a01b031681565b34801561035857600080fd5b506103786103673660046123ee565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610323565b34801561039d57600080fd5b506103a7600f5481565b604051908152602001610323565b3480156103c157600080fd5b506103e56103d0366004612489565b60096020526000908152604090205460ff1681565b6040519015158152602001610323565b34801561040157600080fd5b50610297610410366004612489565b610e04565b34801561042157600080fd5b50610435610430366004612387565b610e2e565b60405161032391906124e3565b34801561044e57600080fd5b506103a760105481565b34801561046457600080fd5b5060025461030f906001600160a01b031681565b34801561048457600080fd5b506103a7600e5481565b34801561049a57600080fd5b506102976104a9366004612489565b610ed0565b3480156104ba57600080fd5b506102976104c9366004612504565b610fbe565b3480156104da57600080fd5b506103a7600a5481565b3480156104f057600080fd5b506102976104ff366004612521565b610fe0565b34801561051057600080fd5b5061029761051f36600461257a565b611507565b34801561053057600080fd5b5061029761053f366004612489565b6117d0565b34801561055057600080fd5b506103a761055f3660046123d3565b60086020526000908152604090205481565b34801561057d57600080fd5b506102976117f9565b34801561059257600080fd5b506011546103e590610100900460ff1681565b3480156105b157600080fd5b506103a7600d5481565b3480156105c757600080fd5b506000546001600160a01b031661030f565b3480156105e557600080fd5b5061029761180d565b3480156105fa57600080fd5b506103a7610609366004612387565b611906565b34801561061a57600080fd5b50610297610629366004612651565b611945565b34801561063a57600080fd5b506103a7610649366004612387565b61198d565b34801561065a57600080fd5b506106ab610669366004612698565b600560209081526000928352604080842090915290825290206001810154600382015460049092015490919060ff81169061010090046001600160a01b031684565b604080519485526020850193909352901515918301919091526001600160a01b03166060820152608001610323565b3480156106e657600080fd5b506102976106f5366004612387565b611a19565b34801561070657600080fd5b506102976107153660046123ba565b611fe8565b34801561072657600080fd5b50600c546107359061ffff1681565b60405161ffff9091168152602001610323565b34801561075457600080fd5b50610735610763366004612489565b60066020526000908152604090205461ffff1681565b34801561078557600080fd5b5061029761206b565b34801561079a57600080fd5b506103e56107a93660046126c2565b60ff80821660009081526005602090815260408083206001600160a01b03871684529091529020600401541692915050565b3480156107e757600080fd5b506011546103e59060ff1681565b34801561080157600080fd5b506103a7610810366004612387565b61ffff1660009081526005602090815260408083206001600160a01b03949094168352929052206001015490565b34801561084a57600080fd5b506103a7600b5481565b34801561086057600080fd5b5061073561086f366004612489565b6001600160a01b031660009081526006602052604090205461ffff1690565b34801561089a57600080fd5b506102976108a9366004612489565b612101565b3480156108ba57600080fd5b506102976108c9366004612504565b61217a565b3480156108da57600080fd5b5060045461030f906001600160a01b031681565b3480156108fa57600080fd5b50610297610909366004612489565b612195565b34801561091a57600080fd5b5061030f6109293660046123d3565b61ffff166000908152600760205260409020546001600160a01b031690565b601154610100900460ff1661099d5760405162461bcd60e51b8152602060048201526016602482015275115cd8d85c19481a185d18da081a5cc818db1bdcd95960521b60448201526064015b60405180910390fd5b60ff8316600090815260076020908152604080832054600583528184206001600160a01b0389811686529352922060040154918116916101009004163314610a275760405162461bcd60e51b815260206004820181905260248201527f43616e277420756e7374616b6520736f6d656f6e6520656c73652773206e66746044820152606401610994565b60005b60ff8116831115610ad357816001600160a01b03166323b872dd308887878660ff16818110610a5b57610a5b6126ec565b9050602002016020810190610a7091906123d3565b6040518463ffffffff1660e01b8152600401610a8e93929190612702565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b505050508080610acb9061273f565b915050610a2a565b505050505050565b600260015403610afd5760405162461bcd60e51b81526004016109949061275e565b60026001553360009081526009602052604090205460ff1615610b325760405162461bcd60e51b815260040161099490612795565b61ffff811660009081526005602090815260408083206001600160a01b0386811685529252909120600401546101009004163314610bbe5760405162461bcd60e51b8152602060048201526024808201527f43616e277420696e69746961746520736f6d656f6e6520656c736527732070616044820152631e5bdd5d60e21b6064820152608401610994565b6000610bca8383611906565b61ffff831660009081526005602090815260408083206001600160a01b0388168452909152812060010154600a549293509091610c089084906127c2565b610c1291906127c2565b61ffff841660009081526005602090815260408083206001600160a01b038916845290915290206004015490915060ff16158015610c52575060115460ff165b15610c8657600b54610c6790620151806127c2565b821015610c865760405162461bcd60e51b8152600401610994906127e1565b6000601054600a610c9791906128fc565b610ca190836127c2565b90506000610cb282620151806121c1565b905080600f6000828254610cc69190612908565b90915550506004805460405163a9059cbb60e01b81526001600160a01b03898116938201939093526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d449190612920565b5061ffff851660009081526005602090815260408083206001600160a01b038a168085529083529281902060048101805460ff1916600117905542600390910155518481527f5afeca38b2064c23a692c4cf353015d80ab3ecc417b4f893f372690c11fbd9a6910160405180910390a250506001805550505050565b610dc86121d4565b600b8190556040518181527faf2decb129b74e79e086ab3d8c7bb0399bfba530c01e74fe4130ab9784e11557906020015b60405180910390a150565b610e0c6121d4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff811660009081526005602090815260408083206001600160a01b0386168452825291829020805483518184028101840190945280845260609392830182828015610ec257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610e895790505b505050505090505b92915050565b610ed86121d4565b6001600160a01b03811660009081526006602052604090205461ffff1615610f425760405162461bcd60e51b815260206004820152601860248201527f436f6c6c656374696f6e20616c726561647920616464656400000000000000006044820152606401610994565b600c80546001600160a01b0383166000818152600660209081526040808320805461ffff191661ffff9687161790558554851683526007909152812080546001600160a01b03191690921790915582549091169190610fa08361293d565b91906101000a81548161ffff021916908361ffff1602179055505050565b610fc66121d4565b601180549115156101000261ff0019909216919091179055565b6002600154036110025760405162461bcd60e51b81526004016109949061275e565b60026001553360009081526009602052604090205460ff16156110375760405162461bcd60e51b815260040161099490612795565b61ffff811660009081526005602090815260408083206001600160a01b03878116855292529091206004015461010090041633146110875760405162461bcd60e51b81526004016109949061295e565b8161ffff166000036110d45760405162461bcd60e51b8152602060048201526016602482015275746f6b656e49642063616e6e6f74206265207a65726f60501b6044820152606401610994565b61ffff81166000908152600760205260408120546001600160a01b031690806110fd8685611906565b61ffff851660009081526005602090815260408083206001600160a01b038b1684529091528120600401549192509060ff1615801561113e575060115460ff165b1561117257600b5461115390620151806127c2565b8210156111725760405162461bcd60e51b8152600401610994906127e1565b60005b61ffff861660009081526005602090815260408083206001600160a01b038c16845290915290205460ff821610156112ea5761ffff86811660009081526005602090815260408083206001600160a01b038d168452909152902080549189169160ff84169081106111e8576111e86126ec565b60009182526020909120601082040154600f9091166002026101000a900461ffff16036112d8576040516323b872dd60e01b81526001600160a01b038616906323b872dd9061123f90309033908c90600401612702565b600060405180830381600087803b15801561125957600080fd5b505af115801561126d573d6000803e3d6000fd5b5050505061ffff861660009081526005602090815260408083206001600160a01b038c1684529091529020805460ff83169081106112ad576112ad6126ec565b90600052602060002090601091828204019190066002026101000a81549061ffff0219169055600193505b806112e28161273f565b915050611175565b5082156114a857600d80549060006113018361299f565b909155505061ffff851660009081526008602052604081208054916113258361299f565b909155505061ffff851660009081526005602090815260408083206001600160a01b038b16845290915281206001018054916113608361299f565b919050555081600a5461137391906127c2565b90506000601054600a61138691906128fc565b61139090836127c2565b905060006113a182620151806121c1565b905080600f60008282546113b59190612908565b90915550506004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561140c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114309190612920565b5061ffff871660009081526005602090815260408083206001600160a01b038d16845282529182902060048101805460ff1916600117905542600390910155905183815233917f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd910160405180910390a250506114fa565b60405162461bcd60e51b815260206004820152602160248201527f746f6b656e4964206e6f74207374616b6564206f72206e6f6e6578697374656e6044820152601d60fa1b6064820152608401610994565b5050600180555050505050565b3360009081526009602052604090205460ff16156115375760405162461bcd60e51b815260040161099490612795565b61ffff81166000908152600760205260409020546001600160a01b03166115985760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590818dbdb1b1958dd1a5bdb881259605a1b6044820152606401610994565b61ffff811660009081526007602090815260408083205485516005845282852033865290935290832042600382015560010180546001600160a01b039092169383926115e5908490612908565b909155505061ffff831660008181526005602090815260408083203380855290835281842060040180546001600160a81b03191661010090920260ff1916919091179055928252600890529081208054839290611643908490612908565b9250508190555080600d600082825461165c9190612908565b90915550600090505b84518160ff1610156117865761ffff8416600090815260056020908152604080832033845290915290208551869060ff84169081106116a6576116a66126ec565b602002602001015190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550826001600160a01b03166342842e0e3330888560ff168151811061171b5761171b6126ec565b60200260200101516040518463ffffffff1660e01b815260040161174193929190612702565b600060405180830381600087803b15801561175b57600080fd5b505af115801561176f573d6000803e3d6000fd5b50505050808061177e9061273f565b915050611665565b50336001600160a01b03167f378577f8668646d27a377daa5740277a94a6458000f71232d9cffb4e9e6863f582866040516117c29291906129b6565b60405180910390a250505050565b6117d86121d4565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6118016121d4565b61180b600061222e565b565b6118156121d4565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188791906129cf565b6004805460405163a9059cbb60e01b81523392810192909252602482018390529192506001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156118de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119029190612920565b5050565b61ffff811660009081526005602090815260408083206001600160a01b0386168452909152812060030154819061193d90426129e8565b949350505050565b61194d6121d4565b60ff90911660009081526005602090815260408083206001600160a01b03909516835293905291909120600401805491151560ff19909216919091179055565b600080600061199c8585611906565b61ffff851660009081526005602090815260408083206001600160a01b038a168452909152902060010154600a54919250906119d99083906127c2565b6119e391906127c2565b91506000601054600a6119f691906128fc565b611a0090846127c2565b9050611a0f81620151806121c1565b9695505050505050565b600260015403611a3b5760405162461bcd60e51b81526004016109949061275e565b60026001553360009081526009602052604090205460ff1615611a705760405162461bcd60e51b815260040161099490612795565b61ffff811660009081526005602090815260408083206001600160a01b0386811685529252909120600401546101009004163314611ac05760405162461bcd60e51b81526004016109949061295e565b61ffff81166000908152600760205260408120546001600160a01b031690611ae88484611906565b61ffff841660009081526005602090815260408083206001600160a01b0389168452909152812060010154600a549293509091611b269084906127c2565b611b3091906127c2565b61ffff851660009081526005602090815260408083206001600160a01b038a16845290915290206004015490915060ff16158015611b70575060115460ff165b15611ba457600b54611b8590620151806127c2565b821015611ba45760405162461bcd60e51b8152600401610994906127e1565b60005b61ffff851660009081526005602090815260408083206001600160a01b038a16845290915290205460ff82161015611cea5761ffff851660009081526005602090815260408083206001600160a01b038a1684529091529020805460ff8316908110611c1557611c156126ec565b60009182526020909120601082040154600f9091166002026101000a900461ffff1615611cd85761ffff851660009081526005602090815260408083206001600160a01b038a1684529091529020805460028201919060ff8416908110611c7e57611c7e6126ec565b600091825260208083206010808404909101548554600181018755958552919093209284049092018054600f948516600290810261010090810a61ffff9790951691909102900a9093048416820291909302199091161790555b80611ce28161273f565b915050611ba7565b5060005b61ffff851660009081526005602090815260408083206001600160a01b038a16845290915290206002015460ff82161015611df95761ffff851660009081526005602090815260408083206001600160a01b038a8116855292529091206002018054918616916323b872dd91309133919060ff8716908110611d7257611d726126ec565b90600052602060002090601091828204019190066002029054906101000a900461ffff166040518463ffffffff1660e01b8152600401611db493929190612702565b600060405180830381600087803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b505050508080611df19061273f565b915050611cee565b506000601054600a611e0b91906128fc565b611e1590836127c2565b90506000611e2682620151806121c1565b905080600f6000828254611e3a9190612908565b90915550506004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb59190612920565b5061ffff861660009081526005602090815260408083206001600160a01b038b168452909152812060010154600d805491929091611ef49084906129e8565b909155505061ffff861660008181526005602090815260408083206001600160a01b038c168452825280832060010154938352600890915281208054909190611f3e9084906129e8565b909155505061ffff861660009081526005602090815260408083206001600160a01b038b168452909152812090611f75828261227e565b6001820160009055600282016000611f8d919061227e565b506000600382015560040180546001600160a81b031916905560405181815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd9060200160405180910390a25050600180555050505050565b611ff06121d4565b806000036120365760405162461bcd60e51b8152602060048201526013602482015272726174652063616e6e6f74206265207a65726f60681b6044820152606401610994565b600a8190556040518181527f6f0cf98557544d5c51f3f47796426f05f632ff4ab790cb5184b14ea09004037490602001610df9565b6120736121d4565b6002600154036120955760405162461bcd60e51b81526004016109949061275e565b6002600155600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146120e7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ec565b606091505b50509050806120fa57600080fd5b5060018055565b6121096121d4565b6001600160a01b03811661216e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610994565b6121778161222e565b50565b6121826121d4565b6011805460ff1916911515919091179055565b61219d6121d4565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006121cd82846129ff565b9392505050565b6000546001600160a01b0316331461180b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b50805460008255600f01601090049060005260206000209081019061217791905b808211156122b3576000815560010161229f565b5090565b80356001600160a01b03811681146122ce57600080fd5b919050565b803560ff811681146122ce57600080fd5b600080600080606085870312156122fa57600080fd5b612303856122b7565b9350612311602086016122d3565b9250604085013567ffffffffffffffff8082111561232e57600080fd5b818701915087601f83011261234257600080fd5b81358181111561235157600080fd5b8860208260051b850101111561236657600080fd5b95989497505060200194505050565b803561ffff811681146122ce57600080fd5b6000806040838503121561239a57600080fd5b6123a3836122b7565b91506123b160208401612375565b90509250929050565b6000602082840312156123cc57600080fd5b5035919050565b6000602082840312156123e557600080fd5b6121cd82612375565b60008060008060006080868803121561240657600080fd5b61240f866122b7565b945061241d602087016122b7565b935060408601359250606086013567ffffffffffffffff8082111561244157600080fd5b818801915088601f83011261245557600080fd5b81358181111561246457600080fd5b89602082850101111561247657600080fd5b9699959850939650602001949392505050565b60006020828403121561249b57600080fd5b6121cd826122b7565b600081518084526020808501945080840160005b838110156124d857815161ffff16875295820195908201906001016124b8565b509495945050505050565b6020815260006121cd60208301846124a4565b801515811461217757600080fd5b60006020828403121561251657600080fd5b81356121cd816124f6565b60008060006060848603121561253657600080fd5b61253f846122b7565b925061254d60208501612375565b915061255b60408501612375565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561258d57600080fd5b823567ffffffffffffffff808211156125a557600080fd5b818501915085601f8301126125b957600080fd5b81356020828211156125cd576125cd612564565b8160051b604051601f19603f830116810181811086821117156125f2576125f2612564565b60405292835281830193508481018201928984111561261057600080fd5b948201945b838610156126355761262686612375565b85529482019493820193612615565b96506126449050878201612375565b9450505050509250929050565b60008060006060848603121561266657600080fd5b61266f846122b7565b925061267d602085016122d3565b9150604084013561268d816124f6565b809150509250925092565b600080604083850312156126ab57600080fd5b6126b483612375565b91506123b1602084016122b7565b600080604083850312156126d557600080fd5b6126de836122b7565b91506123b1602084016122d3565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03938416815291909216602082015261ffff909116604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361275557612755612729565b60010192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260139082015272155cd95c881a5cc8189b1858dadb1a5cdd1959606a1b604082015260600190565b60008160001904831182151516156127dc576127dc612729565b500290565b6020808252601c908201527f5374616b696e6720706572696f6420686173206e6f7420656e64656400000000604082015260600190565b600181815b8085111561285357816000190482111561283957612839612729565b8085161561284657918102915b93841c939080029061281d565b509250929050565b60008261286a57506001610eca565b8161287757506000610eca565b816001811461288d5760028114612897576128b3565b6001915050610eca565b60ff8411156128a8576128a8612729565b50506001821b610eca565b5060208310610133831016604e8410600b84101617156128d6575081810a610eca565b6128e08383612818565b80600019048211156128f4576128f4612729565b029392505050565b60006121cd838361285b565b6000821982111561291b5761291b612729565b500190565b60006020828403121561293257600080fd5b81516121cd816124f6565b600061ffff80831681810361295457612954612729565b6001019392505050565b60208082526021908201527f43616e277420756e7374616b6520736f6d656f6e6520656c73652773206e66746040820152607360f81b606082015260800190565b6000816129ae576129ae612729565b506000190190565b82815260406020820152600061193d60408301846124a4565b6000602082840312156129e157600080fd5b5051919050565b6000828210156129fa576129fa612729565b500390565b600082612a1c57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212208287f14f5b26c49c433ac0055df73a2976eb80fb3e83d3394c15678713c06ac864736f6c634300080d0033000000000000000000000000956ad9336f47d9a17d422e4839a602c55b676501
Deployed Bytecode
0x60806040526004361061026b5760003560e01c8063817b1cd211610144578063db2e21bc116100b6578063f002804a1161007a578063f002804a14610854578063f2fde38b1461088e578063fae6c434146108ae578063fc0c546a146108ce578063fcbca456146108ee578063fde8f8bf1461090e57600080fd5b8063db2e21bc14610779578063ddc9cb3f1461078e578063e5884b07146107db578063e74cb9c7146107f5578063ef78d4fd1461083e57600080fd5b8063b416022e11610108578063b416022e1461062e578063ce7a794f1461064e578063d113d28b146106da578063d2a53c3d146106fa578063d57f966b1461071a578063da31ed701461074857600080fd5b8063817b1cd2146105a55780638da5cb5b146105bb57806393aefa76146105d9578063a632e6f8146105ee578063a8547e491461060e57600080fd5b806332cb29f7116101dd57806350cff695116101a157806350cff695146104e457806351c64e0814610504578063537df3b61461052457806368a3418914610544578063715018a6146105715780637ad7b1c91461058657600080fd5b806332cb29f7146104585780634044956c146104785780634524280b1461048e57806345838841146104ae5780634d586b42146104ce57600080fd5b8063150b7a021161022f578063150b7a021461034c578063216340c31461039157806322c0aec7146103b557806326a4e8d2146103f55780632ff9d78914610415578063313ce5671461044257600080fd5b8063032c0ba4146102775780630bbc2e15146102995780630f3a9f65146102b957806310a82de9146102d957806311009b421461032c57600080fd5b3661027257005b600080fd5b34801561028357600080fd5b506102976102923660046122e4565b610948565b005b3480156102a557600080fd5b506102976102b4366004612387565b610adb565b3480156102c557600080fd5b506102976102d43660046123ba565b610dc0565b3480156102e557600080fd5b5061030f6102f43660046123d3565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561033857600080fd5b5060035461030f906001600160a01b031681565b34801561035857600080fd5b506103786103673660046123ee565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610323565b34801561039d57600080fd5b506103a7600f5481565b604051908152602001610323565b3480156103c157600080fd5b506103e56103d0366004612489565b60096020526000908152604090205460ff1681565b6040519015158152602001610323565b34801561040157600080fd5b50610297610410366004612489565b610e04565b34801561042157600080fd5b50610435610430366004612387565b610e2e565b60405161032391906124e3565b34801561044e57600080fd5b506103a760105481565b34801561046457600080fd5b5060025461030f906001600160a01b031681565b34801561048457600080fd5b506103a7600e5481565b34801561049a57600080fd5b506102976104a9366004612489565b610ed0565b3480156104ba57600080fd5b506102976104c9366004612504565b610fbe565b3480156104da57600080fd5b506103a7600a5481565b3480156104f057600080fd5b506102976104ff366004612521565b610fe0565b34801561051057600080fd5b5061029761051f36600461257a565b611507565b34801561053057600080fd5b5061029761053f366004612489565b6117d0565b34801561055057600080fd5b506103a761055f3660046123d3565b60086020526000908152604090205481565b34801561057d57600080fd5b506102976117f9565b34801561059257600080fd5b506011546103e590610100900460ff1681565b3480156105b157600080fd5b506103a7600d5481565b3480156105c757600080fd5b506000546001600160a01b031661030f565b3480156105e557600080fd5b5061029761180d565b3480156105fa57600080fd5b506103a7610609366004612387565b611906565b34801561061a57600080fd5b50610297610629366004612651565b611945565b34801561063a57600080fd5b506103a7610649366004612387565b61198d565b34801561065a57600080fd5b506106ab610669366004612698565b600560209081526000928352604080842090915290825290206001810154600382015460049092015490919060ff81169061010090046001600160a01b031684565b604080519485526020850193909352901515918301919091526001600160a01b03166060820152608001610323565b3480156106e657600080fd5b506102976106f5366004612387565b611a19565b34801561070657600080fd5b506102976107153660046123ba565b611fe8565b34801561072657600080fd5b50600c546107359061ffff1681565b60405161ffff9091168152602001610323565b34801561075457600080fd5b50610735610763366004612489565b60066020526000908152604090205461ffff1681565b34801561078557600080fd5b5061029761206b565b34801561079a57600080fd5b506103e56107a93660046126c2565b60ff80821660009081526005602090815260408083206001600160a01b03871684529091529020600401541692915050565b3480156107e757600080fd5b506011546103e59060ff1681565b34801561080157600080fd5b506103a7610810366004612387565b61ffff1660009081526005602090815260408083206001600160a01b03949094168352929052206001015490565b34801561084a57600080fd5b506103a7600b5481565b34801561086057600080fd5b5061073561086f366004612489565b6001600160a01b031660009081526006602052604090205461ffff1690565b34801561089a57600080fd5b506102976108a9366004612489565b612101565b3480156108ba57600080fd5b506102976108c9366004612504565b61217a565b3480156108da57600080fd5b5060045461030f906001600160a01b031681565b3480156108fa57600080fd5b50610297610909366004612489565b612195565b34801561091a57600080fd5b5061030f6109293660046123d3565b61ffff166000908152600760205260409020546001600160a01b031690565b601154610100900460ff1661099d5760405162461bcd60e51b8152602060048201526016602482015275115cd8d85c19481a185d18da081a5cc818db1bdcd95960521b60448201526064015b60405180910390fd5b60ff8316600090815260076020908152604080832054600583528184206001600160a01b0389811686529352922060040154918116916101009004163314610a275760405162461bcd60e51b815260206004820181905260248201527f43616e277420756e7374616b6520736f6d656f6e6520656c73652773206e66746044820152606401610994565b60005b60ff8116831115610ad357816001600160a01b03166323b872dd308887878660ff16818110610a5b57610a5b6126ec565b9050602002016020810190610a7091906123d3565b6040518463ffffffff1660e01b8152600401610a8e93929190612702565b600060405180830381600087803b158015610aa857600080fd5b505af1158015610abc573d6000803e3d6000fd5b505050508080610acb9061273f565b915050610a2a565b505050505050565b600260015403610afd5760405162461bcd60e51b81526004016109949061275e565b60026001553360009081526009602052604090205460ff1615610b325760405162461bcd60e51b815260040161099490612795565b61ffff811660009081526005602090815260408083206001600160a01b0386811685529252909120600401546101009004163314610bbe5760405162461bcd60e51b8152602060048201526024808201527f43616e277420696e69746961746520736f6d656f6e6520656c736527732070616044820152631e5bdd5d60e21b6064820152608401610994565b6000610bca8383611906565b61ffff831660009081526005602090815260408083206001600160a01b0388168452909152812060010154600a549293509091610c089084906127c2565b610c1291906127c2565b61ffff841660009081526005602090815260408083206001600160a01b038916845290915290206004015490915060ff16158015610c52575060115460ff165b15610c8657600b54610c6790620151806127c2565b821015610c865760405162461bcd60e51b8152600401610994906127e1565b6000601054600a610c9791906128fc565b610ca190836127c2565b90506000610cb282620151806121c1565b905080600f6000828254610cc69190612908565b90915550506004805460405163a9059cbb60e01b81526001600160a01b03898116938201939093526024810184905291169063a9059cbb906044016020604051808303816000875af1158015610d20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d449190612920565b5061ffff851660009081526005602090815260408083206001600160a01b038a168085529083529281902060048101805460ff1916600117905542600390910155518481527f5afeca38b2064c23a692c4cf353015d80ab3ecc417b4f893f372690c11fbd9a6910160405180910390a250506001805550505050565b610dc86121d4565b600b8190556040518181527faf2decb129b74e79e086ab3d8c7bb0399bfba530c01e74fe4130ab9784e11557906020015b60405180910390a150565b610e0c6121d4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff811660009081526005602090815260408083206001600160a01b0386168452825291829020805483518184028101840190945280845260609392830182828015610ec257602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610e895790505b505050505090505b92915050565b610ed86121d4565b6001600160a01b03811660009081526006602052604090205461ffff1615610f425760405162461bcd60e51b815260206004820152601860248201527f436f6c6c656374696f6e20616c726561647920616464656400000000000000006044820152606401610994565b600c80546001600160a01b0383166000818152600660209081526040808320805461ffff191661ffff9687161790558554851683526007909152812080546001600160a01b03191690921790915582549091169190610fa08361293d565b91906101000a81548161ffff021916908361ffff1602179055505050565b610fc66121d4565b601180549115156101000261ff0019909216919091179055565b6002600154036110025760405162461bcd60e51b81526004016109949061275e565b60026001553360009081526009602052604090205460ff16156110375760405162461bcd60e51b815260040161099490612795565b61ffff811660009081526005602090815260408083206001600160a01b03878116855292529091206004015461010090041633146110875760405162461bcd60e51b81526004016109949061295e565b8161ffff166000036110d45760405162461bcd60e51b8152602060048201526016602482015275746f6b656e49642063616e6e6f74206265207a65726f60501b6044820152606401610994565b61ffff81166000908152600760205260408120546001600160a01b031690806110fd8685611906565b61ffff851660009081526005602090815260408083206001600160a01b038b1684529091528120600401549192509060ff1615801561113e575060115460ff165b1561117257600b5461115390620151806127c2565b8210156111725760405162461bcd60e51b8152600401610994906127e1565b60005b61ffff861660009081526005602090815260408083206001600160a01b038c16845290915290205460ff821610156112ea5761ffff86811660009081526005602090815260408083206001600160a01b038d168452909152902080549189169160ff84169081106111e8576111e86126ec565b60009182526020909120601082040154600f9091166002026101000a900461ffff16036112d8576040516323b872dd60e01b81526001600160a01b038616906323b872dd9061123f90309033908c90600401612702565b600060405180830381600087803b15801561125957600080fd5b505af115801561126d573d6000803e3d6000fd5b5050505061ffff861660009081526005602090815260408083206001600160a01b038c1684529091529020805460ff83169081106112ad576112ad6126ec565b90600052602060002090601091828204019190066002026101000a81549061ffff0219169055600193505b806112e28161273f565b915050611175565b5082156114a857600d80549060006113018361299f565b909155505061ffff851660009081526008602052604081208054916113258361299f565b909155505061ffff851660009081526005602090815260408083206001600160a01b038b16845290915281206001018054916113608361299f565b919050555081600a5461137391906127c2565b90506000601054600a61138691906128fc565b61139090836127c2565b905060006113a182620151806121c1565b905080600f60008282546113b59190612908565b90915550506004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561140c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114309190612920565b5061ffff871660009081526005602090815260408083206001600160a01b038d16845282529182902060048101805460ff1916600117905542600390910155905183815233917f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd910160405180910390a250506114fa565b60405162461bcd60e51b815260206004820152602160248201527f746f6b656e4964206e6f74207374616b6564206f72206e6f6e6578697374656e6044820152601d60fa1b6064820152608401610994565b5050600180555050505050565b3360009081526009602052604090205460ff16156115375760405162461bcd60e51b815260040161099490612795565b61ffff81166000908152600760205260409020546001600160a01b03166115985760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590818dbdb1b1958dd1a5bdb881259605a1b6044820152606401610994565b61ffff811660009081526007602090815260408083205485516005845282852033865290935290832042600382015560010180546001600160a01b039092169383926115e5908490612908565b909155505061ffff831660008181526005602090815260408083203380855290835281842060040180546001600160a81b03191661010090920260ff1916919091179055928252600890529081208054839290611643908490612908565b9250508190555080600d600082825461165c9190612908565b90915550600090505b84518160ff1610156117865761ffff8416600090815260056020908152604080832033845290915290208551869060ff84169081106116a6576116a66126ec565b602002602001015190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff160217905550826001600160a01b03166342842e0e3330888560ff168151811061171b5761171b6126ec565b60200260200101516040518463ffffffff1660e01b815260040161174193929190612702565b600060405180830381600087803b15801561175b57600080fd5b505af115801561176f573d6000803e3d6000fd5b50505050808061177e9061273f565b915050611665565b50336001600160a01b03167f378577f8668646d27a377daa5740277a94a6458000f71232d9cffb4e9e6863f582866040516117c29291906129b6565b60405180910390a250505050565b6117d86121d4565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6118016121d4565b61180b600061222e565b565b6118156121d4565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611863573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188791906129cf565b6004805460405163a9059cbb60e01b81523392810192909252602482018390529192506001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156118de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119029190612920565b5050565b61ffff811660009081526005602090815260408083206001600160a01b0386168452909152812060030154819061193d90426129e8565b949350505050565b61194d6121d4565b60ff90911660009081526005602090815260408083206001600160a01b03909516835293905291909120600401805491151560ff19909216919091179055565b600080600061199c8585611906565b61ffff851660009081526005602090815260408083206001600160a01b038a168452909152902060010154600a54919250906119d99083906127c2565b6119e391906127c2565b91506000601054600a6119f691906128fc565b611a0090846127c2565b9050611a0f81620151806121c1565b9695505050505050565b600260015403611a3b5760405162461bcd60e51b81526004016109949061275e565b60026001553360009081526009602052604090205460ff1615611a705760405162461bcd60e51b815260040161099490612795565b61ffff811660009081526005602090815260408083206001600160a01b0386811685529252909120600401546101009004163314611ac05760405162461bcd60e51b81526004016109949061295e565b61ffff81166000908152600760205260408120546001600160a01b031690611ae88484611906565b61ffff841660009081526005602090815260408083206001600160a01b0389168452909152812060010154600a549293509091611b269084906127c2565b611b3091906127c2565b61ffff851660009081526005602090815260408083206001600160a01b038a16845290915290206004015490915060ff16158015611b70575060115460ff165b15611ba457600b54611b8590620151806127c2565b821015611ba45760405162461bcd60e51b8152600401610994906127e1565b60005b61ffff851660009081526005602090815260408083206001600160a01b038a16845290915290205460ff82161015611cea5761ffff851660009081526005602090815260408083206001600160a01b038a1684529091529020805460ff8316908110611c1557611c156126ec565b60009182526020909120601082040154600f9091166002026101000a900461ffff1615611cd85761ffff851660009081526005602090815260408083206001600160a01b038a1684529091529020805460028201919060ff8416908110611c7e57611c7e6126ec565b600091825260208083206010808404909101548554600181018755958552919093209284049092018054600f948516600290810261010090810a61ffff9790951691909102900a9093048416820291909302199091161790555b80611ce28161273f565b915050611ba7565b5060005b61ffff851660009081526005602090815260408083206001600160a01b038a16845290915290206002015460ff82161015611df95761ffff851660009081526005602090815260408083206001600160a01b038a8116855292529091206002018054918616916323b872dd91309133919060ff8716908110611d7257611d726126ec565b90600052602060002090601091828204019190066002029054906101000a900461ffff166040518463ffffffff1660e01b8152600401611db493929190612702565b600060405180830381600087803b158015611dce57600080fd5b505af1158015611de2573d6000803e3d6000fd5b505050508080611df19061273f565b915050611cee565b506000601054600a611e0b91906128fc565b611e1590836127c2565b90506000611e2682620151806121c1565b905080600f6000828254611e3a9190612908565b90915550506004805460405163a9059cbb60e01b81523392810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb59190612920565b5061ffff861660009081526005602090815260408083206001600160a01b038b168452909152812060010154600d805491929091611ef49084906129e8565b909155505061ffff861660008181526005602090815260408083206001600160a01b038c168452825280832060010154938352600890915281208054909190611f3e9084906129e8565b909155505061ffff861660009081526005602090815260408083206001600160a01b038b168452909152812090611f75828261227e565b6001820160009055600282016000611f8d919061227e565b506000600382015560040180546001600160a81b031916905560405181815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd9060200160405180910390a25050600180555050505050565b611ff06121d4565b806000036120365760405162461bcd60e51b8152602060048201526013602482015272726174652063616e6e6f74206265207a65726f60681b6044820152606401610994565b600a8190556040518181527f6f0cf98557544d5c51f3f47796426f05f632ff4ab790cb5184b14ea09004037490602001610df9565b6120736121d4565b6002600154036120955760405162461bcd60e51b81526004016109949061275e565b6002600155600080546040516001600160a01b039091169047908381818185875af1925050503d80600081146120e7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ec565b606091505b50509050806120fa57600080fd5b5060018055565b6121096121d4565b6001600160a01b03811661216e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610994565b6121778161222e565b50565b6121826121d4565b6011805460ff1916911515919091179055565b61219d6121d4565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b60006121cd82846129ff565b9392505050565b6000546001600160a01b0316331461180b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610994565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b50805460008255600f01601090049060005260206000209081019061217791905b808211156122b3576000815560010161229f565b5090565b80356001600160a01b03811681146122ce57600080fd5b919050565b803560ff811681146122ce57600080fd5b600080600080606085870312156122fa57600080fd5b612303856122b7565b9350612311602086016122d3565b9250604085013567ffffffffffffffff8082111561232e57600080fd5b818701915087601f83011261234257600080fd5b81358181111561235157600080fd5b8860208260051b850101111561236657600080fd5b95989497505060200194505050565b803561ffff811681146122ce57600080fd5b6000806040838503121561239a57600080fd5b6123a3836122b7565b91506123b160208401612375565b90509250929050565b6000602082840312156123cc57600080fd5b5035919050565b6000602082840312156123e557600080fd5b6121cd82612375565b60008060008060006080868803121561240657600080fd5b61240f866122b7565b945061241d602087016122b7565b935060408601359250606086013567ffffffffffffffff8082111561244157600080fd5b818801915088601f83011261245557600080fd5b81358181111561246457600080fd5b89602082850101111561247657600080fd5b9699959850939650602001949392505050565b60006020828403121561249b57600080fd5b6121cd826122b7565b600081518084526020808501945080840160005b838110156124d857815161ffff16875295820195908201906001016124b8565b509495945050505050565b6020815260006121cd60208301846124a4565b801515811461217757600080fd5b60006020828403121561251657600080fd5b81356121cd816124f6565b60008060006060848603121561253657600080fd5b61253f846122b7565b925061254d60208501612375565b915061255b60408501612375565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561258d57600080fd5b823567ffffffffffffffff808211156125a557600080fd5b818501915085601f8301126125b957600080fd5b81356020828211156125cd576125cd612564565b8160051b604051601f19603f830116810181811086821117156125f2576125f2612564565b60405292835281830193508481018201928984111561261057600080fd5b948201945b838610156126355761262686612375565b85529482019493820193612615565b96506126449050878201612375565b9450505050509250929050565b60008060006060848603121561266657600080fd5b61266f846122b7565b925061267d602085016122d3565b9150604084013561268d816124f6565b809150509250925092565b600080604083850312156126ab57600080fd5b6126b483612375565b91506123b1602084016122b7565b600080604083850312156126d557600080fd5b6126de836122b7565b91506123b1602084016122d3565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03938416815291909216602082015261ffff909116604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff810361275557612755612729565b60010192915050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260139082015272155cd95c881a5cc8189b1858dadb1a5cdd1959606a1b604082015260600190565b60008160001904831182151516156127dc576127dc612729565b500290565b6020808252601c908201527f5374616b696e6720706572696f6420686173206e6f7420656e64656400000000604082015260600190565b600181815b8085111561285357816000190482111561283957612839612729565b8085161561284657918102915b93841c939080029061281d565b509250929050565b60008261286a57506001610eca565b8161287757506000610eca565b816001811461288d5760028114612897576128b3565b6001915050610eca565b60ff8411156128a8576128a8612729565b50506001821b610eca565b5060208310610133831016604e8410600b84101617156128d6575081810a610eca565b6128e08383612818565b80600019048211156128f4576128f4612729565b029392505050565b60006121cd838361285b565b6000821982111561291b5761291b612729565b500190565b60006020828403121561293257600080fd5b81516121cd816124f6565b600061ffff80831681810361295457612954612729565b6001019392505050565b60208082526021908201527f43616e277420756e7374616b6520736f6d656f6e6520656c73652773206e66746040820152607360f81b606082015260800190565b6000816129ae576129ae612729565b506000190190565b82815260406020820152600061193d60408301846124a4565b6000602082840312156129e157600080fd5b5051919050565b6000828210156129fa576129fa612729565b500390565b600082612a1c57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212208287f14f5b26c49c433ac0055df73a2976eb80fb3e83d3394c15678713c06ac864736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000956ad9336f47d9a17d422e4839a602c55b676501
-----Decoded View---------------
Arg [0] : _token (address): 0x956ad9336F47D9a17d422E4839a602c55B676501
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000956ad9336f47d9a17d422e4839a602c55b676501
Deployed Bytecode Sourcemap
19385:12065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29067:480;;;;;;;;;;-1:-1:-1;29067:480:0;;;;;:::i;:::-;;:::i;:::-;;25135:1028;;;;;;;;;;-1:-1:-1;25135:1028:0;;;;;:::i;:::-;;:::i;29557:121::-;;;;;;;;;;-1:-1:-1;29557:121:0;;;;;:::i;:::-;;:::i;19948:49::-;;;;;;;;;;-1:-1:-1;19948:49:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;19948:49:0;;;;;;-1:-1:-1;;;;;2081:32:1;;;2063:51;;2051:2;2036:18;19948:49:0;;;;;;;;19518:21;;;;;;;;;;-1:-1:-1;19518:21:0;;;;-1:-1:-1;;;;;19518:21:0;;;20852:167;;;;;;;;;;-1:-1:-1;20852:167:0;;;;;:::i;:::-;-1:-1:-1;;;20852:167:0;;;;;;;;;;;-1:-1:-1;;;;;;3323:33:1;;;3305:52;;3293:2;3278:18;20852:167:0;3161:202:1;20338:25:0;;;;;;;;;;;;;;;;;;;3514::1;;;3502:2;3487:18;20338:25:0;3368:177:1;20068:48:0;;;;;;;;;;-1:-1:-1;20068:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3906:14:1;;3899:22;3881:41;;3869:2;3854:18;20068:48:0;3741:187:1;27845:103:0;;;;;;;;;;-1:-1:-1;27845:103:0;;;;;:::i;:::-;;:::i;30258:136::-;;;;;;;;;;-1:-1:-1;30258:136:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20370:28::-;;;;;;;;;;;;;;;;19493:18;;;;;;;;;;-1:-1:-1;19493:18:0;;;;-1:-1:-1;;;;;19493:18:0;;;20304:27;;;;;;;;;;;;;;;;21027:279;;;;;;;;;;-1:-1:-1;21027:279:0;;;;;:::i;:::-;;:::i;28367:97::-;;;;;;;;;;-1:-1:-1;28367:97:0;;;;;:::i;:::-;;:::i;20138:26::-;;;;;;;;;;;;;;;;23340:1787;;;;;;;;;;-1:-1:-1;23340:1787:0;;;;;:::i;:::-;;:::i;21584:1011::-;;;;;;;;;;-1:-1:-1;21584:1011:0;;;;;:::i;:::-;;:::i;30516:111::-;;;;;;;;;;-1:-1:-1;30516:111:0;;;;;:::i;:::-;;:::i;20004:57::-;;;;;;;;;;-1:-1:-1;20004:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;2699:103;;;;;;;;;;;;;:::i;20460:35::-;;;;;;;;;;-1:-1:-1;20460:35:0;;;;;;;;;;;20271:26;;;;;;;;;;;;;;;;2051:87;;;;;;;;;;-1:-1:-1;2097:7:0;2124:6;-1:-1:-1;;;;;2124:6:0;2051:87;;30635:167;;;;;;;;;;;;;:::i;22623:272::-;;;;;;;;;;-1:-1:-1;22623:272:0;;;;;:::i;:::-;;:::i;29915:168::-;;;;;;;;;;-1:-1:-1;29915:168:0;;;;;:::i;:::-;;:::i;22905:419::-;;;;;;;;;;-1:-1:-1;22905:419:0;;;;;:::i;:::-;;:::i;19813:67::-;;;;;;;;;;-1:-1:-1;19813:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19813:67:0;;;;;;;7560:25:1;;;7616:2;7601:18;;7594:34;;;;7671:14;;7664:22;7644:18;;;7637:50;;;;-1:-1:-1;;;;;7723:32:1;7718:2;7703:18;;7696:60;7547:3;7532:19;19813:67:0;7335:427:1;26179:1656:0;;;;;;;;;;-1:-1:-1;26179:1656:0;;;;;:::i;:::-;;:::i;27954:181::-;;;;;;;;;;-1:-1:-1;27954:181:0;;;;;:::i;:::-;;:::i;20231:33::-;;;;;;;;;;-1:-1:-1;20231:33:0;;;;;;;;;;;7941:6:1;7929:19;;;7911:38;;7899:2;7884:18;20231:33:0;7767:188:1;19887:54:0;;;;;;;;;;-1:-1:-1;19887:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30899:495;;;;;;;;;;;;;:::i;29694:213::-;;;;;;;;;;-1:-1:-1;29694:213:0;;;;;:::i;:::-;29830:17;;;;29769:4;29830:17;;;:10;:17;;;;;;;;-1:-1:-1;;;;;29830:25:0;;;;;;;;;:31;;;;29694:213;;;;;20412:41;;;;;;;;;;-1:-1:-1;20412:41:0;;;;;;;;30098:146;;;;;;;;;;-1:-1:-1;30098:146:0;;;;;:::i;:::-;30200:17;;30176:7;30200:17;;;:10;:17;;;;;;;;-1:-1:-1;;;;;30200:25:0;;;;;;;;;;:38;;;;30098:146;20171:26;;;;;;;;;;;;;;;;21438:130;;;;;;;;;;-1:-1:-1;21438:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;21533:27:0;21508:6;21533:27;;;:20;:27;;;;;;;;;21438:130;2957:201;;;;;;;;;;-1:-1:-1;2957:201:0;;;;;:::i;:::-;;:::i;28145:107::-;;;;;;;;;;-1:-1:-1;28145:107:0;;;;;:::i;:::-;;:::i;19548:19::-;;;;;;;;;;-1:-1:-1;19548:19:0;;;;-1:-1:-1;;;;;19548:19:0;;;30406:104;;;;;;;;;;-1:-1:-1;30406:104:0;;;;;:::i;:::-;;:::i;21314:116::-;;;;;;;;;;-1:-1:-1;21314:116:0;;;;;:::i;:::-;21402:20;;21376:7;21402:20;;;:15;:20;;;;;;-1:-1:-1;;;;;21402:20:0;;21314:116;29067:480;29177:15;;;;;;;29169:50;;;;-1:-1:-1;;;29169:50:0;;8645:2:1;29169:50:0;;;8627:21:1;8684:2;8664:18;;;8657:30;-1:-1:-1;;;8703:18:1;;;8696:52;8765:18;;29169:50:0;;;;;;;;;29250:22;;;29228:11;29250:22;;;:15;:22;;;;;;;;;29302:10;:17;;;;;-1:-1:-1;;;;;29302:25:0;;;;;;;;;:31;;;29250:22;;;;;29302:31;;;29337:10;29302:45;29294:90;;;;-1:-1:-1;;;29294:90:0;;8996:2:1;29294:90:0;;;8978:21:1;;;9015:18;;;9008:30;9074:34;9054:18;;;9047:62;9126:18;;29294:90:0;8794:356:1;29294:90:0;29401:7;29397:130;29410:15;;;;-1:-1:-1;29397:130:0;;;29449:3;-1:-1:-1;;;;;29449:16:0;;29474:4;29481:6;29489:4;;29494:1;29489:7;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29449:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29427:3;;;;;:::i;:::-;;;;29397:130;;;;29160:387;29067:480;;;;:::o;25135:1028::-;19091:1;19239:7;;:19;19231:63;;;;-1:-1:-1;;;19231:63:0;;;;;;;:::i;:::-;19091:1;19305:7;:18;25240:10:::1;25223:28;::::0;;;:16:::1;:28;::::0;;;;;::::1;;25222:29;25214:61;;;;-1:-1:-1::0;;;25214:61:0::1;;;;;;;:::i;:::-;25294:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;25294:25:0;;::::1;::::0;;;;;;;:31:::1;;::::0;::::1;::::0;::::1;;25329:10;25294:45;25286:94;;;::::0;-1:-1:-1;;;25286:94:0;;10901:2:1;25286:94:0::1;::::0;::::1;10883:21:1::0;10940:2;10920:18;;;10913:30;10979:34;10959:18;;;10952:62;-1:-1:-1;;;11030:18:1;;;11023:34;11074:19;;25286:94:0::1;10699:400:1::0;25286:94:0::1;25411:12;25426:28;25440:6;25448:5;25426:13;:28::i;:::-;25510:17;::::0;::::1;25475:15;25510:17:::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;25510:25:0;::::1;::::0;;;;;;;:38:::1;;::::0;25493:7:::1;::::0;25411:43;;-1:-1:-1;25475:15:0;;25493:14:::1;::::0;25411:43;;25493:14:::1;:::i;:::-;:55;;;;:::i;:::-;25566:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;25566:25:0;::::1;::::0;;;;;;;:31:::1;;::::0;25475:73;;-1:-1:-1;25566:31:0::1;;25565:32;:57:::0;::::1;;;-1:-1:-1::0;25601:21:0::1;::::0;::::1;;25565:57;25562:158;;;25659:6;::::0;:12:::1;::::0;25666:5:::1;25659:12;:::i;:::-;25651:4;:20;;25643:61;;;;-1:-1:-1::0;;;25643:61:0::1;;;;;;;:::i;:::-;25740:19;25776:8;;25772:2;:12;;;;:::i;:::-;25762:23;::::0;:7;:23:::1;:::i;:::-;25740:45:::0;-1:-1:-1;25796:21:0::1;25820:22;25740:45:::0;25836:5:::1;25820:15;:22::i;:::-;25796:46;;25866:13;25853:10;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25906:5:0::1;::::0;;:37:::1;::::0;-1:-1:-1;;;25906:37:0;;-1:-1:-1;;;;;13333:32:1;;;25906:37:0;;::::1;13315:51:1::0;;;;13382:18;;;13375:34;;;25906:5:0;::::1;::::0;:14:::1;::::0;13288:18:1;;25906:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25981:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;25981:25:0;::::1;::::0;;;;;;;;;;:31:::1;::::0;::::1;:38:::0;;-1:-1:-1;;25981:38:0::1;26015:4;25981:38;::::0;;26072:15:::1;26030:39;::::0;;::::1;:57:::0;26105:27;3514:25:1;;;26105:27:0::1;::::0;3487:18:1;26105:27:0::1;;;;;;;-1:-1:-1::0;;19047:1:0;19348:22;;-1:-1:-1;;;;25135:1028:0:o;29557:121::-;1937:13;:11;:13::i;:::-;29621:6:::1;:14:::0;;;29651:19:::1;::::0;3514:25:1;;;29651:19:0::1;::::0;3502:2:1;3487:18;29651:19:0::1;;;;;;;;29557:121:::0;:::o;27845:103::-;1937:13;:11;:13::i;:::-;27917:5:::1;:25:::0;;-1:-1:-1;;;;;;27917:25:0::1;-1:-1:-1::0;;;;;27917:25:0;;;::::1;::::0;;;::::1;::::0;;27845:103::o;30258:136::-;30359:17;;;;;;;:10;:17;;;;;;;;-1:-1:-1;;;;;30359:25:0;;;;;;;;;;30352:36;;;;;;;;;;;;;;;;;30327:15;;30352:36;;;30359:25;30352:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30258:136;;;;;:::o;21027:279::-;1937:13;:11;:13::i;:::-;-1:-1:-1;;;;;21105:26:0;::::1;;::::0;;;:20:::1;:26;::::0;;;;;::::1;;:31:::0;21097:68:::1;;;::::0;-1:-1:-1;;;21097:68:0;;13872:2:1;21097:68:0::1;::::0;::::1;13854:21:1::0;13911:2;13891:18;;;13884:30;13950:26;13930:18;;;13923:54;13994:18;;21097:68:0::1;13670:348:1::0;21097:68:0::1;21205:15;::::0;;-1:-1:-1;;;;;21176:26:0;::::1;21205:15;21176:26:::0;;;:20:::1;:26;::::0;;;;;;;:44;;-1:-1:-1;;21176:44:0::1;21205:15;::::0;;::::1;21176:44;::::0;;21247:15;;;::::1;21231:32:::0;;:15:::1;:32:::0;;;;;:39;;-1:-1:-1;;;;;;21231:39:0::1;::::0;;::::1;::::0;;;21281:17;;;;::::1;::::0;21205:15;21281:17:::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;21027:279:::0;:::o;28367:97::-;1937:13;:11;:13::i;:::-;28432:15:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;28432:24:0;;::::1;::::0;;;::::1;::::0;;28367:97::o;23340:1787::-;19091:1;19239:7;;:19;19231:63;;;;-1:-1:-1;;;19231:63:0;;;;;;;:::i;:::-;19091:1;19305:7;:18;23466:10:::1;23449:28;::::0;;;:16:::1;:28;::::0;;;;;::::1;;23448:29;23440:61;;;;-1:-1:-1::0;;;23440:61:0::1;;;;;;;:::i;:::-;23520:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;23520:25:0;;::::1;::::0;;;;;;;:31:::1;;::::0;::::1;::::0;::::1;;23555:10;23520:45;23512:91;;;;-1:-1:-1::0;;;23512:91:0::1;;;;;;;:::i;:::-;23622:7;:12;;23633:1;23622:12:::0;23614:47:::1;;;::::0;-1:-1:-1;;;23614:47:0;;14829:2:1;23614:47:0::1;::::0;::::1;14811:21:1::0;14868:2;14848:18;;;14841:30;-1:-1:-1;;;14887:18:1;;;14880:52;14949:18;;23614:47:0::1;14627:346:1::0;23614:47:0::1;23694:22;::::0;::::1;23672:11;23694:22:::0;;;:15:::1;:22;::::0;;;;;-1:-1:-1;;;;;23694:22:0::1;::::0;23672:11;23775:28:::1;23789:6:::0;23710:5;23775:13:::1;:28::i;:::-;23857:17;::::0;::::1;23824:15;23857:17:::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;23857:25:0;::::1;::::0;;;;;;;:31:::1;;::::0;23760:43;;-1:-1:-1;23824:15:0;23857:31:::1;;23856:32;:57:::0;::::1;;;-1:-1:-1::0;23892:21:0::1;::::0;::::1;;23856:57;23853:158;;;23950:6;::::0;:12:::1;::::0;23957:5:::1;23950:12;:::i;:::-;23942:4;:20;;23934:61;;;;-1:-1:-1::0;;;23934:61:0::1;;;;;;;:::i;:::-;24037:7;24033:344;24050:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;24050:25:0;::::1;::::0;;;;;;;:36;24046:40:::1;::::0;::::1;;24033:344;;;24111:43;:17:::0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;24111:25:0;::::1;::::0;;;;;;;:32;;:43;;::::1;::::0;:32:::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:43:::0;24108:244:::1;;24175:52;::::0;-1:-1:-1;;;24175:52:0;;-1:-1:-1;;;;;24175:16:0;::::1;::::0;::::1;::::0;:52:::1;::::0;24200:4:::1;::::0;24207:10:::1;::::0;24219:7;;24175:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;24253:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;24253:25:0;::::1;::::0;;;;;;;:32;;::::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24246:39;;;;;;;;;;;24312:4;24303:13;;24108:244;24088:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24033:344;;;;24390:6;24387:711;;;24427:11;:13:::0;;;:11:::1;:13;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;24455:30:0::1;::::0;::::1;;::::0;;;:23:::1;:30;::::0;;;;:32;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;24502:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;24502:25:0;::::1;::::0;;;;;;;:38:::1;;:40:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;24591:4;24581:7;;:14;;;;:::i;:::-;24571:24;;24608:19;24644:8;;24640:2;:12;;;;:::i;:::-;24630:23;::::0;:7;:23:::1;:::i;:::-;24608:45:::0;-1:-1:-1;24664:21:0::1;24688:22;24608:45:::0;24704:5:::1;24688:15;:22::i;:::-;24664:46;;24734:13;24721:10;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24774:5:0::1;::::0;;:41:::1;::::0;-1:-1:-1;;;24774:41:0;;24789:10:::1;24774:41:::0;;::::1;13315:51:1::0;;;;13382:18;;;13375:34;;;-1:-1:-1;;;;;24774:5:0::1;::::0;:14:::1;::::0;13288:18:1;;24774:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24854:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;24854:25:0;::::1;::::0;;;;;;;;:31:::1;::::0;::::1;:38:::0;;-1:-1:-1;;24854:38:0::1;24888:4;24854:38;::::0;;24945:15:::1;24903:39;::::0;;::::1;:57:::0;24978:32;;3514:25:1;;;24986:10:0::1;::::0;24978:32:::1;::::0;3487:18:1;24978:32:0::1;;;;;;;24398:624;;24387:711;;;25043:43;::::0;-1:-1:-1;;;25043:43:0;;15321:2:1;25043:43:0::1;::::0;::::1;15303:21:1::0;15360:2;15340:18;;;15333:30;15399:34;15379:18;;;15372:62;-1:-1:-1;;;15450:18:1;;;15443:31;15491:19;;25043:43:0::1;15119:397:1::0;24387:711:0::1;-1:-1:-1::0;;19047:1:0;19348:22;;-1:-1:-1;;;;;23340:1787:0:o;21584:1011::-;21692:10;21675:28;;;;:16;:28;;;;;;;;21674:29;21666:61;;;;-1:-1:-1;;;21666:61:0;;;;;;;:::i;:::-;21746:29;;;21787:1;21746:29;;;:15;:29;;;;;;-1:-1:-1;;;;;21746:29:0;21738:77;;;;-1:-1:-1;;;21738:77:0;;15723:2:1;21738:77:0;;;15705:21:1;15762:2;15742:18;;;15735:30;-1:-1:-1;;;15781:18:1;;;15774:51;15842:18;;21738:77:0;15521:345:1;21738:77:0;21848:29;;;21826:11;21848:29;;;:15;:29;;;;;;;;;21909:15;;21935:10;:24;;;;;21960:10;21935:36;;;;;;;;21988:15;21935:50;;;:68;21848:29;22014:49;:60;;-1:-1:-1;;;;;21848:29:0;;;;21909:15;;22014:60;;21909:15;;22014:60;:::i;:::-;;;;-1:-1:-1;;22085:24:0;;;;;;;:10;:24;;;;;;;;22130:10;22085:36;;;;;;;;;:42;;:55;;-1:-1:-1;;;;;;22151:50:0;22085:55;;;;-1:-1:-1;;22151:50:0;;;;;;;22222:37;;;:23;:37;;;;;:48;;22262:8;;22085:24;22222:48;;22262:8;;22222:48;:::i;:::-;;;;;;;;22294:8;22281:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;22327:7:0;;-1:-1:-1;22323:199:0;22340:8;:15;22336:1;:19;;;22323:199;;;22377:24;;;;;;;:10;:24;;;;;;;;22402:10;22377:36;;;;;;;22423:11;;:8;;:11;;;;;;;;;;:::i;:::-;;;;;;;22377:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22450:3;-1:-1:-1;;;;;22450:20:0;;22471:10;22491:4;22498:8;22507:1;22498:11;;;;;;;;;;:::i;:::-;;;;;;;22450:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22357:3;;;;;:::i;:::-;;;;22323:199;;;;22556:10;-1:-1:-1;;;;;22549:38:0;;22568:8;22578;22549:38;;;;;;;:::i;:::-;;;;;;;;21655:940;;21584:1011;;:::o;30516:111::-;1937:13;:11;:13::i;:::-;-1:-1:-1;;;;;30589:24:0::1;30616:5;30589:24:::0;;;:16:::1;:24;::::0;;;;:32;;-1:-1:-1;;30589:32:0::1;::::0;;30516:111::o;2699:103::-;1937:13;:11;:13::i;:::-;2764:30:::1;2791:1;2764:18;:30::i;:::-;2699:103::o:0;30635:167::-;1937:13;:11;:13::i;:::-;30717:5:::1;::::0;;:30:::1;::::0;-1:-1:-1;;;30717:30:0;;30741:4:::1;30717:30:::0;;::::1;2063:51:1::0;;;;30699:15:0::1;::::0;-1:-1:-1;;;;;30717:5:0;;::::1;::::0;:15:::1;::::0;2036:18:1;;30717:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30758:5;::::0;;:36:::1;::::0;-1:-1:-1;;;30758:36:0;;30773:10:::1;30758:36:::0;;::::1;13315:51:1::0;;;;13382:18;;;13375:34;;;30699:48:0;;-1:-1:-1;;;;;;30758:5:0;;::::1;::::0;:14:::1;::::0;13288:18:1;;30758:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30688:114;30635:167::o:0;22623:272::-;22789:17;;;22697:7;22789:17;;;:10;:17;;;;;;;;-1:-1:-1;;;;;22789:25:0;;;;;;;;;:39;;;22697:7;;22771:57;;:15;:57;:::i;:::-;22757:71;22623:272;-1:-1:-1;;;;22623:272:0:o;29915:168::-;1937:13;:11;:13::i;:::-;30024:17:::1;::::0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;30024:25:0;;::::1;::::0;;;;;;;;;:31:::1;;:40:::0;;;::::1;;-1:-1:-1::0;;30024:40:0;;::::1;::::0;;;::::1;::::0;;29915:168::o;22905:419::-;22983:7;23003:15;23038:12;23053:28;23067:6;23075:5;23053:13;:28::i;:::-;23139:17;;;;;;;:10;:17;;;;;;;;-1:-1:-1;;;;;23139:25:0;;;;;;;;;:38;;;23122:7;;23038:43;;-1:-1:-1;23139:38:0;23122:14;;23038:43;;23122:14;:::i;:::-;:55;;;;:::i;:::-;23112:65;;23198:19;23234:8;;23230:2;:12;;;;:::i;:::-;23220:23;;:7;:23;:::i;:::-;23198:45;-1:-1:-1;23261:22:0;23198:45;23277:5;23261:15;:22::i;:::-;23254:29;22905:419;-1:-1:-1;;;;;;22905:419:0:o;26179:1656::-;19091:1;19239:7;;:19;19231:63;;;;-1:-1:-1;;;19231:63:0;;;;;;;:::i;:::-;19091:1;19305:7;:18;26285:10:::1;26268:28;::::0;;;:16:::1;:28;::::0;;;;;::::1;;26267:29;26259:61;;;;-1:-1:-1::0;;;26259:61:0::1;;;;;;;:::i;:::-;26339:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;26339:25:0;;::::1;::::0;;;;;;;:31:::1;;::::0;::::1;::::0;::::1;;26374:10;26339:45;26331:91;;;;-1:-1:-1::0;;;26331:91:0::1;;;;;;;:::i;:::-;26455:22;::::0;::::1;26433:11;26455:22:::0;;;:15:::1;:22;::::0;;;;;-1:-1:-1;;;;;26455:22:0::1;::::0;26515:28:::1;26529:6:::0;26471:5;26515:13:::1;:28::i;:::-;26599:17;::::0;::::1;26564:15;26599:17:::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;26599:25:0;::::1;::::0;;;;;;;:38:::1;;::::0;26582:7:::1;::::0;26500:43;;-1:-1:-1;26564:15:0;;26582:14:::1;::::0;26500:43;;26582:14:::1;:::i;:::-;:55;;;;:::i;:::-;26655:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;26655:25:0;::::1;::::0;;;;;;;:31:::1;;::::0;26564:73;;-1:-1:-1;26655:31:0::1;;26654:32;:57:::0;::::1;;;-1:-1:-1::0;26690:21:0::1;::::0;::::1;;26654:57;26651:158;;;26748:6;::::0;:12:::1;::::0;26755:5:::1;26748:12;:::i;:::-;26740:4;:20;;26732:61;;;;-1:-1:-1::0;;;26732:61:0::1;;;;;;;:::i;:::-;26837:7;26833:253;26849:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;26849:25:0;::::1;::::0;;;;;;;:36;26846:39:::1;::::0;::::1;;26833:253;;;26910:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;26910:25:0;::::1;::::0;;;;;;;:32;;::::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;::::1;;::::0;;;;;::::1;;;;::::0;::::1;;;:37:::0;26907:168:::1;;26968:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;26968:25:0;::::1;::::0;;;;;;;27012:32;;26968:38:::1;::::0;::::1;::::0;:25;27012:32:::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;26968:77;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;27012:32;26968:77;;;27012:32:::1;26968:77:::0;;::::1;27012:32;26968:77:::0;;::::1;27012:32;::::0;;;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;26968:77:::0;::::1;::::0;;;::::1;;::::0;;::::1;;::::0;;26907:168:::1;26887:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26833:253;;;;27102:7;27098:228;27115:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;27115:25:0;::::1;::::0;;;;;;;:38:::1;;:45:::0;27111:49:::1;::::0;::::1;;27098:228;;;27245:17;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;27245:25:0;;::::1;::::0;;;;;;;:38:::1;;:41:::0;;27201:16;;::::1;::::0;::::1;::::0;27226:4:::1;::::0;27233:10:::1;::::0;27245:38;:41:::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;27201:86;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27162:3;;;;;:::i;:::-;;;;27098:228;;;;27337:19;27373:8;;27369:2;:12;;;;:::i;:::-;27359:23;::::0;:7;:23:::1;:::i;:::-;27337:45:::0;-1:-1:-1;27393:21:0::1;27417:22;27337:45:::0;27433:5:::1;27417:15;:22::i;:::-;27393:46;;27463:13;27450:10;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;27503:5:0::1;::::0;;:41:::1;::::0;-1:-1:-1;;;27503:41:0;;27518:10:::1;27503:41:::0;;::::1;13315:51:1::0;;;;13382:18;;;13375:34;;;-1:-1:-1;;;;;27503:5:0::1;::::0;:14:::1;::::0;13288:18:1;;27503:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27578:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;27578:25:0;::::1;::::0;;;;;;;:38:::1;;::::0;27565:11:::1;:51:::0;;27578:38;;27565:11;;:51:::1;::::0;27578:38;;27565:51:::1;:::i;:::-;::::0;;;-1:-1:-1;;27661:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;27661:25:0;::::1;::::0;;;;;;;:38:::1;;::::0;27627:30;;;:23:::1;:30:::0;;;;;:72;;:30;;27661:17;27627:72:::1;::::0;27661:38;;27627:72:::1;:::i;:::-;::::0;;;-1:-1:-1;;27731:17:0::1;::::0;::::1;;::::0;;;:10:::1;:17;::::0;;;;;;;-1:-1:-1;;;;;27731:25:0;::::1;::::0;;;;;;;;27724:32:::1;27731:25:::0;:17;27724:32:::1;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27724:32:0::1;;::::0;::::1;::::0;::::1;;::::0;;-1:-1:-1;;;;;;27724:32:0;;;27786:34:::1;::::0;3514:25:1;;;27794:10:0::1;::::0;27786:34:::1;::::0;3502:2:1;3487:18;27786:34:0::1;;;;;;;-1:-1:-1::0;;19047:1:0;19348:22;;-1:-1:-1;;;;;26179:1656:0:o;27954:181::-;1937:13;:11;:13::i;:::-;28028:8:::1;28040:1;28028:13:::0;28020:45:::1;;;::::0;-1:-1:-1;;;28020:45:0;;16726:2:1;28020:45:0::1;::::0;::::1;16708:21:1::0;16765:2;16745:18;;;16738:30;-1:-1:-1;;;16784:18:1;;;16777:49;16843:18;;28020:45:0::1;16524:343:1::0;28020:45:0::1;28074:7;:18:::0;;;28106:23:::1;::::0;3514:25:1;;;28106:23:0::1;::::0;3502:2:1;3487:18;28106:23:0::1;3368:177:1::0;30899:495:0;1937:13;:11;:13::i;:::-;19091:1:::1;19239:7;;:19:::0;19231:63:::1;;;;-1:-1:-1::0;;;19231:63:0::1;;;;;;;:::i;:::-;19091:1;19305:7;:18:::0;31206:7:::2;2124:6:::0;;31219:55:::2;::::0;-1:-1:-1;;;;;2124:6:0;;;;31248:21:::2;::::0;31206:7;31219:55;31206:7;31219:55;31248:21;2124:6;31219:55:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31205:69;;;31293:2;31285:11;;;::::0;::::2;;-1:-1:-1::0;19047:1:0::1;19348:22:::0;;30899:495::o;2957:201::-;1937:13;:11;:13::i;:::-;-1:-1:-1;;;;;3046:22:0;::::1;3038:73;;;::::0;-1:-1:-1;;;3038:73:0;;17284:2:1;3038:73:0::1;::::0;::::1;17266:21:1::0;17323:2;17303:18;;;17296:30;17362:34;17342:18;;;17335:62;-1:-1:-1;;;17413:18:1;;;17406:36;17459:19;;3038:73:0::1;17082:402:1::0;3038:73:0::1;3122:28;3141:8;3122:18;:28::i;:::-;2957:201:::0;:::o;28145:107::-;1937:13;:11;:13::i;:::-;28216:21:::1;:30:::0;;-1:-1:-1;;28216:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28145:107::o;30406:104::-;1937:13;:11;:13::i;:::-;-1:-1:-1;;;;;30473:24:0::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;30473:31:0::1;30500:4;30473:31;::::0;;30406:104::o;15938:98::-;15996:7;16023:5;16027:1;16023;:5;:::i;:::-;16016:12;15938:98;-1:-1:-1;;;15938:98:0:o;2216:132::-;2097:7;2124:6;-1:-1:-1;;;;;2124:6:0;682:10;2280:23;2272:68;;;;-1:-1:-1;;;2272:68:0;;17913:2:1;2272:68:0;;;17895:21:1;;;17932:18;;;17925:30;17991:34;17971:18;;;17964:62;18043:18;;2272:68:0;17711:356:1;3318:191:0;3392:16;3411:6;;-1:-1:-1;;;;;3428:17:0;;;-1:-1:-1;;;;;;3428:17:0;;;;;;3461:40;;3411:6;;;;;;;3461:40;;3392:16;3461:40;3381:128;3318:191;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:156::-;258:20;;318:4;307:16;;297:27;;287:55;;338:1;335;328:12;353:758;454:6;462;470;478;531:2;519:9;510:7;506:23;502:32;499:52;;;547:1;544;537:12;499:52;570:29;589:9;570:29;:::i;:::-;560:39;;618:36;650:2;639:9;635:18;618:36;:::i;:::-;608:46;;705:2;694:9;690:18;677:32;728:18;769:2;761:6;758:14;755:34;;;785:1;782;775:12;755:34;823:6;812:9;808:22;798:32;;868:7;861:4;857:2;853:13;849:27;839:55;;890:1;887;880:12;839:55;930:2;917:16;956:2;948:6;945:14;942:34;;;972:1;969;962:12;942:34;1025:7;1020:2;1010:6;1007:1;1003:14;999:2;995:23;991:32;988:45;985:65;;;1046:1;1043;1036:12;985:65;353:758;;;;-1:-1:-1;;1077:2:1;1069:11;;-1:-1:-1;;;353:758:1:o;1116:159::-;1183:20;;1243:6;1232:18;;1222:29;;1212:57;;1265:1;1262;1255:12;1280:258;1347:6;1355;1408:2;1396:9;1387:7;1383:23;1379:32;1376:52;;;1424:1;1421;1414:12;1376:52;1447:29;1466:9;1447:29;:::i;:::-;1437:39;;1495:37;1528:2;1517:9;1513:18;1495:37;:::i;:::-;1485:47;;1280:258;;;;;:::o;1543:180::-;1602:6;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;-1:-1:-1;1694:23:1;;1543:180;-1:-1:-1;1543:180:1:o;1728:184::-;1786:6;1839:2;1827:9;1818:7;1814:23;1810:32;1807:52;;;1855:1;1852;1845:12;1807:52;1878:28;1896:9;1878:28;:::i;2348:808::-;2445:6;2453;2461;2469;2477;2530:3;2518:9;2509:7;2505:23;2501:33;2498:53;;;2547:1;2544;2537:12;2498:53;2570:29;2589:9;2570:29;:::i;:::-;2560:39;;2618:38;2652:2;2641:9;2637:18;2618:38;:::i;:::-;2608:48;;2703:2;2692:9;2688:18;2675:32;2665:42;;2758:2;2747:9;2743:18;2730:32;2781:18;2822:2;2814:6;2811:14;2808:34;;;2838:1;2835;2828:12;2808:34;2876:6;2865:9;2861:22;2851:32;;2921:7;2914:4;2910:2;2906:13;2902:27;2892:55;;2943:1;2940;2933:12;2892:55;2983:2;2970:16;3009:2;3001:6;2998:14;2995:34;;;3025:1;3022;3015:12;2995:34;3070:7;3065:2;3056:6;3052:2;3048:15;3044:24;3041:37;3038:57;;;3091:1;3088;3081:12;3038:57;2348:808;;;;-1:-1:-1;2348:808:1;;-1:-1:-1;3122:2:1;3114:11;;3144:6;2348:808;-1:-1:-1;;;2348:808:1:o;3550:186::-;3609:6;3662:2;3650:9;3641:7;3637:23;3633:32;3630:52;;;3678:1;3675;3668:12;3630:52;3701:29;3720:9;3701:29;:::i;3933:447::-;3985:3;4023:5;4017:12;4050:6;4045:3;4038:19;4076:4;4105:2;4100:3;4096:12;4089:19;;4142:2;4135:5;4131:14;4163:1;4173:182;4187:6;4184:1;4181:13;4173:182;;;4252:13;;4267:6;4248:26;4236:39;;4295:12;;;;4330:15;;;;4209:1;4202:9;4173:182;;;-1:-1:-1;4371:3:1;;3933:447;-1:-1:-1;;;;;3933:447:1:o;4385:258::-;4562:2;4551:9;4544:21;4525:4;4582:55;4633:2;4622:9;4618:18;4610:6;4582:55;:::i;4648:118::-;4734:5;4727:13;4720:21;4713:5;4710:32;4700:60;;4756:1;4753;4746:12;4771:241;4827:6;4880:2;4868:9;4859:7;4855:23;4851:32;4848:52;;;4896:1;4893;4886:12;4848:52;4935:9;4922:23;4954:28;4976:5;4954:28;:::i;5017:330::-;5092:6;5100;5108;5161:2;5149:9;5140:7;5136:23;5132:32;5129:52;;;5177:1;5174;5167:12;5129:52;5200:29;5219:9;5200:29;:::i;:::-;5190:39;;5248:37;5281:2;5270:9;5266:18;5248:37;:::i;:::-;5238:47;;5304:37;5337:2;5326:9;5322:18;5304:37;:::i;:::-;5294:47;;5017:330;;;;;:::o;5352:127::-;5413:10;5408:3;5404:20;5401:1;5394:31;5444:4;5441:1;5434:15;5468:4;5465:1;5458:15;5484:1193;5575:6;5583;5636:2;5624:9;5615:7;5611:23;5607:32;5604:52;;;5652:1;5649;5642:12;5604:52;5692:9;5679:23;5721:18;5762:2;5754:6;5751:14;5748:34;;;5778:1;5775;5768:12;5748:34;5816:6;5805:9;5801:22;5791:32;;5861:7;5854:4;5850:2;5846:13;5842:27;5832:55;;5883:1;5880;5873:12;5832:55;5919:2;5906:16;5941:4;5964:2;5960;5957:10;5954:36;;;5970:18;;:::i;:::-;6016:2;6013:1;6009:10;6048:2;6042:9;6111:2;6107:7;6102:2;6098;6094:11;6090:25;6082:6;6078:38;6166:6;6154:10;6151:22;6146:2;6134:10;6131:18;6128:46;6125:72;;;6177:18;;:::i;:::-;6213:2;6206:22;6263:18;;;6297:15;;;;-1:-1:-1;6339:11:1;;;6335:20;;;6367:19;;;6364:39;;;6399:1;6396;6389:12;6364:39;6423:11;;;;6443:147;6459:6;6454:3;6451:15;6443:147;;;6525:22;6543:3;6525:22;:::i;:::-;6513:35;;6476:12;;;;6568;;;;6443:147;;;6609:6;-1:-1:-1;6634:37:1;;-1:-1:-1;6652:18:1;;;6634:37;:::i;:::-;6624:47;;;;;;5484:1193;;;;;:::o;6682:385::-;6754:6;6762;6770;6823:2;6811:9;6802:7;6798:23;6794:32;6791:52;;;6839:1;6836;6829:12;6791:52;6862:29;6881:9;6862:29;:::i;:::-;6852:39;;6910:36;6942:2;6931:9;6927:18;6910:36;:::i;:::-;6900:46;;6996:2;6985:9;6981:18;6968:32;7009:28;7031:5;7009:28;:::i;:::-;7056:5;7046:15;;;6682:385;;;;;:::o;7072:258::-;7139:6;7147;7200:2;7188:9;7179:7;7175:23;7171:32;7168:52;;;7216:1;7213;7206:12;7168:52;7239:28;7257:9;7239:28;:::i;:::-;7229:38;;7286;7320:2;7309:9;7305:18;7286:38;:::i;7960:256::-;8026:6;8034;8087:2;8075:9;8066:7;8062:23;8058:32;8055:52;;;8103:1;8100;8093:12;8055:52;8126:29;8145:9;8126:29;:::i;:::-;8116:39;;8174:36;8206:2;8195:9;8191:18;8174:36;:::i;9155:127::-;9216:10;9211:3;9207:20;9204:1;9197:31;9247:4;9244:1;9237:15;9271:4;9268:1;9261:15;9287:387;-1:-1:-1;;;;;9544:15:1;;;9526:34;;9596:15;;;;9591:2;9576:18;;9569:43;9660:6;9648:19;;;9643:2;9628:18;;9621:47;9476:2;9461:18;;9287:387::o;9679:127::-;9740:10;9735:3;9731:20;9728:1;9721:31;9771:4;9768:1;9761:15;9795:4;9792:1;9785:15;9811:175;9848:3;9892:4;9885:5;9881:16;9921:4;9912:7;9909:17;9906:43;;9929:18;;:::i;:::-;9978:1;9965:15;;9811:175;-1:-1:-1;;9811:175:1:o;9991:355::-;10193:2;10175:21;;;10232:2;10212:18;;;10205:30;10271:33;10266:2;10251:18;;10244:61;10337:2;10322:18;;9991:355::o;10351:343::-;10553:2;10535:21;;;10592:2;10572:18;;;10565:30;-1:-1:-1;;;10626:2:1;10611:18;;10604:49;10685:2;10670:18;;10351:343::o;11104:168::-;11144:7;11210:1;11206;11202:6;11198:14;11195:1;11192:21;11187:1;11180:9;11173:17;11169:45;11166:71;;;11217:18;;:::i;:::-;-1:-1:-1;11257:9:1;;11104:168::o;11277:352::-;11479:2;11461:21;;;11518:2;11498:18;;;11491:30;11557;11552:2;11537:18;;11530:58;11620:2;11605:18;;11277:352::o;11634:422::-;11723:1;11766:5;11723:1;11780:270;11801:7;11791:8;11788:21;11780:270;;;11860:4;11856:1;11852:6;11848:17;11842:4;11839:27;11836:53;;;11869:18;;:::i;:::-;11919:7;11909:8;11905:22;11902:55;;;11939:16;;;;11902:55;12018:22;;;;11978:15;;;;11780:270;;;11784:3;11634:422;;;;;:::o;12061:806::-;12110:5;12140:8;12130:80;;-1:-1:-1;12181:1:1;12195:5;;12130:80;12229:4;12219:76;;-1:-1:-1;12266:1:1;12280:5;;12219:76;12311:4;12329:1;12324:59;;;;12397:1;12392:130;;;;12304:218;;12324:59;12354:1;12345:10;;12368:5;;;12392:130;12429:3;12419:8;12416:17;12413:43;;;12436:18;;:::i;:::-;-1:-1:-1;;12492:1:1;12478:16;;12507:5;;12304:218;;12606:2;12596:8;12593:16;12587:3;12581:4;12578:13;12574:36;12568:2;12558:8;12555:16;12550:2;12544:4;12541:12;12537:35;12534:77;12531:159;;;-1:-1:-1;12643:19:1;;;12675:5;;12531:159;12722:34;12747:8;12741:4;12722:34;:::i;:::-;12792:6;12788:1;12784:6;12780:19;12771:7;12768:32;12765:58;;;12803:18;;:::i;:::-;12841:20;;12061:806;-1:-1:-1;;;12061:806:1:o;12872:131::-;12932:5;12961:36;12988:8;12982:4;12961:36;:::i;13008:128::-;13048:3;13079:1;13075:6;13072:1;13069:13;13066:39;;;13085:18;;:::i;:::-;-1:-1:-1;13121:9:1;;13008:128::o;13420:245::-;13487:6;13540:2;13528:9;13519:7;13515:23;13511:32;13508:52;;;13556:1;13553;13546:12;13508:52;13588:9;13582:16;13607:28;13629:5;13607:28;:::i;14023:197::-;14061:3;14089:6;14130:2;14123:5;14119:14;14157:2;14148:7;14145:15;14142:41;;14163:18;;:::i;:::-;14212:1;14199:15;;14023:197;-1:-1:-1;;;14023:197:1:o;14225:397::-;14427:2;14409:21;;;14466:2;14446:18;;;14439:30;14505:34;14500:2;14485:18;;14478:62;-1:-1:-1;;;14571:2:1;14556:18;;14549:31;14612:3;14597:19;;14225:397::o;14978:136::-;15017:3;15045:5;15035:39;;15054:18;;:::i;:::-;-1:-1:-1;;;15090:18:1;;14978:136::o;15871:329::-;16076:6;16065:9;16058:25;16119:2;16114;16103:9;16099:18;16092:30;16039:4;16139:55;16190:2;16179:9;16175:18;16167:6;16139:55;:::i;16205:184::-;16275:6;16328:2;16316:9;16307:7;16303:23;16299:32;16296:52;;;16344:1;16341;16334:12;16296:52;-1:-1:-1;16367:16:1;;16205:184;-1:-1:-1;16205:184:1:o;16394:125::-;16434:4;16462:1;16459;16456:8;16453:34;;;16467:18;;:::i;:::-;-1:-1:-1;16504:9:1;;16394:125::o;17489:217::-;17529:1;17555;17545:132;;17599:10;17594:3;17590:20;17587:1;17580:31;17634:4;17631:1;17624:15;17662:4;17659:1;17652:15;17545:132;-1:-1:-1;17691:9:1;;17489:217::o
Swarm Source
ipfs://8287f14f5b26c49c433ac0055df73a2976eb80fb3e83d3394c15678713c06ac8
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.