Source Code
Latest 11 from a total of 11 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Submit Team | 17881274 | 928 days ago | IN | 0 ETH | 0.00799119 | ||||
| Deposit Token | 17881235 | 928 days ago | IN | 0 ETH | 0.00296905 | ||||
| Approve All Toke... | 17880470 | 928 days ago | IN | 0 ETH | 0.00088556 | ||||
| Submit Team | 17880466 | 928 days ago | IN | 0 ETH | 0.00495974 | ||||
| Deposit Token | 17880462 | 928 days ago | IN | 0 ETH | 0.00149304 | ||||
| Submit Team | 17880446 | 928 days ago | IN | 0 ETH | 0.00463077 | ||||
| Approve All Toke... | 17880415 | 928 days ago | IN | 0 ETH | 0.00063046 | ||||
| Approve All Toke... | 17880394 | 928 days ago | IN | 0 ETH | 0.0008133 | ||||
| Deposit Token | 17880387 | 928 days ago | IN | 0 ETH | 0.00160415 | ||||
| Set Token Contra... | 17880385 | 928 days ago | IN | 0 ETH | 0.00076474 | ||||
| Set Participatio... | 17880267 | 928 days ago | IN | 0 ETH | 0.0004641 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FantasyFootball
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract FantasyFootball is Ownable, ReentrancyGuard {
//mapping from player ID to points
mapping(uint256 => int256) public playersToPoints;
//mapping from an address to a list of player IDs (their team)
mapping(address => uint256[]) public teams;
//mapping from an address to their total points
mapping(address => int256) public addressToPoints;
//mapping from an address to whether or not they have deposited tokens
mapping(address => bool) public hasDeposited;
//mapping from an address to whether or not they have submitted a team
mapping(address => bool) public hasSubmitted;
//mapping from an epoch (week of matches) to an address mapping to a boolean to
//check if they have claimed their points that week
mapping(uint256 => mapping(address => bool)) public claimedInEpoch;
//max players allowed to submit to a team
uint256 constant public MAX_PLAYERS = 11;
//participation fee in the ERC20 for joining
uint256 public PARTICIPATION_FEE = 100;
//uint256 to keep track of the current epoch (week)
uint256 public epoch;
//boolean used to pause/unpause team submissions
bool public submissionsPaused;
//address of the ffl ERC20 token
address ffl;
//address of the contract manager
address public manager;
//event emitted to keep track of team submissions in tx logs
event TeamCreated(address indexed teamOwner, uint256[] indexed players);
//modifier to allow owner to add a manager to update points in the contract
modifier onlyOwnerOrManager {
require(owner() == _msgSender() || manager == _msgSender(), "Ownable: caller is not the owner");
_;
}
constructor() {
//setting the ffl contract
ffl = address(0);
//submissions initally open
submissionsPaused = false;
//setting the epoch to 1 (week 1)
epoch = 1;
//making the manager also the owner at the start
manager = owner();
}
//---------------//
//--USER-FACING--//
//---------------//
//function to deposit tokens into the contract so that players can participate
function depositToken() public payable nonReentrant() {
//instantiate the ERC20 contract
ERC20 tokenContract = ERC20(ffl);
//make sure the caller has enough of the ERC20 to join
require(tokenContract.balanceOf(msg.sender) >= PARTICIPATION_FEE, "You don't have enough tokens in your wallet to play.");
//call the transferFrom function in the ERC20 contract with the PARTICIPATION_FEE
tokenContract.transferFrom(msg.sender, address(this), PARTICIPATION_FEE);
//set hasDeposited to true for the sender so they can now submit a team
hasDeposited[msg.sender] = true;
}
//function to submit a team (list of player IDs) to the contract
function submitTeam(uint256[] memory _players) public nonReentrant() {
//make sure submissions are open
require(!submissionsPaused, "Submissions are paused. Please check back later.");
//make sure the user has deposited
require(hasDeposited[msg.sender], "You must deposit tokens to participate");
//make sure the user has not already submitted a team
require(!hasSubmitted[msg.sender], "You have already submitted a team");
//make sure the user has entered 11 players
require(_players.length == 11, "Team must have 11 players");
//set the user's team
teams[msg.sender] = _players;
//set their submitted value to true
hasSubmitted[msg.sender] = true;
//emit an event with their team
emit TeamCreated(msg.sender, _players);
}
//function to claim points for a given epoch (week)
function claimPoints() public nonReentrant() {
//make sure submissions are paused
require(submissionsPaused, "Submissions are still open.");
//make sure the user hasn't already claimed their points in the epoch
require(!claimedInEpoch[epoch][msg.sender], "Already claimed points");
//call getTeamPoints to calculate how many points the player is owed
int256 points = getTeamPoints(teams[msg.sender]);
//add the points to their total score
addressToPoints[msg.sender] += points;
//set claimed in epoch for the sender to true
claimedInEpoch[epoch][msg.sender] = true;
}
//-------------//
//---UTILITY---//
//-------------//
//function returning the number of points scored by a given team in a given week
function getTeamPoints(uint256[] memory team) public view returns (int256) {
//initally set to 0
int256 totalPoints = 0;
//iterate through the team and add the points for each player
for (uint256 i = 0; i < team.length; i++) {
totalPoints += playersToPoints[team[i]];
}
//return result
return totalPoints;
}
//view function to check if submissions are paused
function areSubmissionPaused() public view returns(bool) {
return submissionsPaused;
}
//view function to see how many points an address has
function addressPoints(address _address) public view returns (int256) {
return addressToPoints[_address];
}
//view function returning a address's current team
function getActiveTeam(address _address) public view returns (uint256[] memory) {
return teams[_address];
}
//view function returning whether or not a address has deposited
function hasAddressDeposited(address _address) public view returns (bool) {
return hasDeposited[_address];
}
//view function returning how many points an address can claim
function addressClaimablePoints(address _address) public view returns (int256) {
//if they have already claimed in the epoch return 0
if (claimedInEpoch[epoch][_address]) return 0;
//if submissions are paused return 0
if (!submissionsPaused) return 0;
//if they haven't submitted a team return 0
if (!hasSubmitted[_address]) return 0;
//otherwise, calculate their team's points and return the value
int256 claimablePoints = getTeamPoints(teams[_address]);
return claimablePoints;
}
//-------------------------//
//--OWNER/MANAGER-FACING--//
//-----------------------//
//approves all of the tokens in the contract to the owner so they can withdraw
function approveAllTokens() public onlyOwner {
//instantiate the ERC20
ERC20 tokenContract = ERC20(ffl);
//call the approve function
tokenContract.approve(owner(), tokenContract.balanceOf(address(this)));
}
//sets the ERC20 token contract to reference
function setTokenContract(address _token) public onlyOwner {
ffl = _token;
}
//sets submissions paused to true or false
function setSubmissionsPaused(bool _submissionsPaused) public onlyOwnerOrManager {
submissionsPaused = _submissionsPaused;
}
//increments the epoch so that new points can be claimed
function newEpoch() public onlyOwnerOrManager {
epoch += 1;
}
//sets the participation fee for joining the competition
function setParticipationFee(uint256 _fee) public onlyOwner {
PARTICIPATION_FEE = _fee;
}
//sets points for a list of player ids
function setPlayerData(uint256[] memory _ids, int256[] memory _points) public onlyOwnerOrManager {
//makes sure the list of ids and points are the same
require(_ids.length == _points.length, "Names and points arrays must be the same length");
//iterates through each player id and sets their points
for (uint256 i = 0; i < _ids.length; i++) {
setSinglePlayerData(_ids[i], _points[i]);
}
}
//sets points for an indiviual player, used above
function setSinglePlayerData(uint256 _id, int256 _points) public onlyOwnerOrManager {
playersToPoints[_id] = _points;
}
//sets the manager of the contract
function setManager(address _manager) public onlyOwnerOrManager {
manager = _manager;
}
//withdraws ERC20 tokens to an address
function withdrdawTo(uint256 amount, address receiver) public onlyOwner {
ERC20(ffl).transferFrom(address(this), receiver, amount);
}
//withdraws ERC20 tokens to specific addresses
function withdrawToAll(uint256[] memory amounts, address[] memory participants) public onlyOwner {
//makes sure the number of amounts and number of participants is the same
require(amounts.length == participants.length, "Amounts and participants arrays must be the same length");
for (uint256 i = 0; i < participants.length; i++) {
ERC20(ffl).transferFrom(address(this), participants[i], amounts[i]);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @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. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
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);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == _ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"teamOwner","type":"address"},{"indexed":true,"internalType":"uint256[]","name":"players","type":"uint256[]"}],"name":"TeamCreated","type":"event"},{"inputs":[],"name":"MAX_PLAYERS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PARTICIPATION_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addressClaimablePoints","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addressPoints","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressToPoints","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"approveAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areSubmissionPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPoints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"claimedInEpoch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getActiveTeam","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"team","type":"uint256[]"}],"name":"getTeamPoints","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"hasAddressDeposited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasDeposited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasSubmitted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newEpoch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playersToPoints","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setParticipationFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"int256[]","name":"_points","type":"int256[]"}],"name":"setPlayerData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"int256","name":"_points","type":"int256"}],"name":"setSinglePlayerData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_submissionsPaused","type":"bool"}],"name":"setSubmissionsPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"submissionsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_players","type":"uint256[]"}],"name":"submitTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"teams","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":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"participants","type":"address[]"}],"name":"withdrawToAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"withdrdawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405260646008553480156200001657600080fd5b50620000376200002b620000f960201b60201c565b6200010160201b60201c565b600180819055506000600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60006101000a81548160ff0219169083151502179055506001600981905550620000b3620001c560201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001ee565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612fef80620001fe6000396000f3fe6080604052600436106101ee5760003560e01c80636c78890d1161010d578063be4af2ba116100a0578063d0ebdbe71161006f578063d0ebdbe7146106ca578063f0ee1cc4146106f3578063f2c16e6f14610730578063f2fde38b1461076d578063f984530914610796576101ee565b8063be4af2ba14610631578063c88098f21461066e578063c89039c514610697578063d03d7f80146106a1576101ee565b8063900cf0cf116100dc578063900cf0cf14610589578063abc5800e146105b4578063b8645e27146105dd578063bbcd5bbe14610608576101ee565b80636c78890d146104f5578063715018a61461051e578063853adcc0146105355780638da5cb5b1461055e576101ee565b806319c4c518116101855780634411b3eb116101545780634411b3eb14610437578063481c6a751461046257806349943a131461048d57806365103007146104b8576101ee565b806319c4c518146103575780631e9482b4146103945780631f448c93146103bd578063388044b3146103fa576101ee565b80630e355d8b116101c15780630e355d8b1461028957806310f95fbe146102c6578063131b745e146102dd578063151cc2f11461031a576101ee565b8063016acf1e146101f357806302c2690c1461020a57806304d092c7146102475780630c11dd5d1461025e575b600080fd5b3480156101ff57600080fd5b506102086107bf565b005b34801561021657600080fd5b50610231600480360381019061022c9190611f90565b6108f0565b60405161023e9190611feb565b60405180910390f35b34801561025357600080fd5b5061025c61091f565b005b34801561026a57600080fd5b50610273610b7c565b6040516102809190611feb565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612006565b610b8f565b6040516102bd919061204c565b60405180910390f35b3480156102d257600080fd5b506102db610ba7565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190612067565b610c9e565b604051610311919061204c565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190612067565b610cb6565b60405161034e919061204c565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190612067565b610e41565b60405161038b9190612152565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190611f90565b610ed8565b005b3480156103c957600080fd5b506103e460048036038101906103df91906122cd565b610f87565b6040516103f1919061204c565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190612067565b610ff2565b60405161042e9190611feb565b60405180910390f35b34801561044357600080fd5b5061044c611012565b6040516104599190612325565b60405180910390f35b34801561046e57600080fd5b50610477611017565b604051610484919061234f565b60405180910390f35b34801561049957600080fd5b506104a261103d565b6040516104af9190612325565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190612067565b611043565b6040516104ec9190611feb565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612396565b611099565b005b34801561052a57600080fd5b50610533611190565b005b34801561054157600080fd5b5061055c600480360381019061055791906122cd565b6111a4565b005b34801561056a57600080fd5b50610573611469565b604051610580919061234f565b60405180910390f35b34801561059557600080fd5b5061059e611492565b6040516105ab9190612325565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612499565b611498565b005b3480156105e957600080fd5b506105f2611619565b6040516105ff9190611feb565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612067565b611630565b005b34801561063d57600080fd5b5061065860048036038101906106539190612067565b61167c565b604051610665919061204c565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612006565b6116c5565b005b61069f6116d7565b005b3480156106ad57600080fd5b506106c860048036038101906106c391906125d4565b6118aa565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190612067565b6119f1565b005b3480156106ff57600080fd5b5061071a6004803603810190610715919061264c565b611b10565b6040516107279190612325565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190612067565b611b41565b6040516107649190611feb565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190612067565b611b61565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906126b8565b611be4565b005b6107c7611cdc565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3610812611469565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161084b919061234f565b602060405180830381865afa158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c91906126fa565b6040518363ffffffff1660e01b81526004016108a9929190612727565b6020604051808303816000875af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190612765565b5050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b610927611d5a565b600a60009054906101000a900460ff16610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d906127ef565b60405180910390fd5b60076000600954815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d9061285b565b60405180910390fd5b6000610aae600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610aa457602002820191906000526020600020905b815481526020019060010190808311610a90575b5050505050610f87565b905080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610aff91906128aa565b92505081905550600160076000600954815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050610b7a611da9565b565b600a60009054906101000a900460ff1681565b60026020528060005260406000206000915090505481565b610baf611db2565b73ffffffffffffffffffffffffffffffffffffffff16610bcd611469565b73ffffffffffffffffffffffffffffffffffffffff161480610c435750610bf2611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c799061293a565b60405180910390fd5b600160096000828254610c95919061295a565b92505081905550565b60046020528060005260406000206000915090505481565b600060076000600954815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d265760009050610e3c565b600a60009054906101000a900460ff16610d435760009050610e3c565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d9d5760009050610e3c565b6000610e35600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610e2b57602002820191906000526020600020905b815481526020019060010190808311610e17575b5050505050610f87565b9050809150505b919050565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610ecc57602002820191906000526020600020905b815481526020019060010190808311610eb8575b50505050509050919050565b610ee0611cdc565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3083856040518463ffffffff1660e01b8152600401610f3f9392919061298e565b6020604051808303816000875af1158015610f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f829190612765565b505050565b6000806000905060005b8351811015610fe85760026000858381518110610fb157610fb06129c5565b5b602002602001015181526020019081526020016000205482610fd391906128aa565b91508080610fe0906129f4565b915050610f91565b5080915050919050565b60066020528060005260406000206000915054906101000a900460ff1681565b600b81565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110a1611db2565b73ffffffffffffffffffffffffffffffffffffffff166110bf611469565b73ffffffffffffffffffffffffffffffffffffffff16148061113557506110e4611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b9061293a565b60405180910390fd5b8060026000848152602001908152602001600020819055505050565b611198611cdc565b6111a26000611dba565b565b6111ac611d5a565b600a60009054906101000a900460ff16156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390612aae565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90612b40565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612bd2565b60405180910390fd5b600b815114611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612c3e565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090805190602001906113ac929190611e7e565b506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806040516114139190612cee565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f8a4c08632209dd6a8b06dbec13067b0c1abfcf01df05d4fc91ae44a0caa8308c60405160405180910390a3611466611da9565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b6114a0611db2565b73ffffffffffffffffffffffffffffffffffffffff166114be611469565b73ffffffffffffffffffffffffffffffffffffffff16148061153457506114e3611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061293a565b60405180910390fd5b80518251146115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90612d77565b60405180910390fd5b60005b8251811015611614576116018382815181106115d9576115d86129c5565b5b60200260200101518383815181106115f4576115f36129c5565b5b6020026020010151611099565b808061160c906129f4565b9150506115ba565b505050565b6000600a60009054906101000a900460ff16905090565b611638611cdc565b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116cd611cdc565b8060088190555050565b6116df611d5a565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506008548173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611742919061234f565b602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178391906126fa565b10156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90612e09565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306008546040518463ffffffff1660e01b81526004016118039392919061298e565b6020604051808303816000875af1158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190612765565b506001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506118a8611da9565b565b6118b2611cdc565b80518251146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90612e9b565b60405180910390fd5b60005b81518110156119ec57600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30848481518110611954576119536129c5565b5b602002602001015186858151811061196f5761196e6129c5565b5b60200260200101516040518463ffffffff1660e01b81526004016119959392919061298e565b6020604051808303816000875af11580156119b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d89190612765565b5080806119e4906129f4565b9150506118f9565b505050565b6119f9611db2565b73ffffffffffffffffffffffffffffffffffffffff16611a17611469565b73ffffffffffffffffffffffffffffffffffffffff161480611a8d5750611a3c611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac39061293a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036020528160005260406000208181548110611b2c57600080fd5b90600052602060002001600091509150505481565b60056020528060005260406000206000915054906101000a900460ff1681565b611b69611cdc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90612f2d565b60405180910390fd5b611be181611dba565b50565b611bec611db2565b73ffffffffffffffffffffffffffffffffffffffff16611c0a611469565b73ffffffffffffffffffffffffffffffffffffffff161480611c805750611c2f611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb69061293a565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611ce4611db2565b73ffffffffffffffffffffffffffffffffffffffff16611d02611469565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f9061293a565b60405180910390fd5b565b600260015403611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690612f99565b60405180910390fd5b6002600181905550565b60018081905550565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255906000526020600020908101928215611eba579160200282015b82811115611eb9578251825591602001919060010190611e9e565b5b509050611ec79190611ecb565b5090565b5b80821115611ee4576000816000905550600101611ecc565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611f0f81611efc565b8114611f1a57600080fd5b50565b600081359050611f2c81611f06565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f5d82611f32565b9050919050565b611f6d81611f52565b8114611f7857600080fd5b50565b600081359050611f8a81611f64565b92915050565b60008060408385031215611fa757611fa6611ef2565b5b6000611fb585828601611f1d565b9250506020611fc685828601611f7b565b9150509250929050565b60008115159050919050565b611fe581611fd0565b82525050565b60006020820190506120006000830184611fdc565b92915050565b60006020828403121561201c5761201b611ef2565b5b600061202a84828501611f1d565b91505092915050565b6000819050919050565b61204681612033565b82525050565b6000602082019050612061600083018461203d565b92915050565b60006020828403121561207d5761207c611ef2565b5b600061208b84828501611f7b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120c981611efc565b82525050565b60006120db83836120c0565b60208301905092915050565b6000602082019050919050565b60006120ff82612094565b612109818561209f565b9350612114836120b0565b8060005b8381101561214557815161212c88826120cf565b9750612137836120e7565b925050600181019050612118565b5085935050505092915050565b6000602082019050818103600083015261216c81846120f4565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121c282612179565b810181811067ffffffffffffffff821117156121e1576121e061218a565b5b80604052505050565b60006121f4611ee8565b905061220082826121b9565b919050565b600067ffffffffffffffff8211156122205761221f61218a565b5b602082029050602081019050919050565b600080fd5b600061224961224484612205565b6121ea565b9050808382526020820190506020840283018581111561226c5761226b612231565b5b835b8181101561229557806122818882611f1d565b84526020840193505060208101905061226e565b5050509392505050565b600082601f8301126122b4576122b3612174565b5b81356122c4848260208601612236565b91505092915050565b6000602082840312156122e3576122e2611ef2565b5b600082013567ffffffffffffffff81111561230157612300611ef7565b5b61230d8482850161229f565b91505092915050565b61231f81611efc565b82525050565b600060208201905061233a6000830184612316565b92915050565b61234981611f52565b82525050565b60006020820190506123646000830184612340565b92915050565b61237381612033565b811461237e57600080fd5b50565b6000813590506123908161236a565b92915050565b600080604083850312156123ad576123ac611ef2565b5b60006123bb85828601611f1d565b92505060206123cc85828601612381565b9150509250929050565b600067ffffffffffffffff8211156123f1576123f061218a565b5b602082029050602081019050919050565b6000612415612410846123d6565b6121ea565b9050808382526020820190506020840283018581111561243857612437612231565b5b835b81811015612461578061244d8882612381565b84526020840193505060208101905061243a565b5050509392505050565b600082601f8301126124805761247f612174565b5b8135612490848260208601612402565b91505092915050565b600080604083850312156124b0576124af611ef2565b5b600083013567ffffffffffffffff8111156124ce576124cd611ef7565b5b6124da8582860161229f565b925050602083013567ffffffffffffffff8111156124fb576124fa611ef7565b5b6125078582860161246b565b9150509250929050565b600067ffffffffffffffff82111561252c5761252b61218a565b5b602082029050602081019050919050565b600061255061254b84612511565b6121ea565b9050808382526020820190506020840283018581111561257357612572612231565b5b835b8181101561259c57806125888882611f7b565b845260208401935050602081019050612575565b5050509392505050565b600082601f8301126125bb576125ba612174565b5b81356125cb84826020860161253d565b91505092915050565b600080604083850312156125eb576125ea611ef2565b5b600083013567ffffffffffffffff81111561260957612608611ef7565b5b6126158582860161229f565b925050602083013567ffffffffffffffff81111561263657612635611ef7565b5b612642858286016125a6565b9150509250929050565b6000806040838503121561266357612662611ef2565b5b600061267185828601611f7b565b925050602061268285828601611f1d565b9150509250929050565b61269581611fd0565b81146126a057600080fd5b50565b6000813590506126b28161268c565b92915050565b6000602082840312156126ce576126cd611ef2565b5b60006126dc848285016126a3565b91505092915050565b6000815190506126f481611f06565b92915050565b6000602082840312156127105761270f611ef2565b5b600061271e848285016126e5565b91505092915050565b600060408201905061273c6000830185612340565b6127496020830184612316565b9392505050565b60008151905061275f8161268c565b92915050565b60006020828403121561277b5761277a611ef2565b5b600061278984828501612750565b91505092915050565b600082825260208201905092915050565b7f5375626d697373696f6e7320617265207374696c6c206f70656e2e0000000000600082015250565b60006127d9601b83612792565b91506127e4826127a3565b602082019050919050565b60006020820190508181036000830152612808816127cc565b9050919050565b7f416c726561647920636c61696d656420706f696e747300000000000000000000600082015250565b6000612845601683612792565b91506128508261280f565b602082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128b582612033565b91506128c083612033565b9250828201905082811215600083121683821260008412151617156128e8576128e761287b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612924602083612792565b915061292f826128ee565b602082019050919050565b6000602082019050818103600083015261295381612917565b9050919050565b600061296582611efc565b915061297083611efc565b92508282019050808211156129885761298761287b565b5b92915050565b60006060820190506129a36000830186612340565b6129b06020830185612340565b6129bd6040830184612316565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006129ff82611efc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3157612a3061287b565b5b600182019050919050565b7f5375626d697373696f6e7320617265207061757365642e20506c65617365206360008201527f6865636b206261636b206c617465722e00000000000000000000000000000000602082015250565b6000612a98603083612792565b9150612aa382612a3c565b604082019050919050565b60006020820190508181036000830152612ac781612a8b565b9050919050565b7f596f75206d757374206465706f73697420746f6b656e7320746f20706172746960008201527f6369706174650000000000000000000000000000000000000000000000000000602082015250565b6000612b2a602683612792565b9150612b3582612ace565b604082019050919050565b60006020820190508181036000830152612b5981612b1d565b9050919050565b7f596f75206861766520616c7265616479207375626d697474656420612074656160008201527f6d00000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bbc602183612792565b9150612bc782612b60565b604082019050919050565b60006020820190508181036000830152612beb81612baf565b9050919050565b7f5465616d206d757374206861766520313120706c617965727300000000000000600082015250565b6000612c28601983612792565b9150612c3382612bf2565b602082019050919050565b60006020820190508181036000830152612c5781612c1b565b9050919050565b600081905092915050565b612c7281611efc565b82525050565b6000612c848383612c69565b60208301905092915050565b6000612c9b82612094565b612ca58185612c5e565b9350612cb0836120b0565b8060005b83811015612ce1578151612cc88882612c78565b9750612cd3836120e7565b925050600181019050612cb4565b5085935050505092915050565b6000612cfa8284612c90565b915081905092915050565b7f4e616d657320616e6420706f696e747320617272617973206d7573742062652060008201527f7468652073616d65206c656e6774680000000000000000000000000000000000602082015250565b6000612d61602f83612792565b9150612d6c82612d05565b604082019050919050565b60006020820190508181036000830152612d9081612d54565b9050919050565b7f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320696e2060008201527f796f75722077616c6c657420746f20706c61792e000000000000000000000000602082015250565b6000612df3603483612792565b9150612dfe82612d97565b604082019050919050565b60006020820190508181036000830152612e2281612de6565b9050919050565b7f416d6f756e747320616e64207061727469636970616e7473206172726179732060008201527f6d757374206265207468652073616d65206c656e677468000000000000000000602082015250565b6000612e85603783612792565b9150612e9082612e29565b604082019050919050565b60006020820190508181036000830152612eb481612e78565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f17602683612792565b9150612f2282612ebb565b604082019050919050565b60006020820190508181036000830152612f4681612f0a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612f83601f83612792565b9150612f8e82612f4d565b602082019050919050565b60006020820190508181036000830152612fb281612f76565b905091905056fea2646970667358221220353525dced504a704215eb843afa3c9abde9fd50f9190a0992390f0e06bc57c864736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636c78890d1161010d578063be4af2ba116100a0578063d0ebdbe71161006f578063d0ebdbe7146106ca578063f0ee1cc4146106f3578063f2c16e6f14610730578063f2fde38b1461076d578063f984530914610796576101ee565b8063be4af2ba14610631578063c88098f21461066e578063c89039c514610697578063d03d7f80146106a1576101ee565b8063900cf0cf116100dc578063900cf0cf14610589578063abc5800e146105b4578063b8645e27146105dd578063bbcd5bbe14610608576101ee565b80636c78890d146104f5578063715018a61461051e578063853adcc0146105355780638da5cb5b1461055e576101ee565b806319c4c518116101855780634411b3eb116101545780634411b3eb14610437578063481c6a751461046257806349943a131461048d57806365103007146104b8576101ee565b806319c4c518146103575780631e9482b4146103945780631f448c93146103bd578063388044b3146103fa576101ee565b80630e355d8b116101c15780630e355d8b1461028957806310f95fbe146102c6578063131b745e146102dd578063151cc2f11461031a576101ee565b8063016acf1e146101f357806302c2690c1461020a57806304d092c7146102475780630c11dd5d1461025e575b600080fd5b3480156101ff57600080fd5b506102086107bf565b005b34801561021657600080fd5b50610231600480360381019061022c9190611f90565b6108f0565b60405161023e9190611feb565b60405180910390f35b34801561025357600080fd5b5061025c61091f565b005b34801561026a57600080fd5b50610273610b7c565b6040516102809190611feb565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190612006565b610b8f565b6040516102bd919061204c565b60405180910390f35b3480156102d257600080fd5b506102db610ba7565b005b3480156102e957600080fd5b5061030460048036038101906102ff9190612067565b610c9e565b604051610311919061204c565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190612067565b610cb6565b60405161034e919061204c565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190612067565b610e41565b60405161038b9190612152565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190611f90565b610ed8565b005b3480156103c957600080fd5b506103e460048036038101906103df91906122cd565b610f87565b6040516103f1919061204c565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190612067565b610ff2565b60405161042e9190611feb565b60405180910390f35b34801561044357600080fd5b5061044c611012565b6040516104599190612325565b60405180910390f35b34801561046e57600080fd5b50610477611017565b604051610484919061234f565b60405180910390f35b34801561049957600080fd5b506104a261103d565b6040516104af9190612325565b60405180910390f35b3480156104c457600080fd5b506104df60048036038101906104da9190612067565b611043565b6040516104ec9190611feb565b60405180910390f35b34801561050157600080fd5b5061051c60048036038101906105179190612396565b611099565b005b34801561052a57600080fd5b50610533611190565b005b34801561054157600080fd5b5061055c600480360381019061055791906122cd565b6111a4565b005b34801561056a57600080fd5b50610573611469565b604051610580919061234f565b60405180910390f35b34801561059557600080fd5b5061059e611492565b6040516105ab9190612325565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190612499565b611498565b005b3480156105e957600080fd5b506105f2611619565b6040516105ff9190611feb565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612067565b611630565b005b34801561063d57600080fd5b5061065860048036038101906106539190612067565b61167c565b604051610665919061204c565b60405180910390f35b34801561067a57600080fd5b5061069560048036038101906106909190612006565b6116c5565b005b61069f6116d7565b005b3480156106ad57600080fd5b506106c860048036038101906106c391906125d4565b6118aa565b005b3480156106d657600080fd5b506106f160048036038101906106ec9190612067565b6119f1565b005b3480156106ff57600080fd5b5061071a6004803603810190610715919061264c565b611b10565b6040516107279190612325565b60405180910390f35b34801561073c57600080fd5b5061075760048036038101906107529190612067565b611b41565b6040516107649190611feb565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f9190612067565b611b61565b005b3480156107a257600080fd5b506107bd60048036038101906107b891906126b8565b611be4565b005b6107c7611cdc565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3610812611469565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161084b919061234f565b602060405180830381865afa158015610868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088c91906126fa565b6040518363ffffffff1660e01b81526004016108a9929190612727565b6020604051808303816000875af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec9190612765565b5050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b610927611d5a565b600a60009054906101000a900460ff16610976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096d906127ef565b60405180910390fd5b60076000600954815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d9061285b565b60405180910390fd5b6000610aae600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610aa457602002820191906000526020600020905b815481526020019060010190808311610a90575b5050505050610f87565b905080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610aff91906128aa565b92505081905550600160076000600954815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050610b7a611da9565b565b600a60009054906101000a900460ff1681565b60026020528060005260406000206000915090505481565b610baf611db2565b73ffffffffffffffffffffffffffffffffffffffff16610bcd611469565b73ffffffffffffffffffffffffffffffffffffffff161480610c435750610bf2611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c799061293a565b60405180910390fd5b600160096000828254610c95919061295a565b92505081905550565b60046020528060005260406000206000915090505481565b600060076000600954815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610d265760009050610e3c565b600a60009054906101000a900460ff16610d435760009050610e3c565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d9d5760009050610e3c565b6000610e35600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610e2b57602002820191906000526020600020905b815481526020019060010190808311610e17575b5050505050610f87565b9050809150505b919050565b6060600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610ecc57602002820191906000526020600020905b815481526020019060010190808311610eb8575b50505050509050919050565b610ee0611cdc565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3083856040518463ffffffff1660e01b8152600401610f3f9392919061298e565b6020604051808303816000875af1158015610f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f829190612765565b505050565b6000806000905060005b8351811015610fe85760026000858381518110610fb157610fb06129c5565b5b602002602001015181526020019081526020016000205482610fd391906128aa565b91508080610fe0906129f4565b915050610f91565b5080915050919050565b60066020528060005260406000206000915054906101000a900460ff1681565b600b81565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6110a1611db2565b73ffffffffffffffffffffffffffffffffffffffff166110bf611469565b73ffffffffffffffffffffffffffffffffffffffff16148061113557506110e4611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b9061293a565b60405180910390fd5b8060026000848152602001908152602001600020819055505050565b611198611cdc565b6111a26000611dba565b565b6111ac611d5a565b600a60009054906101000a900460ff16156111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390612aae565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90612b40565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90612bd2565b60405180910390fd5b600b815114611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090612c3e565b60405180910390fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090805190602001906113ac929190611e7e565b506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806040516114139190612cee565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f8a4c08632209dd6a8b06dbec13067b0c1abfcf01df05d4fc91ae44a0caa8308c60405160405180910390a3611466611da9565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b6114a0611db2565b73ffffffffffffffffffffffffffffffffffffffff166114be611469565b73ffffffffffffffffffffffffffffffffffffffff16148061153457506114e3611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061293a565b60405180910390fd5b80518251146115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ae90612d77565b60405180910390fd5b60005b8251811015611614576116018382815181106115d9576115d86129c5565b5b60200260200101518383815181106115f4576115f36129c5565b5b6020026020010151611099565b808061160c906129f4565b9150506115ba565b505050565b6000600a60009054906101000a900460ff16905090565b611638611cdc565b80600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6116cd611cdc565b8060088190555050565b6116df611d5a565b6000600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506008548173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611742919061234f565b602060405180830381865afa15801561175f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178391906126fa565b10156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90612e09565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd33306008546040518463ffffffff1660e01b81526004016118039392919061298e565b6020604051808303816000875af1158015611822573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118469190612765565b506001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506118a8611da9565b565b6118b2611cdc565b80518251146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90612e9b565b60405180910390fd5b60005b81518110156119ec57600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd30848481518110611954576119536129c5565b5b602002602001015186858151811061196f5761196e6129c5565b5b60200260200101516040518463ffffffff1660e01b81526004016119959392919061298e565b6020604051808303816000875af11580156119b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d89190612765565b5080806119e4906129f4565b9150506118f9565b505050565b6119f9611db2565b73ffffffffffffffffffffffffffffffffffffffff16611a17611469565b73ffffffffffffffffffffffffffffffffffffffff161480611a8d5750611a3c611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac39061293a565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60036020528160005260406000208181548110611b2c57600080fd5b90600052602060002001600091509150505481565b60056020528060005260406000206000915054906101000a900460ff1681565b611b69611cdc565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf90612f2d565b60405180910390fd5b611be181611dba565b50565b611bec611db2565b73ffffffffffffffffffffffffffffffffffffffff16611c0a611469565b73ffffffffffffffffffffffffffffffffffffffff161480611c805750611c2f611db2565b73ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb69061293a565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611ce4611db2565b73ffffffffffffffffffffffffffffffffffffffff16611d02611469565b73ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4f9061293a565b60405180910390fd5b565b600260015403611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690612f99565b60405180910390fd5b6002600181905550565b60018081905550565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255906000526020600020908101928215611eba579160200282015b82811115611eb9578251825591602001919060010190611e9e565b5b509050611ec79190611ecb565b5090565b5b80821115611ee4576000816000905550600101611ecc565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611f0f81611efc565b8114611f1a57600080fd5b50565b600081359050611f2c81611f06565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f5d82611f32565b9050919050565b611f6d81611f52565b8114611f7857600080fd5b50565b600081359050611f8a81611f64565b92915050565b60008060408385031215611fa757611fa6611ef2565b5b6000611fb585828601611f1d565b9250506020611fc685828601611f7b565b9150509250929050565b60008115159050919050565b611fe581611fd0565b82525050565b60006020820190506120006000830184611fdc565b92915050565b60006020828403121561201c5761201b611ef2565b5b600061202a84828501611f1d565b91505092915050565b6000819050919050565b61204681612033565b82525050565b6000602082019050612061600083018461203d565b92915050565b60006020828403121561207d5761207c611ef2565b5b600061208b84828501611f7b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120c981611efc565b82525050565b60006120db83836120c0565b60208301905092915050565b6000602082019050919050565b60006120ff82612094565b612109818561209f565b9350612114836120b0565b8060005b8381101561214557815161212c88826120cf565b9750612137836120e7565b925050600181019050612118565b5085935050505092915050565b6000602082019050818103600083015261216c81846120f4565b905092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6121c282612179565b810181811067ffffffffffffffff821117156121e1576121e061218a565b5b80604052505050565b60006121f4611ee8565b905061220082826121b9565b919050565b600067ffffffffffffffff8211156122205761221f61218a565b5b602082029050602081019050919050565b600080fd5b600061224961224484612205565b6121ea565b9050808382526020820190506020840283018581111561226c5761226b612231565b5b835b8181101561229557806122818882611f1d565b84526020840193505060208101905061226e565b5050509392505050565b600082601f8301126122b4576122b3612174565b5b81356122c4848260208601612236565b91505092915050565b6000602082840312156122e3576122e2611ef2565b5b600082013567ffffffffffffffff81111561230157612300611ef7565b5b61230d8482850161229f565b91505092915050565b61231f81611efc565b82525050565b600060208201905061233a6000830184612316565b92915050565b61234981611f52565b82525050565b60006020820190506123646000830184612340565b92915050565b61237381612033565b811461237e57600080fd5b50565b6000813590506123908161236a565b92915050565b600080604083850312156123ad576123ac611ef2565b5b60006123bb85828601611f1d565b92505060206123cc85828601612381565b9150509250929050565b600067ffffffffffffffff8211156123f1576123f061218a565b5b602082029050602081019050919050565b6000612415612410846123d6565b6121ea565b9050808382526020820190506020840283018581111561243857612437612231565b5b835b81811015612461578061244d8882612381565b84526020840193505060208101905061243a565b5050509392505050565b600082601f8301126124805761247f612174565b5b8135612490848260208601612402565b91505092915050565b600080604083850312156124b0576124af611ef2565b5b600083013567ffffffffffffffff8111156124ce576124cd611ef7565b5b6124da8582860161229f565b925050602083013567ffffffffffffffff8111156124fb576124fa611ef7565b5b6125078582860161246b565b9150509250929050565b600067ffffffffffffffff82111561252c5761252b61218a565b5b602082029050602081019050919050565b600061255061254b84612511565b6121ea565b9050808382526020820190506020840283018581111561257357612572612231565b5b835b8181101561259c57806125888882611f7b565b845260208401935050602081019050612575565b5050509392505050565b600082601f8301126125bb576125ba612174565b5b81356125cb84826020860161253d565b91505092915050565b600080604083850312156125eb576125ea611ef2565b5b600083013567ffffffffffffffff81111561260957612608611ef7565b5b6126158582860161229f565b925050602083013567ffffffffffffffff81111561263657612635611ef7565b5b612642858286016125a6565b9150509250929050565b6000806040838503121561266357612662611ef2565b5b600061267185828601611f7b565b925050602061268285828601611f1d565b9150509250929050565b61269581611fd0565b81146126a057600080fd5b50565b6000813590506126b28161268c565b92915050565b6000602082840312156126ce576126cd611ef2565b5b60006126dc848285016126a3565b91505092915050565b6000815190506126f481611f06565b92915050565b6000602082840312156127105761270f611ef2565b5b600061271e848285016126e5565b91505092915050565b600060408201905061273c6000830185612340565b6127496020830184612316565b9392505050565b60008151905061275f8161268c565b92915050565b60006020828403121561277b5761277a611ef2565b5b600061278984828501612750565b91505092915050565b600082825260208201905092915050565b7f5375626d697373696f6e7320617265207374696c6c206f70656e2e0000000000600082015250565b60006127d9601b83612792565b91506127e4826127a3565b602082019050919050565b60006020820190508181036000830152612808816127cc565b9050919050565b7f416c726561647920636c61696d656420706f696e747300000000000000000000600082015250565b6000612845601683612792565b91506128508261280f565b602082019050919050565b6000602082019050818103600083015261287481612838565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128b582612033565b91506128c083612033565b9250828201905082811215600083121683821260008412151617156128e8576128e761287b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612924602083612792565b915061292f826128ee565b602082019050919050565b6000602082019050818103600083015261295381612917565b9050919050565b600061296582611efc565b915061297083611efc565b92508282019050808211156129885761298761287b565b5b92915050565b60006060820190506129a36000830186612340565b6129b06020830185612340565b6129bd6040830184612316565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006129ff82611efc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3157612a3061287b565b5b600182019050919050565b7f5375626d697373696f6e7320617265207061757365642e20506c65617365206360008201527f6865636b206261636b206c617465722e00000000000000000000000000000000602082015250565b6000612a98603083612792565b9150612aa382612a3c565b604082019050919050565b60006020820190508181036000830152612ac781612a8b565b9050919050565b7f596f75206d757374206465706f73697420746f6b656e7320746f20706172746960008201527f6369706174650000000000000000000000000000000000000000000000000000602082015250565b6000612b2a602683612792565b9150612b3582612ace565b604082019050919050565b60006020820190508181036000830152612b5981612b1d565b9050919050565b7f596f75206861766520616c7265616479207375626d697474656420612074656160008201527f6d00000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bbc602183612792565b9150612bc782612b60565b604082019050919050565b60006020820190508181036000830152612beb81612baf565b9050919050565b7f5465616d206d757374206861766520313120706c617965727300000000000000600082015250565b6000612c28601983612792565b9150612c3382612bf2565b602082019050919050565b60006020820190508181036000830152612c5781612c1b565b9050919050565b600081905092915050565b612c7281611efc565b82525050565b6000612c848383612c69565b60208301905092915050565b6000612c9b82612094565b612ca58185612c5e565b9350612cb0836120b0565b8060005b83811015612ce1578151612cc88882612c78565b9750612cd3836120e7565b925050600181019050612cb4565b5085935050505092915050565b6000612cfa8284612c90565b915081905092915050565b7f4e616d657320616e6420706f696e747320617272617973206d7573742062652060008201527f7468652073616d65206c656e6774680000000000000000000000000000000000602082015250565b6000612d61602f83612792565b9150612d6c82612d05565b604082019050919050565b60006020820190508181036000830152612d9081612d54565b9050919050565b7f596f7520646f6e2774206861766520656e6f75676820746f6b656e7320696e2060008201527f796f75722077616c6c657420746f20706c61792e000000000000000000000000602082015250565b6000612df3603483612792565b9150612dfe82612d97565b604082019050919050565b60006020820190508181036000830152612e2281612de6565b9050919050565b7f416d6f756e747320616e64207061727469636970616e7473206172726179732060008201527f6d757374206265207468652073616d65206c656e677468000000000000000000602082015250565b6000612e85603783612792565b9150612e9082612e29565b604082019050919050565b60006020820190508181036000830152612eb481612e78565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f17602683612792565b9150612f2282612ebb565b604082019050919050565b60006020820190508181036000830152612f4681612f0a565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612f83601f83612792565b9150612f8e82612f4d565b602082019050919050565b60006020820190508181036000830152612fb281612f76565b905091905056fea2646970667358221220353525dced504a704215eb843afa3c9abde9fd50f9190a0992390f0e06bc57c864736f6c63430008120033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 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.