ERC-20
Overview
Max Total Supply
100,000,000 HBT
Holders
1,542
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 10 Decimals)
Balance
1,530.1733768734 HBTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
HabitatToken
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MPL-2.0 pragma solidity >=0.6.2; import './Utilities.sol'; /// @notice ERC-20 contract with support for EIP-2612 and other niceties. contract HabitatToken is Utilities { mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => uint256) _nonces; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); constructor () { _balances[msg.sender] = totalSupply(); } /// @notice Returns the name of token. function name () public virtual view returns (string memory) { return 'Habitat Token'; } /// @notice Returns the symbol of the token. function symbol () public virtual view returns (string memory) { return 'HBT'; } /// @notice Returns the number of decimals the token uses. function decimals () public virtual view returns (uint8) { return 10; } /// @notice Returns the DOMAIN_SEPARATOR. See EIP-2612. function DOMAIN_SEPARATOR () public virtual view returns (bytes32 ret) { assembly { // load free memory ptr let ptr := mload(64) // keep a copy to calculate the length later let start := ptr // keccak256('EIP712Domain(string name,uint256 chainId,address verifyingContract)') mstore(ptr, 0x8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866) ptr := add(ptr, 32) // keccak256(bytes('Habitat Token')) mstore(ptr, 0x825a5bd2b322b183692110889ab8fda39cd7c633901fc90cea3ce579a5694e95) ptr := add(ptr, 32) // store chainid mstore(ptr, chainid()) ptr := add(ptr, 32) // store address(this) mstore(ptr, address()) ptr := add(ptr, 32) // hash ret := keccak256(start, sub(ptr, start)) } } /// @notice Returns the total supply of this token. function totalSupply () public virtual view returns (uint256) { return 1000000000000000000; } /// @notice Returns the balance of `account`. function balanceOf (address account) public virtual view returns (uint256) { return _balances[account]; } /// @notice Returns the allowance for `spender` of `account`. function allowance (address account, address spender) public virtual view returns (uint256) { return _allowances[account][spender]; } /// @notice Returns the nonce of `account`. Used in `permit`. See EIP-2612. function nonces (address account) public virtual view returns (uint256) { return _nonces[account]; } /// @notice Approves `amount` from sender to be spend by `spender`. /// @param spender Address of the party that can draw from msg.sender's account. /// @param amount The maximum collective amount that `spender` can draw. /// @return (bool) Returns True if approved. function approve (address spender, uint256 amount) public virtual returns (bool) { _approve(msg.sender, spender, amount); return true; } /// @dev The concrete implementation of `approve`. function _approve (address owner, address spender, uint256 value) internal virtual { _allowances[owner][spender] = value; emit Approval(owner, spender, value); } /// @dev The concrete implementation of `transfer` and `transferFrom`. function _transferFrom (address from, address to, uint256 value) internal virtual returns (bool) { uint256 balance = _balances[from]; require(balance >= value, 'BALANCE'); if (from != to) { _balances[from] = balance - value; balance = _balances[to]; uint256 newBalance = balance + value; // overflow check, also reverts if `value` is zero require(newBalance > balance, 'OVERFLOW'); _balances[to] = newBalance; } emit Transfer(from, to, value); return true; } /// @notice Transfers `amount` tokens from `msg.sender` to `to`. /// @param to The address to move the tokens. /// @param amount of the tokens to move. /// @return (bool) Returns True if succeeded. function transfer (address to, uint256 amount) public virtual returns (bool) { return _transferFrom(msg.sender, to, amount); } /// @notice Transfers `amount` tokens from `from` to `to`. Caller may need approval if `from` is not `msg.sender`. /// @param from Address to draw tokens from. /// @param to The address to move the tokens. /// @param amount The token amount to move. /// @return (bool) Returns True if succeeded. function transferFrom (address from, address to, uint256 amount) public virtual returns (bool) { uint256 _allowance = _allowances[from][msg.sender]; require(_allowance >= amount, 'ALLOWANCE'); if (_allowance != uint256(-1)) { _allowances[from][msg.sender] = _allowance - amount; } return _transferFrom(from, to, amount); } /// @notice Approves `value` from `owner` to be spend by `spender`. /// @param owner Address of the owner. /// @param spender The address of the spender that gets approved to draw from `owner`. /// @param value The maximum collective amount that `spender` can draw. /// @param deadline This permit must be redeemed before this deadline (UTC timestamp in seconds). function permit ( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external { require(owner != address(0), 'OWNER'); require(block.timestamp < deadline, 'EXPIRED'); uint256 nonce = _nonces[owner]++; bytes32 domainSeparator = DOMAIN_SEPARATOR(); bytes32 digest; assembly { // ptr to free memory let ptr := mload(64) // keep a copy to calculate the length later let start := ptr // keccak256('Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)'); mstore(ptr, 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9) ptr := add(ptr, 32) // copy (owner, spender, value) from calldata in one go calldatacopy(ptr, 4, 96) ptr := add(ptr, 96) // store nonce mstore(ptr, nonce) ptr := add(ptr, 32) // store deadline mstore(ptr, deadline) ptr := add(ptr, 32) // Permit struct hash let permitStructHash := keccak256(start, sub(ptr, start)) // reset ptr ptr := start // add 30 bytes to align correctly (0x1901) start := add(ptr, 30) // preamble mstore(ptr, 0x1901) ptr := add(ptr, 32) // DOMAIN_SEPARATOR mstore(ptr, domainSeparator) ptr := add(ptr, 32) // from above mstore(ptr, permitStructHash) ptr := add(ptr, 32) // hash it digest := keccak256(start, sub(ptr, start)) } require(ecrecover(digest, v, r, s) == owner, 'SIG'); _approve(owner, spender, value); } /// @dev Helper function for wrapping calls. Reverts on a call to 'self'. function _callWrapper (address to, bytes calldata data) internal returns (bytes memory) { require(to != address(this)); (bool success, bytes memory ret) = to.call(data); require(success); return ret; } /// @notice Transfers `amount` from `msg.sender` to `to` and calls `to` with `data` as input. /// Reverts if not succesful. Otherwise returns any data from the call. function transferAndCall (address to, uint256 amount, bytes calldata data) external returns (bytes memory) { _transferFrom(msg.sender, to, amount); return _callWrapper(to, data); } /// @notice Approves `amount` from `msg.sender` to be spend by `to` and calls `to` with `data` as input. /// Reverts if not succesful. Otherwise returns any data from the call. function approveAndCall (address to, uint256 amount, bytes calldata data) external returns (bytes memory) { _approve(msg.sender, to, amount); return _callWrapper(to, data); } /// @notice Redeems a permit for this contract (`permitData`) and calls `to` with `data` as input. /// Reverts if not succesful. Otherwise returns any data from the call. function redeemPermitAndCall (address to, bytes calldata permitData, bytes calldata data) external returns (bytes memory) { Utilities._maybeRedeemPermit(address(this), permitData); return _callWrapper(to, data); } /// @notice Allows to recover `token`. /// Transfers `token` to `msg.sender`. /// @param token The address of the ERC-20 token to recover. function recoverLostTokens (address token) external { Utilities._safeTransfer(token, msg.sender, Utilities._safeBalance(token, address(this))); } }
// SPDX-License-Identifier: MIT interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } interface IUniswapV2Pair { 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; } interface IDroplet { function drip () external; } library SafeMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, 'ADD_OVERFLOW'); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, 'SUB_OVERFLOW'); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, 'MUL_OVERFLOW'); } } library UniswapV2Library { using SafeMath for uint; // fetches and sorts the reserves for a pair function getReserves (uint256 pair) internal view returns (uint reserveA, uint reserveB) { address addr = address(pair >> 1); uint direction = pair & 1; (uint reserve0, uint reserve1,) = IUniswapV2Pair(addr).getReserves(); (reserveA, reserveB) = direction == 0 ? (reserve0, reserve1) : (reserve1, reserve0); } // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset function getAmountOut (uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) { require(amountIn > 0, 'INSUFFICIENT_INPUT_AMOUNT'); require(reserveIn > 0 && reserveOut > 0, 'INSUFFICIENT_LIQUIDITY'); uint amountInWithFee = amountIn.mul(997); uint numerator = amountInWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(amountInWithFee); amountOut = numerator / denominator; } // performs chained getAmountOut calculations on any number of pairs function getAmountsOut (uint amountIn, uint256[] memory pairs) internal view returns (uint[] memory amounts) { amounts = new uint[](pairs.length); amounts[0] = amountIn; for (uint i = 1; i < pairs.length; i++) { (uint reserveIn, uint reserveOut) = getReserves(pairs[i]); amounts[i] = getAmountOut(amounts[i - 1], reserveIn, reserveOut); } } } contract Utilities { bytes4 private constant SIG_TRANSFER = 0xa9059cbb; // transfer(address,uint256) bytes4 private constant SIG_TRANSFER_FROM = 0x23b872dd; // transferFrom(address,address,uint256) bytes4 private constant SIG_APPROVE = 0x095ea7b3; // approve(address,uint256) bytes4 private constant SIG_BALANCE = 0x70a08231; // balanceOf(address) /// @dev Provides a safe ERC-20.transfer version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param to Transfer tokens to. /// @param amount The token amount. function _safeTransfer (address token, address to, uint256 amount) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_TRANSFER, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER'); } /// @dev Provides a safe ERC-20.transferFrom version for different ERC-20 implementations. /// Reverts on a failed transfer. /// @param token The address of the ERC-20 token. /// @param from Transfer tokens from. /// @param to Transfer tokens to. /// @param amount The token amount. function _safeTransferFrom (address token, address from, address to, uint256 amount) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_TRANSFER_FROM, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FROM'); } /// @dev Provides a ETH transfer wrapper. /// Reverts on a failed transfer. /// @param to Transfer ETH to. /// @param amount The ETH amount. function _safeTransferETH (address to, uint256 amount) internal { (bool success,) = to.call{value:amount}(""); require(success, 'TRANSFER_ETH'); } /// @dev Provides a safe ERC-20.approve version for different ERC-20 implementations. /// Reverts if failed. /// @param token The address of the ERC-20 token. /// @param spender of tokens. /// @param amount Allowance amount. function _safeApprove (address token, address spender, uint256 amount) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_APPROVE, spender, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'APPROVE'); } /// @dev Provides a wrapper for ERC-20.balanceOf. /// Reverts if failed. /// @param token The address of the ERC-20 token. /// @param account Address of the account to query. function _safeBalance (address token, address account) internal returns (uint256) { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SIG_BALANCE, account)); require(success, 'BALANCE'); return abi.decode(data, (uint256)); } /// @dev Wrapper for `_safeTransfer` or `_safeTransferFrom` depending on `from`. function _safeTransferWrapper (address token, address from, address to, uint256 amount) internal { if (from == address(this)) { _safeTransfer(token, to, amount); } else { _safeTransferFrom(token, from, to, amount); } } /// @dev Helper function for redeeming EIP-2612 and DAI-style permits. function _maybeRedeemPermit (address token, bytes memory permitData) internal { if (permitData.length > 0) { bool success; assembly { let dataPtr := add(permitData, 32) let functionSig := shr(224, mload(dataPtr)) { // check if permit.owner is address(this). Yes, paranoia. // offset is <functionSig 4 bytes> + 12 bytes left-side part of permit.owner. // shift it to the right by 12 bytes so that we can *safely* compare let _owner := shr(96, mload(add(dataPtr, 16))) if eq(_owner, address()) { // even if a correct signature for this contract is just possible in theory, // attempting this deserves no error message revert(0, 0) } } // EIP-2612 = 0xd505accf || dai-like (old) permit = 0x8fcbaf0c if or( eq(functionSig, 0xd505accf), eq(functionSig, 0x8fcbaf0c) ) { let size := mload(permitData) success := call(gas(), token, 0, dataPtr, size, 0, 0) } } require(success, 'PERMIT'); } } /// @dev Requires the initial amount to have already been sent to the first pair. function _swap (uint[] memory amounts, uint256[] memory path, address _to) internal { for (uint i = 1; i < path.length; i++) { uint amountOut = amounts[i]; address pair = address(path[i] >> 1); uint direction = path[i] & 1; (uint amount0Out, uint amount1Out) = direction == 0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 1 ? pair : _to; IUniswapV2Pair(pair).swap( amount0Out, amount1Out, to, "" ); } } function _swapExactTokensForTokens ( uint256[] memory path, uint amountIn, address from, address to ) internal returns (uint[] memory amounts) { amounts = UniswapV2Library.getAmountsOut(amountIn, path); _safeTransferWrapper(address(path[0]), from, address(path[1] >> 1), amounts[0]); _swap(amounts, path, to); } function _swapExactETHForTokens ( uint256[] memory path, uint amountIn, address to ) internal returns (uint[] memory amounts) { amounts = UniswapV2Library.getAmountsOut(amountIn, path); IWETH(path[0]).deposit{value: amounts[0]}(); _safeTransferWrapper(address(path[0]), address(this), address(path[1] >> 1), amounts[0]); _swap(amounts, path, to); } function _swapExactTokensForETH ( uint256[] memory path, uint amountIn, address from, address to, address weth ) internal returns (uint[] memory amounts) { amounts = UniswapV2Library.getAmountsOut(amountIn, path); _safeTransferWrapper(address(path[0]), from, address(path[1] >> 1), amounts[0]); _swap(amounts, path, address(this)); uint256 finalOutputAmount = amounts[amounts.length - 1]; IWETH(weth).withdraw(finalOutputAmount); _safeTransferETH(to, finalOutputAmount); } }
{ "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "optimizer": { "enabled": true, "runs": 256, "details": { "peephole": true, "orderLiterals": false, "deduplicate": true, "cse": true, "constantOptimizer": true, "yul": false } }, "metadata": { "bytecodeHash": "none" } }
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":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":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"ret","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"recoverLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"permitData","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"redeemPermitAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001961002e565b3360009081526020819052604090205561003a565b670de0b6b3a764000090565b610f04806100496000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b9e8ce2c11610066578063b9e8ce2c14610409578063cae9ca5114610431578063d505accf146104b4578063dd62ed3e1461050557610100565b806370a08231146103895780637ecebe00146103af57806395d89b41146103d5578063a9059cbb146103dd57610100565b8063313ce567116100d3578063313ce567146102125780633644e515146102305780633833045d146102385780634000aea01461030657610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101c257806323b872dd146101dc575b600080fd5b61010d610533565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b03813516906020013561055a565b604080519115158252519081900360200190f35b6101ca610570565b60408051918252519081900360200190f35b6101ae600480360360608110156101f257600080fd5b506001600160a01b0381358116916020810135909116906040013561057c565b61021a610627565b6040805160ff9092168252519081900360200190f35b6101ca61062c565b61010d6004803603606081101561024e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460018302840111600160201b831117156102ab57600080fd5b919390929091602081019035600160201b8111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460018302840111600160201b831117156102fb57600080fd5b50909250905061068e565b61010d6004803603606081101561031c57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561034b57600080fd5b82018360208201111561035d57600080fd5b803590602001918460018302840111600160201b8311171561037e57600080fd5b5090925090506106e5565b6101ca6004803603602081101561039f57600080fd5b50356001600160a01b03166106fe565b6101ca600480360360208110156103c557600080fd5b50356001600160a01b0316610719565b61010d610734565b6101ae600480360360408110156103f357600080fd5b506001600160a01b038135169060200135610751565b61042f6004803603602081101561041f57600080fd5b50356001600160a01b0316610765565b005b61010d6004803603606081101561044757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561047657600080fd5b82018360208201111561048857600080fd5b803590602001918460018302840111600160201b831117156104a957600080fd5b50909250905061077c565b61042f600480360360e08110156104ca57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610794565b6101ca6004803603604081101561051b57600080fd5b506001600160a01b038135811691602001351661096f565b60408051808201909152600d81526c2430b134ba30ba102a37b5b2b760991b602082015290565b600061056733848461099a565b50600192915050565b670de0b6b3a764000090565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156105e1576040805162461bcd60e51b8152602060048201526009602482015268414c4c4f57414e434560b81b604482015290519081900360640190fd5b6000198114610613576001600160a01b0385166000908152600160209081526040808320338452909152902083820390555b61061e8585856109fc565b95945050505050565b600a90565b604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681527f825a5bd2b322b183692110889ab8fda39cd7c633901fc90cea3ce579a5694e95602082015246918101919091523060608201526080902090565b60606106d03086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b4792505050565b6106db868484610bd6565b9695505050505050565b60606106f23386866109fc565b5061061e858484610bd6565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b031660009081526002602052604090205490565b60408051808201909152600381526212109560ea1b602082015290565b600061075e3384846109fc565b9392505050565b61077981336107748430610c61565b610da3565b50565b606061078933868661099a565b61061e858484610bd6565b6001600160a01b0387166107d7576040805162461bcd60e51b815260206004820152600560248201526427aba722a960d91b604482015290519081900360640190fd5b834210610815576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03871660009081526002602052604081208054600181019091559061083f61062c565b90506000604051807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98252602082019150606060048337606082810186905260808084018b90529282900360a09081018320611901845260208481018890526040808601929092526042601e9095019490942081516000815280860180845282905260ff8d16818401529384018b9052948301899052519394506001600160a01b038e1693600193838301939092601f19830192918290030190855afa15801561090d573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610958576040805162461bcd60e51b815260206004820152600360248201526253494760e81b604482015290519081900360640190fd5b6109638a8a8a61099a565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831660009081526020819052604081205482811015610a54576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614610af1576001600160a01b038086166000908152602081905260408082209386900390935590851681522054808301818111610ad7576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b6001600160a01b0385166000908152602081905260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b805115610bd257600060208201805160e01c601082015160601c30811415610b6e57600080fd5b50638fcbaf0c811463d505accf82141715610b93578351600080828560008a5af19350505b505080610bd0576040805162461bcd60e51b815260206004820152600660248201526514115493525560d21b604482015290519081900360640190fd5b505b5050565b60606001600160a01b038416301415610bee57600080fd5b600080856001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d8060008114610c4d576040519150601f19603f3d011682016040523d82523d6000602084013e610c52565b606091505b50915091508161061e57600080fd5b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b17815292518251600094859485948916939092909182918083835b60208310610cdb5780518252601f199092019160209182019101610cbc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d3d576040519150601f19603f3d011682016040523d82523d6000602084013e610d42565b606091505b509150915081610d83576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b808060200190516020811015610d9857600080fd5b505195945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610e1f5780518252601f199092019160209182019101610e00565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e81576040519150601f19603f3d011682016040523d82523d6000602084013e610e86565b606091505b5091509150818015610eb4575080511580610eb45750808060200190516020811015610eb157600080fd5b50515b610ef0576040805162461bcd60e51b81526020600482015260086024820152672a2920a729a322a960c11b604482015290519081900360640190fd5b505050505056fea164736f6c6343000706000a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063b9e8ce2c11610066578063b9e8ce2c14610409578063cae9ca5114610431578063d505accf146104b4578063dd62ed3e1461050557610100565b806370a08231146103895780637ecebe00146103af57806395d89b41146103d5578063a9059cbb146103dd57610100565b8063313ce567116100d3578063313ce567146102125780633644e515146102305780633833045d146102385780634000aea01461030657610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101c257806323b872dd146101dc575b600080fd5b61010d610533565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101ae6004803603604081101561019857600080fd5b506001600160a01b03813516906020013561055a565b604080519115158252519081900360200190f35b6101ca610570565b60408051918252519081900360200190f35b6101ae600480360360608110156101f257600080fd5b506001600160a01b0381358116916020810135909116906040013561057c565b61021a610627565b6040805160ff9092168252519081900360200190f35b6101ca61062c565b61010d6004803603606081101561024e57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460018302840111600160201b831117156102ab57600080fd5b919390929091602081019035600160201b8111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460018302840111600160201b831117156102fb57600080fd5b50909250905061068e565b61010d6004803603606081101561031c57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561034b57600080fd5b82018360208201111561035d57600080fd5b803590602001918460018302840111600160201b8311171561037e57600080fd5b5090925090506106e5565b6101ca6004803603602081101561039f57600080fd5b50356001600160a01b03166106fe565b6101ca600480360360208110156103c557600080fd5b50356001600160a01b0316610719565b61010d610734565b6101ae600480360360408110156103f357600080fd5b506001600160a01b038135169060200135610751565b61042f6004803603602081101561041f57600080fd5b50356001600160a01b0316610765565b005b61010d6004803603606081101561044757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561047657600080fd5b82018360208201111561048857600080fd5b803590602001918460018302840111600160201b831117156104a957600080fd5b50909250905061077c565b61042f600480360360e08110156104ca57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610794565b6101ca6004803603604081101561051b57600080fd5b506001600160a01b038135811691602001351661096f565b60408051808201909152600d81526c2430b134ba30ba102a37b5b2b760991b602082015290565b600061056733848461099a565b50600192915050565b670de0b6b3a764000090565b6001600160a01b0383166000908152600160209081526040808320338452909152812054828110156105e1576040805162461bcd60e51b8152602060048201526009602482015268414c4c4f57414e434560b81b604482015290519081900360640190fd5b6000198114610613576001600160a01b0385166000908152600160209081526040808320338452909152902083820390555b61061e8585856109fc565b95945050505050565b600a90565b604080517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681527f825a5bd2b322b183692110889ab8fda39cd7c633901fc90cea3ce579a5694e95602082015246918101919091523060608201526080902090565b60606106d03086868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b4792505050565b6106db868484610bd6565b9695505050505050565b60606106f23386866109fc565b5061061e858484610bd6565b6001600160a01b031660009081526020819052604090205490565b6001600160a01b031660009081526002602052604090205490565b60408051808201909152600381526212109560ea1b602082015290565b600061075e3384846109fc565b9392505050565b61077981336107748430610c61565b610da3565b50565b606061078933868661099a565b61061e858484610bd6565b6001600160a01b0387166107d7576040805162461bcd60e51b815260206004820152600560248201526427aba722a960d91b604482015290519081900360640190fd5b834210610815576040805162461bcd60e51b81526020600482015260076024820152661156141254915160ca1b604482015290519081900360640190fd5b6001600160a01b03871660009081526002602052604081208054600181019091559061083f61062c565b90506000604051807f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98252602082019150606060048337606082810186905260808084018b90529282900360a09081018320611901845260208481018890526040808601929092526042601e9095019490942081516000815280860180845282905260ff8d16818401529384018b9052948301899052519394506001600160a01b038e1693600193838301939092601f19830192918290030190855afa15801561090d573d6000803e3d6000fd5b505050602060405103516001600160a01b031614610958576040805162461bcd60e51b815260206004820152600360248201526253494760e81b604482015290519081900360640190fd5b6109638a8a8a61099a565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831660009081526020819052604081205482811015610a54576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b836001600160a01b0316856001600160a01b031614610af1576001600160a01b038086166000908152602081905260408082209386900390935590851681522054808301818111610ad7576040805162461bcd60e51b81526020600482015260086024820152674f564552464c4f5760c01b604482015290519081900360640190fd5b6001600160a01b0385166000908152602081905260409020555b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3506001949350505050565b805115610bd257600060208201805160e01c601082015160601c30811415610b6e57600080fd5b50638fcbaf0c811463d505accf82141715610b93578351600080828560008a5af19350505b505080610bd0576040805162461bcd60e51b815260206004820152600660248201526514115493525560d21b604482015290519081900360640190fd5b505b5050565b60606001600160a01b038416301415610bee57600080fd5b600080856001600160a01b03168585604051808383808284376040519201945060009350909150508083038183865af19150503d8060008114610c4d576040519150601f19603f3d011682016040523d82523d6000602084013e610c52565b606091505b50915091508161061e57600080fd5b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b17815292518251600094859485948916939092909182918083835b60208310610cdb5780518252601f199092019160209182019101610cbc565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d3d576040519150601f19603f3d011682016040523d82523d6000602084013e610d42565b606091505b509150915081610d83576040805162461bcd60e51b815260206004820152600760248201526642414c414e434560c81b604482015290519081900360640190fd5b808060200190516020811015610d9857600080fd5b505195945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610e1f5780518252601f199092019160209182019101610e00565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610e81576040519150601f19603f3d011682016040523d82523d6000602084013e610e86565b606091505b5091509150818015610eb4575080511580610eb45750808060200190516020811015610eb157600080fd5b50515b610ef0576040805162461bcd60e51b81526020600482015260086024820152672a2920a729a322a960c11b604482015290519081900360640190fd5b505050505056fea164736f6c6343000706000a
Deployed Bytecode Sourcemap
163:8403:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;615:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:146;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2857:146:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1921:99;;;:::i;:::-;;;;;;;;;;;;;;;;4483:352;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4483:352:0;;;;;;;;;;;;;;;;;:::i;911:77::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1050:813;;;:::i;8041:223::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8041:223:0;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8041:223:0;;;;;;;;;;-1:-1:-1;8041:223:0;;-1:-1:-1;8041:223:0;-1:-1:-1;8041:223:0;:::i;7303:190::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7303:190:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7303:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7303:190:0;;;;;;;;;;-1:-1:-1;7303:190:0;;-1:-1:-1;7303:190:0;-1:-1:-1;7303:190:0;:::i;2072:111::-;;;;;;;;;;;;;;;;-1:-1:-1;2072:111:0;-1:-1:-1;;;;;2072:111:0;;:::i;2472:106::-;;;;;;;;;;;;;;;;-1:-1:-1;2472:106:0;-1:-1:-1;;;;;2472:106:0;;:::i;760:86::-;;;:::i;4041:132::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4041:132:0;;;;;;;;:::i;8413:151::-;;;;;;;;;;;;;;;;-1:-1:-1;8413:151:0;-1:-1:-1;;;;;8413:151:0;;:::i;:::-;;7678:184;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7678:184:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7678:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7678:184:0;;;;;;;;;;-1:-1:-1;7678:184:0;;-1:-1:-1;7678:184:0;-1:-1:-1;7678:184:0;:::i;5213:1617::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5213:1617:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2251:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2251:139:0;;;;;;;;;;:::i;615:94::-;682:22;;;;;;;;;;;;-1:-1:-1;;;682:22:0;;;;615:94;:::o;2857:146::-;2932:4;2944:37;2953:10;2965:7;2974:6;2944:8;:37::i;:::-;-1:-1:-1;2994:4:0;2857:146;;;;:::o;1921:99::-;1996:19;1921:99;:::o;4483:352::-;-1:-1:-1;;;;;4605:17:0;;4572:4;4605:17;;;:11;:17;;;;;;;;4623:10;4605:29;;;;;;;;4648:20;;;;4640:42;;;;;-1:-1:-1;;;4640:42:0;;;;;;;;;;;;-1:-1:-1;;;4640:42:0;;;;;;;;;;;;;;;-1:-1:-1;;4693:10:0;:25;4689:97;;-1:-1:-1;;;;;4728:17:0;;;;;;:11;:17;;;;;;;;4746:10;4728:29;;;;;;;4760:19;;;4728:51;;4689:97;4799:31;4813:4;4819:2;4823:6;4799:13;:31::i;:::-;4792:38;4483:352;-1:-1:-1;;;;;4483:352:0:o;911:77::-;981:2;911:77;:::o;1050:813::-;1191:2;1185:9;;1378:66;1366:79;;1534:66;1468:2;1459:12;;1522:79;1670:9;1615:12;;;1658:22;;;;1755:9;1694:12;;;1743:22;1779:12;1820:33;;;1136:723::o;8041:223::-;8149:12;8169:55;8206:4;8213:10;;8169:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8169:28:0;;-1:-1:-1;;;8169:55:0:i;:::-;8237:22;8250:2;8254:4;;8237:12;:22::i;:::-;8230:29;8041:223;-1:-1:-1;;;;;;8041:223:0:o;7303:190::-;7396:12;7416:37;7430:10;7442:2;7446:6;7416:13;:37::i;:::-;;7466:22;7479:2;7483:4;;7466:12;:22::i;2072:111::-;-1:-1:-1;;;;;2160:18:0;2138:7;2160:18;;;;;;;;;;;;2072:111::o;2472:106::-;-1:-1:-1;;;;;2557:16:0;2535:7;2557:16;;;:7;:16;;;;;;;2472:106::o;760:86::-;829:12;;;;;;;;;;;;-1:-1:-1;;;829:12:0;;;;760:86;:::o;4041:132::-;4112:4;4131:37;4145:10;4157:2;4161:6;4131:13;:37::i;:::-;4124:44;4041:132;-1:-1:-1;;;4041:132:0:o;8413:151::-;8471:88;8495:5;8502:10;8514:44;8537:5;8552:4;8514:22;:44::i;:::-;8471:23;:88::i;:::-;8413:151;:::o;7678:184::-;7770:12;7790:32;7799:10;7811:2;7815:6;7790:8;:32::i;:::-;7835:22;7848:2;7852:4;;7835:12;:22::i;5213:1617::-;-1:-1:-1;;;;;5381:19:0;;5373:37;;;;;-1:-1:-1;;;5373:37:0;;;;;;;;;;;;-1:-1:-1;;;5373:37:0;;;;;;;;;;;;;;;5442:8;5424:15;:26;5416:46;;;;;-1:-1:-1;;;5416:46:0;;;;;;;;;;;;-1:-1:-1;;;5416:46:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5485:14:0;;5469:13;5485:14;;;:7;:14;;;;;:16;;;;;;;;;5533:18;:16;:18::i;:::-;5507:44;;5557:14;5639:2;5633:9;5713:3;5842:66;5837:3;5830:79;5932:2;5927:3;5923:12;5916:19;;6026:2;6023:1;6018:3;6005:24;6052:2;6043:12;;;6084:18;;;6116:12;;;;6159:21;;;6283:15;;;;6194:12;6283:15;;;6266:33;;6453:6;6441:19;;6125:2;6474:12;;;6520:28;;;6562:12;;;;6602:29;;;;6709:15;6412:2;6403:12;;;6692:33;;;;6745:26;;-1:-1:-1;6745:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6692:33;;-1:-1:-1;;;;;;6745:35:0;;;:26;;;;;;6125:2;;-1:-1:-1;;6745:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6745:35:0;;6737:51;;;;;-1:-1:-1;;;6737:51:0;;;;;;;;;;;;-1:-1:-1;;;6737:51:0;;;;;;;;;;;;;;;6794:31;6803:5;6810:7;6819:5;6794:8;:31::i;:::-;5213:1617;;;;;;;;;;:::o;2251:139::-;-1:-1:-1;;;;;2356:20:0;;;2334:7;2356:20;;;:11;:20;;;;;;;;:29;;;;;;;;;;;;;2251:139::o;3060:171::-;-1:-1:-1;;;;;3149:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:35;;;3195:31;;;;;;;;;;;;;;;;;3060:171;;;:::o;3308:523::-;-1:-1:-1;;;;;3429:15:0;;3399:4;3429:15;;;;;;;;;;;3458:16;;;;3450:36;;;;;-1:-1:-1;;;3450:36:0;;;;;;;;;;;;-1:-1:-1;;;3450:36:0;;;;;;;;;;;;;;;3505:2;-1:-1:-1;;;;;3497:10:0;:4;-1:-1:-1;;;;;3497:10:0;;3493:279;;-1:-1:-1;;;;;3517:15:0;;;:9;:15;;;;;;;;;;;3535;;;;3517:33;;;3568:13;;;;;;;3610:15;;;3698:20;;;3690:41;;;;;-1:-1:-1;;;3690:41:0;;;;;;;;;;;;-1:-1:-1;;;3690:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3739:13:0;;:9;:13;;;;;;;;;;:26;3493:279;3798:2;-1:-1:-1;;;;;3783:25:0;3792:4;-1:-1:-1;;;;;3783:25:0;;3802:5;3783:25;;;;;;;;;;;;;;;;;;-1:-1:-1;3822:4:0;;3308:523;-1:-1:-1;;;;3308:523:0:o;6007:1091:1:-;6095:17;;:21;6091:1003;;6126:12;6196:2;6184:10;6180:19;6242:7;6236:14;6231:3;6227:24;6549:2;6540:7;6536:16;6530:23;6526:2;6522:32;6579:9;6571:6;6568:21;6565:2;;;6760:1;6757;6750:12;6565:2;6261:523;6917:10;6904:11;6901:27;6888:10;6875:11;6872:27;6868:62;6865:2;;;6961:10;6955:17;7034:1;7031;7025:4;7016:7;7013:1;7006:5;6999;6994:42;6983:53;;6931:115;6865:2;6155:899;;7069:7;7061:26;;;;;-1:-1:-1;;;7061:26:1;;;;;;;;;;;;-1:-1:-1;;;7061:26:1;;;;;;;;;;;;;;;6091:1003;;6007:1091;;:::o;6910:219:0:-;6984:12;-1:-1:-1;;;;;7012:19:0;;7026:4;7012:19;;7004:28;;;;;;7039:12;7053:16;7073:2;-1:-1:-1;;;;;7073:7:0;7081:4;;7073:13;;;;;;;;;;;;;;-1:-1:-1;7073:13:0;;-1:-1:-1;7073:13:0;;-1:-1:-1;;7073:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7038:48;;;;7100:7;7092:16;;;;;5341:258:1;5476:44;;;-1:-1:-1;;;;;5476:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5476:44:1;-1:-1:-1;;;5476:44:1;;;5465:56;;;;5414:7;;;;;;5465:10;;;5476:44;;5465:56;;;;;;5476:44;5465:56;;;;;;;;;;-1:-1:-1;;5465:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5429:92;;;;5535:7;5527:27;;;;;-1:-1:-1;;;5527:27:1;;;;;;;;;;;;-1:-1:-1;;;5527:27:1;;;;;;;;;;;;;;;5578:4;5567:27;;;;;;;;;;;;;;;-1:-1:-1;5567:27:1;;5341:258;-1:-1:-1;;;;;5341:258:1:o;3465:267::-;3594:48;;;-1:-1:-1;;;;;3594:48:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3594:48:1;-1:-1:-1;;;3594:48:1;;;3583:60;;;;3548:12;;;;3583:10;;;;3594:48;3583:60;;;3594:48;3583:60;;3594:48;3583:60;;;;;;;;;;-1:-1:-1;;3583:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3547:96;;;;3657:7;:57;;;;-1:-1:-1;3669:11:1;;:16;;:44;;;3700:4;3689:24;;;;;;;;;;;;;;;-1:-1:-1;3689:24:1;3669:44;3649:78;;;;;-1:-1:-1;;;3649:78:1;;;;;;;;;;;;-1:-1:-1;;;3649:78:1;;;;;;;;;;;;;;;3465:267;;;;;:::o
Swarm Source
none
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.