Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
MEME
Overview
Max Total Supply
118,000,000,000 OGz
Holders
788 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
135,068,170.655576015561819077 OGzValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OGzClub
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.19; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract OGzClub is ERC20, Ownable{ uint256 public totalInitializated; uint256 private constant POOL_NUMBER = 7; uint256 private constant INITIALIZE_SUPPLY = 118_000_000_000 ether; uint256 public constant MAX_BUY_TAX_RATE = 800; uint256 public constant MAX_SELL_TAX_RATE = 800; uint256 public totalBuyTaxRate; uint256 public totalSellTaxRate; uint256 private toggleReferenceFees = 0; uint256 public togglePreferredNicknames; uint256 public referenceRate; uint256 public isTradeOpen; address public taxManager; address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; address public immutable PairAddress; Factory public constant FACTORY = Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f); struct Pools { address poolAddress; uint256 taxRate; } struct Referrers { address referrer; uint256 timestamp; } struct Referrals { address referral; string nickname; uint256 timestamp; Referrers[] referees; } /// @dev mapping for all buying fee pools mapping(uint256 => Pools) public buyPools; mapping(uint256 => Pools) public sellPools; mapping(address => address) internal _referrals; mapping(address => string) internal _referralNickname; mapping(uint256 => uint256) internal _toggledOffBuyPools; mapping(uint256 => uint256) internal _toggledOffSellPools; mapping(string => address) internal _nickNames; /// @dev mapping for accounts that allow nicknames mapping(address => uint256) internal _preferredNicknames; /// @dev mapping for tax-frees accounts mapping(address => uint256) public _taxFrees; event RegisteredReferrence(address referral, string nickname, address referrer, uint256 timestamp); event CreatedLink(address owner, string nickName, uint256 timestamp); event BuyFeesUpdated(uint256 indexed poolId, uint256 newRate); event SellFeesUpdated(uint256 indexed poolId, uint256 newRate); event ReferenceFeeUpdated(uint256 oldRate, uint256 newFee); event ChangedPoolAddress(uint256 indexed poolId, address newAddress); event TransferWithTaxFee(string referralNickName, address referralAddress, address from, uint256 amount, uint256 referralEarnedAmount, uint256 timestamp); event ChangedTaxManager(address oldTaxManager, address newTaxManager); event TradingEnabled(uint256 timestamp); constructor( address _multisigOwner, address _taxManager, uint256 _referenceRate, Pools[] memory _poolsData) ERC20("OGzClub", "OGz") { require(_poolsData.length == POOL_NUMBER, "Pools datas length must be equal to 7"); require(_multisigOwner != address(0) && _taxManager != address(0), "Owner and tax manager address cannot equal to address 0"); require(_referenceRate > 0, "Reference tax rate must be greater than zero"); referenceRate = _referenceRate; PairAddress = FACTORY.createPair(address(this), WETH); taxManager = _taxManager; _taxFrees[_multisigOwner] = 1; _transferOwnership(_multisigOwner); togglePreferredNicknames = 1; for (uint256 i = 0; i < _poolsData.length; i++) { require(_poolsData[i].poolAddress != address(0), "Pool address cannot equal to 0 address"); require(_poolsData[i].taxRate > 0, "Pool rate must be greater than 0"); buyPools[i] = _poolsData[i]; sellPools[i] = _poolsData[i]; totalBuyTaxRate += _poolsData[i].taxRate; totalSellTaxRate += _poolsData[i].taxRate; } require( totalBuyTaxRate == MAX_BUY_TAX_RATE && totalSellTaxRate == MAX_SELL_TAX_RATE, "Total tax rate must be equal to maximum tax rate" ); _mint(owner(), INITIALIZE_SUPPLY); } /** @dev Modifier to make a function callable only by the Tax Manager. * Throws if called by any account other than the Tax Manager. * @notice You must be the Tax Manager to call this. */ modifier onlyTaxManager() { require(msg.sender == taxManager, "You are not tax manager."); _; } modifier initializationControl() { require(totalInitializated <= 62, "Initialization is done"); _; } /** * @dev Modifier to restrict function access to preferred accounts for nickname creation. * @notice This modifier ensures that the function can only be accessed by preferred accounts, * or if the togglePreferredNicknames feature is turned off (equals to 0). */ modifier onlyPreferredAccountCreateNickname() { require( togglePreferredNicknames == 0 || _preferredNicknames[msg.sender] == 1, "You are not preferred"); _; } /** * @dev Allows the current Tax Manager to relinquish control of the contract. * It sets the tax manager address to zero, hence no more tax related actions can be performed. * @notice Only the current Tax Manager can renounce tax management. */ function renounceTaxManager() external onlyTaxManager { address oldTaxManager = taxManager; taxManager = address(0); emit ChangedTaxManager(oldTaxManager, taxManager); } /** * @dev Initializes referral data for the new token contract, pulling from the previously deployed token contract. * The referrals array provided should contain referral data from the previous contract to be transferred to the new one. * Emits a {CreatedLink} event for each referral that is successfully initialized. * Emits a {RegisteredReferrence} event for each referee that is successfully registered under a referrer. * @notice Only the contract owner can initialize the referral data. * @param referrals An array of Referral structs from the previous contract. * Each `Referral` struct should include the referrer's Ethereum address, nickname, and timestamp, * as well as an array of `Referee` structs, each of which should include the referred account's Ethereum address and timestamp. * @return true if the function succeeds. */ function initializeReferralDatas(Referrals[] memory referrals) external onlyOwner initializationControl returns(bool) { require(referrals.length > 0, "Referrals array length must be greater than zero"); totalInitializated += referrals.length; for (uint256 i = 0; i < referrals.length;) { _preferredNicknames[referrals[i].referral] = 1; require(bytes(_referralNickname[referrals[i].referral]).length == 0, "You already have a nickname"); require(bytes(referrals[i].nickname).length != 0 && bytes(referrals[i].nickname).length <= 64, "Nickname must be between 1 and 64 characters"); require(_nickNames[referrals[i].nickname] == address(0), "Nickname is already taken"); _nickNames[referrals[i].nickname] = referrals[i].referral; _referralNickname[referrals[i].referral] = referrals[i].nickname; emit CreatedLink(referrals[i].referral, referrals[i].nickname, referrals[i].timestamp); if (referrals[i].referees.length > 0) { bytes32 referrerNicknameHash = keccak256(abi.encodePacked(_referralNickname[referrals[i].referral])); for (uint256 k = 0; k < referrals[i].referees.length;) { require( _referrals[referrals[i].referral] != referrals[i].referees[k].referrer && _referrals[referrals[i].referees[k].referrer] == address(0) && referrerNicknameHash != keccak256(abi.encodePacked("")) && referrals[i].referral != address(0) && referrals[i].referral != referrals[i].referees[k].referrer, "Invalid referral" ); _referrals[referrals[i].referees[k].referrer] = referrals[i].referral; emit RegisteredReferrence(referrals[i].referral, referrals[i].nickname, referrals[i].referees[k].referrer, referrals[i].referees[k].timestamp); unchecked { k ++; } } } unchecked { i ++; } } return true; } /** * @dev Transfers the tax management to a new address. * It sets the provided address as the new tax manager. * @notice Only the current Tax Manager can transfer tax management to a new address. * @param newTaxManager The address of the new Tax Manager. */ function transferTaxManager(address newTaxManager) external onlyTaxManager { require(newTaxManager != address(0), "New address cannot be 0 address"); address oldTaxManager = taxManager; taxManager = newTaxManager; emit ChangedTaxManager(oldTaxManager, taxManager); } /** * @dev Adds a list of addresses to the tax-free list. * These addresses will be exempt from taxes imposed by the contract. * @notice Only the current Tax Manager can add addresses to the tax-free list. * A maximum of 50 addresses can be added at a time. * @param taxFrees An array of addresses to be added to the tax-free list. * @return A boolean value indicating whether the operation was successful. */ function addTaxFrees(address[] memory taxFrees) external onlyTaxManager returns(bool) { require(taxFrees.length <= 50, "Maximum 50 address can be added"); for (uint256 i = 0; i < taxFrees.length;) { if (_taxFrees[taxFrees[i]] == 0 && taxFrees[i] != address(0)) { _taxFrees[taxFrees[i]] = 1; } unchecked { i++; } } return true; } /** * @dev Removes a list of addresses from the tax-free list. * These addresses will no longer be exempt from taxes imposed by the contract. * @notice Only the current Tax Manager can remove addresses from the tax-free list. * A maximum of 50 addresses can be removed at a time. * @param taxFrees An array of addresses to be removed from the tax-free list. * @return A boolean value indicating whether the operation was successful. */ function removeTaxFrees(address[] memory taxFrees) external onlyTaxManager returns(bool) { require(taxFrees.length <= 50, "Maximum 50 address can be added"); for (uint256 i = 0; i < taxFrees.length;) { if (_taxFrees[taxFrees[i]] == 1) { delete _taxFrees[taxFrees[i]]; } unchecked { i++; } } return true; } /** * @dev Changes the address of a specific pool. * @notice This function can only be called by the current Tax Manager. It changes the * address of both the buy and sell pools at the specified pool ID. * @param poolId The ID of the pool whose address is to be changed. * @param newAddress The new address to set for the specified pool. */ function changePoolAddress( uint256 poolId, address newAddress ) external onlyTaxManager { require(newAddress != address(0), "New address cannot equal to 0 address"); require(poolId < POOL_NUMBER, "Pool id is not found."); buyPools[poolId].poolAddress = newAddress; sellPools[poolId].poolAddress = newAddress; emit ChangedPoolAddress(poolId, newAddress); } /** * @dev Function to add a list of preferred accounts for nickname creation. * @notice This function is used to add a list of accounts as preferred for creating nicknames. * The maximum limit is 50 accounts per transaction. Only contract owner can call this function. * @param account An array of account addresses to be marked as preferred. * @return Returns true if the operation is successful. */ function addPreferredNicknames(address[] memory account) external onlyOwner returns(bool) { require(account.length <= 50, "Maximum 50 account can be added"); for (uint256 i = 0; i < account.length; i++) { if (_preferredNicknames[account[i]] == 0 && account[i] != address(0)) { _preferredNicknames[account[i]] = 1; } } return true; } /** * @dev Function to remove a list of preferred accounts for nickname creation. * @notice This function is used to remove a list of accounts from the preferred accounts for creating nicknames. * The maximum limit is 50 accounts per transaction. Only contract owner can call this function. * @param account An array of account addresses to be removed from the list of preferred accounts. * @return Returns true if the operation is successful. */ function removePreferredNicknames(address[] memory account) external onlyOwner returns(bool) { require(account.length <= 50, "Maximum 50 account can be removed"); for (uint256 i = 0; i < account.length; i++) { if (_preferredNicknames[account[i]] == 1) { delete _preferredNicknames[account[i]]; } } return true; } /** * @dev Function to disable the preferred nickname creation feature. * @notice This function allows the contract owner to disable the preferred nickname creation feature. * Once this function is called, only the contract owner will be able to re-enable it. * @return Returns true if the operation is successful. */ function toggleOffPreferredNicknames() external onlyOwner returns(bool) { togglePreferredNicknames = 0; return true; } /** * @dev Function to check whether a specific account has the permission to create a nickname. * @notice This function checks whether the passed account has the permission to create a nickname. * If the preferred nickname feature is turned off (togglePreferredNicknames == 0), this function will return true for any account. * If the preferred nickname feature is turned on (togglePreferredNicknames != 0), only accounts in the preferred nicknames list (_preferredNicknames[account] == 1) will return true. * @param account The address of the account to check for the create nickname permission. * @return Returns true if the account has the permission to create a nickname. */ function checkCreateNicknamePermission(address account) external view returns(bool) { return togglePreferredNicknames == 0 || _preferredNicknames[account] == 1; } /** * @dev Function to disable the buy tax fee for a specific pool. * @notice This function will disable the buy tax fee for a specific pool by setting the corresponding _toggledOffBuyPools value to 1. * If the pool is already toggled off, the function will revert. After disabling, the total buy tax rate will be updated and the pool will be deleted. * @param poolId The id of the pool to disable the buy tax fee. * @return Returns true if the operation is successful. */ /* PoolIds: 0: Future Plan 1: Team1 2: Team2 3: Team3 4: Liquidity Pool 5: Staking 6: Future Plan or Referral */ function toggleOffBuyTaxFee(uint256 poolId) external onlyTaxManager returns(bool){ require(poolId <= POOL_NUMBER, "Pool id not found"); require(_toggledOffBuyPools[poolId] == 0, "The pool is already toggled off"); _toggledOffBuyPools[poolId] = 1; totalBuyTaxRate = totalBuyTaxRate - buyPools[poolId].taxRate; delete buyPools[poolId]; emit BuyFeesUpdated(poolId, 0); return true; } /** * @dev Function to disable the sell tax fee for a specific pool. * @notice This function will disable the sell tax fee for a specific pool by setting the corresponding _toggledOffSellPools value to 1. * If the pool is already toggled off, the function will revert. After disabling, the total sell tax rate will be updated and the pool will be deleted. * @param poolId The id of the pool to disable the sell tax fee. * @return Returns true if the operation is successful. */ function toggleOffSellTaxFee(uint256 poolId) external onlyTaxManager returns(bool){ require(poolId <= POOL_NUMBER, "Pool id not found"); require(_toggledOffSellPools[poolId] == 0, "The pool is already toggled off"); _toggledOffSellPools[poolId] = 1; totalSellTaxRate = totalSellTaxRate - sellPools[poolId].taxRate; delete sellPools[poolId]; emit SellFeesUpdated(poolId, 0); return true; } /** * @dev Function to disable the reference fee. * @notice This function will disable the reference fee by setting the toggleReferenceFees value to 1. If the reference fee is already toggled off, the function will revert. * After disabling, the reference rate will be updated to 0. * @return Returns true if the operation is successful. */ function toggleOffReferenceFee() external onlyTaxManager returns(bool) { require(toggleReferenceFees == 0, "Reference pool is already toggled off"); toggleReferenceFees = 1; uint256 oldRate = referenceRate; referenceRate = 0; emit ReferenceFeeUpdated(oldRate, 0); return true; } /** * @dev Function to decrease the buy tax fee of a specific pool. * @notice This function allows the tax manager to reduce the buy tax fee for a given pool. The new fee should be greater than 0 and less than the current tax fee, otherwise, the function will revert. This function will not work if the pool is toggled off. * @param poolId The identifier of the pool that the tax fee will be decreased for. * @param newFee The new fee that will replace the old tax fee for the given pool. * @return Returns true if the operation is successful. */ function decreaseBuyTaxFee( uint256 poolId, uint256 newFee ) external onlyTaxManager returns(bool){ require(poolId <= POOL_NUMBER, "Pool id not found"); require(_toggledOffBuyPools[poolId] == 0, "The pool is already toggled off"); require( newFee > 0 && newFee < buyPools[poolId].taxRate, "New fee rate must be between 0 and current tax fee" ); totalBuyTaxRate = totalBuyTaxRate - (buyPools[poolId].taxRate - newFee); buyPools[poolId].taxRate = newFee; emit BuyFeesUpdated(poolId, newFee); return true; } /** * @dev Function to decrease the sell tax fee of a specific pool. * @notice This function allows the tax manager to reduce the sell tax fee for a given pool. The new fee should be greater than 0 and less than the current tax fee, otherwise, the function will revert. This function will not work if the pool is toggled off. * @param poolId The identifier of the pool that the tax fee will be decreased for. * @param newFee The new fee that will replace the old tax fee for the given pool. * @return Returns true if the operation is successful. */ function decreaseSellTaxFee( uint256 poolId, uint256 newFee ) external onlyTaxManager returns(bool){ require(poolId <= POOL_NUMBER, "Pool id not found"); require(_toggledOffSellPools[poolId] == 0, "The pool is already toggled off"); require( newFee > 0 && newFee < sellPools[poolId].taxRate, "New fee rate must be between 0 and current tax fee" ); totalSellTaxRate = totalSellTaxRate - (sellPools[poolId].taxRate - newFee); sellPools[poolId].taxRate = newFee; emit SellFeesUpdated(poolId, newFee); return true; } /** * @dev Function to decrease the reference fee. * @notice This function allows the tax manager to reduce the reference fee. The new fee should be greater than 0 and less than the current fee, otherwise, the function will revert. * @param newFee The new fee that will replace the old reference fee. * @return Returns true if the operation is successful. */ function decreaseReferenceFee(uint256 newFee) external onlyTaxManager returns(bool) { require( newFee > 0 && newFee < referenceRate, "New fee rate must be between 0 and current fee" ); uint256 oldRate = referenceRate; referenceRate = newFee; emit ReferenceFeeUpdated(oldRate, newFee); return true; } /** * @dev Calculates the fee amount for a given transaction amount and fee rate. * @notice This is a private function used to calculate the fee amount based on a specific transaction amount and a fee rate. * The fee rate is a percentage value multiplied by 100 to handle it as an integer. * Therefore, it needs to be divided by 10,000 during calculation to reflect the correct fee amount. * @param amount The transaction amount for which the fee should be computed. * @param fee The fee rate used for the computation. The fee is represented as a percentage out of 10,000 (equivalent to a basis point representation). * @return Returns the calculated fee amount. */ function computeFee(uint256 amount, uint256 fee) private pure returns(uint256) { return amount * fee / 10000; } /** * @notice Enables trading. This function can only be called by the contract owner. * @dev Checks whether trading is already enabled. If not, it enables trading and triggers the TradingEnabled event. * @return Returns a boolean value. If the operation is successful, it returns true; otherwise, false. */ function enableTrading() external onlyOwner returns(bool) { require(isTradeOpen == 0, "Trade is already enabled"); isTradeOpen = 1; emit TradingEnabled(block.timestamp); return true; } /** * @notice This private function is used to send buy fees to different pools and referral addresses. * @dev It calculates and transfers fees for each buy pool unless the pool is toggled off. * It also computes and transfers the reference fee if reference fees are toggled on and there exists a referral for the owner. * If there's no referral or reference fees are toggled off, it computes and sends the fee to the last pool if it is not toggled off. * The function subtracts the total fee from the amount and returns the difference. * @param owner The address of the owner initiating the buy action. * @param from The address of the pair. * @param amount The amount of tokens being purchased. * @return Returns the amount after subtracting the total fee. */ function sendBuyFees( address owner, address from, uint256 amount ) private returns(uint256) { uint256 totalFee = 0; for (uint256 i = 0; i < POOL_NUMBER - 1; i++) { uint256 poolTaxRate = buyPools[i].taxRate; if (_toggledOffBuyPools[i] == 0) { uint256 fee = computeFee(amount, poolTaxRate); totalFee += fee; address poolAddress = buyPools[i].poolAddress; _transfer(from, poolAddress, fee); } } address referral = _referrals[owner]; if (toggleReferenceFees == 0 && referral != address(0)) { uint256 referenceFee = computeFee(amount, referenceRate); totalFee += referenceFee; _transfer(from, referral, referenceFee); emit TransferWithTaxFee(_referralNickname[referral], referral, owner, amount, referenceFee, block.timestamp); } else if (_toggledOffBuyPools[POOL_NUMBER - 1] == 0){ uint256 lastPoolFee = computeFee(amount, buyPools[POOL_NUMBER - 1].taxRate); totalFee += lastPoolFee; address lastPoolAddress = buyPools[POOL_NUMBER - 1].poolAddress; _transfer(from, lastPoolAddress, lastPoolFee); } return amount - totalFee; } /** * @notice This private function is used to send sell fees to different pools and referral addresses. * @dev It calculates and transfers fees for each sell pool unless the pool is toggled off. * It also computes and transfers the reference fee if reference fees are toggled on and there exists a referral for the owner. * If there's no referral or reference fees are toggled off, it computes and sends the fee to the last pool if it is not toggled off. * The function subtracts the total fee from the amount and returns the difference. * @param owner The address of the owner initiating the sell action. * @param amount The amount of tokens being sold. * @return Returns the amount after subtracting the total fee. */ function sendSellFees(address owner, uint256 amount) private returns(uint256) { uint256 totalFee = 0; for (uint256 i = 0; i < POOL_NUMBER - 1; i++) { uint256 poolTaxRate = sellPools[i].taxRate; if (_toggledOffSellPools[i] == 0) { uint256 fee = computeFee(amount, poolTaxRate); totalFee += fee; address poolAddress = sellPools[i].poolAddress; _transfer(owner, poolAddress, fee); } } address referral = _referrals[owner]; if (toggleReferenceFees == 0 && referral != address(0)) { uint256 referenceFee = computeFee(amount, referenceRate); totalFee += referenceFee; _transfer(owner, referral, referenceFee); emit TransferWithTaxFee(_referralNickname[referral], referral, owner, amount, referenceFee, block.timestamp); } else if(_toggledOffSellPools[POOL_NUMBER - 1] == 0){ uint256 lastPoolFee = computeFee(amount, sellPools[POOL_NUMBER - 1].taxRate); totalFee += lastPoolFee; address lastPoolAddress = sellPools[POOL_NUMBER - 1].poolAddress; _transfer(owner, lastPoolAddress, lastPoolFee); } return amount - totalFee; } function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); if (to == PairAddress && _taxFrees[from] == 0) { require(isTradeOpen == 1, "Trading is not open"); amount = sendSellFees(from, amount); } _transfer(from, to, amount); return true; } function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); if (owner == PairAddress && _taxFrees[to] == 0) { require(isTradeOpen == 1, "Trading is not open"); amount = sendBuyFees(to, owner, amount); } _transfer(owner, to, amount); return true; } /** * @notice This function allows eligible accounts to create a nickname. * @dev Function is restricted to accounts that satisfy the 'onlyPreferredAccountCreateNickname' modifier. * A nickname should be unique, not empty, and at most 64 characters long. * Emits a 'CreatedLink' event upon successful execution. * @param nickName The chosen nickname string. * @return Returns 'true' upon successful execution. */ function createNickname(string memory nickName) external onlyPreferredAccountCreateNickname returns(bool) { require(bytes(_referralNickname[msg.sender]).length == 0, "You already have a nickname"); require(bytes(nickName).length != 0 && bytes(nickName).length <= 64, "Nickname must be between 1 and 64 characters"); require(_nickNames[nickName] == address(0), "Nickname is already taken"); _nickNames[nickName] = msg.sender; _referralNickname[msg.sender] = nickName; emit CreatedLink(msg.sender, nickName, block.timestamp); return true; } /** * @notice This function returns the nickname of a given account. * @param account The address of the account for which the nickname is queried. * @return Returns the nickname string associated with the given account. */ function getNickname(address account) external view returns(string memory) { return _referralNickname[account]; } /** * @notice This function returns the referrer information for a given referee. * @param referee The address of the referee for which the referrer information is queried. * @return Returns a tuple containing the nickname string and address of the referrer. */ function getReferrer(address referee) external view returns(string memory, address) { address referrer = _referrals[referee]; return (_referralNickname[referrer], referrer); } /** * @notice This function returns the address associated with a given nickname. * @param nickname The nickname for which the associated address is queried. * @return Returns the address associated with the given nickname. */ function getAddressWithNickname(string memory nickname) external view returns(address) { return _nickNames[nickname]; } /** * @notice This function allows a user to add a referral using a nickname. * @param nickname The nickname of the referrer. * @return Returns true if the referral was successfully added. */ function addReferral(string memory nickname) external returns(bool) { address referrer = _nickNames[nickname]; bytes32 referrerNicknameHash = keccak256(abi.encodePacked(_referralNickname[referrer])); require( _referrals[referrer] != msg.sender && _referrals[msg.sender] == address(0) && referrerNicknameHash != keccak256(abi.encodePacked("")) && referrer != address(0) && referrer != msg.sender, "Invalid referral" ); _referrals[msg.sender] = referrer; emit RegisteredReferrence(referrer, nickname, msg.sender, block.timestamp); return true; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.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 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.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]. * * 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}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 value {ERC20} uses, unless this function is * 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 (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.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_multisigOwner","type":"address"},{"internalType":"address","name":"_taxManager","type":"address"},{"internalType":"uint256","name":"_referenceRate","type":"uint256"},{"components":[{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint256","name":"taxRate","type":"uint256"}],"internalType":"struct OGzClub.Pools[]","name":"_poolsData","type":"tuple[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"ChangedPoolAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTaxManager","type":"address"},{"indexed":false,"internalType":"address","name":"newTaxManager","type":"address"}],"name":"ChangedTaxManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"string","name":"nickName","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CreatedLink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"ReferenceFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"referral","type":"address"},{"indexed":false,"internalType":"string","name":"nickname","type":"string"},{"indexed":false,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RegisteredReferrence","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"referralNickName","type":"string"},{"indexed":false,"internalType":"address","name":"referralAddress","type":"address"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referralEarnedAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TransferWithTaxFee","type":"event"},{"inputs":[],"name":"FACTORY","outputs":[{"internalType":"contract Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BUY_TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_taxFrees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"}],"name":"addPreferredNicknames","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"nickname","type":"string"}],"name":"addReferral","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"taxFrees","type":"address[]"}],"name":"addTaxFrees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyPools","outputs":[{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint256","name":"taxRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"changePoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"checkCreateNicknamePermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"nickName","type":"string"}],"name":"createNickname","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"decreaseBuyTaxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"decreaseReferenceFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"newFee","type":"uint256"}],"name":"decreaseSellTaxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"nickname","type":"string"}],"name":"getAddressWithNickname","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNickname","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referee","type":"address"}],"name":"getReferrer","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"referral","type":"address"},{"internalType":"string","name":"nickname","type":"string"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"components":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct OGzClub.Referrers[]","name":"referees","type":"tuple[]"}],"internalType":"struct OGzClub.Referrals[]","name":"referrals","type":"tuple[]"}],"name":"initializeReferralDatas","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradeOpen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referenceRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"}],"name":"removePreferredNicknames","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"taxFrees","type":"address[]"}],"name":"removeTaxFrees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceTaxManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellPools","outputs":[{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint256","name":"taxRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"toggleOffBuyTaxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleOffPreferredNicknames","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleOffReferenceFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"toggleOffSellTaxFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePreferredNicknames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInitializated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxManager","type":"address"}],"name":"transferTaxManager","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405260006009553480156200001657600080fd5b506040516200446238038062004462833981016040819052620000399162000799565b6040518060400160405280600781526020016627a3bd21b63ab160c91b8152506040518060400160405280600381526020016227a3bd60e91b81525081600390816200008691906200093a565b5060046200009582826200093a565b505050620000b2620000ac620005ea60201b60201c565b620005ee565b6007815114620001175760405162461bcd60e51b815260206004820152602560248201527f506f6f6c73206461746173206c656e677468206d75737420626520657175616c60448201526420746f203760d81b60648201526084015b60405180910390fd5b6001600160a01b038416158015906200013857506001600160a01b03831615155b620001ac5760405162461bcd60e51b815260206004820152603760248201527f4f776e657220616e6420746178206d616e61676572206164647265737320636160448201527f6e6e6f7420657175616c20746f2061646472657373203000000000000000000060648201526084016200010e565b60008211620002135760405162461bcd60e51b815260206004820152602c60248201527f5265666572656e6365207461782072617465206d75737420626520677265617460448201526b6572207468616e207a65726f60a01b60648201526084016200010e565b600b8290556040516364e329cb60e11b815230600482015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26024820152735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f9063c9c65396906044016020604051808303816000875af115801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa919062000a06565b6001600160a01b03908116608052600d80546001600160a01b0319168583161790558416600090815260166020526040902060019055620002eb84620005ee565b6001600a5560005b8151811015620005365760006001600160a01b03168282815181106200031d576200031d62000a2b565b6020026020010151600001516001600160a01b031603620003905760405162461bcd60e51b815260206004820152602660248201527f506f6f6c20616464726573732063616e6e6f7420657175616c20746f2030206160448201526564647265737360d01b60648201526084016200010e565b6000828281518110620003a757620003a762000a2b565b60200260200101516020015111620004025760405162461bcd60e51b815260206004820181905260248201527f506f6f6c2072617465206d7573742062652067726561746572207468616e203060448201526064016200010e565b81818151811062000417576200041762000a2b565b6020908102919091018101516000838152600e835260409020815181546001600160a01b0319166001600160a01b0390911617815591015160019091015581518290829081106200046c576200046c62000a2b565b6020908102919091018101516000838152600f835260409020815181546001600160a01b0319166001600160a01b039091161781559101516001909101558151829082908110620004c157620004c162000a2b565b60200260200101516020015160076000828254620004e0919062000a57565b92505081905550818181518110620004fc57620004fc62000a2b565b602002602001015160200151600860008282546200051b919062000a57565b909155508190506200052d8162000a73565b915050620002f3565b506103206007541480156200054e5750610320600854145b620005b55760405162461bcd60e51b815260206004820152603060248201527f546f74616c207461782072617465206d75737420626520657175616c20746f2060448201526f6d6178696d756d20746178207261746560801b60648201526084016200010e565b620005e0620005cc6005546001600160a01b031690565b6c017d474ff1aa1b1c12f000000062000640565b5050505062000a8f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620006985760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200010e565b8060026000828254620006ac919062000a57565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b03811681146200072057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171562000760576200076062000725565b60405290565b604051601f8201601f191681016001600160401b038111828210171562000791576200079162000725565b604052919050565b60008060008060808587031215620007b057600080fd5b620007bb8562000708565b93506020620007cc81870162000708565b60408781015160608901519296509450906001600160401b0380821115620007f357600080fd5b818901915089601f8301126200080857600080fd5b8151818111156200081d576200081d62000725565b6200082d858260051b0162000766565b818152858101925060069190911b83018501908b8211156200084e57600080fd5b928501925b818410156200089c5784848d0312156200086d5760008081fd5b620008776200073b565b620008828562000708565b815284870151878201528352928401929185019162000853565b989b979a50959850505050505050565b600181811c90821680620008c157607f821691505b602082108103620008e257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070357600081815260208120601f850160051c81016020861015620009115750805b601f850160051c820191505b8181101562000932578281556001016200091d565b505050505050565b81516001600160401b0381111562000956576200095662000725565b6200096e81620009678454620008ac565b84620008e8565b602080601f831160018114620009a657600084156200098d5750858301515b600019600386901b1c1916600185901b17855562000932565b600085815260208120601f198616915b82811015620009d757888601518255948401946001909101908401620009b6565b5085821015620009f65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a1957600080fd5b62000a248262000708565b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111562000a6d5762000a6d62000a41565b92915050565b60006001820162000a885762000a8862000a41565b5060010190565b6080516139a962000ab9600039600081816105620152818161091001526120bc01526139a96000f3fe608060405234801561001057600080fd5b50600436106102f15760003560e01c80638d0846381161019d578063ac169800116100e9578063bcae1d57116100a2578063e0a22e671161007c578063e0a22e67146106c4578063e0af4fe2146106d7578063ed534174146106e0578063f2fde38b146106f357600080fd5b8063bcae1d571461066b578063dd62ed3e1461069e578063dedbf736146106b157600080fd5b8063ac1698001461060f578063ad5c464814610618578063adaccd7414610633578063b37bf54614610646578063b4975d4a1461064f578063b8e3e0f21461065857600080fd5b8063a03fb0c911610156578063a343895511610130578063a3438955146105d6578063a457c2d7146105e9578063a7782d06146104f7578063a9059cbb146105fc57600080fd5b8063a03fb0c9146105b2578063a2aa18ad146105ba578063a32bff44146105cd57600080fd5b80638d084638146105395780638da5cb5b1461054c5780639026b8d91461055d57806394f46b751461058457806395d89b41146105975780639be675741461059f57600080fd5b80633bfb4aad1161025c5780635e043f95116102155780636e11a899116101ef5780636e11a899146104f757806370a0823114610500578063715018a6146105295780638a8c523c1461053157600080fd5b80635e043f95146104c857806360901444146104db57806361e8bc20146104e457600080fd5b80633bfb4aad1461040957806343330c941461041c57806344ecc1791461046e5780634672bd0e146104815780634a9fefc7146104945780634d237730146104b557600080fd5b8063313ce567116102ae578063313ce567146103a257806332a5fce5146103b157806332b6eca2146103c457806332f28053146103cc5780633516e6fe146103ec57806339509351146103f657600080fd5b806306fdde03146102f6578063095ea7b31461031457806318160ddd146103375780632175c6491461034957806323b872dd1461035c5780632dd310001461036f575b600080fd5b6102fe610706565b60405161030b9190612f83565b60405180910390f35b610327610322366004612fad565b610798565b604051901515815260200161030b565b6002545b60405190815260200161030b565b61032761035736600461308e565b6107b2565b61032761036a36600461312b565b610900565b61038a735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6040516001600160a01b03909116815260200161030b565b6040516012815260200161030b565b6103276103bf366004613167565b6109d5565b610327610a02565b61033b6103da366004613167565b60166020526000908152604090205481565b6103f4610ae5565b005b610327610404366004612fad565b610b69565b61032761041736600461308e565b610b8b565b61044f61042a366004613182565b600e60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161030b565b61032761047c36600461308e565b610ce2565b61032761048f366004613182565b610dfe565b6104a76104a2366004613167565b610ee9565b60405161030b92919061319b565b600d5461038a906001600160a01b031681565b6103276104d6366004613235565b610fb2565b61033b600c5481565b61038a6104f23660046133e8565b611859565b61033b61032081565b61033b61050e366004613167565b6001600160a01b031660009081526020819052604090205490565b6103f461188a565b61032761189e565b6103276105473660046133e8565b611936565b6005546001600160a01b031661038a565b61038a7f000000000000000000000000000000000000000000000000000000000000000081565b6103276105923660046133e8565b611b4b565b6102fe611ce4565b6103276105ad366004613425565b611cf3565b610327611e2f565b6103f46105c8366004613167565b611e44565b61033b600b5481565b6103276105e4366004613182565b611f25565b6103276105f7366004612fad565b612034565b61032761060a366004612fad565b6120af565b61033b600a5481565b61038a73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6102fe610641366004613167565b612166565b61033b60075481565b61033b60065481565b61032761066636600461308e565b612212565b61044f610679366004613182565b600f60205260009081526040902080546001909101546001600160a01b039091169082565b61033b6106ac366004613447565b61231f565b6103f46106bf36600461347a565b61234a565b6103276106d2366004613425565b612495565b61033b60085481565b6103276106ee366004613182565b6125c0565b6103f4610701366004613167565b6126bf565b6060600380546107159061349d565b80601f01602080910402602001604051908101604052809291908181526020018280546107419061349d565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b6000336107a6818585612738565b60019150505b92915050565b60006107bc61285c565b6032825111156108135760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d203530206163636f756e742063616e2062652061646465640060448201526064015b60405180910390fd5b60005b82518110156108f55760156000848381518110610835576108356134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020546000148015610899575060006001600160a01b0316838281518110610885576108856134d7565b60200260200101516001600160a01b031614155b156108e3576001601560008584815181106108b6576108b66134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b806108ed81613503565b915050610816565b50600190505b919050565b60003361090e8582856128b6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614801561096557506001600160a01b038516600090815260166020526040902054155b156109bf57600c546001146109b25760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b604482015260640161080a565b6109bc8584612930565b92505b6109ca858585612b2f565b506001949350505050565b6000600a54600014806107ac5750506001600160a01b031660009081526015602052604090205460011490565b600d546000906001600160a01b03163314610a2f5760405162461bcd60e51b815260040161080a9061351c565b60095415610a8d5760405162461bcd60e51b815260206004820152602560248201527f5265666572656e636520706f6f6c20697320616c726561647920746f67676c65604482015264321037b33360d91b606482015260840161080a565b6001600955600b805460009182905560405190917f27f369f734f9f38ca1388d9fd8488d89e84f8bea0457621af7b35b6df99976ed91610ad591848252602082015260400190565b60405180910390a1600191505090565b600d546001600160a01b03163314610b0f5760405162461bcd60e51b815260040161080a9061351c565b600d80546001600160a01b03198116909155604080516001600160a01b0390921680835260006020840152917f4adb4bd40da8456432ec4d0c365d395fb1d51464c6bf1edf44c49eca7708a449910160405180910390a150565b6000336107a6818585610b7c838361231f565b610b869190613553565b612738565b600d546000906001600160a01b03163314610bb85760405162461bcd60e51b815260040161080a9061351c565b603282511115610c0a5760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20353020616464726573732063616e20626520616464656400604482015260640161080a565b60005b82518110156108f55760166000848381518110610c2c57610c2c6134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020546000148015610c90575060006001600160a01b0316838281518110610c7c57610c7c6134d7565b60200260200101516001600160a01b031614155b15610cda57600160166000858481518110610cad57610cad6134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b600101610c0d565b600d546000906001600160a01b03163314610d0f5760405162461bcd60e51b815260040161080a9061351c565b603282511115610d615760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20353020616464726573732063616e20626520616464656400604482015260640161080a565b60005b82518110156108f55760166000848381518110610d8357610d836134d7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054600103610df65760166000848381518110610dc957610dc96134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600090555b600101610d64565b600d546000906001600160a01b03163314610e2b5760405162461bcd60e51b815260040161080a9061351c565b600082118015610e3c5750600b5482105b610e9f5760405162461bcd60e51b815260206004820152602e60248201527f4e6577206665652072617465206d757374206265206265747765656e2030206160448201526d6e642063757272656e742066656560901b606482015260840161080a565b600b80549083905560408051828152602081018590527f27f369f734f9f38ca1388d9fd8488d89e84f8bea0457621af7b35b6df99976ed910160405180910390a150600192915050565b6001600160a01b0380821660009081526010602090815260408083205490931680835260119091529181208054606093919082908290610f289061349d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f549061349d565b8015610fa15780601f10610f7657610100808354040283529160200191610fa1565b820191906000526020600020905b815481529060010190602001808311610f8457829003601f168201915b505050505091509250925050915091565b6000610fbc61285c565b603e60065411156110085760405162461bcd60e51b8152602060048201526016602482015275496e697469616c697a6174696f6e20697320646f6e6560501b604482015260640161080a565b60008251116110725760405162461bcd60e51b815260206004820152603060248201527f526566657272616c73206172726179206c656e677468206d757374206265206760448201526f726561746572207468616e207a65726f60801b606482015260840161080a565b8151600660008282546110859190613553565b90915550600090505b82518110156108f5576001601560008584815181106110af576110af6134d7565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550601160008483815181106110f5576110f56134d7565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020805461112c9061349d565b15905061117b5760405162461bcd60e51b815260206004820152601b60248201527f596f7520616c726561647920686176652061206e69636b6e616d650000000000604482015260640161080a565b82818151811061118d5761118d6134d7565b602002602001015160200151516000141580156111c9575060408382815181106111b9576111b96134d7565b6020026020010151602001515111155b6111e55760405162461bcd60e51b815260040161080a90613566565b60006001600160a01b03166014848381518110611204576112046134d7565b60200260200101516020015160405161121d91906135b2565b908152604051908190036020019020546001600160a01b03161461127f5760405162461bcd60e51b81526020600482015260196024820152782734b1b5b730b6b29034b99030b63932b0b23c903a30b5b2b760391b604482015260640161080a565b828181518110611291576112916134d7565b60200260200101516000015160148483815181106112b1576112b16134d7565b6020026020010151602001516040516112ca91906135b2565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082818151811061130e5761130e6134d7565b60200260200101516020015160116000858481518110611330576113306134d7565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000209081611368919061361c565b507f0ed9a97ab9c2d9154a598932f980864c384da57bbf1b41cef09c6768dff088ad83828151811061139c5761139c6134d7565b6020026020010151600001518483815181106113ba576113ba6134d7565b6020026020010151602001518584815181106113d8576113d86134d7565b6020026020010151604001516040516113f3939291906136dc565b60405180910390a1600083828151811061140f5761140f6134d7565b6020026020010151606001515111156118515760006011600085848151811061143a5761143a6134d7565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206040516020016114769190613710565b60405160208183030381529060405280519060200120905060005b8483815181106114a3576114a36134d7565b6020026020010151606001515181101561184e578483815181106114c9576114c96134d7565b60200260200101516060015181815181106114e6576114e66134d7565b6020026020010151600001516001600160a01b031660106000878681518110611511576115116134d7565b602090810291909101810151516001600160a01b039081168352908201929092526040016000205416148015906115ac575060006001600160a01b031660106000878681518110611564576115646134d7565b6020026020010151606001518481518110611581576115816134d7565b602090810291909101810151516001600160a01b039081168352908201929092526040016000205416145b80156115ca5750604080516000815260208101918290525190208214155b8015611606575060006001600160a01b03168584815181106115ee576115ee6134d7565b6020026020010151600001516001600160a01b031614155b801561167b575084838151811061161f5761161f6134d7565b602002602001015160600151818151811061163c5761163c6134d7565b6020026020010151600001516001600160a01b0316858481518110611663576116636134d7565b6020026020010151600001516001600160a01b031614155b6116ba5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081c9959995c9c985b60821b604482015260640161080a565b8483815181106116cc576116cc6134d7565b602002602001015160000151601060008786815181106116ee576116ee6134d7565b602002602001015160600151848151811061170b5761170b6134d7565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507fd4024e5e44041dd6dba8b883ae669a8fb58b9402a39d82671cd3696fef8c8c4985848151811061178e5761178e6134d7565b6020026020010151600001518685815181106117ac576117ac6134d7565b6020026020010151602001518786815181106117ca576117ca6134d7565b60200260200101516060015184815181106117e7576117e76134d7565b602002602001015160000151888781518110611805576118056134d7565b6020026020010151606001518581518110611822576118226134d7565b60200260200101516020015160405161183e9493929190613786565b60405180910390a1600101611491565b50505b60010161108e565b600060148260405161186b91906135b2565b908152604051908190036020019020546001600160a01b031692915050565b61189261285c565b61189c6000612cd3565b565b60006118a861285c565b600c54156118f85760405162461bcd60e51b815260206004820152601860248201527f547261646520697320616c726561647920656e61626c65640000000000000000604482015260640161080a565b6001600c556040514281527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a150600190565b6000600a54600014806119585750336000908152601560205260409020546001145b61199c5760405162461bcd60e51b8152602060048201526015602482015274165bdd48185c99481b9bdd081c1c9959995c9c9959605a1b604482015260640161080a565b33600090815260116020526040902080546119b69061349d565b159050611a055760405162461bcd60e51b815260206004820152601b60248201527f596f7520616c726561647920686176652061206e69636b6e616d650000000000604482015260640161080a565b815115801590611a1757506040825111155b611a335760405162461bcd60e51b815260040161080a90613566565b60006001600160a01b0316601483604051611a4e91906135b2565b908152604051908190036020019020546001600160a01b031614611ab05760405162461bcd60e51b81526020600482015260196024820152782734b1b5b730b6b29034b99030b63932b0b23c903a30b5b2b760391b604482015260640161080a565b33601483604051611ac191906135b2565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b039490941693909317909255336000908152601190915220611b07838261361c565b507f0ed9a97ab9c2d9154a598932f980864c384da57bbf1b41cef09c6768dff088ad338342604051611b3b939291906136dc565b60405180910390a1506001919050565b600080601483604051611b5e91906135b2565b9081526040805160209281900383018120546001600160a01b03166000818152601185529283209094509192611b95929101613710565b60408051601f1981840301815291815281516020928301206001600160a01b03858116600090815260109094529190922054919250163314801590611bf05750336000908152601060205260409020546001600160a01b0316155b8015611c0e5750604080516000815260208101918290525190208114155b8015611c2257506001600160a01b03821615155b8015611c3757506001600160a01b0382163314155b611c765760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081c9959995c9c985b60821b604482015260640161080a565b336000818152601060205260409081902080546001600160a01b0319166001600160a01b038616179055517fd4024e5e44041dd6dba8b883ae669a8fb58b9402a39d82671cd3696fef8c8c4991611cd291859188914290613786565b60405180910390a15060019392505050565b6060600480546107159061349d565b600d546000906001600160a01b03163314611d205760405162461bcd60e51b815260040161080a9061351c565b6007831115611d415760405162461bcd60e51b815260040161080a906137ba565b60008381526012602052604090205415611d6d5760405162461bcd60e51b815260040161080a906137e5565b600082118015611d8d57506000838152600e602052604090206001015482105b611da95760405162461bcd60e51b815260040161080a9061381c565b6000838152600e6020526040902060010154611dc690839061386e565b600754611dd3919061386e565b6007556000838152600e6020526040908190206001018390555183907f480af1f773972b1df72af32ec463e0fdeb1b49f1ca37d07982f677919d5fdd0c90611e1e9085815260200190565b60405180910390a250600192915050565b6000611e3961285c565b506000600a55600190565b600d546001600160a01b03163314611e6e5760405162461bcd60e51b815260040161080a9061351c565b6001600160a01b038116611ec45760405162461bcd60e51b815260206004820152601f60248201527f4e657720616464726573732063616e6e6f742062652030206164647265737300604482015260640161080a565b600d80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4adb4bd40da8456432ec4d0c365d395fb1d51464c6bf1edf44c49eca7708a449910160405180910390a15050565b600d546000906001600160a01b03163314611f525760405162461bcd60e51b815260040161080a9061351c565b6007821115611f735760405162461bcd60e51b815260040161080a906137ba565b60008281526012602052604090205415611f9f5760405162461bcd60e51b815260040161080a906137e5565b6000828152601260209081526040808320600190819055600e9092529091200154600754611fcd919061386e565b6007556000828152600e602052604080822080546001600160a01b03191681556001018290555183917f480af1f773972b1df72af32ec463e0fdeb1b49f1ca37d07982f677919d5fdd0c9161202491815260200190565b60405180910390a2506001919050565b60003381612042828661231f565b9050838110156120a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161080a565b6109ca8286868403612738565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168114801561210057506001600160a01b038416600090815260166020526040902054155b1561215b57600c5460011461214d5760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b604482015260640161080a565b612158848285612d25565b92505b6107a6818585612b2f565b6001600160a01b038116600090815260116020526040902080546060919061218d9061349d565b80601f01602080910402602001604051908101604052809291908181526020018280546121b99061349d565b80156122065780601f106121db57610100808354040283529160200191612206565b820191906000526020600020905b8154815290600101906020018083116121e957829003601f168201915b50505050509050919050565b600061221c61285c565b6032825111156122785760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d203530206163636f756e742063616e2062652072656d6f76656044820152601960fa1b606482015260840161080a565b60005b82518110156108f5576015600084838151811061229a5761229a6134d7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460010361230d57601560008483815181106122e0576122e06134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600090555b8061231781613503565b91505061227b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600d546001600160a01b031633146123745760405162461bcd60e51b815260040161080a9061351c565b6001600160a01b0381166123d85760405162461bcd60e51b815260206004820152602560248201527f4e657720616464726573732063616e6e6f7420657175616c20746f2030206164604482015264647265737360d81b606482015260840161080a565b600782106124205760405162461bcd60e51b81526020600482015260156024820152742837b7b61034b21034b9903737ba103337bab7321760591b604482015260640161080a565b6000828152600e6020908152604080832080546001600160a01b0386166001600160a01b03199182168117909255600f845293829020805490941681179093555191825283917fb672b14b994dc0b451a4b01d24d56f5230137c6960ef3e02bfd22255ced63e01910160405180910390a25050565b600d546000906001600160a01b031633146124c25760405162461bcd60e51b815260040161080a9061351c565b60078311156124e35760405162461bcd60e51b815260040161080a906137ba565b6000838152601360205260409020541561250f5760405162461bcd60e51b815260040161080a906137e5565b60008211801561252f57506000838152600f602052604090206001015482105b61254b5760405162461bcd60e51b815260040161080a9061381c565b6000838152600f602052604090206001015461256890839061386e565b600854612575919061386e565b6008556000838152600f6020526040908190206001018390555183907f2c7448b63380296b372453c5287509524b5b645dc6a93ffe09e0af53e6b8935b90611e1e9085815260200190565b600d546000906001600160a01b031633146125ed5760405162461bcd60e51b815260040161080a9061351c565b600782111561260e5760405162461bcd60e51b815260040161080a906137ba565b6000828152601360205260409020541561263a5760405162461bcd60e51b815260040161080a906137e5565b6000828152601360209081526040808320600190819055600f9092529091200154600854612668919061386e565b6008556000828152600f602052604080822080546001600160a01b03191681556001018290555183917f2c7448b63380296b372453c5287509524b5b645dc6a93ffe09e0af53e6b8935b9161202491815260200190565b6126c761285c565b6001600160a01b03811661272c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080a565b61273581612cd3565b50565b6001600160a01b03831661279a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161080a565b6001600160a01b0382166127fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161080a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b0316331461189c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080a565b60006128c2848461231f565b9050600019811461292a578181101561291d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161080a565b61292a8484848403612738565b50505050565b600080805b6129416001600761386e565b8110156129c0576000818152600f602090815260408083206001015460139092528220549091036129ad5760006129788683612f0e565b90506129848185613553565b6000848152600f60205260409020549094506001600160a01b03166129aa888284612b2f565b50505b50806129b881613503565b915050612935565b506001600160a01b038085166000908152601060205260409020546009549116901580156129f657506001600160a01b03811615155b15612a81576000612a0985600b54612f0e565b9050612a158184613553565b9250612a22868383612b2f565b6001600160a01b0382166000908152601160205260409081902090517f684eec4406defb53defd351500aae07199860053b688af9137c2a72b037455bf91612a739185908a908a9087904290613881565b60405180910390a150612b1c565b60136000612a916001600761386e565b815260200190815260200160002054600003612b1c576000612ad385600f83612abc6001600761386e565b815260200190815260200160002060010154612f0e565b9050612adf8184613553565b92506000600f81612af26001600761386e565b81526020810191909152604001600020546001600160a01b03169050612b19878284612b2f565b50505b612b26828561386e565b95945050505050565b6001600160a01b038316612b935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161080a565b6001600160a01b038216612bf55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161080a565b6001600160a01b03831660009081526020819052604090205481811015612c6d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161080a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361292a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080805b612d366001600761386e565b811015612db5576000818152600e60209081526040808320600101546012909252822054909103612da2576000612d6d8683612f0e565b9050612d798185613553565b6000848152600e60205260409020549094506001600160a01b0316612d9f888284612b2f565b50505b5080612dad81613503565b915050612d2a565b506001600160a01b03808616600090815260106020526040902054600954911690158015612deb57506001600160a01b03811615155b15612e76576000612dfe85600b54612f0e565b9050612e0a8184613553565b9250612e17868383612b2f565b6001600160a01b0382166000908152601160205260409081902090517f684eec4406defb53defd351500aae07199860053b688af9137c2a72b037455bf91612e689185908b908a9087904290613881565b60405180910390a150612efa565b60126000612e866001600761386e565b815260200190815260200160002054600003612efa576000612eb185600e83612abc6001600761386e565b9050612ebd8184613553565b92506000600e81612ed06001600761386e565b81526020810191909152604001600020546001600160a01b03169050612ef7878284612b2f565b50505b612f04828561386e565b9695505050505050565b6000612710612f1d838561393a565b612f279190613951565b9392505050565b505050565b60005b83811015612f4e578181015183820152602001612f36565b50506000910152565b60008151808452612f6f816020860160208601612f33565b601f01601f19169290920160200192915050565b602081526000612f276020830184612f57565b80356001600160a01b03811681146108fb57600080fd5b60008060408385031215612fc057600080fd5b612fc983612f96565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561301057613010612fd7565b60405290565b6040805190810167ffffffffffffffff8111828210171561301057613010612fd7565b604051601f8201601f1916810167ffffffffffffffff8111828210171561306257613062612fd7565b604052919050565b600067ffffffffffffffff82111561308457613084612fd7565b5060051b60200190565b600060208083850312156130a157600080fd5b823567ffffffffffffffff8111156130b857600080fd5b8301601f810185136130c957600080fd5b80356130dc6130d78261306a565b613039565b81815260059190911b820183019083810190878311156130fb57600080fd5b928401925b828410156131205761311184612f96565b82529284019290840190613100565b979650505050505050565b60008060006060848603121561314057600080fd5b61314984612f96565b925061315760208501612f96565b9150604084013590509250925092565b60006020828403121561317957600080fd5b612f2782612f96565b60006020828403121561319457600080fd5b5035919050565b6040815260006131ae6040830185612f57565b905060018060a01b03831660208301529392505050565b600082601f8301126131d657600080fd5b813567ffffffffffffffff8111156131f0576131f0612fd7565b613203601f8201601f1916602001613039565b81815284602083860101111561321857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561324757600080fd5b67ffffffffffffffff808335111561325e57600080fd5b8235830184601f82011261327157600080fd5b61327e6130d7823561306a565b81358082526020808301929160051b8401018781111561329d57600080fd5b602084015b818110156133db5785813511156132b857600080fd5b803585016080818b03601f190112156132d057600080fd5b6132d8612fed565b6132e460208301612f96565b815287604083013511156132f757600080fd5b61330a8b602060408501358501016131c5565b602082015260608201356040820152876080830135111561332a57600080fd5b6080820135820191508a603f83011261334257600080fd5b60208201356133536130d78261306a565b81815260069190911b83016040019060208101908d83111561337457600080fd5b6040850194505b828510156133c5576040858f03121561339357600080fd5b61339b613016565b6133a486612f96565b8152602086013560208201528083525060208201915060408501945061337b565b60608401525050855250602093840193016132a2565b5090979650505050505050565b6000602082840312156133fa57600080fd5b813567ffffffffffffffff81111561341157600080fd5b61341d848285016131c5565b949350505050565b6000806040838503121561343857600080fd5b50508035926020909101359150565b6000806040838503121561345a57600080fd5b61346383612f96565b915061347160208401612f96565b90509250929050565b6000806040838503121561348d57600080fd5b8235915061347160208401612f96565b600181811c908216806134b157607f821691505b6020821081036134d157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613515576135156134ed565b5060010190565b60208082526018908201527f596f7520617265206e6f7420746178206d616e616765722e0000000000000000604082015260600190565b808201808211156107ac576107ac6134ed565b6020808252602c908201527f4e69636b6e616d65206d757374206265206265747765656e203120616e64203660408201526b34206368617261637465727360a01b606082015260800190565b600082516135c4818460208701612f33565b9190910192915050565b601f821115612f2e57600081815260208120601f850160051c810160208610156135f55750805b601f850160051c820191505b8181101561361457828155600101613601565b505050505050565b815167ffffffffffffffff81111561363657613636612fd7565b61364a81613644845461349d565b846135ce565b602080601f83116001811461367f57600084156136675750858301515b600019600386901b1c1916600185901b178555613614565b600085815260208120601f198616915b828110156136ae5788860151825594840194600190910190840161368f565b50858210156136cc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038416815260606020820181905260009061370090830185612f57565b9050826040830152949350505050565b600080835461371e8161349d565b60018281168015613736576001811461374b5761377a565b60ff198416875282151583028701945061377a565b8760005260208060002060005b858110156137715781548a820152908401908201613758565b50505082870194505b50929695505050505050565b600060018060a01b038087168352608060208401526137a86080840187612f57565b94166040830152506060015292915050565b602080825260119082015270141bdbdb081a59081b9bdd08199bdd5b99607a1b604082015260600190565b6020808252601f908201527f54686520706f6f6c20697320616c726561647920746f67676c6564206f666600604082015260600190565b60208082526032908201527f4e6577206665652072617465206d757374206265206265747765656e203020616040820152716e642063757272656e74207461782066656560701b606082015260800190565b818103818111156107ac576107ac6134ed565b60c0815260008088546138938161349d565b8060c086015260e06001808416600081146138b557600181146138cf57613900565b60ff1985168884015283151560051b880183019550613900565b8d60005260208060002060005b868110156138f75781548b82018701529084019082016138dc565b8a018501975050505b505050506001600160a01b039889166020850152509590961660408201526060810193909352608083019190915260a09091015292915050565b80820281158282048414176107ac576107ac6134ed565b60008261396e57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212201880500fc0fec932240e084c91dafb755e30f44ca4fd3f0e6d78a4fcdc65670064736f6c63430008130033000000000000000000000000cf852bf2abad76e9ac8c0fe115246462ba883638000000000000000000000000cf852bf2abad76e9ac8c0fe115246462ba8836380000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000070000000000000000000000007d0492b9e74706a054b57294048ecaee7f9fffab0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a4cb3bdef8213b9fbcaba5aca31c2de991512e530000000000000000000000000000000000000000000000000000000000000064000000000000000000000000e2ee8c63f0ee14e1f914bc7c4127aeffb62891ef00000000000000000000000000000000000000000000000000000000000000640000000000000000000000005a8cc2989c952eef71ce78ba481902d0e06540ae0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a5e5732e9c51a85bbaeca1f022d70029f14c0d9400000000000000000000000000000000000000000000000000000000000000c80000000000000000000000009f16826911e63a7be765c8e20ebaa9c7a8ec4e4900000000000000000000000000000000000000000000000000000000000000640000000000000000000000007d0492b9e74706a054b57294048ecaee7f9fffab0000000000000000000000000000000000000000000000000000000000000064
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102f15760003560e01c80638d0846381161019d578063ac169800116100e9578063bcae1d57116100a2578063e0a22e671161007c578063e0a22e67146106c4578063e0af4fe2146106d7578063ed534174146106e0578063f2fde38b146106f357600080fd5b8063bcae1d571461066b578063dd62ed3e1461069e578063dedbf736146106b157600080fd5b8063ac1698001461060f578063ad5c464814610618578063adaccd7414610633578063b37bf54614610646578063b4975d4a1461064f578063b8e3e0f21461065857600080fd5b8063a03fb0c911610156578063a343895511610130578063a3438955146105d6578063a457c2d7146105e9578063a7782d06146104f7578063a9059cbb146105fc57600080fd5b8063a03fb0c9146105b2578063a2aa18ad146105ba578063a32bff44146105cd57600080fd5b80638d084638146105395780638da5cb5b1461054c5780639026b8d91461055d57806394f46b751461058457806395d89b41146105975780639be675741461059f57600080fd5b80633bfb4aad1161025c5780635e043f95116102155780636e11a899116101ef5780636e11a899146104f757806370a0823114610500578063715018a6146105295780638a8c523c1461053157600080fd5b80635e043f95146104c857806360901444146104db57806361e8bc20146104e457600080fd5b80633bfb4aad1461040957806343330c941461041c57806344ecc1791461046e5780634672bd0e146104815780634a9fefc7146104945780634d237730146104b557600080fd5b8063313ce567116102ae578063313ce567146103a257806332a5fce5146103b157806332b6eca2146103c457806332f28053146103cc5780633516e6fe146103ec57806339509351146103f657600080fd5b806306fdde03146102f6578063095ea7b31461031457806318160ddd146103375780632175c6491461034957806323b872dd1461035c5780632dd310001461036f575b600080fd5b6102fe610706565b60405161030b9190612f83565b60405180910390f35b610327610322366004612fad565b610798565b604051901515815260200161030b565b6002545b60405190815260200161030b565b61032761035736600461308e565b6107b2565b61032761036a36600461312b565b610900565b61038a735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b6040516001600160a01b03909116815260200161030b565b6040516012815260200161030b565b6103276103bf366004613167565b6109d5565b610327610a02565b61033b6103da366004613167565b60166020526000908152604090205481565b6103f4610ae5565b005b610327610404366004612fad565b610b69565b61032761041736600461308e565b610b8b565b61044f61042a366004613182565b600e60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b03909316835260208301919091520161030b565b61032761047c36600461308e565b610ce2565b61032761048f366004613182565b610dfe565b6104a76104a2366004613167565b610ee9565b60405161030b92919061319b565b600d5461038a906001600160a01b031681565b6103276104d6366004613235565b610fb2565b61033b600c5481565b61038a6104f23660046133e8565b611859565b61033b61032081565b61033b61050e366004613167565b6001600160a01b031660009081526020819052604090205490565b6103f461188a565b61032761189e565b6103276105473660046133e8565b611936565b6005546001600160a01b031661038a565b61038a7f000000000000000000000000173a958b4381f72381c3a1099bf715d0acd8230981565b6103276105923660046133e8565b611b4b565b6102fe611ce4565b6103276105ad366004613425565b611cf3565b610327611e2f565b6103f46105c8366004613167565b611e44565b61033b600b5481565b6103276105e4366004613182565b611f25565b6103276105f7366004612fad565b612034565b61032761060a366004612fad565b6120af565b61033b600a5481565b61038a73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6102fe610641366004613167565b612166565b61033b60075481565b61033b60065481565b61032761066636600461308e565b612212565b61044f610679366004613182565b600f60205260009081526040902080546001909101546001600160a01b039091169082565b61033b6106ac366004613447565b61231f565b6103f46106bf36600461347a565b61234a565b6103276106d2366004613425565b612495565b61033b60085481565b6103276106ee366004613182565b6125c0565b6103f4610701366004613167565b6126bf565b6060600380546107159061349d565b80601f01602080910402602001604051908101604052809291908181526020018280546107419061349d565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b6000336107a6818585612738565b60019150505b92915050565b60006107bc61285c565b6032825111156108135760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d203530206163636f756e742063616e2062652061646465640060448201526064015b60405180910390fd5b60005b82518110156108f55760156000848381518110610835576108356134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020546000148015610899575060006001600160a01b0316838281518110610885576108856134d7565b60200260200101516001600160a01b031614155b156108e3576001601560008584815181106108b6576108b66134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b806108ed81613503565b915050610816565b50600190505b919050565b60003361090e8582856128b6565b7f000000000000000000000000173a958b4381f72381c3a1099bf715d0acd823096001600160a01b0316846001600160a01b031614801561096557506001600160a01b038516600090815260166020526040902054155b156109bf57600c546001146109b25760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b604482015260640161080a565b6109bc8584612930565b92505b6109ca858585612b2f565b506001949350505050565b6000600a54600014806107ac5750506001600160a01b031660009081526015602052604090205460011490565b600d546000906001600160a01b03163314610a2f5760405162461bcd60e51b815260040161080a9061351c565b60095415610a8d5760405162461bcd60e51b815260206004820152602560248201527f5265666572656e636520706f6f6c20697320616c726561647920746f67676c65604482015264321037b33360d91b606482015260840161080a565b6001600955600b805460009182905560405190917f27f369f734f9f38ca1388d9fd8488d89e84f8bea0457621af7b35b6df99976ed91610ad591848252602082015260400190565b60405180910390a1600191505090565b600d546001600160a01b03163314610b0f5760405162461bcd60e51b815260040161080a9061351c565b600d80546001600160a01b03198116909155604080516001600160a01b0390921680835260006020840152917f4adb4bd40da8456432ec4d0c365d395fb1d51464c6bf1edf44c49eca7708a449910160405180910390a150565b6000336107a6818585610b7c838361231f565b610b869190613553565b612738565b600d546000906001600160a01b03163314610bb85760405162461bcd60e51b815260040161080a9061351c565b603282511115610c0a5760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20353020616464726573732063616e20626520616464656400604482015260640161080a565b60005b82518110156108f55760166000848381518110610c2c57610c2c6134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020546000148015610c90575060006001600160a01b0316838281518110610c7c57610c7c6134d7565b60200260200101516001600160a01b031614155b15610cda57600160166000858481518110610cad57610cad6134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055505b600101610c0d565b600d546000906001600160a01b03163314610d0f5760405162461bcd60e51b815260040161080a9061351c565b603282511115610d615760405162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20353020616464726573732063616e20626520616464656400604482015260640161080a565b60005b82518110156108f55760166000848381518110610d8357610d836134d7565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054600103610df65760166000848381518110610dc957610dc96134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600090555b600101610d64565b600d546000906001600160a01b03163314610e2b5760405162461bcd60e51b815260040161080a9061351c565b600082118015610e3c5750600b5482105b610e9f5760405162461bcd60e51b815260206004820152602e60248201527f4e6577206665652072617465206d757374206265206265747765656e2030206160448201526d6e642063757272656e742066656560901b606482015260840161080a565b600b80549083905560408051828152602081018590527f27f369f734f9f38ca1388d9fd8488d89e84f8bea0457621af7b35b6df99976ed910160405180910390a150600192915050565b6001600160a01b0380821660009081526010602090815260408083205490931680835260119091529181208054606093919082908290610f289061349d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f549061349d565b8015610fa15780601f10610f7657610100808354040283529160200191610fa1565b820191906000526020600020905b815481529060010190602001808311610f8457829003601f168201915b505050505091509250925050915091565b6000610fbc61285c565b603e60065411156110085760405162461bcd60e51b8152602060048201526016602482015275496e697469616c697a6174696f6e20697320646f6e6560501b604482015260640161080a565b60008251116110725760405162461bcd60e51b815260206004820152603060248201527f526566657272616c73206172726179206c656e677468206d757374206265206760448201526f726561746572207468616e207a65726f60801b606482015260840161080a565b8151600660008282546110859190613553565b90915550600090505b82518110156108f5576001601560008584815181106110af576110af6134d7565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550601160008483815181106110f5576110f56134d7565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020805461112c9061349d565b15905061117b5760405162461bcd60e51b815260206004820152601b60248201527f596f7520616c726561647920686176652061206e69636b6e616d650000000000604482015260640161080a565b82818151811061118d5761118d6134d7565b602002602001015160200151516000141580156111c9575060408382815181106111b9576111b96134d7565b6020026020010151602001515111155b6111e55760405162461bcd60e51b815260040161080a90613566565b60006001600160a01b03166014848381518110611204576112046134d7565b60200260200101516020015160405161121d91906135b2565b908152604051908190036020019020546001600160a01b03161461127f5760405162461bcd60e51b81526020600482015260196024820152782734b1b5b730b6b29034b99030b63932b0b23c903a30b5b2b760391b604482015260640161080a565b828181518110611291576112916134d7565b60200260200101516000015160148483815181106112b1576112b16134d7565b6020026020010151602001516040516112ca91906135b2565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082818151811061130e5761130e6134d7565b60200260200101516020015160116000858481518110611330576113306134d7565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000209081611368919061361c565b507f0ed9a97ab9c2d9154a598932f980864c384da57bbf1b41cef09c6768dff088ad83828151811061139c5761139c6134d7565b6020026020010151600001518483815181106113ba576113ba6134d7565b6020026020010151602001518584815181106113d8576113d86134d7565b6020026020010151604001516040516113f3939291906136dc565b60405180910390a1600083828151811061140f5761140f6134d7565b6020026020010151606001515111156118515760006011600085848151811061143a5761143a6134d7565b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000206040516020016114769190613710565b60405160208183030381529060405280519060200120905060005b8483815181106114a3576114a36134d7565b6020026020010151606001515181101561184e578483815181106114c9576114c96134d7565b60200260200101516060015181815181106114e6576114e66134d7565b6020026020010151600001516001600160a01b031660106000878681518110611511576115116134d7565b602090810291909101810151516001600160a01b039081168352908201929092526040016000205416148015906115ac575060006001600160a01b031660106000878681518110611564576115646134d7565b6020026020010151606001518481518110611581576115816134d7565b602090810291909101810151516001600160a01b039081168352908201929092526040016000205416145b80156115ca5750604080516000815260208101918290525190208214155b8015611606575060006001600160a01b03168584815181106115ee576115ee6134d7565b6020026020010151600001516001600160a01b031614155b801561167b575084838151811061161f5761161f6134d7565b602002602001015160600151818151811061163c5761163c6134d7565b6020026020010151600001516001600160a01b0316858481518110611663576116636134d7565b6020026020010151600001516001600160a01b031614155b6116ba5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081c9959995c9c985b60821b604482015260640161080a565b8483815181106116cc576116cc6134d7565b602002602001015160000151601060008786815181106116ee576116ee6134d7565b602002602001015160600151848151811061170b5761170b6134d7565b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507fd4024e5e44041dd6dba8b883ae669a8fb58b9402a39d82671cd3696fef8c8c4985848151811061178e5761178e6134d7565b6020026020010151600001518685815181106117ac576117ac6134d7565b6020026020010151602001518786815181106117ca576117ca6134d7565b60200260200101516060015184815181106117e7576117e76134d7565b602002602001015160000151888781518110611805576118056134d7565b6020026020010151606001518581518110611822576118226134d7565b60200260200101516020015160405161183e9493929190613786565b60405180910390a1600101611491565b50505b60010161108e565b600060148260405161186b91906135b2565b908152604051908190036020019020546001600160a01b031692915050565b61189261285c565b61189c6000612cd3565b565b60006118a861285c565b600c54156118f85760405162461bcd60e51b815260206004820152601860248201527f547261646520697320616c726561647920656e61626c65640000000000000000604482015260640161080a565b6001600c556040514281527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9239060200160405180910390a150600190565b6000600a54600014806119585750336000908152601560205260409020546001145b61199c5760405162461bcd60e51b8152602060048201526015602482015274165bdd48185c99481b9bdd081c1c9959995c9c9959605a1b604482015260640161080a565b33600090815260116020526040902080546119b69061349d565b159050611a055760405162461bcd60e51b815260206004820152601b60248201527f596f7520616c726561647920686176652061206e69636b6e616d650000000000604482015260640161080a565b815115801590611a1757506040825111155b611a335760405162461bcd60e51b815260040161080a90613566565b60006001600160a01b0316601483604051611a4e91906135b2565b908152604051908190036020019020546001600160a01b031614611ab05760405162461bcd60e51b81526020600482015260196024820152782734b1b5b730b6b29034b99030b63932b0b23c903a30b5b2b760391b604482015260640161080a565b33601483604051611ac191906135b2565b908152604080516020928190038301902080546001600160a01b0319166001600160a01b039490941693909317909255336000908152601190915220611b07838261361c565b507f0ed9a97ab9c2d9154a598932f980864c384da57bbf1b41cef09c6768dff088ad338342604051611b3b939291906136dc565b60405180910390a1506001919050565b600080601483604051611b5e91906135b2565b9081526040805160209281900383018120546001600160a01b03166000818152601185529283209094509192611b95929101613710565b60408051601f1981840301815291815281516020928301206001600160a01b03858116600090815260109094529190922054919250163314801590611bf05750336000908152601060205260409020546001600160a01b0316155b8015611c0e5750604080516000815260208101918290525190208114155b8015611c2257506001600160a01b03821615155b8015611c3757506001600160a01b0382163314155b611c765760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081c9959995c9c985b60821b604482015260640161080a565b336000818152601060205260409081902080546001600160a01b0319166001600160a01b038616179055517fd4024e5e44041dd6dba8b883ae669a8fb58b9402a39d82671cd3696fef8c8c4991611cd291859188914290613786565b60405180910390a15060019392505050565b6060600480546107159061349d565b600d546000906001600160a01b03163314611d205760405162461bcd60e51b815260040161080a9061351c565b6007831115611d415760405162461bcd60e51b815260040161080a906137ba565b60008381526012602052604090205415611d6d5760405162461bcd60e51b815260040161080a906137e5565b600082118015611d8d57506000838152600e602052604090206001015482105b611da95760405162461bcd60e51b815260040161080a9061381c565b6000838152600e6020526040902060010154611dc690839061386e565b600754611dd3919061386e565b6007556000838152600e6020526040908190206001018390555183907f480af1f773972b1df72af32ec463e0fdeb1b49f1ca37d07982f677919d5fdd0c90611e1e9085815260200190565b60405180910390a250600192915050565b6000611e3961285c565b506000600a55600190565b600d546001600160a01b03163314611e6e5760405162461bcd60e51b815260040161080a9061351c565b6001600160a01b038116611ec45760405162461bcd60e51b815260206004820152601f60248201527f4e657720616464726573732063616e6e6f742062652030206164647265737300604482015260640161080a565b600d80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f4adb4bd40da8456432ec4d0c365d395fb1d51464c6bf1edf44c49eca7708a449910160405180910390a15050565b600d546000906001600160a01b03163314611f525760405162461bcd60e51b815260040161080a9061351c565b6007821115611f735760405162461bcd60e51b815260040161080a906137ba565b60008281526012602052604090205415611f9f5760405162461bcd60e51b815260040161080a906137e5565b6000828152601260209081526040808320600190819055600e9092529091200154600754611fcd919061386e565b6007556000828152600e602052604080822080546001600160a01b03191681556001018290555183917f480af1f773972b1df72af32ec463e0fdeb1b49f1ca37d07982f677919d5fdd0c9161202491815260200190565b60405180910390a2506001919050565b60003381612042828661231f565b9050838110156120a25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161080a565b6109ca8286868403612738565b6000336001600160a01b037f000000000000000000000000173a958b4381f72381c3a1099bf715d0acd82309168114801561210057506001600160a01b038416600090815260166020526040902054155b1561215b57600c5460011461214d5760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b604482015260640161080a565b612158848285612d25565b92505b6107a6818585612b2f565b6001600160a01b038116600090815260116020526040902080546060919061218d9061349d565b80601f01602080910402602001604051908101604052809291908181526020018280546121b99061349d565b80156122065780601f106121db57610100808354040283529160200191612206565b820191906000526020600020905b8154815290600101906020018083116121e957829003601f168201915b50505050509050919050565b600061221c61285c565b6032825111156122785760405162461bcd60e51b815260206004820152602160248201527f4d6178696d756d203530206163636f756e742063616e2062652072656d6f76656044820152601960fa1b606482015260840161080a565b60005b82518110156108f5576015600084838151811061229a5761229a6134d7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205460010361230d57601560008483815181106122e0576122e06134d7565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600090555b8061231781613503565b91505061227b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600d546001600160a01b031633146123745760405162461bcd60e51b815260040161080a9061351c565b6001600160a01b0381166123d85760405162461bcd60e51b815260206004820152602560248201527f4e657720616464726573732063616e6e6f7420657175616c20746f2030206164604482015264647265737360d81b606482015260840161080a565b600782106124205760405162461bcd60e51b81526020600482015260156024820152742837b7b61034b21034b9903737ba103337bab7321760591b604482015260640161080a565b6000828152600e6020908152604080832080546001600160a01b0386166001600160a01b03199182168117909255600f845293829020805490941681179093555191825283917fb672b14b994dc0b451a4b01d24d56f5230137c6960ef3e02bfd22255ced63e01910160405180910390a25050565b600d546000906001600160a01b031633146124c25760405162461bcd60e51b815260040161080a9061351c565b60078311156124e35760405162461bcd60e51b815260040161080a906137ba565b6000838152601360205260409020541561250f5760405162461bcd60e51b815260040161080a906137e5565b60008211801561252f57506000838152600f602052604090206001015482105b61254b5760405162461bcd60e51b815260040161080a9061381c565b6000838152600f602052604090206001015461256890839061386e565b600854612575919061386e565b6008556000838152600f6020526040908190206001018390555183907f2c7448b63380296b372453c5287509524b5b645dc6a93ffe09e0af53e6b8935b90611e1e9085815260200190565b600d546000906001600160a01b031633146125ed5760405162461bcd60e51b815260040161080a9061351c565b600782111561260e5760405162461bcd60e51b815260040161080a906137ba565b6000828152601360205260409020541561263a5760405162461bcd60e51b815260040161080a906137e5565b6000828152601360209081526040808320600190819055600f9092529091200154600854612668919061386e565b6008556000828152600f602052604080822080546001600160a01b03191681556001018290555183917f2c7448b63380296b372453c5287509524b5b645dc6a93ffe09e0af53e6b8935b9161202491815260200190565b6126c761285c565b6001600160a01b03811661272c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161080a565b61273581612cd3565b50565b6001600160a01b03831661279a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161080a565b6001600160a01b0382166127fb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161080a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b0316331461189c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161080a565b60006128c2848461231f565b9050600019811461292a578181101561291d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161080a565b61292a8484848403612738565b50505050565b600080805b6129416001600761386e565b8110156129c0576000818152600f602090815260408083206001015460139092528220549091036129ad5760006129788683612f0e565b90506129848185613553565b6000848152600f60205260409020549094506001600160a01b03166129aa888284612b2f565b50505b50806129b881613503565b915050612935565b506001600160a01b038085166000908152601060205260409020546009549116901580156129f657506001600160a01b03811615155b15612a81576000612a0985600b54612f0e565b9050612a158184613553565b9250612a22868383612b2f565b6001600160a01b0382166000908152601160205260409081902090517f684eec4406defb53defd351500aae07199860053b688af9137c2a72b037455bf91612a739185908a908a9087904290613881565b60405180910390a150612b1c565b60136000612a916001600761386e565b815260200190815260200160002054600003612b1c576000612ad385600f83612abc6001600761386e565b815260200190815260200160002060010154612f0e565b9050612adf8184613553565b92506000600f81612af26001600761386e565b81526020810191909152604001600020546001600160a01b03169050612b19878284612b2f565b50505b612b26828561386e565b95945050505050565b6001600160a01b038316612b935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161080a565b6001600160a01b038216612bf55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161080a565b6001600160a01b03831660009081526020819052604090205481811015612c6d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161080a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361292a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080805b612d366001600761386e565b811015612db5576000818152600e60209081526040808320600101546012909252822054909103612da2576000612d6d8683612f0e565b9050612d798185613553565b6000848152600e60205260409020549094506001600160a01b0316612d9f888284612b2f565b50505b5080612dad81613503565b915050612d2a565b506001600160a01b03808616600090815260106020526040902054600954911690158015612deb57506001600160a01b03811615155b15612e76576000612dfe85600b54612f0e565b9050612e0a8184613553565b9250612e17868383612b2f565b6001600160a01b0382166000908152601160205260409081902090517f684eec4406defb53defd351500aae07199860053b688af9137c2a72b037455bf91612e689185908b908a9087904290613881565b60405180910390a150612efa565b60126000612e866001600761386e565b815260200190815260200160002054600003612efa576000612eb185600e83612abc6001600761386e565b9050612ebd8184613553565b92506000600e81612ed06001600761386e565b81526020810191909152604001600020546001600160a01b03169050612ef7878284612b2f565b50505b612f04828561386e565b9695505050505050565b6000612710612f1d838561393a565b612f279190613951565b9392505050565b505050565b60005b83811015612f4e578181015183820152602001612f36565b50506000910152565b60008151808452612f6f816020860160208601612f33565b601f01601f19169290920160200192915050565b602081526000612f276020830184612f57565b80356001600160a01b03811681146108fb57600080fd5b60008060408385031215612fc057600080fd5b612fc983612f96565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff8111828210171561301057613010612fd7565b60405290565b6040805190810167ffffffffffffffff8111828210171561301057613010612fd7565b604051601f8201601f1916810167ffffffffffffffff8111828210171561306257613062612fd7565b604052919050565b600067ffffffffffffffff82111561308457613084612fd7565b5060051b60200190565b600060208083850312156130a157600080fd5b823567ffffffffffffffff8111156130b857600080fd5b8301601f810185136130c957600080fd5b80356130dc6130d78261306a565b613039565b81815260059190911b820183019083810190878311156130fb57600080fd5b928401925b828410156131205761311184612f96565b82529284019290840190613100565b979650505050505050565b60008060006060848603121561314057600080fd5b61314984612f96565b925061315760208501612f96565b9150604084013590509250925092565b60006020828403121561317957600080fd5b612f2782612f96565b60006020828403121561319457600080fd5b5035919050565b6040815260006131ae6040830185612f57565b905060018060a01b03831660208301529392505050565b600082601f8301126131d657600080fd5b813567ffffffffffffffff8111156131f0576131f0612fd7565b613203601f8201601f1916602001613039565b81815284602083860101111561321857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561324757600080fd5b67ffffffffffffffff808335111561325e57600080fd5b8235830184601f82011261327157600080fd5b61327e6130d7823561306a565b81358082526020808301929160051b8401018781111561329d57600080fd5b602084015b818110156133db5785813511156132b857600080fd5b803585016080818b03601f190112156132d057600080fd5b6132d8612fed565b6132e460208301612f96565b815287604083013511156132f757600080fd5b61330a8b602060408501358501016131c5565b602082015260608201356040820152876080830135111561332a57600080fd5b6080820135820191508a603f83011261334257600080fd5b60208201356133536130d78261306a565b81815260069190911b83016040019060208101908d83111561337457600080fd5b6040850194505b828510156133c5576040858f03121561339357600080fd5b61339b613016565b6133a486612f96565b8152602086013560208201528083525060208201915060408501945061337b565b60608401525050855250602093840193016132a2565b5090979650505050505050565b6000602082840312156133fa57600080fd5b813567ffffffffffffffff81111561341157600080fd5b61341d848285016131c5565b949350505050565b6000806040838503121561343857600080fd5b50508035926020909101359150565b6000806040838503121561345a57600080fd5b61346383612f96565b915061347160208401612f96565b90509250929050565b6000806040838503121561348d57600080fd5b8235915061347160208401612f96565b600181811c908216806134b157607f821691505b6020821081036134d157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613515576135156134ed565b5060010190565b60208082526018908201527f596f7520617265206e6f7420746178206d616e616765722e0000000000000000604082015260600190565b808201808211156107ac576107ac6134ed565b6020808252602c908201527f4e69636b6e616d65206d757374206265206265747765656e203120616e64203660408201526b34206368617261637465727360a01b606082015260800190565b600082516135c4818460208701612f33565b9190910192915050565b601f821115612f2e57600081815260208120601f850160051c810160208610156135f55750805b601f850160051c820191505b8181101561361457828155600101613601565b505050505050565b815167ffffffffffffffff81111561363657613636612fd7565b61364a81613644845461349d565b846135ce565b602080601f83116001811461367f57600084156136675750858301515b600019600386901b1c1916600185901b178555613614565b600085815260208120601f198616915b828110156136ae5788860151825594840194600190910190840161368f565b50858210156136cc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038416815260606020820181905260009061370090830185612f57565b9050826040830152949350505050565b600080835461371e8161349d565b60018281168015613736576001811461374b5761377a565b60ff198416875282151583028701945061377a565b8760005260208060002060005b858110156137715781548a820152908401908201613758565b50505082870194505b50929695505050505050565b600060018060a01b038087168352608060208401526137a86080840187612f57565b94166040830152506060015292915050565b602080825260119082015270141bdbdb081a59081b9bdd08199bdd5b99607a1b604082015260600190565b6020808252601f908201527f54686520706f6f6c20697320616c726561647920746f67676c6564206f666600604082015260600190565b60208082526032908201527f4e6577206665652072617465206d757374206265206265747765656e203020616040820152716e642063757272656e74207461782066656560701b606082015260800190565b818103818111156107ac576107ac6134ed565b60c0815260008088546138938161349d565b8060c086015260e06001808416600081146138b557600181146138cf57613900565b60ff1985168884015283151560051b880183019550613900565b8d60005260208060002060005b868110156138f75781548b82018701529084019082016138dc565b8a018501975050505b505050506001600160a01b039889166020850152509590961660408201526060810193909352608083019190915260a09091015292915050565b80820281158282048414176107ac576107ac6134ed565b60008261396e57634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212201880500fc0fec932240e084c91dafb755e30f44ca4fd3f0e6d78a4fcdc65670064736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf852bf2abad76e9ac8c0fe115246462ba883638000000000000000000000000cf852bf2abad76e9ac8c0fe115246462ba8836380000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000070000000000000000000000007d0492b9e74706a054b57294048ecaee7f9fffab0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a4cb3bdef8213b9fbcaba5aca31c2de991512e530000000000000000000000000000000000000000000000000000000000000064000000000000000000000000e2ee8c63f0ee14e1f914bc7c4127aeffb62891ef00000000000000000000000000000000000000000000000000000000000000640000000000000000000000005a8cc2989c952eef71ce78ba481902d0e06540ae0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000a5e5732e9c51a85bbaeca1f022d70029f14c0d9400000000000000000000000000000000000000000000000000000000000000c80000000000000000000000009f16826911e63a7be765c8e20ebaa9c7a8ec4e4900000000000000000000000000000000000000000000000000000000000000640000000000000000000000007d0492b9e74706a054b57294048ecaee7f9fffab0000000000000000000000000000000000000000000000000000000000000064
-----Decoded View---------------
Arg [0] : _multisigOwner (address): 0xCF852bf2abaD76e9aC8c0Fe115246462Ba883638
Arg [1] : _taxManager (address): 0xCF852bf2abaD76e9aC8c0Fe115246462Ba883638
Arg [2] : _referenceRate (uint256): 100
Arg [3] : _poolsData (tuple[]): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput],System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf852bf2abad76e9ac8c0fe115246462ba883638
Arg [1] : 000000000000000000000000cf852bf2abad76e9ac8c0fe115246462ba883638
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 0000000000000000000000007d0492b9e74706a054b57294048ecaee7f9fffab
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [7] : 000000000000000000000000a4cb3bdef8213b9fbcaba5aca31c2de991512e53
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [9] : 000000000000000000000000e2ee8c63f0ee14e1f914bc7c4127aeffb62891ef
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [11] : 0000000000000000000000005a8cc2989c952eef71ce78ba481902d0e06540ae
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [13] : 000000000000000000000000a5e5732e9c51a85bbaeca1f022d70029f14c0d94
Arg [14] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [15] : 0000000000000000000000009f16826911e63a7be765c8e20ebaa9c7a8ec4e49
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [17] : 0000000000000000000000007d0492b9e74706a054b57294048ecaee7f9fffab
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000064
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.