Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
DEX
Overview
Max Total Supply
7,999.616018015 XCIX
Holders
33 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.433124822 XCIXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FX99
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-09-29 */ pragma solidity ^0.6.2; /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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 Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, errorMessage); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of 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 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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 * * - `to` 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 = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 to 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 { } } contract FX99 is ERC20("FX99", "XCIX") { address public wallet_99_strong_hand = 0xdCD272B4e7597640f20287a1D6D525f4d0034394; uint256 public initialPrice = 0.001 szabo; uint256 public increment = 0.001 szabo; uint256 public minPurchase = 1 ether; uint256 public reinvestFee = 10; uint256 public transferFee = 10; uint256 public withdrawFee = 10; uint256 public referrerFee = 5; uint256 public buyFee = 10; uint256 public sellFee = 10; uint256 public dividendsPerShare; uint256 public start; uint256 constant internal magnitude = 1 ether; mapping (address => address) public referrer; mapping (address => uint256) public referralEarnings; mapping (address => int256) public dividendsPayouts; event Reinvest(address _member, uint256 _ether, uint256 _tokens); event Withdraw(address _member, uint256 _ether); event Buy(address _member, uint256 _ether, uint256 _tokens, address _referrer); event Sell(address _member, uint256 _ether, uint256 _tokens); constructor () public { start = now; } /** * Calculate Dividends */ function getDividends(address _member) public view returns(uint256) { uint256 _balance = balanceOf(_member); uint256 _dividends = (uint256)((int256)(_balance.mul(dividendsPerShare)) - dividendsPayouts[_member]) .div(magnitude); uint256 _contractBalance = address(this).balance; if (_dividends > _contractBalance) return _contractBalance; return _dividends; } /** * Reinvest */ function reinvest() public returns(uint256) { uint256 _ether = getDividends(msg.sender); dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] + (int256)(_ether.mul(magnitude)); _ether = _ether .add(referralEarnings[msg.sender]); referralEarnings[msg.sender] = 0; uint256 _fee = _ether.mul(reinvestFee).div(100); uint256 _reinvest = _ether.sub(_fee); uint256 _tokens = ethToTokens(_reinvest); require (_tokens >= minPurchase, 'Token equivalent amount should not be less than 1 token'); dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] + (int256)(dividendsPerShare.mul(_tokens)); emit Reinvest(msg.sender, _ether, _tokens); _mint(msg.sender, _tokens); uint256 _supply = totalSupply(); if (_supply > 0) { dividendsPerShare = dividendsPerShare .add(_fee.mul(magnitude).div(_supply)); } else { dividendsPerShare = 0; } } /** * Withdraw dividends */ // function withdrawPart(uint256 _ether) // public // returns(bool) // { // uint256 _dividends = getDividends(msg.sender); // require(_ether <= _dividends, 'Not enough dividends'); // dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] // + (int256)(_ether.mul(magnitude)); // uint256 _fee = _ether.mul(withdrawFee).div(100); // uint256 _withdraw = _ether.sub(_fee); // uint256 _tokens = ethToTokens(_withdraw); // require (_tokens >= minPurchase, // 'Token equivalent amount should not be less than 1 token'); // emit Withdraw(msg.sender, _ether); // payable(wallet_99_strong_hand).transfer(_fee); // payable(msg.sender).transfer(_withdraw); // return true; // } /** * Withdraw dividends */ function withdraw() public returns(bool) { uint256 _ether = getDividends(msg.sender); dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] + (int256)(_ether.mul(magnitude)); _ether = _ether .add(referralEarnings[msg.sender]); referralEarnings[msg.sender] = 0; uint256 _fee = _ether.mul(withdrawFee).div(100); uint256 _withdraw = _ether.sub(_fee); uint256 _tokens = ethToTokens(_withdraw); require (_tokens >= minPurchase, 'Token equivalent amount should not be less than 1 token'); emit Withdraw(msg.sender, _ether); payable(wallet_99_strong_hand).transfer(_fee); payable(msg.sender).transfer(_withdraw); return true; } function transfer(address _recipient, uint256 _amount) public override returns (bool) { require (_amount >= minPurchase, 'Token amount should not be less than 1 token'); require (_amount <= balanceOf(msg.sender), 'Token amount should not be greater than balance'); uint256 _fee = _amount.mul(transferFee).div(100); uint256 _tokens = _amount.sub(_fee); dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] - (int256)(dividendsPerShare.mul(_amount)); dividendsPayouts[_recipient] = dividendsPayouts[_recipient] + (int256)(dividendsPerShare.mul(_tokens)); _burn(msg.sender, _fee); dividendsPerShare = dividendsPerShare .add(tokensToEth(_fee).mul(magnitude).div(totalSupply())); return super.transfer(_recipient, _tokens); } function transferFrom(address _sender, address _recipient, uint256 _amount) public override returns (bool) { require (_amount >= minPurchase, 'Token amount should not be less than 1 token'); require (_amount <= balanceOf(_sender), 'Token amount should not be greater than balance'); uint256 _fee = _amount.mul(transferFee).div(100); uint256 _tokens = _amount.sub(_fee); dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] - (int256)(dividendsPerShare.mul(_amount)); dividendsPayouts[_recipient] = dividendsPayouts[_recipient] + (int256)(dividendsPerShare.mul(_tokens)); _burn(_sender, _fee); dividendsPerShare = dividendsPerShare .add(tokensToEth(_fee).mul(magnitude).div(totalSupply())); return super.transferFrom(_sender, _recipient, _tokens); } receive() payable external { purchase(msg.value, address(0)); } function buy(address _referrer) payable external { purchase(msg.value, _referrer); } function purchase(uint256 _amount, address _referrer) internal { require (msg.sender != _referrer, 'You can not be your referrer'); uint256 _refFee = _amount.mul(referrerFee).div(100); uint256 _buyFee = _amount.mul(buyFee).div(100); uint256 _totalFee = _refFee.add(_buyFee); if (referrer[msg.sender] == address(0) && _referrer != address(0) && balanceOf(_referrer) >= 99 ether) { referrer[msg.sender] = _referrer; referralEarnings[_referrer] = referralEarnings[_referrer] .add(_refFee); } else { _buyFee = _totalFee; } uint256 _tokens = ethToTokens(_amount.sub(_totalFee)); require (_tokens >= minPurchase, 'Tokens amount should not be less than 1 token'); emit Buy(msg.sender, _amount, _tokens, _referrer); _mint(msg.sender, _tokens); uint256 _supply = totalSupply(); uint256 _extra = _buyFee .mul(magnitude) .div(_supply); if (dividendsPerShare > 0) { dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] + (int256)(dividendsPerShare.mul(_tokens)); } dividendsPerShare = dividendsPerShare .add(_extra); } function sell(uint256 _tokens) external { require (_tokens >= minPurchase, 'Tokens amount should not be less than 1 token'); require (_tokens <= balanceOf(msg.sender), 'Not enough tokens'); uint256 _amount = tokensToEth(_tokens); uint256 _fee = _amount.mul(sellFee).div(100); emit Sell(msg.sender, _amount, _tokens); _burn(msg.sender, _tokens); dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] - (int256)(dividendsPerShare.mul(_tokens)); uint256 _supply = totalSupply(); if (_supply > 0) { dividendsPerShare = dividendsPerShare .add(_fee.mul(magnitude).div(_supply)); } else { dividendsPerShare = 0; dividendsPayouts[msg.sender] = dividendsPayouts[msg.sender] - (int256)(_fee.mul(magnitude)); } payable(msg.sender) .transfer(_amount.sub(_fee)); } function getCurrentPrice () public view returns(uint256) { uint256 supply = totalSupply(); uint256 supplyInt = supply.div(1 ether); return supplyInt.mul(increment).add(initialPrice); } /** * Calculate Token price based on an amount of incoming ethereum */ function ethToTokens(uint256 _ether) public view returns(uint256) { // return _ether; uint256 eth = _ether; uint256 supply = totalSupply(); uint256 supplyInt = supply.div(1 ether); uint256 supplyFract = supply.sub(supplyInt.mul(1 ether)); uint256 currentPrice = supplyInt.mul(increment).add(initialPrice); uint256 tokens; uint256 tempTokens = eth.mul(1 ether).div(currentPrice); if (tempTokens < supplyFract) { return tempTokens; } tokens = tokens.add(supplyFract); eth = eth.sub(supplyFract.mul(currentPrice).div(1 ether)); if (supplyFract > 0) { currentPrice = currentPrice.add(increment); } tempTokens = eth.mul(1 ether).div(currentPrice); if (tempTokens <= 1 ether) { return tokens.add(tempTokens); } uint256 d = currentPrice.mul(2) .sub(increment); d = d.mul(d); d = d.add(increment.mul(eth).mul(8)); uint256 sqrtD = sqrt(d); tempTokens = increment .add(sqrtD) .sub(currentPrice.mul(2)); tempTokens = tempTokens .mul(1 ether) .div(increment.mul(2)); tokens = tokens.add(tempTokens); return tokens; } /** * Calculate tokens */ function tokensToEth(uint256 _tokens) public view returns(uint256) { // return _tokens; uint256 tokens = _tokens; uint256 supply = totalSupply(); if (tokens > supply) return 0; uint256 supplyInt = supply.div(1 ether); uint256 supplyFract = supply.sub(supplyInt.mul(1 ether, '1')); uint256 currentPrice = supplyInt.mul(increment).add(initialPrice); uint256 eth; if (tokens < supplyFract) { return tokens.mul(currentPrice).div(1 ether); } eth = eth.add(supplyFract.mul(currentPrice).div(1 ether)); tokens = tokens.sub(supplyFract); if (supplyFract > 0) { currentPrice = currentPrice.sub(increment); } if (tokens <= 1 ether) { return eth.add(tokens.mul(currentPrice).div(1 ether)); } uint256 tokensInt = tokens.div(1 ether); uint256 tokensFract; if (tokensInt > 1) { tokensFract = tokens.sub(tokensInt.mul(1 ether)); } uint256 tempEth = currentPrice .mul(2) .sub(increment.mul(tokensInt.sub(1))); tempEth = tempEth .mul(tokensInt) .div(2); eth = eth.add(tempEth); currentPrice = currentPrice.sub(increment.mul(tokensInt)); eth = eth .add(currentPrice.mul(tokensFract).div(1 ether)); return eth; } function sqrt(uint x) public pure returns (uint y) { uint z = (x + 1) / 2; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } function contractBalance() public view returns(uint256) { return address(this).balance; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"_member","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ether","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokens","type":"uint256"},{"indexed":false,"internalType":"address","name":"_referrer","type":"address"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_member","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ether","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_member","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ether","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"Sell","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":"address","name":"_member","type":"address"},{"indexed":false,"internalType":"uint256","name":"_ether","type":"uint256"}],"name":"Withdraw","type":"event"},{"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":"address","name":"_referrer","type":"address"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"","type":"address"}],"name":"dividendsPayouts","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ether","type":"uint256"}],"name":"ethToTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"getDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"increment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reinvest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reinvestFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"sell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"sqrt","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"tokensToEth","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":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wallet_99_strong_hand","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260058054610100600160a81b03191674dcd272b4e7597640f20287a1d6d525f4d003439400178155633b9aca006006819055600755670de0b6b3a7640000600855600a6009819055808055600b819055600c91909155600d819055600e553480156200006f57600080fd5b50604051806040016040528060048152602001634658393960e01b815250604051806040016040528060048152602001630b08692b60e31b8152508160039080519060200190620000c2929190620000f2565b508051620000d8906004906020840190620000f2565b50506005805460ff19166012179055504260105562000197565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200013557805160ff191683800117855562000165565b8280016001018555821562000165579182015b828111156200016557825182559160200191906001019062000148565b506200017392915062000177565b5090565b6200019491905b808211156200017357600081556001016200017e565b90565b6124d080620001a76000396000f3fe6080604052600436106102135760003560e01c806379ca9ad411610118578063d09de08a116100a0578063e941fa781161006f578063e941fa7814610732578063eb91d37e14610747578063f088d5471461075c578063fb3d900614610782578063fdb5a03e146107b557610225565b8063d09de08a146106a3578063dd62ed3e146106b8578063e2d2e219146106f3578063e4849b321461070857610225565b8063a4c89322116100e7578063a4c89322146105e3578063a9059cbb1461060d578063acb2ad6f14610646578063be9a65551461065b578063c07b528a1461067057610225565b806379ca9ad4146105565780638b7afe2e1461058057806395d89b4114610595578063a457c2d7146105aa57610225565b8063313ce5671161019b5780634634d81c1161016a5780634634d81c1461049c57806347062402146104cf578063677342ce146104e45780636e88a7bd1461050e57806370a082311461052357610225565b8063313ce5671461040e57806333b5b62e14610439578063395093511461044e5780633ccfd60b1461048757610225565b80631d0806ae116101e25780631d0806ae146103595780631fbea9241461036e57806323b872dd146103835780632b14ca56146103c65780632cf003c2146103db57610225565b806306fdde031461022a578063095ea7b3146102b45780631292d8df1461030157806318160ddd1461033257610225565b36610225576102233460006107ca565b005b600080fd5b34801561023657600080fd5b5061023f610a6f565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c057600080fd5b506102ed600480360360408110156102d757600080fd5b506001600160a01b038135169060200135610b05565b604080519115158252519081900360200190f35b34801561030d57600080fd5b50610316610b23565b604080516001600160a01b039092168252519081900360200190f35b34801561033e57600080fd5b50610347610b37565b60408051918252519081900360200190f35b34801561036557600080fd5b50610347610b3d565b34801561037a57600080fd5b50610347610b43565b34801561038f57600080fd5b506102ed600480360360608110156103a657600080fd5b506001600160a01b03813581169160208101359091169060400135610b49565b3480156103d257600080fd5b50610347610cc5565b3480156103e757600080fd5b50610316600480360360208110156103fe57600080fd5b50356001600160a01b0316610ccb565b34801561041a57600080fd5b50610423610ce6565b6040805160ff9092168252519081900360200190f35b34801561044557600080fd5b50610347610cef565b34801561045a57600080fd5b506102ed6004803603604081101561047157600080fd5b506001600160a01b038135169060200135610cf5565b34801561049357600080fd5b506102ed610d4e565b3480156104a857600080fd5b50610347600480360360208110156104bf57600080fd5b50356001600160a01b0316610eee565b3480156104db57600080fd5b50610347610f66565b3480156104f057600080fd5b506103476004803603602081101561050757600080fd5b5035610f6c565b34801561051a57600080fd5b50610347610fa3565b34801561052f57600080fd5b506103476004803603602081101561054657600080fd5b50356001600160a01b0316610fa9565b34801561056257600080fd5b506103476004803603602081101561057957600080fd5b5035610fc4565b34801561058c57600080fd5b50610347611258565b3480156105a157600080fd5b5061023f61125c565b3480156105b657600080fd5b506102ed600480360360408110156105cd57600080fd5b506001600160a01b0381351690602001356112bd565b3480156105ef57600080fd5b506103476004803603602081101561060657600080fd5b503561132b565b34801561061957600080fd5b506102ed6004803603604081101561063057600080fd5b506001600160a01b038135169060200135611539565b34801561065257600080fd5b50610347611681565b34801561066757600080fd5b50610347611687565b34801561067c57600080fd5b506103476004803603602081101561069357600080fd5b50356001600160a01b031661168d565b3480156106af57600080fd5b5061034761169f565b3480156106c457600080fd5b50610347600480360360408110156106db57600080fd5b506001600160a01b03813581169160200135166116a5565b3480156106ff57600080fd5b506103476116d0565b34801561071457600080fd5b506102236004803603602081101561072b57600080fd5b50356116d6565b34801561073e57600080fd5b506103476118b9565b34801561075357600080fd5b506103476118bf565b6102236004803603602081101561077257600080fd5b50356001600160a01b031661190a565b34801561078e57600080fd5b50610347600480360360208110156107a557600080fd5b50356001600160a01b0316611917565b3480156107c157600080fd5b50610347611929565b336001600160a01b0382161415610828576040805162461bcd60e51b815260206004820152601c60248201527f596f752063616e206e6f7420626520796f757220726566657272657200000000604482015290519081900360640190fd5b60006108506064610844600c5486611ad390919063ffffffff16565b9063ffffffff611b2c16565b9050600061086e6064610844600d5487611ad390919063ffffffff16565b90506000610882838363ffffffff611b6e16565b336000908152601160205260409020549091506001600160a01b03161580156108b357506001600160a01b03841615155b80156108d0575068055de6a779bbac00006108cd85610fa9565b10155b156109355733600090815260116020908152604080832080546001600160a01b0319166001600160a01b038916908117909155835260129091529020546109179084611b6e565b6001600160a01b038516600090815260126020526040902055610939565b8091505b600061095361094e878463ffffffff611bc816565b61132b565b90506008548110156109965760405162461bcd60e51b815260040180806020018281038252602d815260200180612304602d913960400191505060405180910390fd5b60408051338152602081018890528082018390526001600160a01b038716606082015290517ff152feb5fe7641aae5c7f8e8187c26eef1a9d970f7c3794ac442f0842282d93f9181900360800190a16109ef3382611c0a565b60006109f9610b37565b90506000610a198261084487670de0b6b3a764000063ffffffff611ad316565b600f5490915015610a4f57600f54610a37908463ffffffff611ad316565b33600090815260136020526040902080549190910190555b600f54610a62908263ffffffff611b6e16565b600f555050505050505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610b19610b12611d06565b8484611d0a565b5060015b92915050565b60055461010090046001600160a01b031681565b60025490565b60065481565b60095481565b6000600854821015610b8c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806123b1602c913960400191505060405180910390fd5b610b9584610fa9565b821115610bd35760405162461bcd60e51b815260040180806020018281038252602f8152602001806123fe602f913960400191505060405180910390fd5b6000610bef6064610844600a5486611ad390919063ffffffff16565b90506000610c03848363ffffffff611bc816565b600f54909150610c19908563ffffffff611ad316565b3360009081526013602052604090208054919091039055600f54610c43908263ffffffff611ad316565b6001600160a01b03861660009081526013602052604090208054919091019055610c6d8683611df6565b610cab610c9c610c7b610b37565b610844670de0b6b3a7640000610c9087610fc4565b9063ffffffff611ad316565b600f549063ffffffff611b6e16565b600f55610cb9868683611efe565b925050505b9392505050565b600e5481565b6011602052600090815260409020546001600160a01b031681565b60055460ff1690565b60085481565b6000610b19610d02611d06565b84610d498560016000610d13611d06565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611b6e16565b611d0a565b600080610d5a33610eee565b9050610d7481670de0b6b3a764000063ffffffff611ad316565b336000908152601360209081526040808320805494909401909355601290522054610da690829063ffffffff611b6e16565b336000908152601260205260408120819055600b5491925090610dd79060649061084490859063ffffffff611ad316565b90506000610deb838363ffffffff611bc816565b90506000610df88261132b565b9050600854811015610e3b5760405162461bcd60e51b81526004018080602001828103825260378152602001806123526037913960400191505060405180910390fd5b604080513381526020810186905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a16005546040516101009091046001600160a01b0316906108fc8515029085906000818181858888f19350505050158015610eb4573d6000803e3d6000fd5b50604051339083156108fc029084906000818181858888f19350505050158015610ee2573d6000803e3d6000fd5b50600194505050505090565b600080610efa83610fa9565b6001600160a01b038416600090815260136020526040812054600f549293509091610f4791670de0b6b3a764000091610f3a90869063ffffffff611ad316565b039063ffffffff611b2c16565b90504780821115610f5c579250610f61915050565b509150505b919050565b600d5481565b80600260018201045b81811015610f9d57809150600281828581610f8c57fe5b040181610f9557fe5b049050610f75565b50919050565b600c5481565b6001600160a01b031660009081526020819052604090205490565b60008181610fd0610b37565b905080821115610fe557600092505050610f61565b6000610fff82670de0b6b3a764000063ffffffff611b2c16565b9050600061104961103c670de0b6b3a7640000604051806040016040528060018152602001603160f81b81525085611f869092919063ffffffff16565b849063ffffffff611bc816565b9050600061107460065461106860075486611ad390919063ffffffff16565b9063ffffffff611b6e16565b90506000828610156110a95761109c670de0b6b3a7640000610844888563ffffffff611ad316565b9650505050505050610f61565b6110d56110c8670de0b6b3a7640000610844868663ffffffff611ad316565b829063ffffffff611b6e16565b90506110e7868463ffffffff611bc816565b955082156111065760075461110390839063ffffffff611bc816565b91505b670de0b6b3a764000086116111345761109c6110c8670de0b6b3a7640000610844898663ffffffff611ad316565b600061114e87670de0b6b3a764000063ffffffff611b2c16565b9050600060018211156111865761118361117683670de0b6b3a764000063ffffffff611ad316565b899063ffffffff611bc816565b90505b60006111cb6111ae61119f85600163ffffffff611bc816565b6007549063ffffffff611ad316565b6111bf87600263ffffffff611ad316565b9063ffffffff611bc816565b90506111e26002610844838663ffffffff611ad316565b90506111f4848263ffffffff611b6e16565b935061121b61120e84600754611ad390919063ffffffff16565b869063ffffffff611bc816565b945061124961123c670de0b6b3a7640000610844888663ffffffff611ad316565b859063ffffffff611b6e16565b9b9a5050505050505050505050565b4790565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610afb5780601f10610ad057610100808354040283529160200191610afb565b6000610b196112ca611d06565b84610d498560405180606001604052806025815260200161247660259139600160006112f4611d06565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61203716565b60008181611337610b37565b9050600061135382670de0b6b3a764000063ffffffff611b2c16565b9050600061137261103c83670de0b6b3a764000063ffffffff611ad316565b9050600061139160065461106860075486611ad390919063ffffffff16565b90506000806113b28361084489670de0b6b3a764000063ffffffff611ad316565b9050838110156113ca579650610f6195505050505050565b6113da828563ffffffff611b6e16565b91506114086113fb670de0b6b3a7640000610844878763ffffffff611ad316565b889063ffffffff611bc816565b965083156114275760075461142490849063ffffffff611b6e16565b92505b6114438361084489670de0b6b3a764000063ffffffff611ad316565b9050670de0b6b3a7640000811161147257611464828263ffffffff611b6e16565b975050505050505050610f61565b60075460009061148d906111bf86600263ffffffff611ad316565b905061149f818063ffffffff611ad316565b90506114be6110c86008610c908b600754611ad390919063ffffffff16565b905060006114cb82610f6c565b90506114f46114e186600263ffffffff611ad316565b6007546111bf908463ffffffff611b6e16565b925061152761150f6002600754611ad390919063ffffffff16565b61084485670de0b6b3a764000063ffffffff611ad316565b9250611249848463ffffffff611b6e16565b600060085482101561157c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806123b1602c913960400191505060405180910390fd5b61158533610fa9565b8211156115c35760405162461bcd60e51b815260040180806020018281038252602f8152602001806123fe602f913960400191505060405180910390fd5b60006115df6064610844600a5486611ad390919063ffffffff16565b905060006115f3848363ffffffff611bc816565b600f54909150611609908563ffffffff611ad316565b3360009081526013602052604090208054919091039055600f54611633908263ffffffff611ad316565b6001600160a01b0386166000908152601360205260409020805491909101905561165d3383611df6565b61166b610c9c610c7b610b37565b600f556116788582612091565b95945050505050565b600a5481565b60105481565b60126020526000908152604090205481565b60075481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600f5481565b6008548110156117175760405162461bcd60e51b815260040180806020018281038252602d815260200180612304602d913960400191505060405180910390fd5b61172033610fa9565b811115611768576040805162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b604482015290519081900360640190fd5b600061177382610fc4565b905060006117916064610844600e5485611ad390919063ffffffff16565b604080513381526020810185905280820186905290519192507fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a919081900360600190a16117df3384611df6565b600f546117f2908463ffffffff611ad316565b336000908152601360205260408120805492909203909155611812610b37565b9050801561184157611839610c9c8261084485670de0b6b3a764000063ffffffff611ad316565b600f55611876565b6000600f5561185e82670de0b6b3a764000063ffffffff611ad316565b33600090815260136020526040902080549190910390555b336108fc61188a858563ffffffff611bc816565b6040518115909202916000818181858888f193505050501580156118b2573d6000803e3d6000fd5b5050505050565b600b5481565b6000806118ca610b37565b905060006118e682670de0b6b3a764000063ffffffff611b2c16565b905061190360065461106860075484611ad390919063ffffffff16565b9250505090565b61191434826107ca565b50565b60136020526000908152604090205481565b60008061193533610eee565b905061194f81670de0b6b3a764000063ffffffff611ad316565b33600090815260136020908152604080832080549490940190935560129052205461198190829063ffffffff611b6e16565b336000908152601260205260408120819055600954919250906119b29060649061084490859063ffffffff611ad316565b905060006119c6838363ffffffff611bc816565b905060006119d38261132b565b9050600854811015611a165760405162461bcd60e51b81526004018080602001828103825260378152602001806123526037913960400191505060405180910390fd5b600f54611a29908263ffffffff611ad316565b33600081815260136020908152604091829020805494909401909355805191825291810186905280820183905290517fc003f45bc224d116b6d079100d4ab57a5b9633244c47a5a92a176c5b79a85f289181900360600190a1611a8c3382611c0a565b6000611a96610b37565b90508015611ac557611abd610c9c8261084487670de0b6b3a764000063ffffffff611ad316565b600f55611acb565b6000600f555b505050505090565b600082611ae257506000610b1d565b82820282848281611aef57fe5b0414610cbe5760405162461bcd60e51b81526004018080602001828103825260218152602001806123316021913960400191505060405180910390fd5b6000610cbe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a5565b600082820183811015610cbe576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610cbe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612037565b6001600160a01b038216611c65576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611c716000838361210a565b600254611c84908263ffffffff611b6e16565b6002556001600160a01b038216600090815260208190526040902054611cb0908263ffffffff611b6e16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b3390565b6001600160a01b038316611d4f5760405162461bcd60e51b81526004018080602001828103825260248152602001806124526024913960400191505060405180910390fd5b6001600160a01b038216611d945760405162461bcd60e51b81526004018080602001828103825260228152602001806122bc6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038216611e3b5760405162461bcd60e51b81526004018080602001828103825260218152602001806123dd6021913960400191505060405180910390fd5b611e478260008361210a565b611e8a8160405180606001604052806022815260200161229a602291396001600160a01b038516600090815260208190526040902054919063ffffffff61203716565b6001600160a01b038316600090815260208190526040902055600254611eb6908263ffffffff611bc816565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000611f0b84848461210f565b611f7c84611f17611d06565b610d4985604051806060016040528060288152602001612389602891396001600160a01b038a16600090815260016020526040812090611f55611d06565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61203716565b5060019392505050565b600083611f9557506000610cbe565b83830283858281611fa257fe5b0414839061202e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ff3578181015183820152602001611fdb565b50505050905090810190601f1680156120205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50949350505050565b600081848411156120895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ff3578181015183820152602001611fdb565b505050900390565b6000610b1961209e611d06565b848461210f565b600081836120f45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ff3578181015183820152602001611fdb565b50600083858161210057fe5b0495945050505050565b505050565b6001600160a01b0383166121545760405162461bcd60e51b815260040180806020018281038252602581526020018061242d6025913960400191505060405180910390fd5b6001600160a01b0382166121995760405162461bcd60e51b81526004018080602001828103825260238152602001806122776023913960400191505060405180910390fd5b6121a483838361210a565b6121e7816040518060600160405280602681526020016122de602691396001600160a01b038616600090815260208190526040902054919063ffffffff61203716565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461221c908263ffffffff611b6e16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365546f6b656e7320616d6f756e742073686f756c64206e6f74206265206c657373207468616e203120746f6b656e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e206571756976616c656e7420616d6f756e742073686f756c64206e6f74206265206c657373207468616e203120746f6b656e45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365546f6b656e20616d6f756e742073686f756c64206e6f74206265206c657373207468616e203120746f6b656e45524332303a206275726e2066726f6d20746865207a65726f2061646472657373546f6b656e20616d6f756e742073686f756c64206e6f742062652067726561746572207468616e2062616c616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122056c1707c410defd18a10fadd8193e4649f5fd3d94920eb2b73e5ff8ca15dece864736f6c63430006020033
Deployed Bytecode
0x6080604052600436106102135760003560e01c806379ca9ad411610118578063d09de08a116100a0578063e941fa781161006f578063e941fa7814610732578063eb91d37e14610747578063f088d5471461075c578063fb3d900614610782578063fdb5a03e146107b557610225565b8063d09de08a146106a3578063dd62ed3e146106b8578063e2d2e219146106f3578063e4849b321461070857610225565b8063a4c89322116100e7578063a4c89322146105e3578063a9059cbb1461060d578063acb2ad6f14610646578063be9a65551461065b578063c07b528a1461067057610225565b806379ca9ad4146105565780638b7afe2e1461058057806395d89b4114610595578063a457c2d7146105aa57610225565b8063313ce5671161019b5780634634d81c1161016a5780634634d81c1461049c57806347062402146104cf578063677342ce146104e45780636e88a7bd1461050e57806370a082311461052357610225565b8063313ce5671461040e57806333b5b62e14610439578063395093511461044e5780633ccfd60b1461048757610225565b80631d0806ae116101e25780631d0806ae146103595780631fbea9241461036e57806323b872dd146103835780632b14ca56146103c65780632cf003c2146103db57610225565b806306fdde031461022a578063095ea7b3146102b45780631292d8df1461030157806318160ddd1461033257610225565b36610225576102233460006107ca565b005b600080fd5b34801561023657600080fd5b5061023f610a6f565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610279578181015183820152602001610261565b50505050905090810190601f1680156102a65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102c057600080fd5b506102ed600480360360408110156102d757600080fd5b506001600160a01b038135169060200135610b05565b604080519115158252519081900360200190f35b34801561030d57600080fd5b50610316610b23565b604080516001600160a01b039092168252519081900360200190f35b34801561033e57600080fd5b50610347610b37565b60408051918252519081900360200190f35b34801561036557600080fd5b50610347610b3d565b34801561037a57600080fd5b50610347610b43565b34801561038f57600080fd5b506102ed600480360360608110156103a657600080fd5b506001600160a01b03813581169160208101359091169060400135610b49565b3480156103d257600080fd5b50610347610cc5565b3480156103e757600080fd5b50610316600480360360208110156103fe57600080fd5b50356001600160a01b0316610ccb565b34801561041a57600080fd5b50610423610ce6565b6040805160ff9092168252519081900360200190f35b34801561044557600080fd5b50610347610cef565b34801561045a57600080fd5b506102ed6004803603604081101561047157600080fd5b506001600160a01b038135169060200135610cf5565b34801561049357600080fd5b506102ed610d4e565b3480156104a857600080fd5b50610347600480360360208110156104bf57600080fd5b50356001600160a01b0316610eee565b3480156104db57600080fd5b50610347610f66565b3480156104f057600080fd5b506103476004803603602081101561050757600080fd5b5035610f6c565b34801561051a57600080fd5b50610347610fa3565b34801561052f57600080fd5b506103476004803603602081101561054657600080fd5b50356001600160a01b0316610fa9565b34801561056257600080fd5b506103476004803603602081101561057957600080fd5b5035610fc4565b34801561058c57600080fd5b50610347611258565b3480156105a157600080fd5b5061023f61125c565b3480156105b657600080fd5b506102ed600480360360408110156105cd57600080fd5b506001600160a01b0381351690602001356112bd565b3480156105ef57600080fd5b506103476004803603602081101561060657600080fd5b503561132b565b34801561061957600080fd5b506102ed6004803603604081101561063057600080fd5b506001600160a01b038135169060200135611539565b34801561065257600080fd5b50610347611681565b34801561066757600080fd5b50610347611687565b34801561067c57600080fd5b506103476004803603602081101561069357600080fd5b50356001600160a01b031661168d565b3480156106af57600080fd5b5061034761169f565b3480156106c457600080fd5b50610347600480360360408110156106db57600080fd5b506001600160a01b03813581169160200135166116a5565b3480156106ff57600080fd5b506103476116d0565b34801561071457600080fd5b506102236004803603602081101561072b57600080fd5b50356116d6565b34801561073e57600080fd5b506103476118b9565b34801561075357600080fd5b506103476118bf565b6102236004803603602081101561077257600080fd5b50356001600160a01b031661190a565b34801561078e57600080fd5b50610347600480360360208110156107a557600080fd5b50356001600160a01b0316611917565b3480156107c157600080fd5b50610347611929565b336001600160a01b0382161415610828576040805162461bcd60e51b815260206004820152601c60248201527f596f752063616e206e6f7420626520796f757220726566657272657200000000604482015290519081900360640190fd5b60006108506064610844600c5486611ad390919063ffffffff16565b9063ffffffff611b2c16565b9050600061086e6064610844600d5487611ad390919063ffffffff16565b90506000610882838363ffffffff611b6e16565b336000908152601160205260409020549091506001600160a01b03161580156108b357506001600160a01b03841615155b80156108d0575068055de6a779bbac00006108cd85610fa9565b10155b156109355733600090815260116020908152604080832080546001600160a01b0319166001600160a01b038916908117909155835260129091529020546109179084611b6e565b6001600160a01b038516600090815260126020526040902055610939565b8091505b600061095361094e878463ffffffff611bc816565b61132b565b90506008548110156109965760405162461bcd60e51b815260040180806020018281038252602d815260200180612304602d913960400191505060405180910390fd5b60408051338152602081018890528082018390526001600160a01b038716606082015290517ff152feb5fe7641aae5c7f8e8187c26eef1a9d970f7c3794ac442f0842282d93f9181900360800190a16109ef3382611c0a565b60006109f9610b37565b90506000610a198261084487670de0b6b3a764000063ffffffff611ad316565b600f5490915015610a4f57600f54610a37908463ffffffff611ad316565b33600090815260136020526040902080549190910190555b600f54610a62908263ffffffff611b6e16565b600f555050505050505050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610b19610b12611d06565b8484611d0a565b5060015b92915050565b60055461010090046001600160a01b031681565b60025490565b60065481565b60095481565b6000600854821015610b8c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806123b1602c913960400191505060405180910390fd5b610b9584610fa9565b821115610bd35760405162461bcd60e51b815260040180806020018281038252602f8152602001806123fe602f913960400191505060405180910390fd5b6000610bef6064610844600a5486611ad390919063ffffffff16565b90506000610c03848363ffffffff611bc816565b600f54909150610c19908563ffffffff611ad316565b3360009081526013602052604090208054919091039055600f54610c43908263ffffffff611ad316565b6001600160a01b03861660009081526013602052604090208054919091019055610c6d8683611df6565b610cab610c9c610c7b610b37565b610844670de0b6b3a7640000610c9087610fc4565b9063ffffffff611ad316565b600f549063ffffffff611b6e16565b600f55610cb9868683611efe565b925050505b9392505050565b600e5481565b6011602052600090815260409020546001600160a01b031681565b60055460ff1690565b60085481565b6000610b19610d02611d06565b84610d498560016000610d13611d06565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611b6e16565b611d0a565b600080610d5a33610eee565b9050610d7481670de0b6b3a764000063ffffffff611ad316565b336000908152601360209081526040808320805494909401909355601290522054610da690829063ffffffff611b6e16565b336000908152601260205260408120819055600b5491925090610dd79060649061084490859063ffffffff611ad316565b90506000610deb838363ffffffff611bc816565b90506000610df88261132b565b9050600854811015610e3b5760405162461bcd60e51b81526004018080602001828103825260378152602001806123526037913960400191505060405180910390fd5b604080513381526020810186905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a16005546040516101009091046001600160a01b0316906108fc8515029085906000818181858888f19350505050158015610eb4573d6000803e3d6000fd5b50604051339083156108fc029084906000818181858888f19350505050158015610ee2573d6000803e3d6000fd5b50600194505050505090565b600080610efa83610fa9565b6001600160a01b038416600090815260136020526040812054600f549293509091610f4791670de0b6b3a764000091610f3a90869063ffffffff611ad316565b039063ffffffff611b2c16565b90504780821115610f5c579250610f61915050565b509150505b919050565b600d5481565b80600260018201045b81811015610f9d57809150600281828581610f8c57fe5b040181610f9557fe5b049050610f75565b50919050565b600c5481565b6001600160a01b031660009081526020819052604090205490565b60008181610fd0610b37565b905080821115610fe557600092505050610f61565b6000610fff82670de0b6b3a764000063ffffffff611b2c16565b9050600061104961103c670de0b6b3a7640000604051806040016040528060018152602001603160f81b81525085611f869092919063ffffffff16565b849063ffffffff611bc816565b9050600061107460065461106860075486611ad390919063ffffffff16565b9063ffffffff611b6e16565b90506000828610156110a95761109c670de0b6b3a7640000610844888563ffffffff611ad316565b9650505050505050610f61565b6110d56110c8670de0b6b3a7640000610844868663ffffffff611ad316565b829063ffffffff611b6e16565b90506110e7868463ffffffff611bc816565b955082156111065760075461110390839063ffffffff611bc816565b91505b670de0b6b3a764000086116111345761109c6110c8670de0b6b3a7640000610844898663ffffffff611ad316565b600061114e87670de0b6b3a764000063ffffffff611b2c16565b9050600060018211156111865761118361117683670de0b6b3a764000063ffffffff611ad316565b899063ffffffff611bc816565b90505b60006111cb6111ae61119f85600163ffffffff611bc816565b6007549063ffffffff611ad316565b6111bf87600263ffffffff611ad316565b9063ffffffff611bc816565b90506111e26002610844838663ffffffff611ad316565b90506111f4848263ffffffff611b6e16565b935061121b61120e84600754611ad390919063ffffffff16565b869063ffffffff611bc816565b945061124961123c670de0b6b3a7640000610844888663ffffffff611ad316565b859063ffffffff611b6e16565b9b9a5050505050505050505050565b4790565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610afb5780601f10610ad057610100808354040283529160200191610afb565b6000610b196112ca611d06565b84610d498560405180606001604052806025815260200161247660259139600160006112f4611d06565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61203716565b60008181611337610b37565b9050600061135382670de0b6b3a764000063ffffffff611b2c16565b9050600061137261103c83670de0b6b3a764000063ffffffff611ad316565b9050600061139160065461106860075486611ad390919063ffffffff16565b90506000806113b28361084489670de0b6b3a764000063ffffffff611ad316565b9050838110156113ca579650610f6195505050505050565b6113da828563ffffffff611b6e16565b91506114086113fb670de0b6b3a7640000610844878763ffffffff611ad316565b889063ffffffff611bc816565b965083156114275760075461142490849063ffffffff611b6e16565b92505b6114438361084489670de0b6b3a764000063ffffffff611ad316565b9050670de0b6b3a7640000811161147257611464828263ffffffff611b6e16565b975050505050505050610f61565b60075460009061148d906111bf86600263ffffffff611ad316565b905061149f818063ffffffff611ad316565b90506114be6110c86008610c908b600754611ad390919063ffffffff16565b905060006114cb82610f6c565b90506114f46114e186600263ffffffff611ad316565b6007546111bf908463ffffffff611b6e16565b925061152761150f6002600754611ad390919063ffffffff16565b61084485670de0b6b3a764000063ffffffff611ad316565b9250611249848463ffffffff611b6e16565b600060085482101561157c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806123b1602c913960400191505060405180910390fd5b61158533610fa9565b8211156115c35760405162461bcd60e51b815260040180806020018281038252602f8152602001806123fe602f913960400191505060405180910390fd5b60006115df6064610844600a5486611ad390919063ffffffff16565b905060006115f3848363ffffffff611bc816565b600f54909150611609908563ffffffff611ad316565b3360009081526013602052604090208054919091039055600f54611633908263ffffffff611ad316565b6001600160a01b0386166000908152601360205260409020805491909101905561165d3383611df6565b61166b610c9c610c7b610b37565b600f556116788582612091565b95945050505050565b600a5481565b60105481565b60126020526000908152604090205481565b60075481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600f5481565b6008548110156117175760405162461bcd60e51b815260040180806020018281038252602d815260200180612304602d913960400191505060405180910390fd5b61172033610fa9565b811115611768576040805162461bcd60e51b81526020600482015260116024820152704e6f7420656e6f75676820746f6b656e7360781b604482015290519081900360640190fd5b600061177382610fc4565b905060006117916064610844600e5485611ad390919063ffffffff16565b604080513381526020810185905280820186905290519192507fed7a144fad14804d5c249145e3e0e2b63a9eb455b76aee5bc92d711e9bba3e4a919081900360600190a16117df3384611df6565b600f546117f2908463ffffffff611ad316565b336000908152601360205260408120805492909203909155611812610b37565b9050801561184157611839610c9c8261084485670de0b6b3a764000063ffffffff611ad316565b600f55611876565b6000600f5561185e82670de0b6b3a764000063ffffffff611ad316565b33600090815260136020526040902080549190910390555b336108fc61188a858563ffffffff611bc816565b6040518115909202916000818181858888f193505050501580156118b2573d6000803e3d6000fd5b5050505050565b600b5481565b6000806118ca610b37565b905060006118e682670de0b6b3a764000063ffffffff611b2c16565b905061190360065461106860075484611ad390919063ffffffff16565b9250505090565b61191434826107ca565b50565b60136020526000908152604090205481565b60008061193533610eee565b905061194f81670de0b6b3a764000063ffffffff611ad316565b33600090815260136020908152604080832080549490940190935560129052205461198190829063ffffffff611b6e16565b336000908152601260205260408120819055600954919250906119b29060649061084490859063ffffffff611ad316565b905060006119c6838363ffffffff611bc816565b905060006119d38261132b565b9050600854811015611a165760405162461bcd60e51b81526004018080602001828103825260378152602001806123526037913960400191505060405180910390fd5b600f54611a29908263ffffffff611ad316565b33600081815260136020908152604091829020805494909401909355805191825291810186905280820183905290517fc003f45bc224d116b6d079100d4ab57a5b9633244c47a5a92a176c5b79a85f289181900360600190a1611a8c3382611c0a565b6000611a96610b37565b90508015611ac557611abd610c9c8261084487670de0b6b3a764000063ffffffff611ad316565b600f55611acb565b6000600f555b505050505090565b600082611ae257506000610b1d565b82820282848281611aef57fe5b0414610cbe5760405162461bcd60e51b81526004018080602001828103825260218152602001806123316021913960400191505060405180910390fd5b6000610cbe83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a5565b600082820183811015610cbe576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610cbe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612037565b6001600160a01b038216611c65576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611c716000838361210a565b600254611c84908263ffffffff611b6e16565b6002556001600160a01b038216600090815260208190526040902054611cb0908263ffffffff611b6e16565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b3390565b6001600160a01b038316611d4f5760405162461bcd60e51b81526004018080602001828103825260248152602001806124526024913960400191505060405180910390fd5b6001600160a01b038216611d945760405162461bcd60e51b81526004018080602001828103825260228152602001806122bc6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038216611e3b5760405162461bcd60e51b81526004018080602001828103825260218152602001806123dd6021913960400191505060405180910390fd5b611e478260008361210a565b611e8a8160405180606001604052806022815260200161229a602291396001600160a01b038516600090815260208190526040902054919063ffffffff61203716565b6001600160a01b038316600090815260208190526040902055600254611eb6908263ffffffff611bc816565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000611f0b84848461210f565b611f7c84611f17611d06565b610d4985604051806060016040528060288152602001612389602891396001600160a01b038a16600090815260016020526040812090611f55611d06565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61203716565b5060019392505050565b600083611f9557506000610cbe565b83830283858281611fa257fe5b0414839061202e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ff3578181015183820152602001611fdb565b50505050905090810190601f1680156120205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50949350505050565b600081848411156120895760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ff3578181015183820152602001611fdb565b505050900390565b6000610b1961209e611d06565b848461210f565b600081836120f45760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611ff3578181015183820152602001611fdb565b50600083858161210057fe5b0495945050505050565b505050565b6001600160a01b0383166121545760405162461bcd60e51b815260040180806020018281038252602581526020018061242d6025913960400191505060405180910390fd5b6001600160a01b0382166121995760405162461bcd60e51b81526004018080602001828103825260238152602001806122776023913960400191505060405180910390fd5b6121a483838361210a565b6121e7816040518060600160405280602681526020016122de602691396001600160a01b038616600090815260208190526040902054919063ffffffff61203716565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461221c908263ffffffff611b6e16565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365546f6b656e7320616d6f756e742073686f756c64206e6f74206265206c657373207468616e203120746f6b656e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e206571756976616c656e7420616d6f756e742073686f756c64206e6f74206265206c657373207468616e203120746f6b656e45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365546f6b656e20616d6f756e742073686f756c64206e6f74206265206c657373207468616e203120746f6b656e45524332303a206275726e2066726f6d20746865207a65726f2061646472657373546f6b656e20616d6f756e742073686f756c64206e6f742062652067726561746572207468616e2062616c616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122056c1707c410defd18a10fadd8193e4649f5fd3d94920eb2b73e5ff8ca15dece864736f6c63430006020033
Deployed Bytecode Sourcemap
26741:12461:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33122:31;33131:9;33150:1;33122:8;:31::i;:::-;26741:12461;;;;;17924:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17924:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17924:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20030:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20030:169:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20030:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;26787:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26787:81:0;;;:::i;:::-;;;;-1:-1:-1;;;;;26787:81:0;;;;;;;;;;;;;;18999:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18999:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;26875:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26875:41:0;;;:::i;27011:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27011:31:0;;;:::i;32158:910::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32158:910:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;32158:910:0;;;;;;;;;;;;;;;;;:::i;27195:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27195:27:0;;;:::i;27347:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27347:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27347:44:0;-1:-1:-1;;;;;27347:44:0;;:::i;18851:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18851:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26968:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26968:36:0;;;:::i;21403:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21403:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21403:218:0;;;;;;;;:::i;30449:811::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30449:811:0;;;:::i;27902:451::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27902:451:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27902:451:0;-1:-1:-1;;;;;27902:451:0;;:::i;27162:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27162:26:0;;;:::i;38859:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38859:196:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38859:196:0;;:::i;27125:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27125:30:0;;;:::i;19162:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19162:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19162:119:0;-1:-1:-1;;;;;19162:119:0;;:::i;37368:1479::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37368:1479:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37368:1479:0;;:::i;39063:136::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39063:136:0;;;:::i;18126:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18126:87:0;;;:::i;22124:269::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22124:269:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22124:269:0;;;;;;;;:::i;35935:1378::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35935:1378:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35935:1378:0;;:::i;31268:882::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31268:882:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31268:882:0;;;;;;;;:::i;27049:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27049:31:0;;;:::i;27268:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27268:20:0;;;:::i;27398:52::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27398:52:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27398:52:0;-1:-1:-1;;;;;27398:52:0;;:::i;26923:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26923:38:0;;;:::i;19732:151::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19732:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19732:151:0;;;;;;;;;;:::i;27229:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27229:32:0;;;:::i;34612:1003::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34612:1003:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34612:1003:0;;:::i;27087:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27087:31:0;;;:::i;35623:216::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35623:216:0;;;:::i;33169:98::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33169:98:0;-1:-1:-1;;;;;33169:98:0;;:::i;27457:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27457:51:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27457:51:0;-1:-1:-1;;;;;27457:51:0;;:::i;28396:1109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28396:1109:0;;;:::i;33275:1329::-;33358:10;-1:-1:-1;;;;;33358:23:0;;;;33349:65;;;;;-1:-1:-1;;;33349:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33425:15;33443:33;33472:3;33443:24;33455:11;;33443:7;:11;;:24;;;;:::i;:::-;:28;:33;:28;:33;:::i;:::-;33425:51;;33487:15;33505:28;33529:3;33505:19;33517:6;;33505:7;:11;;:19;;;;:::i;:28::-;33487:46;-1:-1:-1;33544:17:0;33564:20;:7;33487:46;33564:20;:11;:20;:::i;:::-;33608:10;33631:1;33599:20;;;:8;:20;;;;;;33544:40;;-1:-1:-1;;;;;;33599:20:0;:34;:74;;;;-1:-1:-1;;;;;;33650:23:0;;;;33599:74;:123;;;;;33714:8;33690:20;33700:9;33690;:20::i;:::-;:32;;33599:123;33595:339;;;33748:10;33739:20;;;;:8;:20;;;;;;;;:32;;-1:-1:-1;;;;;;33739:32:0;-1:-1:-1;;;;;33739:32:0;;;;;;;;33816:27;;:16;:27;;;;;;:54;;33862:7;33816:45;:54::i;:::-;-1:-1:-1;;;;;33786:27:0;;;;;;:16;:27;;;;;:84;33595:339;;;33913:9;33903:19;;33595:339;33954:15;33972:35;33984:22;:7;33996:9;33984:22;:11;:22;:::i;:::-;33972:11;:35::i;:::-;33954:53;;34040:11;;34029:7;:22;;34020:95;;;;-1:-1:-1;;;34020:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34133:44;;;34137:10;34133:44;;;;;;;;;;;;;;-1:-1:-1;;;;;34133:44:0;;;;;;;;;;;;;;;;;34190:26;34196:10;34208:7;34190:5;:26::i;:::-;34227:15;34245:13;:11;:13::i;:::-;34227:31;-1:-1:-1;34271:14:0;34288:55;34227:31;34288:32;:7;27333;34288:32;:21;:32;:::i;:55::-;34360:17;;34271:72;;-1:-1:-1;34360:21:0;34356:169;;34482:17;;:30;;34504:7;34482:30;:21;:30;:::i;:::-;34446:10;34429:28;;;;:16;:28;;;;;;;:84;;;;34398:115;;34356:169;34557:17;;:39;;34589:6;34557:39;:31;:39;:::i;:::-;34537:17;:59;-1:-1:-1;;;;;;;;33275:1329:0:o;17924:83::-;17994:5;17987:12;;;;;;;;-1:-1:-1;;17987:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17961:13;;17987:12;;17994:5;;17987:12;;17994:5;17987:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17924:83;:::o;20030:169::-;20113:4;20130:39;20139:12;:10;:12::i;:::-;20153:7;20162:6;20130:8;:39::i;:::-;-1:-1:-1;20187:4:0;20030:169;;;;;:::o;26787:81::-;;;;;;-1:-1:-1;;;;;26787:81:0;;:::o;18999:100::-;19079:12;;18999:100;:::o;26875:41::-;;;;:::o;27011:31::-;;;;:::o;32158:910::-;32259:4;32296:11;;32285:7;:22;;32276:94;;;;-1:-1:-1;;;32276:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32401:18;32411:7;32401:9;:18::i;:::-;32390:7;:29;;32381:104;;;;-1:-1:-1;;;32381:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32496:12;32511:33;32540:3;32511:24;32523:11;;32511:7;:11;;:24;;;;:::i;:33::-;32496:48;-1:-1:-1;32555:15:0;32573:17;:7;32496:48;32573:17;:11;:17;:::i;:::-;32687;;32555:35;;-1:-1:-1;32687:30:0;;32709:7;32687:30;:21;:30;:::i;:::-;32651:10;32634:28;;;;:16;:28;;;;;;;:84;;;;32603:115;;32813:17;;:30;;32835:7;32813:30;:21;:30;:::i;:::-;-1:-1:-1;;;;;32760:28:0;;;;;;:16;:28;;;;;;;:84;;;;32729:115;;32857:20;32863:7;32872:4;32857:5;:20::i;:::-;32910:84;32942:51;32979:13;:11;:13::i;:::-;32942:32;27333:7;32942:17;32954:4;32942:11;:17::i;:::-;:21;:32;:21;:32;:::i;:51::-;32910:17;;;:84;:31;:84;:::i;:::-;32890:17;:104;33012:48;33031:7;33040:10;33052:7;33012:18;:48::i;:::-;33005:55;;;;32158:910;;;;;;:::o;27195:27::-;;;;:::o;27347:44::-;;;;;;;;;;;;-1:-1:-1;;;;;27347:44:0;;:::o;18851:83::-;18917:9;;;;18851:83;:::o;26968:36::-;;;;:::o;21403:218::-;21491:4;21508:83;21517:12;:10;:12::i;:::-;21531:7;21540:50;21579:10;21540:11;:25;21552:12;:10;:12::i;:::-;-1:-1:-1;;;;;21540:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21540:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;:::-;21508:8;:83::i;30449:811::-;30502:4;30524:14;30541:24;30554:10;30541:12;:24::i;:::-;30524:41;-1:-1:-1;30661:21:0;30524:41;27333:7;30661:21;:10;:21;:::i;:::-;30624:10;30607:28;;;;:16;:28;;;;;;;;;;:76;;;;30576:107;;;30726:16;:28;;;;30705:50;;:6;;:50;:20;:50;:::i;:::-;30783:10;30797:1;30766:28;;;:16;:28;;;;;:32;;;30837:11;;30696:59;;-1:-1:-1;30797:1:0;30826:32;;30854:3;;30826:23;;30696:59;;30826:23;:10;:23;:::i;:32::-;30811:47;-1:-1:-1;30869:17:0;30889:16;:6;30811:47;30889:16;:10;:16;:::i;:::-;30869:36;;30918:15;30936:22;30948:9;30936:11;:22::i;:::-;30918:40;;30991:11;;30980:7;:22;;30971:105;;;;-1:-1:-1;;;30971:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31094:28;;;31103:10;31094:28;;;;;;;;;;;;;;;;;;;;;31143:21;;31135:45;;31143:21;;;;-1:-1:-1;;;;;31143:21:0;;31135:45;;;;;;;;;;;;31143:21;31135:45;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;31191:39:0;;31199:10;;31191:39;;;;;31220:9;;31191:39;;;;31220:9;31199:10;31191:39;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31191:39:0;31248:4;31241:11;;;;;;30449:811;:::o;27902:451::-;27988:7;28013:16;28032:18;28042:7;28032:9;:18::i;:::-;-1:-1:-1;;;;;28136:25:0;;28061:18;28136:25;;;:16;:25;;;;;;28114:17;;28013:37;;-1:-1:-1;28061:18:0;;28082:105;;27333:7;;28101:31;;28013:37;;28101:31;:12;:31;:::i;:::-;28092:69;;28082:105;:94;:105;:::i;:::-;28061:126;-1:-1:-1;28225:21:0;28263:29;;;28259:58;;;28301:16;-1:-1:-1;28294:23:0;;-1:-1:-1;;28294:23:0;28259:58;-1:-1:-1;28335:10:0;-1:-1:-1;;27902:451:0;;;;:::o;27162:26::-;;;;:::o;38859:196::-;38931:5;38940:1;38935;38931:5;;38930:11;38968:80;38979:1;38975;:5;38968:80;;;39001:1;38997:5;;39035:1;39030;39026;39022;:5;;;;;;:9;39021:15;;;;;;39017:19;;38968:80;;;38859:196;;;;:::o;27125:30::-;;;;:::o;19162:119::-;-1:-1:-1;;;;;19255:18:0;19228:7;19255:18;;;;;;;;;;;;19162:119::o;37368:1479::-;37453:7;37523;37453;37558:13;:11;:13::i;:::-;37541:30;;37595:6;37586;:15;37582:29;;;37610:1;37603:8;;;;;;37582:29;37622:17;37642:19;:6;37653:7;37642:19;:10;:19;:::i;:::-;37622:39;;37672:19;37694:39;37705:27;37719:7;37705:27;;;;;;;;;;;;;-1:-1:-1;;;37705:27:0;;;:9;:13;;:27;;;;;:::i;:::-;37694:6;;:39;:10;:39;:::i;:::-;37672:61;;37744:20;37767:42;37796:12;;37767:24;37781:9;;37767;:13;;:24;;;;:::i;:::-;:28;:42;:28;:42;:::i;:::-;37744:65;;37820:11;37857;37848:6;:20;37844:97;;;37892:37;37921:7;37892:24;:6;37903:12;37892:24;:10;:24;:::i;:37::-;37885:44;;;;;;;;;;37844:97;37959:51;37967:42;38001:7;37967:29;:11;37983:12;37967:29;:15;:29;:::i;:42::-;37959:3;;:51;:7;:51;:::i;:::-;37953:57;-1:-1:-1;38030:23:0;:6;38041:11;38030:23;:10;:23;:::i;:::-;38021:32;-1:-1:-1;38070:15:0;;38066:90;;38134:9;;38117:27;;:12;;:27;:16;:27;:::i;:::-;38102:42;;38066:90;38182:7;38172:6;:17;38168:103;;38213:46;38221:37;38250:7;38221:24;:6;38232:12;38221:24;:10;:24;:::i;38168:103::-;38283:17;38303:19;:6;38314:7;38303:19;:10;:19;:::i;:::-;38283:39;;38333:19;38379:1;38367:9;:13;38363:94;;;38411:34;38422:22;:9;38436:7;38422:22;:13;:22;:::i;:::-;38411:6;;:34;:10;:34;:::i;:::-;38397:48;;38363:94;38469:15;38487:76;38531:31;38545:16;:9;38559:1;38545:16;:13;:16;:::i;:::-;38531:9;;;:31;:13;:31;:::i;:::-;38487:29;:12;38514:1;38487:29;:26;:29;:::i;:::-;:43;:76;:43;:76;:::i;:::-;38469:94;-1:-1:-1;38586:49:0;38633:1;38586:32;38469:94;38608:9;38586:32;:21;:32;:::i;:49::-;38576:59;-1:-1:-1;38654:16:0;:3;38576:59;38654:16;:7;:16;:::i;:::-;38648:22;;38698:42;38715:24;38729:9;38715;;:13;;:24;;;;:::i;:::-;38698:12;;:42;:16;:42;:::i;:::-;38683:57;-1:-1:-1;38757:61:0;38775:42;38809:7;38775:29;38683:57;38792:11;38775:29;:16;:29;:::i;:42::-;38757:3;;:61;:17;:61;:::i;:::-;38751:67;37368:1479;-1:-1:-1;;;;;;;;;;;37368:1479:0:o;39063:136::-;39170:21;39063:136;:::o;18126:87::-;18198:7;18191:14;;;;;;;;-1:-1:-1;;18191:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18165:13;;18191:14;;18198:7;;18191:14;;18198:7;18191:14;;;;;;;;;;;;;;;;;;;;;;;;22124:269;22217:4;22234:129;22243:12;:10;:12::i;:::-;22257:7;22266:96;22305:15;22266:96;;;;;;;;;;;;;;;;;:11;:25;22278:12;:10;:12::i;:::-;-1:-1:-1;;;;;22266:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;22266:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;35935:1378::-;36019:7;36085:6;36019:7;36119:13;:11;:13::i;:::-;36102:30;-1:-1:-1;36143:17:0;36163:19;36102:30;36174:7;36163:19;:10;:19;:::i;:::-;36143:39;-1:-1:-1;36193:19:0;36215:34;36226:22;36143:39;36240:7;36226:22;:13;:22;:::i;36215:34::-;36193:56;;36260:20;36283:42;36312:12;;36283:24;36297:9;;36283;:13;;:24;;;;:::i;:42::-;36260:65;-1:-1:-1;36336:14:0;;36382:34;36260:65;36382:16;:3;36390:7;36382:16;:7;:16;:::i;:34::-;36361:55;;36446:11;36433:10;:24;36429:74;;;36481:10;-1:-1:-1;36474:17:0;;-1:-1:-1;;;;;;36474:17:0;36429:74;36524:23;:6;36535:11;36524:23;:10;:23;:::i;:::-;36515:32;-1:-1:-1;36566:51:0;36574:42;36608:7;36574:29;:11;36590:12;36574:29;:15;:29;:::i;:42::-;36566:3;;:51;:7;:51;:::i;:::-;36560:57;-1:-1:-1;36632:15:0;;36628:90;;36696:9;;36679:27;;:12;;:27;:16;:27;:::i;:::-;36664:42;;36628:90;36741:34;36762:12;36741:16;:3;36749:7;36741:16;:7;:16;:::i;:34::-;36728:47;;36806:7;36792:10;:21;36788:83;;36837:22;:6;36848:10;36837:22;:10;:22;:::i;:::-;36830:29;;;;;;;;;;;36788:83;36929:9;;36883;;36895:44;;:19;:12;36912:1;36895:19;:16;:19;:::i;:44::-;36883:56;-1:-1:-1;36954:8:0;36883:56;;36954:8;:5;:8;:::i;:::-;36950:12;;36977:32;36983:25;37006:1;36983:18;36997:3;36983:9;;:13;;:18;;;;:::i;36977:32::-;36973:36;;37022:13;37038:7;37043:1;37038:4;:7::i;:::-;37022:23;-1:-1:-1;37079:65:0;37124:19;:12;37141:1;37124:19;:16;:19;:::i;:::-;37079:9;;:30;;37103:5;37079:30;:23;:30;:::i;:65::-;37066:78;;37170:65;37218:16;37232:1;37218:9;;:13;;:16;;;;:::i;:::-;37170:33;:10;37195:7;37170:33;:24;:33;:::i;:65::-;37157:78;-1:-1:-1;37257:22:0;:6;37157:78;37257:22;:10;:22;:::i;31268:882::-;31348:4;31385:11;;31374:7;:22;;31365:94;;;;-1:-1:-1;;;31365:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31490:21;31500:10;31490:9;:21::i;:::-;31479:7;:32;;31470:107;;;;-1:-1:-1;;;31470:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31588:12;31603:33;31632:3;31603:24;31615:11;;31603:7;:11;;:24;;;;:::i;:33::-;31588:48;-1:-1:-1;31647:15:0;31665:17;:7;31588:48;31665:17;:11;:17;:::i;:::-;31779;;31647:35;;-1:-1:-1;31779:30:0;;31801:7;31779:30;:21;:30;:::i;:::-;31743:10;31726:28;;;;:16;:28;;;;;;;:84;;;;31695:115;;31905:17;;:30;;31927:7;31905:30;:21;:30;:::i;:::-;-1:-1:-1;;;;;31852:28:0;;;;;;:16;:28;;;;;;;:84;;;;31821:115;;31949:23;31955:10;31967:4;31949:5;:23::i;:::-;32005:84;32037:51;32074:13;:11;:13::i;32005:84::-;31985:17;:104;32107:35;32122:10;32134:7;32107:14;:35::i;:::-;32100:42;31268:882;-1:-1:-1;;;;;31268:882:0:o;27049:31::-;;;;:::o;27268:20::-;;;;:::o;27398:52::-;;;;;;;;;;;;;:::o;26923:38::-;;;;:::o;19732:151::-;-1:-1:-1;;;;;19848:18:0;;;19821:7;19848:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19732:151::o;27229:32::-;;;;:::o;34612:1003::-;34683:11;;34672:7;:22;;34663:95;;;;-1:-1:-1;;;34663:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34789:21;34799:10;34789:9;:21::i;:::-;34778:7;:32;;34769:77;;;;;-1:-1:-1;;;34769:77:0;;;;;;;;;;;;-1:-1:-1;;;34769:77:0;;;;;;;;;;;;;;;34857:15;34875:20;34887:7;34875:11;:20::i;:::-;34857:38;;34906:12;34921:29;34946:3;34921:20;34933:7;;34921;:11;;:20;;;;:::i;:29::-;34968:34;;;34973:10;34968:34;;;;;;;;;;;;;;;;34906:44;;-1:-1:-1;34968:34:0;;;;;;;;;;35015:26;35021:10;35033:7;35015:5;:26::i;:::-;35139:17;;:30;;35161:7;35139:30;:21;:30;:::i;:::-;35102:10;35085:28;;;;:16;:28;;;;;;;:85;;;;35054:116;;;35201:13;:11;:13::i;:::-;35183:31;-1:-1:-1;35231:11:0;;35227:311;;35280:69;35316:32;35340:7;35316:19;:4;27333:7;35316:19;:8;:19;:::i;35280:69::-;35260:17;:89;35227:311;;;35402:1;35382:17;:21;35506:19;:4;27333:7;35506:19;:8;:19;:::i;:::-;35466:10;35449:28;;;;:16;:28;;;;;;;:77;;;;35418:108;;35227:311;35558:10;35550:57;35589:17;:7;35601:4;35589:17;:11;:17;:::i;:::-;35550:57;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35550:57:0;34612:1003;;;;:::o;27087:31::-;;;;:::o;35623:216::-;35671:7;35691:14;35708:13;:11;:13::i;:::-;35691:30;-1:-1:-1;35732:17:0;35752:19;35691:30;35763:7;35752:19;:10;:19;:::i;:::-;35732:39;;35789:42;35818:12;;35789:24;35803:9;;35789;:13;;:24;;;;:::i;:42::-;35782:49;;;;35623:216;:::o;33169:98::-;33229:30;33238:9;33249;33229:8;:30::i;:::-;33169:98;:::o;27457:51::-;;;;;;;;;;;;;:::o;28396:1109::-;28449:7;28474:14;28491:24;28504:10;28491:12;:24::i;:::-;28474:41;-1:-1:-1;28613:21:0;28474:41;27333:7;28613:21;:10;:21;:::i;:::-;28576:10;28559:28;;;;:16;:28;;;;;;;;;;:76;;;;28528:107;;;28678:16;:28;;;;28657:50;;:6;;:50;:20;:50;:::i;:::-;28735:10;28749:1;28718:28;;;:16;:28;;;;;:32;;;28789:11;;28648:59;;-1:-1:-1;28749:1:0;28778:32;;28806:3;;28778:23;;28648:59;;28778:23;:10;:23;:::i;:32::-;28763:47;-1:-1:-1;28821:17:0;28841:16;:6;28763:47;28841:16;:10;:16;:::i;:::-;28821:36;;28870:15;28888:22;28900:9;28888:11;:22::i;:::-;28870:40;;28943:11;;28932:7;:22;;28923:105;;;;-1:-1:-1;;;28923:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29125:17;;:30;;29147:7;29125:30;:21;:30;:::i;:::-;29089:10;29072:28;;;;:16;:28;;;;;;;;;;;:84;;;;29041:115;;;29174:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;29222:26;29228:10;29240:7;29222:5;:26::i;:::-;29261:15;29279:13;:11;:13::i;:::-;29261:31;-1:-1:-1;29307:11:0;;29303:187;;29355:69;29391:32;29415:7;29391:19;:4;27333:7;29391:19;:8;:19;:::i;29355:69::-;29335:17;:89;29303:187;;;29477:1;29457:17;:21;29303:187;28396:1109;;;;;;:::o;5831:471::-;5889:7;6134:6;6130:47;;-1:-1:-1;6164:1:0;6157:8;;6130:47;6201:5;;;6205:1;6201;:5;:1;6225:5;;;;;:10;6217:56;;;;-1:-1:-1;;;6217:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7513:132;7571:7;7598:39;7602:1;7605;7598:39;;;;;;;;;;;;;;;;;:3;:39::i;4477:181::-;4535:7;4567:5;;;4591:6;;;;4583:46;;;;;-1:-1:-1;;;4583:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;4941:136;4999:7;5026:43;5030:1;5033;5026:43;;;;;;;;;;;;;;;;;:3;:43::i;23703:378::-;-1:-1:-1;;;;;23787:21:0;;23779:65;;;;;-1:-1:-1;;;23779:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23857:49;23886:1;23890:7;23899:6;23857:20;:49::i;:::-;23934:12;;:24;;23951:6;23934:24;:16;:24;:::i;:::-;23919:12;:39;-1:-1:-1;;;;;23990:18:0;;:9;:18;;;;;;;;;;;:30;;24013:6;23990:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;23969:18:0;;:9;:18;;;;;;;;;;;:51;;;;24036:37;;;;;;;23969:18;;:9;;24036:37;;;;;;;;;;23703:378;;:::o;570:106::-;658:10;570:106;:::o;25271:346::-;-1:-1:-1;;;;;25373:19:0;;25365:68;;;;-1:-1:-1;;;25365:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25452:21:0;;25444:68;;;;-1:-1:-1;;;25444:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25525:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25577:32;;;;;;;;;;;;;;;;;25271:346;;;:::o;24413:418::-;-1:-1:-1;;;;;24497:21:0;;24489:67;;;;-1:-1:-1;;;24489:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24569:49;24590:7;24607:1;24611:6;24569:20;:49::i;:::-;24652:68;24675:6;24652:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24652:18:0;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;24631:18:0;;:9;:18;;;;;;;;;;:89;24746:12;;:24;;24763:6;24746:24;:16;:24;:::i;:::-;24731:12;:39;24786:37;;;;;;;;24812:1;;-1:-1:-1;;;;;24786:37:0;;;;;;;;;;;;24413:418;;:::o;20673:321::-;20779:4;20796:36;20806:6;20814:9;20825:6;20796:9;:36::i;:::-;20843:121;20852:6;20860:12;:10;:12::i;:::-;20874:89;20912:6;20874:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20874:19:0;;;;;;:11;:19;;;;;;20894:12;:10;:12::i;:::-;-1:-1:-1;;;;;20874:33:0;;;;;;;;;;;;-1:-1:-1;20874:33:0;;;:89;;:37;:89;:::i;20843:121::-;-1:-1:-1;20982:4:0;20673:321;;;;;:::o;6561:476::-;6647:7;6892:6;6888:47;;-1:-1:-1;6922:1:0;6915:8;;6888:47;6959:5;;;6963:1;6959;:5;:1;6983:5;;;;;:10;6995:12;6975:33;;;;;-1:-1:-1;;;6975:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6975:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7028:1:0;6561:476;-1:-1:-1;;;;6561:476:0:o;5380:192::-;5466:7;5502:12;5494:6;;;;5486:29;;;;-1:-1:-1;;;5486:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;5486:29:0;-1:-1:-1;;;5538:5:0;;;5380:192::o;19494:175::-;19580:4;19597:42;19607:12;:10;:12::i;:::-;19621:9;19632:6;19597:9;:42::i;8141:278::-;8227:7;8262:12;8255:5;8247:28;;;;-1:-1:-1;;;8247:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;8247:28:0;;8286:9;8302:1;8298;:5;;;;;;;8141:278;-1:-1:-1;;;;;8141:278:0:o;26642:92::-;;;;:::o;22883:539::-;-1:-1:-1;;;;;22989:20:0;;22981:70;;;;-1:-1:-1;;;22981:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23070:23:0;;23062:71;;;;-1:-1:-1;;;23062:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23146:47;23167:6;23175:9;23186:6;23146:20;:47::i;:::-;23226:71;23248:6;23226:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23226:17:0;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;23206:17:0;;;:9;:17;;;;;;;;;;;:91;;;;23331:20;;;;;;;:32;;23356:6;23331:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;23308:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;23379:35;;;;;;;23308:20;;23379:35;;;;;;;;;;;;;22883:539;;;:::o
Swarm Source
ipfs://56c1707c410defd18a10fadd8193e4649f5fd3d94920eb2b73e5ff8ca15dece8
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.