Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
NahmiiToken
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 0 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-11-08 */ pragma solidity ^0.4.13; library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } contract MinterRole { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private minters; constructor() internal { _addMinter(msg.sender); } modifier onlyMinter() { require(isMinter(msg.sender)); _; } function isMinter(address account) public view returns (bool) { return minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(msg.sender); } function _addMinter(address account) internal { minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { minters.remove(account); emit MinterRemoved(account); } } library SafeMath { /** * @dev Multiplies two numbers, reverts on 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-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two numbers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0); // Solidity only automatically asserts when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two numbers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two numbers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address owner, address spender ) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * 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 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom( address from, address to, uint256 value ) public returns (bool) { require(value <= _allowed[from][msg.sender]); _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value); _transfer(from, to, value); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance( address spender, uint256 addedValue ) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = ( _allowed[msg.sender][spender].add(addedValue)); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = ( _allowed[msg.sender][spender].sub(subtractedValue)); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(value <= _balances[from]); require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != 0); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != 0); require(value <= _balances[account]); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { require(value <= _allowed[account][msg.sender]); // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted, // this function needs to emit an event with the updated approval. _allowed[account][msg.sender] = _allowed[account][msg.sender].sub( value); _burn(account, value); } } contract ERC20Mintable is ERC20, MinterRole { /** * @dev Function to mint tokens * @param to The address that will receive the minted tokens. * @param value The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address to, uint256 value ) public onlyMinter returns (bool) { _mint(to, value); return true; } } contract RevenueToken is ERC20Mintable { using SafeMath for uint256; bool public mintingDisabled; address[] public holders; mapping(address => bool) public holdersMap; mapping(address => uint256[]) public balances; mapping(address => uint256[]) public balanceBlocks; mapping(address => uint256[]) public balanceBlockNumbers; event DisableMinting(); /** * @notice Disable further minting * @dev This operation can not be undone */ function disableMinting() public onlyMinter { mintingDisabled = true; emit DisableMinting(); } /** * @notice Mint tokens * @param to The address that will receive the minted tokens. * @param value The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address to, uint256 value) public onlyMinter returns (bool) { require(!mintingDisabled); // Call super's mint, including event emission bool minted = super.mint(to, value); if (minted) { // Adjust balance blocks addBalanceBlocks(to); // Add to the token holders list if (!holdersMap[to]) { holdersMap[to] = true; holders.push(to); } } return minted; } /** * @notice Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. * @return A boolean that indicates if the operation was successful. */ function transfer(address to, uint256 value) public returns (bool) { // Call super's transfer, including event emission bool transferred = super.transfer(to, value); if (transferred) { // Adjust balance blocks addBalanceBlocks(msg.sender); addBalanceBlocks(to); // Add to the token holders list if (!holdersMap[to]) { holdersMap[to] = true; holders.push(to); } } return transferred; } /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @dev Beware that to change the approve amount you first have to reduce the addresses' * allowance to zero by calling `approve(spender, 0)` if it is not already 0 to mitigate the race * condition described here: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { // Prevent the update of non-zero allowance require(0 == value || 0 == allowance(msg.sender, spender)); // Call super's approve, including event emission return super.approve(spender, value); } /** * @dev Transfer tokens from one address to another * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred * @return A boolean that indicates if the operation was successful. */ function transferFrom(address from, address to, uint256 value) public returns (bool) { // Call super's transferFrom, including event emission bool transferred = super.transferFrom(from, to, value); if (transferred) { // Adjust balance blocks addBalanceBlocks(from); addBalanceBlocks(to); // Add to the token holders list if (!holdersMap[to]) { holdersMap[to] = true; holders.push(to); } } return transferred; } /** * @notice Calculate the amount of balance blocks, i.e. the area under the curve (AUC) of * balance as function of block number * @dev The AUC is used as weight for the share of revenue that a token holder may claim * @param account The account address for which calculation is done * @param startBlock The start block number considered * @param endBlock The end block number considered * @return The calculated AUC */ function balanceBlocksIn(address account, uint256 startBlock, uint256 endBlock) public view returns (uint256) { require(startBlock < endBlock); require(account != address(0)); if (balanceBlockNumbers[account].length == 0 || endBlock < balanceBlockNumbers[account][0]) return 0; uint256 i = 0; while (i < balanceBlockNumbers[account].length && balanceBlockNumbers[account][i] < startBlock) i++; uint256 r; if (i >= balanceBlockNumbers[account].length) r = balances[account][balanceBlockNumbers[account].length - 1].mul(endBlock.sub(startBlock)); else { uint256 l = (i == 0) ? startBlock : balanceBlockNumbers[account][i - 1]; uint256 h = balanceBlockNumbers[account][i]; if (h > endBlock) h = endBlock; h = h.sub(startBlock); r = (h == 0) ? 0 : balanceBlocks[account][i].mul(h).div(balanceBlockNumbers[account][i].sub(l)); i++; while (i < balanceBlockNumbers[account].length && balanceBlockNumbers[account][i] < endBlock) { r = r.add(balanceBlocks[account][i]); i++; } if (i >= balanceBlockNumbers[account].length) r = r.add( balances[account][balanceBlockNumbers[account].length - 1].mul( endBlock.sub(balanceBlockNumbers[account][balanceBlockNumbers[account].length - 1]) ) ); else if (balanceBlockNumbers[account][i - 1] < endBlock) r = r.add( balanceBlocks[account][i].mul( endBlock.sub(balanceBlockNumbers[account][i - 1]) ).div( balanceBlockNumbers[account][i].sub(balanceBlockNumbers[account][i - 1]) ) ); } return r; } /** * @notice Get the count of balance updates for the given account * @return The count of balance updates */ function balanceUpdatesCount(address account) public view returns (uint256) { return balanceBlocks[account].length; } /** * @notice Get the count of holders * @return The count of holders */ function holdersCount() public view returns (uint256) { return holders.length; } /** * @notice Get the subset of holders (optionally with positive balance only) in the given 0 based index range * @param low The lower inclusive index * @param up The upper inclusive index * @param posOnly List only positive balance holders * @return The subset of positive balance registered holders in the given range */ function holdersByIndices(uint256 low, uint256 up, bool posOnly) public view returns (address[]) { require(low <= up); up = up > holders.length - 1 ? holders.length - 1 : up; uint256 length = 0; if (posOnly) { for (uint256 i = low; i <= up; i++) if (0 < balanceOf(holders[i])) length++; } else length = up - low + 1; address[] memory _holders = new address[](length); uint256 j = 0; for (i = low; i <= up; i++) if (!posOnly || 0 < balanceOf(holders[i])) _holders[j++] = holders[i]; return _holders; } function addBalanceBlocks(address account) private { uint256 length = balanceBlockNumbers[account].length; balances[account].push(balanceOf(account)); if (0 < length) balanceBlocks[account].push( balances[account][length - 1].mul( block.number.sub(balanceBlockNumbers[account][length - 1]) ) ); else balanceBlocks[account].push(0); balanceBlockNumbers[account].push(block.number); } } contract NahmiiToken is RevenueToken { string public name = "Nahmii"; string public symbol = "NII"; uint8 public constant decimals = 15; event SetName(string name); event SetSymbol(string symbol); /** * @dev Set the name of the token * @param _name The new token name */ function setName(string _name) public onlyMinter { name = _name; emit SetName(name); } /** * @dev Set the symbol of the token * @param _symbol The new token symbol */ function setSymbol(string _symbol) public onlyMinter { symbol = _symbol; emit SetSymbol(_symbol); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"holdersMap","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"balanceBlockNumbers","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mintingDisabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"holders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"holdersCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"balanceBlocks","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"},{"name":"startBlock","type":"uint256"},{"name":"endBlock","type":"uint256"}],"name":"balanceBlocksIn","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceUpdatesCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_symbol","type":"string"}],"name":"setSymbol","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"low","type":"uint256"},{"name":"up","type":"uint256"},{"name":"posOnly","type":"bool"}],"name":"holdersByIndices","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"}],"name":"SetName","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"symbol","type":"string"}],"name":"SetSymbol","type":"event"},{"anonymous":false,"inputs":[],"name":"DisableMinting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60c0604052600660808190527f4e61686d6969000000000000000000000000000000000000000000000000000060a09081526200004091600a919062000187565b506040805180820190915260038082527f4e4949000000000000000000000000000000000000000000000000000000000060209092019182526200008791600b9162000187565b506200009c33640100000000620000a2810204565b6200022c565b620000bd600382640100000000620018cc620000f482021704565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b600160a060020a03811615156200010a57600080fd5b6200011f82826401000000006200014f810204565b156200012a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000600160a060020a03821615156200016757600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001ca57805160ff1916838001178555620001fa565b82800160010185558215620001fa579182015b82811115620001fa578251825591602001919060010190620001dd565b50620002089291506200020c565b5090565b6200022991905b8082111562000208576000815560010162000213565b90565b611a8a806200023c6000396000f3006080604052600436106101505763ffffffff60e060020a60003504166306fdde038114610155578063095ea7b3146101df5780630e5cb57c14610217578063133a49001461023857806318160ddd1461026e57806321afb5ee1461028357806323b872dd146102985780632a11ced0146102c2578063313ce567146102f6578063395093511461032157806340c10f19146103455780636b4ed21b1461036957806370a082311461037e57806378c27d7e1461039f5780637e5cd5c1146103c357806395d89b41146103da578063983b2d56146103ef5780639865027514610410578063a457c2d714610425578063a52079ea14610449578063a9059cbb14610470578063aa271e1a14610494578063b46801c2146104b5578063b84c8246146104d6578063c47f00271461052f578063cb99045714610588578063cbf1304d146105f8578063dd62ed3e1461061c575b600080fd5b34801561016157600080fd5b5061016a610643565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a457818101518382015260200161018c565b50505050905090810190601f1680156101d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101eb57600080fd5b50610203600160a060020a03600435166024356106d1565b604080519115158252519081900360200190f35b34801561022357600080fd5b50610203600160a060020a0360043516610703565b34801561024457600080fd5b5061025c600160a060020a0360043516602435610718565b60408051918252519081900360200190f35b34801561027a57600080fd5b5061025c610748565b34801561028f57600080fd5b5061020361074f565b3480156102a457600080fd5b50610203600160a060020a0360043581169060243516604435610758565b3480156102ce57600080fd5b506102da6004356107fe565b60408051600160a060020a039092168252519081900360200190f35b34801561030257600080fd5b5061030b610826565b6040805160ff9092168252519081900360200190f35b34801561032d57600080fd5b50610203600160a060020a036004351660243561082b565b34801561035157600080fd5b50610203600160a060020a03600435166024356108c9565b34801561037557600080fd5b5061025c61098c565b34801561038a57600080fd5b5061025c600160a060020a0360043516610992565b3480156103ab57600080fd5b5061025c600160a060020a03600435166024356109ad565b3480156103cf57600080fd5b506103d86109c8565b005b3480156103e657600080fd5b5061016a610a14565b3480156103fb57600080fd5b506103d8600160a060020a0360043516610a6f565b34801561041c57600080fd5b506103d8610a8f565b34801561043157600080fd5b50610203600160a060020a0360043516602435610a9a565b34801561045557600080fd5b5061025c600160a060020a0360043516602435604435610ae5565b34801561047c57600080fd5b50610203600160a060020a0360043516602435611002565b3480156104a057600080fd5b50610203600160a060020a0360043516611029565b3480156104c157600080fd5b5061025c600160a060020a0360043516611042565b3480156104e257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d894369492936024939284019190819084018382808284375094975061105d9650505050505050565b34801561053b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d89436949293602493928401919081908401838280828437509497506111219650505050505050565b34801561059457600080fd5b506105a860043560243560443515156111f9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105e45781810151838201526020016105cc565b505050509050019250505060405180910390f35b34801561060457600080fd5b5061025c600160a060020a0360043516602435611357565b34801561062857600080fd5b5061025c600160a060020a0360043581169060243516611372565b600a805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60008115806106e757506106e53384611372565b155b15156106f257600080fd5b6106fc838361139d565b9392505050565b60066020526000908152604090205460ff1681565b60096020528160005260406000208181548110151561073357fe5b90600052602060002001600091509150505481565b6002545b90565b60045460ff1681565b600080610766858585611409565b905080156107f657610777856114a6565b610780846114a6565b600160a060020a03841660009081526006602052604090205460ff1615156107f657600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b949350505050565b600580548290811061080c57fe5b600091825260209091200154600160a060020a0316905081565b600f81565b6000600160a060020a038316151561084257600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6115dd16565b336000818152600160209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020611a3f833981519152929081900390910190a350600192915050565b6000806108d533611029565b15156108e057600080fd5b60045460ff16156108f057600080fd5b6108fa84846115ef565b905080156109815761090b846114a6565b600160a060020a03841660009081526006602052604090205460ff16151561098157600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b8091505b5092915050565b60055490565b600160a060020a031660009081526020819052604090205490565b60086020528160005260406000208181548110151561073357fe5b6109d133611029565b15156109dc57600080fd5b6004805460ff191660011790556040517f2d86df2e5d84b22790939c34e14094e95a52090fbf291a1fa69b9b4e837c635390600090a1565b600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b610a7833611029565b1515610a8357600080fd5b610a8c81611618565b50565b610a9833611660565b565b6000600160a060020a0383161515610ab157600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6116a816565b600080808080858710610af757600080fd5b600160a060020a0388161515610b0c57600080fd5b600160a060020a0388166000908152600960205260409020541580610b5f5750600160a060020a038816600090815260096020526040812080549091908110610b5157fe5b906000526020600020015486105b15610b6d5760009450610ff7565b600093505b600160a060020a03881660009081526009602052604090205484108015610bc85750600160a060020a0388166000908152600960205260409020805488919086908110610bbb57fe5b9060005260206000200154105b15610bd857600190930192610b72565b600160a060020a0388166000908152600960205260409020548410610c5f57610c58610c0a878963ffffffff6116a816565b600160a060020a038a1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b90600052602060002001546116bf90919063ffffffff16565b9250610ff3565b8315610c9d57600160a060020a038816600090815260096020526040902080546000198601908110610c8d57fe5b9060005260206000200154610c9f565b865b600160a060020a038916600090815260096020526040902080549193509085908110610cc757fe5b9060005260206000200154905085811115610cdf5750845b610cef818863ffffffff6116a816565b90508015610d7a57600160a060020a03881660009081526009602052604090208054610d7591610d3f9185919088908110610d2657fe5b90600052602060002001546116a890919063ffffffff16565b600160a060020a038a1660009081526008602052604090208054610d6991859189908110610c3f57fe5b9063ffffffff6116ed16565b610d7d565b60005b60019094019392505b600160a060020a03881660009081526009602052604090205484108015610ddc5750600160a060020a0388166000908152600960205260409020805487919086908110610dcf57fe5b9060005260206000200154105b15610e3157600160a060020a03881660009081526008602052604090208054610e24919086908110610e0a57fe5b9060005260206000200154846115dd90919063ffffffff16565b6001909401939250610d86565b600160a060020a0388166000908152600960205260409020548410610ee157600160a060020a03881660009081526009602052604090208054610c5891610ed491610e9f91906000198101908110610e8557fe5b9060005260206000200154896116a890919063ffffffff16565b600160a060020a038b1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b849063ffffffff6115dd16565b600160a060020a038816600090815260096020526040902080548791906000198701908110610f0c57fe5b90600052602060002001541015610ff357600160a060020a03881660009081526009602052604090208054610ff091610ed491610f8291906000198901908110610f5257fe5b6000918252602080832090910154600160a060020a038e16835260099091526040909120805489908110610d2657fe5b600160a060020a038b1660009081526009602052604090208054610d6991610fcc916000198b01908110610fb257fe5b90600052602060002001548b6116a890919063ffffffff16565b600160a060020a038d16600090815260086020526040902080548a908110610c3f57fe5b92505b8294505b505050509392505050565b60008061100f8484611710565b9050801561098157611020336114a6565b61090b846114a6565b600061103c60038363ffffffff61171d16565b92915050565b600160a060020a031660009081526008602052604090205490565b61106633611029565b151561107157600080fd5b805161108490600b906020840190611966565b507fadf3ae8bd543b3007d464f15cb8ea1db3f44e84d41d203164f40b95e27558ac6816040518080602001828103825283818151815260200191508051906020019080838360005b838110156110e45781810151838201526020016110cc565b50505050905090810190601f1680156111115780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b61112a33611029565b151561113557600080fd5b805161114890600a906020840190611966565b50604080516020808252600a8054600260001961010060018416150201909116049183018290527f4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf02939092918291820190849080156111e85780601f106111bd576101008083540402835291602001916111e8565b820191906000526020600020905b8154815290600101906020018083116111cb57829003601f168201915b50509250505060405180910390a150565b606060008082818688111561120d57600080fd5b6005546000190187116112205786611228565b600554600019015b965060009350851561128a578792505b8683116112855761126b60058481548110151561125157fe5b600091825260209091200154600160a060020a0316610992565b6000101561127a576001909301925b600190920191611238565b611293565b87870360010193505b836040519080825280602002602001820160405280156112bd578160200160208202803883390190505b509150600090508792505b86831161134c578515806112ed57506112e960058481548110151561125157fe5b6000105b1561134157600580548490811061130057fe5b60009182526020909120015482516001830192600160a060020a03909216918491811061132957fe5b600160a060020a039092166020928302909101909101525b6001909201916112c8565b509695505050505050565b60076020528160005260406000208181548110151561073357fe5b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156113b457600080fd5b336000818152600160209081526040808320600160a060020a0388168085529083529281902086905580518681529051929392600080516020611a3f833981519152929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205482111561143957600080fd5b600160a060020a038416600090815260016020908152604080832033845290915290205461146d908363ffffffff6116a816565b600160a060020a038516600090815260016020908152604080832033845290915290205561149c848484611754565b5060019392505050565b600160a060020a03811660009081526009602090815260408083205460079092529091206114d383610992565b8154600181018355600092835260208320015581111561158557600160a060020a03821660009081526008602090815260408083206009909252909120805461156a9161154291600019860190811061152857fe5b9060005260206000200154436116a890919063ffffffff16565b600160a060020a038516600090815260076020526040902080546000198601908110610c3f57fe5b815460018101835560009283526020909220909101556115b0565b600160a060020a03821660009081526008602090815260408220805460018101825590835290822001555b50600160a060020a0316600090815260096020908152604082208054600181018255908352912043910155565b60008282018381101561098157600080fd5b60006115fa33611029565b151561160557600080fd5b61160f8383611834565b50600192915050565b61162960038263ffffffff6118cc16565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61167160038263ffffffff61191a16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600080838311156116b857600080fd5b5050900390565b6000808315156116d25760009150610985565b508282028284828115156116e257fe5b041461098157600080fd5b6000808083116116fc57600080fd5b828481151561170757fe5b04949350505050565b600061160f338484611754565b6000600160a060020a038216151561173457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600160a060020a03831660009081526020819052604090205481111561177957600080fd5b600160a060020a038216151561178e57600080fd5b600160a060020a0383166000908152602081905260409020546117b7908263ffffffff6116a816565b600160a060020a0380851660009081526020819052604080822093909355908416815220546117ec908263ffffffff6115dd16565b600160a060020a03808416600081815260208181526040918290209490945580518581529051919392871692600080516020611a1f83398151915292918290030190a3505050565b600160a060020a038216151561184957600080fd5b60025461185c908263ffffffff6115dd16565b600255600160a060020a038216600090815260208190526040902054611888908263ffffffff6115dd16565b600160a060020a038316600081815260208181526040808320949094558351858152935192939192600080516020611a1f8339815191529281900390910190a35050565b600160a060020a03811615156118e157600080fd5b6118eb828261171d565b156118f557600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561192f57600080fd5b611939828261171d565b151561194457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119a757805160ff19168380011785556119d4565b828001600101855582156119d4579182015b828111156119d45782518255916020019190600101906119b9565b506119e09291506119e4565b5090565b61074c91905b808211156119e057600081556001016119ea5600036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a723058202cd93912e324150d5a6bb619c20df1149bc9edea396e270dd8efa4cc5a8393b00029
Deployed Bytecode
0x6080604052600436106101505763ffffffff60e060020a60003504166306fdde038114610155578063095ea7b3146101df5780630e5cb57c14610217578063133a49001461023857806318160ddd1461026e57806321afb5ee1461028357806323b872dd146102985780632a11ced0146102c2578063313ce567146102f6578063395093511461032157806340c10f19146103455780636b4ed21b1461036957806370a082311461037e57806378c27d7e1461039f5780637e5cd5c1146103c357806395d89b41146103da578063983b2d56146103ef5780639865027514610410578063a457c2d714610425578063a52079ea14610449578063a9059cbb14610470578063aa271e1a14610494578063b46801c2146104b5578063b84c8246146104d6578063c47f00271461052f578063cb99045714610588578063cbf1304d146105f8578063dd62ed3e1461061c575b600080fd5b34801561016157600080fd5b5061016a610643565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101a457818101518382015260200161018c565b50505050905090810190601f1680156101d15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101eb57600080fd5b50610203600160a060020a03600435166024356106d1565b604080519115158252519081900360200190f35b34801561022357600080fd5b50610203600160a060020a0360043516610703565b34801561024457600080fd5b5061025c600160a060020a0360043516602435610718565b60408051918252519081900360200190f35b34801561027a57600080fd5b5061025c610748565b34801561028f57600080fd5b5061020361074f565b3480156102a457600080fd5b50610203600160a060020a0360043581169060243516604435610758565b3480156102ce57600080fd5b506102da6004356107fe565b60408051600160a060020a039092168252519081900360200190f35b34801561030257600080fd5b5061030b610826565b6040805160ff9092168252519081900360200190f35b34801561032d57600080fd5b50610203600160a060020a036004351660243561082b565b34801561035157600080fd5b50610203600160a060020a03600435166024356108c9565b34801561037557600080fd5b5061025c61098c565b34801561038a57600080fd5b5061025c600160a060020a0360043516610992565b3480156103ab57600080fd5b5061025c600160a060020a03600435166024356109ad565b3480156103cf57600080fd5b506103d86109c8565b005b3480156103e657600080fd5b5061016a610a14565b3480156103fb57600080fd5b506103d8600160a060020a0360043516610a6f565b34801561041c57600080fd5b506103d8610a8f565b34801561043157600080fd5b50610203600160a060020a0360043516602435610a9a565b34801561045557600080fd5b5061025c600160a060020a0360043516602435604435610ae5565b34801561047c57600080fd5b50610203600160a060020a0360043516602435611002565b3480156104a057600080fd5b50610203600160a060020a0360043516611029565b3480156104c157600080fd5b5061025c600160a060020a0360043516611042565b3480156104e257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d894369492936024939284019190819084018382808284375094975061105d9650505050505050565b34801561053b57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103d89436949293602493928401919081908401838280828437509497506111219650505050505050565b34801561059457600080fd5b506105a860043560243560443515156111f9565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105e45781810151838201526020016105cc565b505050509050019250505060405180910390f35b34801561060457600080fd5b5061025c600160a060020a0360043516602435611357565b34801561062857600080fd5b5061025c600160a060020a0360043581169060243516611372565b600a805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b820191906000526020600020905b8154815290600101906020018083116106ac57829003601f168201915b505050505081565b60008115806106e757506106e53384611372565b155b15156106f257600080fd5b6106fc838361139d565b9392505050565b60066020526000908152604090205460ff1681565b60096020528160005260406000208181548110151561073357fe5b90600052602060002001600091509150505481565b6002545b90565b60045460ff1681565b600080610766858585611409565b905080156107f657610777856114a6565b610780846114a6565b600160a060020a03841660009081526006602052604090205460ff1615156107f657600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b949350505050565b600580548290811061080c57fe5b600091825260209091200154600160a060020a0316905081565b600f81565b6000600160a060020a038316151561084257600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6115dd16565b336000818152600160209081526040808320600160a060020a038916808552908352928190208590558051948552519193600080516020611a3f833981519152929081900390910190a350600192915050565b6000806108d533611029565b15156108e057600080fd5b60045460ff16156108f057600080fd5b6108fa84846115ef565b905080156109815761090b846114a6565b600160a060020a03841660009081526006602052604090205460ff16151561098157600160a060020a0384166000818152600660205260408120805460ff191660019081179091556005805491820181559091526000805160206119ff833981519152018054600160a060020a03191690911790555b8091505b5092915050565b60055490565b600160a060020a031660009081526020819052604090205490565b60086020528160005260406000208181548110151561073357fe5b6109d133611029565b15156109dc57600080fd5b6004805460ff191660011790556040517f2d86df2e5d84b22790939c34e14094e95a52090fbf291a1fa69b9b4e837c635390600090a1565b600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106c95780601f1061069e576101008083540402835291602001916106c9565b610a7833611029565b1515610a8357600080fd5b610a8c81611618565b50565b610a9833611660565b565b6000600160a060020a0383161515610ab157600080fd5b336000908152600160209081526040808320600160a060020a0387168452909152902054610876908363ffffffff6116a816565b600080808080858710610af757600080fd5b600160a060020a0388161515610b0c57600080fd5b600160a060020a0388166000908152600960205260409020541580610b5f5750600160a060020a038816600090815260096020526040812080549091908110610b5157fe5b906000526020600020015486105b15610b6d5760009450610ff7565b600093505b600160a060020a03881660009081526009602052604090205484108015610bc85750600160a060020a0388166000908152600960205260409020805488919086908110610bbb57fe5b9060005260206000200154105b15610bd857600190930192610b72565b600160a060020a0388166000908152600960205260409020548410610c5f57610c58610c0a878963ffffffff6116a816565b600160a060020a038a1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b90600052602060002001546116bf90919063ffffffff16565b9250610ff3565b8315610c9d57600160a060020a038816600090815260096020526040902080546000198601908110610c8d57fe5b9060005260206000200154610c9f565b865b600160a060020a038916600090815260096020526040902080549193509085908110610cc757fe5b9060005260206000200154905085811115610cdf5750845b610cef818863ffffffff6116a816565b90508015610d7a57600160a060020a03881660009081526009602052604090208054610d7591610d3f9185919088908110610d2657fe5b90600052602060002001546116a890919063ffffffff16565b600160a060020a038a1660009081526008602052604090208054610d6991859189908110610c3f57fe5b9063ffffffff6116ed16565b610d7d565b60005b60019094019392505b600160a060020a03881660009081526009602052604090205484108015610ddc5750600160a060020a0388166000908152600960205260409020805487919086908110610dcf57fe5b9060005260206000200154105b15610e3157600160a060020a03881660009081526008602052604090208054610e24919086908110610e0a57fe5b9060005260206000200154846115dd90919063ffffffff16565b6001909401939250610d86565b600160a060020a0388166000908152600960205260409020548410610ee157600160a060020a03881660009081526009602052604090208054610c5891610ed491610e9f91906000198101908110610e8557fe5b9060005260206000200154896116a890919063ffffffff16565b600160a060020a038b1660009081526007602090815260408083206009909252909120548154600019909101908110610c3f57fe5b849063ffffffff6115dd16565b600160a060020a038816600090815260096020526040902080548791906000198701908110610f0c57fe5b90600052602060002001541015610ff357600160a060020a03881660009081526009602052604090208054610ff091610ed491610f8291906000198901908110610f5257fe5b6000918252602080832090910154600160a060020a038e16835260099091526040909120805489908110610d2657fe5b600160a060020a038b1660009081526009602052604090208054610d6991610fcc916000198b01908110610fb257fe5b90600052602060002001548b6116a890919063ffffffff16565b600160a060020a038d16600090815260086020526040902080548a908110610c3f57fe5b92505b8294505b505050509392505050565b60008061100f8484611710565b9050801561098157611020336114a6565b61090b846114a6565b600061103c60038363ffffffff61171d16565b92915050565b600160a060020a031660009081526008602052604090205490565b61106633611029565b151561107157600080fd5b805161108490600b906020840190611966565b507fadf3ae8bd543b3007d464f15cb8ea1db3f44e84d41d203164f40b95e27558ac6816040518080602001828103825283818151815260200191508051906020019080838360005b838110156110e45781810151838201526020016110cc565b50505050905090810190601f1680156111115780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b61112a33611029565b151561113557600080fd5b805161114890600a906020840190611966565b50604080516020808252600a8054600260001961010060018416150201909116049183018290527f4df9dcd34ae35f40f2c756fd8ac83210ed0b76d065543ee73d868aec7c7fcf02939092918291820190849080156111e85780601f106111bd576101008083540402835291602001916111e8565b820191906000526020600020905b8154815290600101906020018083116111cb57829003601f168201915b50509250505060405180910390a150565b606060008082818688111561120d57600080fd5b6005546000190187116112205786611228565b600554600019015b965060009350851561128a578792505b8683116112855761126b60058481548110151561125157fe5b600091825260209091200154600160a060020a0316610992565b6000101561127a576001909301925b600190920191611238565b611293565b87870360010193505b836040519080825280602002602001820160405280156112bd578160200160208202803883390190505b509150600090508792505b86831161134c578515806112ed57506112e960058481548110151561125157fe5b6000105b1561134157600580548490811061130057fe5b60009182526020909120015482516001830192600160a060020a03909216918491811061132957fe5b600160a060020a039092166020928302909101909101525b6001909201916112c8565b509695505050505050565b60076020528160005260406000208181548110151561073357fe5b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b6000600160a060020a03831615156113b457600080fd5b336000818152600160209081526040808320600160a060020a0388168085529083529281902086905580518681529051929392600080516020611a3f833981519152929181900390910190a350600192915050565b600160a060020a038316600090815260016020908152604080832033845290915281205482111561143957600080fd5b600160a060020a038416600090815260016020908152604080832033845290915290205461146d908363ffffffff6116a816565b600160a060020a038516600090815260016020908152604080832033845290915290205561149c848484611754565b5060019392505050565b600160a060020a03811660009081526009602090815260408083205460079092529091206114d383610992565b8154600181018355600092835260208320015581111561158557600160a060020a03821660009081526008602090815260408083206009909252909120805461156a9161154291600019860190811061152857fe5b9060005260206000200154436116a890919063ffffffff16565b600160a060020a038516600090815260076020526040902080546000198601908110610c3f57fe5b815460018101835560009283526020909220909101556115b0565b600160a060020a03821660009081526008602090815260408220805460018101825590835290822001555b50600160a060020a0316600090815260096020908152604082208054600181018255908352912043910155565b60008282018381101561098157600080fd5b60006115fa33611029565b151561160557600080fd5b61160f8383611834565b50600192915050565b61162960038263ffffffff6118cc16565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61167160038263ffffffff61191a16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600080838311156116b857600080fd5b5050900390565b6000808315156116d25760009150610985565b508282028284828115156116e257fe5b041461098157600080fd5b6000808083116116fc57600080fd5b828481151561170757fe5b04949350505050565b600061160f338484611754565b6000600160a060020a038216151561173457600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b600160a060020a03831660009081526020819052604090205481111561177957600080fd5b600160a060020a038216151561178e57600080fd5b600160a060020a0383166000908152602081905260409020546117b7908263ffffffff6116a816565b600160a060020a0380851660009081526020819052604080822093909355908416815220546117ec908263ffffffff6115dd16565b600160a060020a03808416600081815260208181526040918290209490945580518581529051919392871692600080516020611a1f83398151915292918290030190a3505050565b600160a060020a038216151561184957600080fd5b60025461185c908263ffffffff6115dd16565b600255600160a060020a038216600090815260208190526040902054611888908263ffffffff6115dd16565b600160a060020a038316600081815260208181526040808320949094558351858152935192939192600080516020611a1f8339815191529281900390910190a35050565b600160a060020a03811615156118e157600080fd5b6118eb828261171d565b156118f557600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561192f57600080fd5b611939828261171d565b151561194457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106119a757805160ff19168380011785556119d4565b828001600101855582156119d4579182015b828111156119d45782518255916020019190600101906119b9565b506119e09291506119e4565b5090565b61074c91905b808211156119e057600081556001016119ea5600036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a165627a7a723058202cd93912e324150d5a6bb619c20df1149bc9edea396e270dd8efa4cc5a8393b00029
Swarm Source
bzzr://2cd93912e324150d5a6bb619c20df1149bc9edea396e270dd8efa4cc5a8393b0
Loading...
Loading
Loading...
Loading
OVERVIEW
Nahmii token contract has migrated to 0x7c8155909cd385F120A56eF90728dD50F9CcbE52.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.