Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
799,999,510.577 AC
Holders
9
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
AssetCoin
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-10 */ pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } 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 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; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } contract TokenTimelock { using SafeERC20 for IERC20; // ERC20 basic token contract being held IERC20 private immutable _token; // beneficiary of tokens after they are released address private immutable _beneficiary; // timestamp when token release is enabled uint256 private immutable _releaseTime; constructor( IERC20 token_, address beneficiary_, uint256 releaseTime_ ) { require(releaseTime_ > block.timestamp, "TokenTimelock: release time is before current time"); _token = token_; _beneficiary = beneficiary_; _releaseTime = releaseTime_; } /** * @return the token being held. */ function token() public view virtual returns (IERC20) { return _token; } /** * @return the beneficiary of the tokens. */ function beneficiary() public view virtual returns (address) { return _beneficiary; } /** * @return the time when the tokens are released. */ function releaseTime() public view virtual returns (uint256) { return _releaseTime; } /** * @notice Transfers tokens held by timelock to beneficiary. */ function release() public virtual { require(block.timestamp >= releaseTime(), "TokenTimelock: current time is before release time"); uint256 amount = token().balanceOf(address(this)); require(amount > 0, "TokenTimelock: no tokens to release"); token().safeTransfer(beneficiary(), amount); } } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract AssetCoin is Context, IERC20, IERC20Metadata, Ownable { 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 = "AssetCoin"; string private _symbol = "AC"; //IUniswapV2Router02 public immutable uniswapV2Router; //address public immutable uniswapV2Pair; address public dead = address(0x000000000000000000000000000000000000dEaD); address public _fundPoolAddress; uint public burnFee = 1; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; // uint256 public _maxTxAmount = 20 * 10**9 * 10**18; // uint256 private numTokensSellToAddToLiquidity = 20 * 10**9 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor() { _mint(msg.sender, 800000000 * 10**18); //_burn(msg.sender, 3 * 10**8 * 10**9); //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3); // Create a uniswap pair for this new token //uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) // .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables //uniswapV2Router = _uniswapV2Router; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function calculateBurnFee(uint256 _amount) public view returns (uint256) { return _amount.mul(burnFee).div( 10**2 ); } function multiTransfer(address[] memory receivers, uint256[] memory amounts) public { for (uint256 i = 0; i < receivers.length; i++) { transfer(receivers[i], amounts[i]); } } /** * @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); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } uint256 tokensToBurn = calculateBurnFee(amount); uint256 tokenToTransfer = amount.sub(tokensToBurn); _balances[recipient] += tokenToTransfer; _totalSupply -= tokensToBurn; emit Transfer(sender, recipient, tokenToTransfer); emit Transfer(sender, dead, tokensToBurn); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += 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, dead, amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, dead, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"_fundPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calculateBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dead","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"geUnlockTime","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600981526020017f4173736574436f696e0000000000000000000000000000000000000000000000815250600690805190602001906200005192919062000358565b506040518060400160405280600281526020017f4143000000000000000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062000358565b5061dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a556001600b60016101000a81548160ff0219169083151502179055503480156200011057600080fd5b50600062000123620001e560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001df336b0295be96e640669720000000620001ed60201b60201c565b620005b4565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000260576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002579062000440565b60405180910390fd5b62000274600083836200035360201b60201c565b806005600082825462000288919062000490565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002e0919062000490565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000347919062000462565b60405180910390a35050565b505050565b8280546200036690620004f7565b90600052602060002090601f0160209004810192826200038a5760008555620003d6565b82601f10620003a557805160ff1916838001178555620003d6565b82800160010185558215620003d6579182015b82811115620003d5578251825591602001919060010190620003b8565b5b509050620003e59190620003e9565b5090565b5b8082111562000404576000816000905550600101620003ea565b5090565b600062000417601f836200047f565b915062000424826200058b565b602082019050919050565b6200043a81620004ed565b82525050565b600060208201905081810360008301526200045b8162000408565b9050919050565b60006020820190506200047960008301846200042f565b92915050565b600082825260208201905092915050565b60006200049d82620004ed565b9150620004aa83620004ed565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004e257620004e16200052d565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200051057607f821691505b602082108114156200052757620005266200055c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6126ca80620005c46000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a9059cbb1161007c578063a9059cbb14610392578063b6c52324146103c2578063dd467064146103e0578063dd62ed3e146103fc578063f2fde38b1461042c578063fce589d8146104485761014d565b806370a08231146102e2578063715018a6146103125780638da5cb5b1461031c57806395d89b411461033a578063a457c2d714610358578063a69df4b5146103885761014d565b8063313ce56711610115578063313ce5671461020a578063365f9b6e1461022857806336cf7c871461024657806339509351146102645780634a74bb02146102945780636ad88269146102b25761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a05780631e89d545146101be57806323b872dd146101da575b600080fd5b61015a610466565b6040516101679190611d77565b60405180910390f35b61018a60048036038101906101859190611a57565b6104f8565b6040516101979190611d5c565b60405180910390f35b6101a8610516565b6040516101b59190611f19565b60405180910390f35b6101d860048036038101906101d39190611a93565b610520565b005b6101f460048036038101906101ef9190611a08565b6105cf565b6040516102019190611d5c565b60405180910390f35b6102126106c7565b60405161021f9190611f34565b60405180910390f35b6102306106d0565b60405161023d9190611d41565b60405180910390f35b61024e6106f6565b60405161025b9190611d41565b60405180910390f35b61027e60048036038101906102799190611a57565b61071c565b60405161028b9190611d5c565b60405180910390f35b61029c6107c8565b6040516102a99190611d5c565b60405180910390f35b6102cc60048036038101906102c79190611aff565b6107db565b6040516102d99190611f19565b60405180910390f35b6102fc60048036038101906102f791906119a3565b61080c565b6040516103099190611f19565b60405180910390f35b61031a610855565b005b6103246109a8565b6040516103319190611d41565b60405180910390f35b6103426109d1565b60405161034f9190611d77565b60405180910390f35b610372600480360381019061036d9190611a57565b610a63565b60405161037f9190611d5c565b60405180910390f35b610390610b4e565b005b6103ac60048036038101906103a79190611a57565b610d22565b6040516103b99190611d5c565b60405180910390f35b6103ca610d40565b6040516103d79190611f19565b60405180910390f35b6103fa60048036038101906103f59190611aff565b610d4a565b005b610416600480360381019061041191906119cc565b610f11565b6040516104239190611f19565b60405180910390f35b610446600480360381019061044191906119a3565b610f98565b005b61045061115a565b60405161045d9190611f19565b60405180910390f35b60606006805461047590612185565b80601f01602080910402602001604051908101604052809291908181526020018280546104a190612185565b80156104ee5780601f106104c3576101008083540402835291602001916104ee565b820191906000526020600020905b8154815290600101906020018083116104d157829003601f168201915b5050505050905090565b600061050c610505611160565b8484611168565b6001905092915050565b6000600554905090565b60005b82518110156105ca576105b6838281518110610568577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106105a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610d22565b5080806105c2906121e8565b915050610523565b505050565b60006105dc848484611333565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610627611160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90611e39565b60405180910390fd5b6106bb856106b3611160565b858403611168565b60019150509392505050565b60006012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006107be610729611160565b848460046000610737611160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b99190611fe8565b611168565b6001905092915050565b600b60019054906101000a900460ff1681565b600061080560646107f7600a548561167290919063ffffffff16565b6116ed90919063ffffffff16565b9050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61085d611160565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e190611e59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600780546109e090612185565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90612185565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b60008060046000610a72611160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690611ef9565b60405180910390fd5b610b43610b3a611160565b85858403611168565b600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590611ed9565b60405180910390fd5b6002544211610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990611eb9565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d36610d2f611160565b8484611333565b6001905092915050565b6000600254905090565b610d52611160565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690611e59565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042610e8d9190611fe8565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fa0611160565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490611e59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490611db9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90611e99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90611dd9565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113269190611f19565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90611e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90611d99565b60405180910390fd5b61141e838383611737565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90611df9565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114f6836107db565b9050600061150d828561173c90919063ffffffff16565b905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155e9190611fe8565b92505081905550816005600082825461157791906120c9565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115db9190611f19565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116629190611f19565b60405180910390a3505050505050565b60008083141561168557600090506116e7565b60008284611693919061206f565b90508284826116a2919061203e565b146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990611e19565b60405180910390fd5b809150505b92915050565b600061172f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611786565b905092915050565b505050565b600061177e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117e9565b905092915050565b600080831182906117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49190611d77565b60405180910390fd5b50600083856117dc919061203e565b9050809150509392505050565b6000838311158290611831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118289190611d77565b60405180910390fd5b506000838561184091906120c9565b9050809150509392505050565b600061186061185b84611f74565b611f4f565b9050808382526020820190508285602086028201111561187f57600080fd5b60005b858110156118af57816118958882611925565b845260208401935060208301925050600181019050611882565b5050509392505050565b60006118cc6118c784611fa0565b611f4f565b905080838252602082019050828560208602820111156118eb57600080fd5b60005b8581101561191b5781611901888261198e565b8452602084019350602083019250506001810190506118ee565b5050509392505050565b60008135905061193481612666565b92915050565b600082601f83011261194b57600080fd5b813561195b84826020860161184d565b91505092915050565b600082601f83011261197557600080fd5b81356119858482602086016118b9565b91505092915050565b60008135905061199d8161267d565b92915050565b6000602082840312156119b557600080fd5b60006119c384828501611925565b91505092915050565b600080604083850312156119df57600080fd5b60006119ed85828601611925565b92505060206119fe85828601611925565b9150509250929050565b600080600060608486031215611a1d57600080fd5b6000611a2b86828701611925565b9350506020611a3c86828701611925565b9250506040611a4d8682870161198e565b9150509250925092565b60008060408385031215611a6a57600080fd5b6000611a7885828601611925565b9250506020611a898582860161198e565b9150509250929050565b60008060408385031215611aa657600080fd5b600083013567ffffffffffffffff811115611ac057600080fd5b611acc8582860161193a565b925050602083013567ffffffffffffffff811115611ae957600080fd5b611af585828601611964565b9150509250929050565b600060208284031215611b1157600080fd5b6000611b1f8482850161198e565b91505092915050565b611b31816120fd565b82525050565b611b408161210f565b82525050565b6000611b5182611fcc565b611b5b8185611fd7565b9350611b6b818560208601612152565b611b74816122ed565b840191505092915050565b6000611b8c602383611fd7565b9150611b97826122fe565b604082019050919050565b6000611baf602683611fd7565b9150611bba8261234d565b604082019050919050565b6000611bd2602283611fd7565b9150611bdd8261239c565b604082019050919050565b6000611bf5602683611fd7565b9150611c00826123eb565b604082019050919050565b6000611c18602183611fd7565b9150611c238261243a565b604082019050919050565b6000611c3b602883611fd7565b9150611c4682612489565b604082019050919050565b6000611c5e602083611fd7565b9150611c69826124d8565b602082019050919050565b6000611c81602583611fd7565b9150611c8c82612501565b604082019050919050565b6000611ca4602483611fd7565b9150611caf82612550565b604082019050919050565b6000611cc7601f83611fd7565b9150611cd28261259f565b602082019050919050565b6000611cea602383611fd7565b9150611cf5826125c8565b604082019050919050565b6000611d0d602583611fd7565b9150611d1882612617565b604082019050919050565b611d2c8161213b565b82525050565b611d3b81612145565b82525050565b6000602082019050611d566000830184611b28565b92915050565b6000602082019050611d716000830184611b37565b92915050565b60006020820190508181036000830152611d918184611b46565b905092915050565b60006020820190508181036000830152611db281611b7f565b9050919050565b60006020820190508181036000830152611dd281611ba2565b9050919050565b60006020820190508181036000830152611df281611bc5565b9050919050565b60006020820190508181036000830152611e1281611be8565b9050919050565b60006020820190508181036000830152611e3281611c0b565b9050919050565b60006020820190508181036000830152611e5281611c2e565b9050919050565b60006020820190508181036000830152611e7281611c51565b9050919050565b60006020820190508181036000830152611e9281611c74565b9050919050565b60006020820190508181036000830152611eb281611c97565b9050919050565b60006020820190508181036000830152611ed281611cba565b9050919050565b60006020820190508181036000830152611ef281611cdd565b9050919050565b60006020820190508181036000830152611f1281611d00565b9050919050565b6000602082019050611f2e6000830184611d23565b92915050565b6000602082019050611f496000830184611d32565b92915050565b6000611f59611f6a565b9050611f6582826121b7565b919050565b6000604051905090565b600067ffffffffffffffff821115611f8f57611f8e6122be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611fbb57611fba6122be565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000611ff38261213b565b9150611ffe8361213b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561203357612032612231565b5b828201905092915050565b60006120498261213b565b91506120548361213b565b92508261206457612063612260565b5b828204905092915050565b600061207a8261213b565b91506120858361213b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120be576120bd612231565b5b828202905092915050565b60006120d48261213b565b91506120df8361213b565b9250828210156120f2576120f1612231565b5b828203905092915050565b60006121088261211b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612170578082015181840152602081019050612155565b8381111561217f576000848401525b50505050565b6000600282049050600182168061219d57607f821691505b602082108114156121b1576121b061228f565b5b50919050565b6121c0826122ed565b810181811067ffffffffffffffff821117156121df576121de6122be565b5b80604052505050565b60006121f38261213b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561222657612225612231565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61266f816120fd565b811461267a57600080fd5b50565b6126868161213b565b811461269157600080fd5b5056fea2646970667358221220dcb2d33f78be5ff740bd9d3e47aae6937b2767b8def66665a694c06a74a25f4164736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063a9059cbb1161007c578063a9059cbb14610392578063b6c52324146103c2578063dd467064146103e0578063dd62ed3e146103fc578063f2fde38b1461042c578063fce589d8146104485761014d565b806370a08231146102e2578063715018a6146103125780638da5cb5b1461031c57806395d89b411461033a578063a457c2d714610358578063a69df4b5146103885761014d565b8063313ce56711610115578063313ce5671461020a578063365f9b6e1461022857806336cf7c871461024657806339509351146102645780634a74bb02146102945780636ad88269146102b25761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a05780631e89d545146101be57806323b872dd146101da575b600080fd5b61015a610466565b6040516101679190611d77565b60405180910390f35b61018a60048036038101906101859190611a57565b6104f8565b6040516101979190611d5c565b60405180910390f35b6101a8610516565b6040516101b59190611f19565b60405180910390f35b6101d860048036038101906101d39190611a93565b610520565b005b6101f460048036038101906101ef9190611a08565b6105cf565b6040516102019190611d5c565b60405180910390f35b6102126106c7565b60405161021f9190611f34565b60405180910390f35b6102306106d0565b60405161023d9190611d41565b60405180910390f35b61024e6106f6565b60405161025b9190611d41565b60405180910390f35b61027e60048036038101906102799190611a57565b61071c565b60405161028b9190611d5c565b60405180910390f35b61029c6107c8565b6040516102a99190611d5c565b60405180910390f35b6102cc60048036038101906102c79190611aff565b6107db565b6040516102d99190611f19565b60405180910390f35b6102fc60048036038101906102f791906119a3565b61080c565b6040516103099190611f19565b60405180910390f35b61031a610855565b005b6103246109a8565b6040516103319190611d41565b60405180910390f35b6103426109d1565b60405161034f9190611d77565b60405180910390f35b610372600480360381019061036d9190611a57565b610a63565b60405161037f9190611d5c565b60405180910390f35b610390610b4e565b005b6103ac60048036038101906103a79190611a57565b610d22565b6040516103b99190611d5c565b60405180910390f35b6103ca610d40565b6040516103d79190611f19565b60405180910390f35b6103fa60048036038101906103f59190611aff565b610d4a565b005b610416600480360381019061041191906119cc565b610f11565b6040516104239190611f19565b60405180910390f35b610446600480360381019061044191906119a3565b610f98565b005b61045061115a565b60405161045d9190611f19565b60405180910390f35b60606006805461047590612185565b80601f01602080910402602001604051908101604052809291908181526020018280546104a190612185565b80156104ee5780601f106104c3576101008083540402835291602001916104ee565b820191906000526020600020905b8154815290600101906020018083116104d157829003601f168201915b5050505050905090565b600061050c610505611160565b8484611168565b6001905092915050565b6000600554905090565b60005b82518110156105ca576105b6838281518110610568577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101518383815181106105a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610d22565b5080806105c2906121e8565b915050610523565b505050565b60006105dc848484611333565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610627611160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90611e39565b60405180910390fd5b6106bb856106b3611160565b858403611168565b60019150509392505050565b60006012905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006107be610729611160565b848460046000610737611160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107b99190611fe8565b611168565b6001905092915050565b600b60019054906101000a900460ff1681565b600061080560646107f7600a548561167290919063ffffffff16565b6116ed90919063ffffffff16565b9050919050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61085d611160565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e190611e59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600780546109e090612185565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0c90612185565b8015610a595780601f10610a2e57610100808354040283529160200191610a59565b820191906000526020600020905b815481529060010190602001808311610a3c57829003601f168201915b5050505050905090565b60008060046000610a72611160565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2690611ef9565b60405180910390fd5b610b43610b3a611160565b85858403611168565b600191505092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590611ed9565b60405180910390fd5b6002544211610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990611eb9565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610d36610d2f611160565b8484611333565b6001905092915050565b6000600254905090565b610d52611160565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd690611e59565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042610e8d9190611fe8565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fa0611160565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490611e59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490611db9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cf90611e99565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90611dd9565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113269190611f19565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90611e79565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90611d99565b60405180910390fd5b61141e838383611737565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149c90611df9565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006114f6836107db565b9050600061150d828561173c90919063ffffffff16565b905080600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461155e9190611fe8565b92505081905550816005600082825461157791906120c9565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115db9190611f19565b60405180910390a3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116629190611f19565b60405180910390a3505050505050565b60008083141561168557600090506116e7565b60008284611693919061206f565b90508284826116a2919061203e565b146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990611e19565b60405180910390fd5b809150505b92915050565b600061172f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611786565b905092915050565b505050565b600061177e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117e9565b905092915050565b600080831182906117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49190611d77565b60405180910390fd5b50600083856117dc919061203e565b9050809150509392505050565b6000838311158290611831576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118289190611d77565b60405180910390fd5b506000838561184091906120c9565b9050809150509392505050565b600061186061185b84611f74565b611f4f565b9050808382526020820190508285602086028201111561187f57600080fd5b60005b858110156118af57816118958882611925565b845260208401935060208301925050600181019050611882565b5050509392505050565b60006118cc6118c784611fa0565b611f4f565b905080838252602082019050828560208602820111156118eb57600080fd5b60005b8581101561191b5781611901888261198e565b8452602084019350602083019250506001810190506118ee565b5050509392505050565b60008135905061193481612666565b92915050565b600082601f83011261194b57600080fd5b813561195b84826020860161184d565b91505092915050565b600082601f83011261197557600080fd5b81356119858482602086016118b9565b91505092915050565b60008135905061199d8161267d565b92915050565b6000602082840312156119b557600080fd5b60006119c384828501611925565b91505092915050565b600080604083850312156119df57600080fd5b60006119ed85828601611925565b92505060206119fe85828601611925565b9150509250929050565b600080600060608486031215611a1d57600080fd5b6000611a2b86828701611925565b9350506020611a3c86828701611925565b9250506040611a4d8682870161198e565b9150509250925092565b60008060408385031215611a6a57600080fd5b6000611a7885828601611925565b9250506020611a898582860161198e565b9150509250929050565b60008060408385031215611aa657600080fd5b600083013567ffffffffffffffff811115611ac057600080fd5b611acc8582860161193a565b925050602083013567ffffffffffffffff811115611ae957600080fd5b611af585828601611964565b9150509250929050565b600060208284031215611b1157600080fd5b6000611b1f8482850161198e565b91505092915050565b611b31816120fd565b82525050565b611b408161210f565b82525050565b6000611b5182611fcc565b611b5b8185611fd7565b9350611b6b818560208601612152565b611b74816122ed565b840191505092915050565b6000611b8c602383611fd7565b9150611b97826122fe565b604082019050919050565b6000611baf602683611fd7565b9150611bba8261234d565b604082019050919050565b6000611bd2602283611fd7565b9150611bdd8261239c565b604082019050919050565b6000611bf5602683611fd7565b9150611c00826123eb565b604082019050919050565b6000611c18602183611fd7565b9150611c238261243a565b604082019050919050565b6000611c3b602883611fd7565b9150611c4682612489565b604082019050919050565b6000611c5e602083611fd7565b9150611c69826124d8565b602082019050919050565b6000611c81602583611fd7565b9150611c8c82612501565b604082019050919050565b6000611ca4602483611fd7565b9150611caf82612550565b604082019050919050565b6000611cc7601f83611fd7565b9150611cd28261259f565b602082019050919050565b6000611cea602383611fd7565b9150611cf5826125c8565b604082019050919050565b6000611d0d602583611fd7565b9150611d1882612617565b604082019050919050565b611d2c8161213b565b82525050565b611d3b81612145565b82525050565b6000602082019050611d566000830184611b28565b92915050565b6000602082019050611d716000830184611b37565b92915050565b60006020820190508181036000830152611d918184611b46565b905092915050565b60006020820190508181036000830152611db281611b7f565b9050919050565b60006020820190508181036000830152611dd281611ba2565b9050919050565b60006020820190508181036000830152611df281611bc5565b9050919050565b60006020820190508181036000830152611e1281611be8565b9050919050565b60006020820190508181036000830152611e3281611c0b565b9050919050565b60006020820190508181036000830152611e5281611c2e565b9050919050565b60006020820190508181036000830152611e7281611c51565b9050919050565b60006020820190508181036000830152611e9281611c74565b9050919050565b60006020820190508181036000830152611eb281611c97565b9050919050565b60006020820190508181036000830152611ed281611cba565b9050919050565b60006020820190508181036000830152611ef281611cdd565b9050919050565b60006020820190508181036000830152611f1281611d00565b9050919050565b6000602082019050611f2e6000830184611d23565b92915050565b6000602082019050611f496000830184611d32565b92915050565b6000611f59611f6a565b9050611f6582826121b7565b919050565b6000604051905090565b600067ffffffffffffffff821115611f8f57611f8e6122be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611fbb57611fba6122be565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000611ff38261213b565b9150611ffe8361213b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561203357612032612231565b5b828201905092915050565b60006120498261213b565b91506120548361213b565b92508261206457612063612260565b5b828204905092915050565b600061207a8261213b565b91506120858361213b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156120be576120bd612231565b5b828202905092915050565b60006120d48261213b565b91506120df8361213b565b9250828210156120f2576120f1612231565b5b828203905092915050565b60006121088261211b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612170578082015181840152602081019050612155565b8381111561217f576000848401525b50505050565b6000600282049050600182168061219d57607f821691505b602082108114156121b1576121b061228f565b5b50919050565b6121c0826122ed565b810181811067ffffffffffffffff821117156121df576121de6122be565b5b80604052505050565b60006121f38261213b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561222657612225612231565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61266f816120fd565b811461267a57600080fd5b50565b6126868161213b565b811461269157600080fd5b5056fea2646970667358221220dcb2d33f78be5ff740bd9d3e47aae6937b2767b8def66665a694c06a74a25f4164736f6c63430008040033
Deployed Bytecode Sourcemap
29900:11840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32060:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34633:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33180:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33668:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35284:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33022:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30466:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30386:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36185:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30568:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33496:154;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33351:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10830:148;;;:::i;:::-;;10187:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32279:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36903:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11852:305;;;:::i;:::-;;34097:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11385:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11550:226;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34335:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11133:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30504:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32060:100;32114:13;32147:5;32140:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32060:100;:::o;34633:169::-;34716:4;34733:39;34742:12;:10;:12::i;:::-;34756:7;34765:6;34733:8;:39::i;:::-;34790:4;34783:11;;34633:169;;;;:::o;33180:108::-;33241:7;33268:12;;33261:19;;33180:108;:::o;33668:210::-;33768:9;33763:108;33787:9;:16;33783:1;:20;33763:108;;;33825:34;33834:9;33844:1;33834:12;;;;;;;;;;;;;;;;;;;;;;33848:7;33856:1;33848:10;;;;;;;;;;;;;;;;;;;;;;33825:8;:34::i;:::-;;33805:3;;;;;:::i;:::-;;;;33763:108;;;;33668:210;;:::o;35284:492::-;35424:4;35441:36;35451:6;35459:9;35470:6;35441:9;:36::i;:::-;35490:24;35517:11;:19;35529:6;35517:19;;;;;;;;;;;;;;;:33;35537:12;:10;:12::i;:::-;35517:33;;;;;;;;;;;;;;;;35490:60;;35589:6;35569:16;:26;;35561:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;35676:57;35685:6;35693:12;:10;:12::i;:::-;35726:6;35707:16;:25;35676:8;:57::i;:::-;35764:4;35757:11;;;35284:492;;;;;:::o;33022:93::-;33080:5;33105:2;33098:9;;33022:93;:::o;30466:31::-;;;;;;;;;;;;;:::o;30386:73::-;;;;;;;;;;;;;:::o;36185:215::-;36273:4;36290:80;36299:12;:10;:12::i;:::-;36313:7;36359:10;36322:11;:25;36334:12;:10;:12::i;:::-;36322:25;;;;;;;;;;;;;;;:34;36348:7;36322:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;36290:8;:80::i;:::-;36388:4;36381:11;;36185:215;;;;:::o;30568:40::-;;;;;;;;;;;;;:::o;33496:154::-;33560:7;33587:55;33626:5;33587:20;33599:7;;33587;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;33580:62;;33496:154;;;:::o;33351:127::-;33425:7;33452:9;:18;33462:7;33452:18;;;;;;;;;;;;;;;;33445:25;;33351:127;;;:::o;10830:148::-;10409:12;:10;:12::i;:::-;10399:22;;:6;;;;;;;;;;:22;;;10391:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10937:1:::1;10900:40;;10921:6;::::0;::::1;;;;;;;;10900:40;;;;;;;;;;;;10968:1;10951:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10830:148::o:0;10187:79::-;10225:7;10252:6;;;;;;;;;;;10245:13;;10187:79;:::o;32279:104::-;32335:13;32368:7;32361:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32279:104;:::o;36903:413::-;36996:4;37013:24;37040:11;:25;37052:12;:10;:12::i;:::-;37040:25;;;;;;;;;;;;;;;:34;37066:7;37040:34;;;;;;;;;;;;;;;;37013:61;;37113:15;37093:16;:35;;37085:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37206:67;37215:12;:10;:12::i;:::-;37229:7;37257:15;37238:16;:34;37206:8;:67::i;:::-;37304:4;37297:11;;;36903:413;;;;:::o;11852:305::-;11922:10;11904:28;;:14;;;;;;;;;;;:28;;;11896:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;12009:9;;11991:15;:27;11983:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12100:14;;;;;;;;;;;12071:44;;12092:6;;;;;;;;;;12071:44;;;;;;;;;;;;12135:14;;;;;;;;;;;12126:6;;:23;;;;;;;;;;;;;;;;;;11852:305::o;34097:175::-;34183:4;34200:42;34210:12;:10;:12::i;:::-;34224:9;34235:6;34200:9;:42::i;:::-;34260:4;34253:11;;34097:175;;;;:::o;11385:89::-;11430:7;11457:9;;11450:16;;11385:89;:::o;11550:226::-;10409:12;:10;:12::i;:::-;10399:22;;:6;;;;;;;;;;:22;;;10391:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11631:6:::1;::::0;::::1;;;;;;;;11614:14;;:23;;;;;;;;;;;;;;;;;;11665:1;11648:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;11708:4;11690:15;:22;;;;:::i;:::-;11678:9;:34;;;;11765:1;11728:40;;11749:6;::::0;::::1;;;;;;;;11728:40;;;;;;;;;;;;11550:226:::0;:::o;34335:151::-;34424:7;34451:11;:18;34463:5;34451:18;;;;;;;;;;;;;;;:27;34470:7;34451:27;;;;;;;;;;;;;;;;34444:34;;34335:151;;;;:::o;11133:244::-;10409:12;:10;:12::i;:::-;10399:22;;:6;;;;;;;;;;:22;;;10391:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11242:1:::1;11222:22;;:8;:22;;;;11214:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11332:8;11303:38;;11324:6;::::0;::::1;;;;;;;;11303:38;;;;;;;;;;;;11361:8;11352:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;11133:244:::0;:::o;30504:23::-;;;;:::o;3190:98::-;3243:7;3270:10;3263:17;;3190:98;:::o;40629:380::-;40782:1;40765:19;;:5;:19;;;;40757:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40863:1;40844:21;;:7;:21;;;;40836:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40947:6;40917:11;:18;40929:5;40917:18;;;;;;;;;;;;;;;:27;40936:7;40917:27;;;;;;;;;;;;;;;:36;;;;40985:7;40969:32;;40978:5;40969:32;;;40994:6;40969:32;;;;;;:::i;:::-;;;;;;;;40629:380;;;:::o;37806:909::-;37964:1;37946:20;;:6;:20;;;;37938:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38048:1;38027:23;;:9;:23;;;;38019:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38103:47;38124:6;38132:9;38143:6;38103:20;:47::i;:::-;38163:21;38187:9;:17;38197:6;38187:17;;;;;;;;;;;;;;;;38163:41;;38240:6;38223:13;:23;;38215:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;38361:6;38345:13;:22;38325:9;:17;38335:6;38325:17;;;;;;;;;;;;;;;:42;;;;38389:20;38412:24;38429:6;38412:16;:24::i;:::-;38389:47;;38447:23;38473:24;38484:12;38473:6;:10;;:24;;;;:::i;:::-;38447:50;;38532:15;38508:9;:20;38518:9;38508:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;38574:12;38558;;:28;;;;;;;:::i;:::-;;;;;;;;38628:9;38611:44;;38620:6;38611:44;;;38639:15;38611:44;;;;;;:::i;:::-;;;;;;;;38688:4;;;;;;;;;;;38671:36;;38680:6;38671:36;;;38694:12;38671:36;;;;;;:::i;:::-;;;;;;;;37806:909;;;;;;:::o;13781:471::-;13839:7;14089:1;14084;:6;14080:47;;;14114:1;14107:8;;;;14080:47;14139:9;14155:1;14151;:5;;;;:::i;:::-;14139:17;;14184:1;14179;14175;:5;;;;:::i;:::-;:10;14167:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14243:1;14236:8;;;13781:471;;;;;:::o;14728:132::-;14786:7;14813:39;14817:1;14820;14813:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14806:46;;14728:132;;;;:::o;41612:125::-;;;;:::o;12891:136::-;12949:7;12976:43;12980:1;12983;12976:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;12969:50;;12891:136;;;;:::o;15356:278::-;15442:7;15474:1;15470;:5;15477:12;15462:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15501:9;15517:1;15513;:5;;;;:::i;:::-;15501:17;;15625:1;15618:8;;;15356:278;;;;;:::o;13330:192::-;13416:7;13449:1;13444;:6;;13452:12;13436:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13476:9;13492:1;13488;:5;;;;:::i;:::-;13476:17;;13513:1;13506:8;;;13330:192;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:139::-;1409:5;1447:6;1434:20;1425:29;;1463:33;1490:5;1463:33;:::i;:::-;1415:87;;;;:::o;1525:303::-;1596:5;1645:3;1638:4;1630:6;1626:17;1622:27;1612:2;;1663:1;1660;1653:12;1612:2;1703:6;1690:20;1728:94;1818:3;1810:6;1803:4;1795:6;1791:17;1728:94;:::i;:::-;1719:103;;1602:226;;;;;:::o;1851:303::-;1922:5;1971:3;1964:4;1956:6;1952:17;1948:27;1938:2;;1989:1;1986;1979:12;1938:2;2029:6;2016:20;2054:94;2144:3;2136:6;2129:4;2121:6;2117:17;2054:94;:::i;:::-;2045:103;;1928:226;;;;;:::o;2160:139::-;2206:5;2244:6;2231:20;2222:29;;2260:33;2287:5;2260:33;:::i;:::-;2212:87;;;;:::o;2305:262::-;2364:6;2413:2;2401:9;2392:7;2388:23;2384:32;2381:2;;;2429:1;2426;2419:12;2381:2;2472:1;2497:53;2542:7;2533:6;2522:9;2518:22;2497:53;:::i;:::-;2487:63;;2443:117;2371:196;;;;:::o;2573:407::-;2641:6;2649;2698:2;2686:9;2677:7;2673:23;2669:32;2666:2;;;2714:1;2711;2704:12;2666:2;2757:1;2782:53;2827:7;2818:6;2807:9;2803:22;2782:53;:::i;:::-;2772:63;;2728:117;2884:2;2910:53;2955:7;2946:6;2935:9;2931:22;2910:53;:::i;:::-;2900:63;;2855:118;2656:324;;;;;:::o;2986:552::-;3063:6;3071;3079;3128:2;3116:9;3107:7;3103:23;3099:32;3096:2;;;3144:1;3141;3134:12;3096:2;3187:1;3212:53;3257:7;3248:6;3237:9;3233:22;3212:53;:::i;:::-;3202:63;;3158:117;3314:2;3340:53;3385:7;3376:6;3365:9;3361:22;3340:53;:::i;:::-;3330:63;;3285:118;3442:2;3468:53;3513:7;3504:6;3493:9;3489:22;3468:53;:::i;:::-;3458:63;;3413:118;3086:452;;;;;:::o;3544:407::-;3612:6;3620;3669:2;3657:9;3648:7;3644:23;3640:32;3637:2;;;3685:1;3682;3675:12;3637:2;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3855:2;3881:53;3926:7;3917:6;3906:9;3902:22;3881:53;:::i;:::-;3871:63;;3826:118;3627:324;;;;;:::o;3957:693::-;4075:6;4083;4132:2;4120:9;4111:7;4107:23;4103:32;4100:2;;;4148:1;4145;4138:12;4100:2;4219:1;4208:9;4204:17;4191:31;4249:18;4241:6;4238:30;4235:2;;;4281:1;4278;4271:12;4235:2;4309:78;4379:7;4370:6;4359:9;4355:22;4309:78;:::i;:::-;4299:88;;4162:235;4464:2;4453:9;4449:18;4436:32;4495:18;4487:6;4484:30;4481:2;;;4527:1;4524;4517:12;4481:2;4555:78;4625:7;4616:6;4605:9;4601:22;4555:78;:::i;:::-;4545:88;;4407:236;4090:560;;;;;:::o;4656:262::-;4715:6;4764:2;4752:9;4743:7;4739:23;4735:32;4732:2;;;4780:1;4777;4770:12;4732:2;4823:1;4848:53;4893:7;4884:6;4873:9;4869:22;4848:53;:::i;:::-;4838:63;;4794:117;4722:196;;;;:::o;4924:118::-;5011:24;5029:5;5011:24;:::i;:::-;5006:3;4999:37;4989:53;;:::o;5048:109::-;5129:21;5144:5;5129:21;:::i;:::-;5124:3;5117:34;5107:50;;:::o;5163:364::-;5251:3;5279:39;5312:5;5279:39;:::i;:::-;5334:71;5398:6;5393:3;5334:71;:::i;:::-;5327:78;;5414:52;5459:6;5454:3;5447:4;5440:5;5436:16;5414:52;:::i;:::-;5491:29;5513:6;5491:29;:::i;:::-;5486:3;5482:39;5475:46;;5255:272;;;;;:::o;5533:366::-;5675:3;5696:67;5760:2;5755:3;5696:67;:::i;:::-;5689:74;;5772:93;5861:3;5772:93;:::i;:::-;5890:2;5885:3;5881:12;5874:19;;5679:220;;;:::o;5905:366::-;6047:3;6068:67;6132:2;6127:3;6068:67;:::i;:::-;6061:74;;6144:93;6233:3;6144:93;:::i;:::-;6262:2;6257:3;6253:12;6246:19;;6051:220;;;:::o;6277:366::-;6419:3;6440:67;6504:2;6499:3;6440:67;:::i;:::-;6433:74;;6516:93;6605:3;6516:93;:::i;:::-;6634:2;6629:3;6625:12;6618:19;;6423:220;;;:::o;6649:366::-;6791:3;6812:67;6876:2;6871:3;6812:67;:::i;:::-;6805:74;;6888:93;6977:3;6888:93;:::i;:::-;7006:2;7001:3;6997:12;6990:19;;6795:220;;;:::o;7021:366::-;7163:3;7184:67;7248:2;7243:3;7184:67;:::i;:::-;7177:74;;7260:93;7349:3;7260:93;:::i;:::-;7378:2;7373:3;7369:12;7362:19;;7167:220;;;:::o;7393:366::-;7535:3;7556:67;7620:2;7615:3;7556:67;:::i;:::-;7549:74;;7632:93;7721:3;7632:93;:::i;:::-;7750:2;7745:3;7741:12;7734:19;;7539:220;;;:::o;7765:366::-;7907:3;7928:67;7992:2;7987:3;7928:67;:::i;:::-;7921:74;;8004:93;8093:3;8004:93;:::i;:::-;8122:2;8117:3;8113:12;8106:19;;7911:220;;;:::o;8137:366::-;8279:3;8300:67;8364:2;8359:3;8300:67;:::i;:::-;8293:74;;8376:93;8465:3;8376:93;:::i;:::-;8494:2;8489:3;8485:12;8478:19;;8283:220;;;:::o;8509:366::-;8651:3;8672:67;8736:2;8731:3;8672:67;:::i;:::-;8665:74;;8748:93;8837:3;8748:93;:::i;:::-;8866:2;8861:3;8857:12;8850:19;;8655:220;;;:::o;8881:366::-;9023:3;9044:67;9108:2;9103:3;9044:67;:::i;:::-;9037:74;;9120:93;9209:3;9120:93;:::i;:::-;9238:2;9233:3;9229:12;9222:19;;9027:220;;;:::o;9253:366::-;9395:3;9416:67;9480:2;9475:3;9416:67;:::i;:::-;9409:74;;9492:93;9581:3;9492:93;:::i;:::-;9610:2;9605:3;9601:12;9594:19;;9399:220;;;:::o;9625:366::-;9767:3;9788:67;9852:2;9847:3;9788:67;:::i;:::-;9781:74;;9864:93;9953:3;9864:93;:::i;:::-;9982:2;9977:3;9973:12;9966:19;;9771:220;;;:::o;9997:118::-;10084:24;10102:5;10084:24;:::i;:::-;10079:3;10072:37;10062:53;;:::o;10121:112::-;10204:22;10220:5;10204:22;:::i;:::-;10199:3;10192:35;10182:51;;:::o;10239:222::-;10332:4;10370:2;10359:9;10355:18;10347:26;;10383:71;10451:1;10440:9;10436:17;10427:6;10383:71;:::i;:::-;10337:124;;;;:::o;10467:210::-;10554:4;10592:2;10581:9;10577:18;10569:26;;10605:65;10667:1;10656:9;10652:17;10643:6;10605:65;:::i;:::-;10559:118;;;;:::o;10683:313::-;10796:4;10834:2;10823:9;10819:18;10811:26;;10883:9;10877:4;10873:20;10869:1;10858:9;10854:17;10847:47;10911:78;10984:4;10975:6;10911:78;:::i;:::-;10903:86;;10801:195;;;;:::o;11002:419::-;11168:4;11206:2;11195:9;11191:18;11183:26;;11255:9;11249:4;11245:20;11241:1;11230:9;11226:17;11219:47;11283:131;11409:4;11283:131;:::i;:::-;11275:139;;11173:248;;;:::o;11427:419::-;11593:4;11631:2;11620:9;11616:18;11608:26;;11680:9;11674:4;11670:20;11666:1;11655:9;11651:17;11644:47;11708:131;11834:4;11708:131;:::i;:::-;11700:139;;11598:248;;;:::o;11852:419::-;12018:4;12056:2;12045:9;12041:18;12033:26;;12105:9;12099:4;12095:20;12091:1;12080:9;12076:17;12069:47;12133:131;12259:4;12133:131;:::i;:::-;12125:139;;12023:248;;;:::o;12277:419::-;12443:4;12481:2;12470:9;12466:18;12458:26;;12530:9;12524:4;12520:20;12516:1;12505:9;12501:17;12494:47;12558:131;12684:4;12558:131;:::i;:::-;12550:139;;12448:248;;;:::o;12702:419::-;12868:4;12906:2;12895:9;12891:18;12883:26;;12955:9;12949:4;12945:20;12941:1;12930:9;12926:17;12919:47;12983:131;13109:4;12983:131;:::i;:::-;12975:139;;12873:248;;;:::o;13127:419::-;13293:4;13331:2;13320:9;13316:18;13308:26;;13380:9;13374:4;13370:20;13366:1;13355:9;13351:17;13344:47;13408:131;13534:4;13408:131;:::i;:::-;13400:139;;13298:248;;;:::o;13552:419::-;13718:4;13756:2;13745:9;13741:18;13733:26;;13805:9;13799:4;13795:20;13791:1;13780:9;13776:17;13769:47;13833:131;13959:4;13833:131;:::i;:::-;13825:139;;13723:248;;;:::o;13977:419::-;14143:4;14181:2;14170:9;14166:18;14158:26;;14230:9;14224:4;14220:20;14216:1;14205:9;14201:17;14194:47;14258:131;14384:4;14258:131;:::i;:::-;14250:139;;14148:248;;;:::o;14402:419::-;14568:4;14606:2;14595:9;14591:18;14583:26;;14655:9;14649:4;14645:20;14641:1;14630:9;14626:17;14619:47;14683:131;14809:4;14683:131;:::i;:::-;14675:139;;14573:248;;;:::o;14827:419::-;14993:4;15031:2;15020:9;15016:18;15008:26;;15080:9;15074:4;15070:20;15066:1;15055:9;15051:17;15044:47;15108:131;15234:4;15108:131;:::i;:::-;15100:139;;14998:248;;;:::o;15252:419::-;15418:4;15456:2;15445:9;15441:18;15433:26;;15505:9;15499:4;15495:20;15491:1;15480:9;15476:17;15469:47;15533:131;15659:4;15533:131;:::i;:::-;15525:139;;15423:248;;;:::o;15677:419::-;15843:4;15881:2;15870:9;15866:18;15858:26;;15930:9;15924:4;15920:20;15916:1;15905:9;15901:17;15894:47;15958:131;16084:4;15958:131;:::i;:::-;15950:139;;15848:248;;;:::o;16102:222::-;16195:4;16233:2;16222:9;16218:18;16210:26;;16246:71;16314:1;16303:9;16299:17;16290:6;16246:71;:::i;:::-;16200:124;;;;:::o;16330:214::-;16419:4;16457:2;16446:9;16442:18;16434:26;;16470:67;16534:1;16523:9;16519:17;16510:6;16470:67;:::i;:::-;16424:120;;;;:::o;16550:129::-;16584:6;16611:20;;:::i;:::-;16601:30;;16640:33;16668:4;16660:6;16640:33;:::i;:::-;16591:88;;;:::o;16685:75::-;16718:6;16751:2;16745:9;16735:19;;16725:35;:::o;16766:311::-;16843:4;16933:18;16925:6;16922:30;16919:2;;;16955:18;;:::i;:::-;16919:2;17005:4;16997:6;16993:17;16985:25;;17065:4;17059;17055:15;17047:23;;16848:229;;;:::o;17083:311::-;17160:4;17250:18;17242:6;17239:30;17236:2;;;17272:18;;:::i;:::-;17236:2;17322:4;17314:6;17310:17;17302:25;;17382:4;17376;17372:15;17364:23;;17165:229;;;:::o;17400:99::-;17452:6;17486:5;17480:12;17470:22;;17459:40;;;:::o;17505:169::-;17589:11;17623:6;17618:3;17611:19;17663:4;17658:3;17654:14;17639:29;;17601:73;;;;:::o;17680:305::-;17720:3;17739:20;17757:1;17739:20;:::i;:::-;17734:25;;17773:20;17791:1;17773:20;:::i;:::-;17768:25;;17927:1;17859:66;17855:74;17852:1;17849:81;17846:2;;;17933:18;;:::i;:::-;17846:2;17977:1;17974;17970:9;17963:16;;17724:261;;;;:::o;17991:185::-;18031:1;18048:20;18066:1;18048:20;:::i;:::-;18043:25;;18082:20;18100:1;18082:20;:::i;:::-;18077:25;;18121:1;18111:2;;18126:18;;:::i;:::-;18111:2;18168:1;18165;18161:9;18156:14;;18033:143;;;;:::o;18182:348::-;18222:7;18245:20;18263:1;18245:20;:::i;:::-;18240:25;;18279:20;18297:1;18279:20;:::i;:::-;18274:25;;18467:1;18399:66;18395:74;18392:1;18389:81;18384:1;18377:9;18370:17;18366:105;18363:2;;;18474:18;;:::i;:::-;18363:2;18522:1;18519;18515:9;18504:20;;18230:300;;;;:::o;18536:191::-;18576:4;18596:20;18614:1;18596:20;:::i;:::-;18591:25;;18630:20;18648:1;18630:20;:::i;:::-;18625:25;;18669:1;18666;18663:8;18660:2;;;18674:18;;:::i;:::-;18660:2;18719:1;18716;18712:9;18704:17;;18581:146;;;;:::o;18733:96::-;18770:7;18799:24;18817:5;18799:24;:::i;:::-;18788:35;;18778:51;;;:::o;18835:90::-;18869:7;18912:5;18905:13;18898:21;18887:32;;18877:48;;;:::o;18931:126::-;18968:7;19008:42;19001:5;18997:54;18986:65;;18976:81;;;:::o;19063:77::-;19100:7;19129:5;19118:16;;19108:32;;;:::o;19146:86::-;19181:7;19221:4;19214:5;19210:16;19199:27;;19189:43;;;:::o;19238:307::-;19306:1;19316:113;19330:6;19327:1;19324:13;19316:113;;;19415:1;19410:3;19406:11;19400:18;19396:1;19391:3;19387:11;19380:39;19352:2;19349:1;19345:10;19340:15;;19316:113;;;19447:6;19444:1;19441:13;19438:2;;;19527:1;19518:6;19513:3;19509:16;19502:27;19438:2;19287:258;;;;:::o;19551:320::-;19595:6;19632:1;19626:4;19622:12;19612:22;;19679:1;19673:4;19669:12;19700:18;19690:2;;19756:4;19748:6;19744:17;19734:27;;19690:2;19818;19810:6;19807:14;19787:18;19784:38;19781:2;;;19837:18;;:::i;:::-;19781:2;19602:269;;;;:::o;19877:281::-;19960:27;19982:4;19960:27;:::i;:::-;19952:6;19948:40;20090:6;20078:10;20075:22;20054:18;20042:10;20039:34;20036:62;20033:2;;;20101:18;;:::i;:::-;20033:2;20141:10;20137:2;20130:22;19920:238;;;:::o;20164:233::-;20203:3;20226:24;20244:5;20226:24;:::i;:::-;20217:33;;20272:66;20265:5;20262:77;20259:2;;;20342:18;;:::i;:::-;20259:2;20389:1;20382:5;20378:13;20371:20;;20207:190;;;:::o;20403:180::-;20451:77;20448:1;20441:88;20548:4;20545:1;20538:15;20572:4;20569:1;20562:15;20589:180;20637:77;20634:1;20627:88;20734:4;20731:1;20724:15;20758:4;20755:1;20748:15;20775:180;20823:77;20820:1;20813:88;20920:4;20917:1;20910:15;20944:4;20941:1;20934:15;20961:180;21009:77;21006:1;20999:88;21106:4;21103:1;21096:15;21130:4;21127:1;21120:15;21147:102;21188:6;21239:2;21235:7;21230:2;21223:5;21219:14;21215:28;21205:38;;21195:54;;;:::o;21255:222::-;21395:34;21391:1;21383:6;21379:14;21372:58;21464:5;21459:2;21451:6;21447:15;21440:30;21361:116;:::o;21483:225::-;21623:34;21619:1;21611:6;21607:14;21600:58;21692:8;21687:2;21679:6;21675:15;21668:33;21589:119;:::o;21714:221::-;21854:34;21850:1;21842:6;21838:14;21831:58;21923:4;21918:2;21910:6;21906:15;21899:29;21820:115;:::o;21941:225::-;22081:34;22077:1;22069:6;22065:14;22058:58;22150:8;22145:2;22137:6;22133:15;22126:33;22047:119;:::o;22172:220::-;22312:34;22308:1;22300:6;22296:14;22289:58;22381:3;22376:2;22368:6;22364:15;22357:28;22278:114;:::o;22398:227::-;22538:34;22534:1;22526:6;22522:14;22515:58;22607:10;22602:2;22594:6;22590:15;22583:35;22504:121;:::o;22631:182::-;22771:34;22767:1;22759:6;22755:14;22748:58;22737:76;:::o;22819:224::-;22959:34;22955:1;22947:6;22943:14;22936:58;23028:7;23023:2;23015:6;23011:15;23004:32;22925:118;:::o;23049:223::-;23189:34;23185:1;23177:6;23173:14;23166:58;23258:6;23253:2;23245:6;23241:15;23234:31;23155:117;:::o;23278:181::-;23418:33;23414:1;23406:6;23402:14;23395:57;23384:75;:::o;23465:222::-;23605:34;23601:1;23593:6;23589:14;23582:58;23674:5;23669:2;23661:6;23657:15;23650:30;23571:116;:::o;23693:224::-;23833:34;23829:1;23821:6;23817:14;23810:58;23902:7;23897:2;23889:6;23885:15;23878:32;23799:118;:::o;23923:122::-;23996:24;24014:5;23996:24;:::i;:::-;23989:5;23986:35;23976:2;;24035:1;24032;24025:12;23976:2;23966:79;:::o;24051:122::-;24124:24;24142:5;24124:24;:::i;:::-;24117:5;24114:35;24104:2;;24163:1;24160;24153:12;24104:2;24094:79;:::o
Swarm Source
ipfs://dcb2d33f78be5ff740bd9d3e47aae6937b2767b8def66665a694c06a74a25f41
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.