Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 284 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer Child | 6907572 | 2631 days ago | IN | 0 ETH | 0.00044095 | ||||
| Transfer Child | 6907530 | 2631 days ago | IN | 0 ETH | 0.00493425 | ||||
| Transfer Child | 6907505 | 2631 days ago | IN | 0 ETH | 0.00484416 | ||||
| Transfer Child | 6907503 | 2631 days ago | IN | 0 ETH | 0.00484416 | ||||
| Transfer Child | 6907499 | 2631 days ago | IN | 0 ETH | 0.0048505 | ||||
| Update List | 6906735 | 2631 days ago | IN | 0 ETH | 0.00024691 | ||||
| Finalize Mint | 6906149 | 2631 days ago | IN | 0 ETH | 0.00105059 | ||||
| Finalize Mint | 6906117 | 2631 days ago | IN | 0 ETH | 0.0010962 | ||||
| Request Mint | 6904675 | 2631 days ago | IN | 0 ETH | 0.0028346 | ||||
| Request Mint | 6904636 | 2631 days ago | IN | 0 ETH | 0.00252846 | ||||
| Update List | 6889938 | 2634 days ago | IN | 0 ETH | 0.00029591 | ||||
| Finalize Mint | 6889475 | 2634 days ago | IN | 0 ETH | 0.00108743 | ||||
| Finalize Mint | 6889432 | 2634 days ago | IN | 0 ETH | 0.00102165 | ||||
| Finalize Mint | 6889018 | 2634 days ago | IN | 0 ETH | 0.0010085 | ||||
| Finalize Mint | 6888978 | 2634 days ago | IN | 0 ETH | 0.0010962 | ||||
| Request Mint | 6888005 | 2634 days ago | IN | 0 ETH | 0.0028346 | ||||
| Request Mint | 6887951 | 2634 days ago | IN | 0 ETH | 0.0028346 | ||||
| Request Mint | 6887545 | 2634 days ago | IN | 0 ETH | 0.00255989 | ||||
| Request Mint | 6887505 | 2634 days ago | IN | 0 ETH | 0.00256587 | ||||
| Update List | 6883890 | 2635 days ago | IN | 0 ETH | 0.00016512 | ||||
| Finalize Mint | 6882901 | 2635 days ago | IN | 0 ETH | 0.0010962 | ||||
| Request Mint | 6881459 | 2635 days ago | IN | 0 ETH | 0.00253836 | ||||
| Update List | 6880581 | 2635 days ago | IN | 0 ETH | 0.00029629 | ||||
| Update List | 6880011 | 2636 days ago | IN | 0 ETH | 0.00030322 | ||||
| Finalize Mint | 6877052 | 2636 days ago | IN | 0 ETH | 0.00127159 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
|||
|---|---|---|---|---|---|---|---|---|
| Transfer Ownersh... | 6907572 | 2631 days ago | 0 ETH | |||||
| Transfer Ownersh... | 6907530 | 2631 days ago | 0 ETH | |||||
| Transfer Ownersh... | 6907505 | 2631 days ago | 0 ETH | |||||
| Transfer Ownersh... | 6907503 | 2631 days ago | 0 ETH | |||||
| Transfer Ownersh... | 6907499 | 2631 days ago | 0 ETH | |||||
| Change List | 6906735 | 2631 days ago | 0 ETH | |||||
| Mint | 6906149 | 2631 days ago | 0 ETH | |||||
| Mint | 6906117 | 2631 days ago | 0 ETH | |||||
| Change List | 6889938 | 2634 days ago | 0 ETH | |||||
| Mint | 6889475 | 2634 days ago | 0 ETH | |||||
| Mint | 6889432 | 2634 days ago | 0 ETH | |||||
| Mint | 6889018 | 2634 days ago | 0 ETH | |||||
| Mint | 6888978 | 2634 days ago | 0 ETH | |||||
| Change List | 6883890 | 2635 days ago | 0 ETH | |||||
| Mint | 6882901 | 2635 days ago | 0 ETH | |||||
| Change List | 6880581 | 2635 days ago | 0 ETH | |||||
| Change List | 6880011 | 2636 days ago | 0 ETH | |||||
| Mint | 6877052 | 2636 days ago | 0 ETH | |||||
| Mint | 6876803 | 2636 days ago | 0 ETH | |||||
| Change List | 6876580 | 2636 days ago | 0 ETH | |||||
| Change List | 6872198 | 2637 days ago | 0 ETH | |||||
| Change List | 6871118 | 2637 days ago | 0 ETH | |||||
| Change List | 6870914 | 2637 days ago | 0 ETH | |||||
| Mint | 6870708 | 2637 days ago | 0 ETH | |||||
| Mint | 6870138 | 2637 days ago | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TimeLockedController
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-11-17
*/
pragma solidity ^0.4.18;
contract DelegateERC20 {
function delegateTotalSupply() public view returns (uint256);
function delegateBalanceOf(address who) public view returns (uint256);
function delegateTransfer(address to, uint256 value, address origSender) public returns (bool);
function delegateAllowance(address owner, address spender) public view returns (uint256);
function delegateTransferFrom(address from, address to, uint256 value, address origSender) public returns (bool);
function delegateApprove(address spender, uint256 value, address origSender) public returns (bool);
function delegateIncreaseApproval(address spender, uint addedValue, address origSender) public returns (bool);
function delegateDecreaseApproval(address spender, uint subtractedValue, address origSender) public returns (bool);
}
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws 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 Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender
* account.
*/
function Ownable() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
contract Pausable is Ownable {
event Pause();
event Unpause();
bool public paused = false;
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*/
modifier whenNotPaused() {
require(!paused);
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*/
modifier whenPaused() {
require(paused);
_;
}
/**
* @dev called by the owner to pause, triggers stopped state
*/
function pause() onlyOwner whenNotPaused public {
paused = true;
Pause();
}
/**
* @dev called by the owner to unpause, returns to normal state
*/
function unpause() onlyOwner whenPaused public {
paused = false;
Unpause();
}
}
contract CanReclaimToken is Ownable {
using SafeERC20 for ERC20Basic;
/**
* @dev Reclaim all ERC20Basic compatible tokens
* @param token ERC20Basic The address of the token contract
*/
function reclaimToken(ERC20Basic token) external onlyOwner {
uint256 balance = token.balanceOf(this);
token.safeTransfer(owner, balance);
}
}
contract Claimable is Ownable {
address public pendingOwner;
/**
* @dev Modifier throws if called by any account other than the pendingOwner.
*/
modifier onlyPendingOwner() {
require(msg.sender == pendingOwner);
_;
}
/**
* @dev Allows the current owner to set the pendingOwner address.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) onlyOwner public {
pendingOwner = newOwner;
}
/**
* @dev Allows the pendingOwner address to finalize the transfer.
*/
function claimOwnership() onlyPendingOwner public {
OwnershipTransferred(owner, pendingOwner);
owner = pendingOwner;
pendingOwner = address(0);
}
}
contract AddressList is Claimable {
string public name;
mapping (address => bool) public onList;
function AddressList(string _name, bool nullValue) public {
name = _name;
onList[0x0] = nullValue;
}
event ChangeWhiteList(address indexed to, bool onList);
// Set whether _to is on the list or not. Whether 0x0 is on the list
// or not cannot be set here - it is set once and for all by the constructor.
function changeList(address _to, bool _onList) onlyOwner public {
require(_to != 0x0);
if (onList[_to] != _onList) {
onList[_to] = _onList;
ChangeWhiteList(_to, _onList);
}
}
}
contract NamableAddressList is AddressList {
function NamableAddressList(string _name, bool nullValue)
AddressList(_name, nullValue) public {}
function changeName(string _name) onlyOwner public {
name = _name;
}
}
contract HasNoContracts is Ownable {
/**
* @dev Reclaim ownership of Ownable contracts
* @param contractAddr The address of the Ownable to be reclaimed.
*/
function reclaimContract(address contractAddr) external onlyOwner {
Ownable contractInst = Ownable(contractAddr);
contractInst.transferOwnership(owner);
}
}
contract HasNoEther is Ownable {
/**
* @dev Constructor that rejects incoming Ether
* @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we
* leave out payable, then Solidity will allow inheriting contracts to implement a payable
* constructor. By doing it this way we prevent a payable constructor from working. Alternatively
* we could use assembly to access msg.value.
*/
function HasNoEther() public payable {
require(msg.value == 0);
}
/**
* @dev Disallows direct send by settings a default function without the `payable` flag.
*/
function() external {
}
/**
* @dev Transfer all Ether held by the contract to the owner.
*/
function reclaimEther() external onlyOwner {
assert(owner.send(this.balance));
}
}
contract HasNoTokens is CanReclaimToken {
/**
* @dev Reject all ERC223 compatible tokens
* @param from_ address The address that is transferring the tokens
* @param value_ uint256 the amount of the specified token
* @param data_ Bytes The data passed from the caller.
*/
function tokenFallback(address from_, uint256 value_, bytes data_) external {
from_;
value_;
data_;
revert();
}
}
contract TimeLockedController is HasNoEther, HasNoTokens, Claimable {
using SafeMath for uint256;
// 6 hours, assuming a 15 second blocktime.
// As long as this isn't too far off from reality it doesn't really matter.
uint public constant blocksDelay = 6*60*60/15;
struct MintOperation {
address to;
uint256 amount;
address admin;
uint deferBlock;
}
address public admin;
TrueUSD public trueUSD;
MintOperation[] public mintOperations;
modifier onlyAdminOrOwner() {
require(msg.sender == admin || msg.sender == owner);
_;
}
event MintOperationEvent(address indexed _to, uint256 amount, uint deferBlock, uint opIndex);
event TransferChildEvent(address indexed _child, address indexed _newOwner);
event ReclaimEvent(address indexed other);
event ChangeBurnBoundsEvent(uint newMin, uint newMax);
event ChangeStakingFeesEvent(uint80 _transferFeeNumerator,
uint80 _transferFeeDenominator,
uint80 _mintFeeNumerator,
uint80 _mintFeeDenominator,
uint256 _mintFeeFlat,
uint80 _burnFeeNumerator,
uint80 _burnFeeDenominator,
uint256 _burnFeeFlat);
event ChangeStakerEvent(address newStaker);
event DelegateEvent(DelegateERC20 delegate);
event SetDelegatedFromEvent(address source);
event ChangeTrueUSDEvent(TrueUSD newContract);
event ChangeNameEvent(string name, string symbol);
event AdminshipTransferred(address indexed previousAdmin, address indexed newAdmin);
// admin initiates a request to mint _amount TrueUSD for account _to
function requestMint(address _to, uint256 _amount) public onlyAdminOrOwner {
uint deferBlock = block.number;
if (msg.sender != owner) {
deferBlock = deferBlock.add(blocksDelay);
}
MintOperation memory op = MintOperation(_to, _amount, admin, deferBlock);
MintOperationEvent(_to, _amount, deferBlock, mintOperations.length);
mintOperations.push(op);
}
// after a day, admin finalizes mint request by providing the
// index of the request (visible in the MintOperationEvent accompanying the original request)
function finalizeMint(uint index) public onlyAdminOrOwner {
MintOperation memory op = mintOperations[index];
require(op.admin == admin); //checks that the requester's adminship has not been revoked
require(op.deferBlock <= block.number); //checks that enough time has elapsed
address to = op.to;
uint256 amount = op.amount;
delete mintOperations[index];
trueUSD.mint(to, amount);
}
// Transfer ownership of _child to _newOwner
// Can be used e.g. to upgrade this TimeLockedController contract.
function transferChild(Ownable _child, address _newOwner) public onlyOwner {
TransferChildEvent(_child, _newOwner);
_child.transferOwnership(_newOwner);
}
// Transfer ownership of a contract from trueUSD
// to this TimeLockedController. Can be used e.g. to reclaim balance sheet
// in order to transfer it to an upgraded TrueUSD contract.
function requestReclaim(Ownable other) public onlyOwner {
ReclaimEvent(other);
trueUSD.reclaimContract(other);
}
// Change the minimum and maximum amounts that TrueUSD users can
// burn to newMin and newMax
function changeBurnBounds(uint newMin, uint newMax) public onlyOwner {
ChangeBurnBoundsEvent(newMin, newMax);
trueUSD.changeBurnBounds(newMin, newMax);
}
// Change the transaction fees charged on transfer/mint/burn
function changeStakingFees(uint80 _transferFeeNumerator,
uint80 _transferFeeDenominator,
uint80 _mintFeeNumerator,
uint80 _mintFeeDenominator,
uint256 _mintFeeFlat,
uint80 _burnFeeNumerator,
uint80 _burnFeeDenominator,
uint256 _burnFeeFlat) public onlyOwner {
ChangeStakingFeesEvent(_transferFeeNumerator,
_transferFeeDenominator,
_mintFeeNumerator,
_mintFeeDenominator,
_mintFeeFlat,
_burnFeeNumerator,
_burnFeeDenominator,
_burnFeeFlat);
trueUSD.changeStakingFees(_transferFeeNumerator,
_transferFeeDenominator,
_mintFeeNumerator,
_mintFeeDenominator,
_mintFeeFlat,
_burnFeeNumerator,
_burnFeeDenominator,
_burnFeeFlat);
}
// Change the recipient of staking fees to newStaker
function changeStaker(address newStaker) public onlyOwner {
ChangeStakerEvent(newStaker);
trueUSD.changeStaker(newStaker);
}
// Future ERC20 calls to trueUSD be delegated to _delegate
function delegateToNewContract(DelegateERC20 delegate) public onlyOwner {
DelegateEvent(delegate);
trueUSD.delegateToNewContract(delegate);
}
// Incoming delegate* calls from _source will be accepted by trueUSD
function setDelegatedFrom(address _source) public onlyOwner {
SetDelegatedFromEvent(_source);
trueUSD.setDelegatedFrom(_source);
}
// Update this contract's trueUSD pointer to newContract (e.g. if the
// contract is upgraded)
function setTrueUSD(TrueUSD newContract) public onlyOwner {
ChangeTrueUSDEvent(newContract);
trueUSD = newContract;
}
// change trueUSD's name and symbol
function changeName(string name, string symbol) public onlyOwner {
ChangeNameEvent(name, symbol);
trueUSD.changeName(name, symbol);
}
// Replace the current admin with newAdmin
function transferAdminship(address newAdmin) public onlyOwner {
AdminshipTransferred(admin, newAdmin);
admin = newAdmin;
}
// Swap out TrueUSD's address lists
function setLists(AddressList _canReceiveMintWhiteList, AddressList _canBurnWhiteList, AddressList _blackList, AddressList _noFeesList) onlyOwner public {
trueUSD.setLists(_canReceiveMintWhiteList, _canBurnWhiteList, _blackList, _noFeesList);
}
// Update a whitelist/blacklist
function updateList(address list, address entry, bool flag) public onlyAdminOrOwner {
AddressList(list).changeList(entry, flag);
}
// Rename a whitelist/blacklist
function renameList(address list, string name) public onlyAdminOrOwner {
NamableAddressList(list).changeName(name);
}
// Claim ownership of an arbitrary Claimable contract
function issueClaimOwnership(address _other) public onlyAdminOrOwner {
Claimable other = Claimable(_other);
other.claimOwnership();
}
}
contract NoOwner is HasNoEther, HasNoTokens, HasNoContracts {
}
contract AllowanceSheet is Claimable {
using SafeMath for uint256;
mapping (address => mapping (address => uint256)) public allowanceOf;
function addAllowance(address tokenHolder, address spender, uint256 value) public onlyOwner {
allowanceOf[tokenHolder][spender] = allowanceOf[tokenHolder][spender].add(value);
}
function subAllowance(address tokenHolder, address spender, uint256 value) public onlyOwner {
allowanceOf[tokenHolder][spender] = allowanceOf[tokenHolder][spender].sub(value);
}
function setAllowance(address tokenHolder, address spender, uint256 value) public onlyOwner {
allowanceOf[tokenHolder][spender] = value;
}
}
contract BalanceSheet is Claimable {
using SafeMath for uint256;
mapping (address => uint256) public balanceOf;
function addBalance(address addr, uint256 value) public onlyOwner {
balanceOf[addr] = balanceOf[addr].add(value);
}
function subBalance(address addr, uint256 value) public onlyOwner {
balanceOf[addr] = balanceOf[addr].sub(value);
}
function setBalance(address addr, uint256 value) public onlyOwner {
balanceOf[addr] = value;
}
}
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
contract BasicToken is ERC20Basic, Claimable {
using SafeMath for uint256;
BalanceSheet public balances;
uint256 totalSupply_;
function setBalanceSheet(address sheet) external onlyOwner {
balances = BalanceSheet(sheet);
balances.claimOwnership();
}
/**
* @dev total number of tokens in existence
*/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @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) {
transferAllArgsNoAllowance(msg.sender, _to, _value);
return true;
}
function transferAllArgsNoAllowance(address _from, address _to, uint256 _value) internal {
require(_to != address(0));
require(_from != address(0));
require(_value <= balances.balanceOf(_from));
// SafeMath.sub will throw if there is not enough balance.
balances.subBalance(_from, _value);
balances.addBalance(_to, _value);
Transfer(_from, _to, _value);
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
*/
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances.balanceOf(_owner);
}
}
contract BurnableToken is BasicToken {
event Burn(address indexed burner, uint256 value);
/**
* @dev Burns a specific amount of tokens.
* @param _value The amount of token to be burned.
*/
function burn(uint256 _value) public {
require(_value <= balances.balanceOf(msg.sender));
// no need to require value <= totalSupply, since that would imply the
// sender's balance is greater than the totalSupply, which *should* be an assertion failure
address burner = msg.sender;
balances.subBalance(burner, _value);
totalSupply_ = totalSupply_.sub(_value);
Burn(burner, _value);
Transfer(burner, address(0), _value);
}
}
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeERC20 {
function safeTransfer(ERC20Basic token, address to, uint256 value) internal {
assert(token.transfer(to, value));
}
function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal {
assert(token.transferFrom(from, to, value));
}
function safeApprove(ERC20 token, address spender, uint256 value) internal {
assert(token.approve(spender, value));
}
}
contract StandardToken is ERC20, BasicToken {
AllowanceSheet public allowances;
function setAllowanceSheet(address sheet) external onlyOwner {
allowances = AllowanceSheet(sheet);
allowances.claimOwnership();
}
/**
* @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) {
transferAllArgsYesAllowance(_from, _to, _value, msg.sender);
return true;
}
function transferAllArgsYesAllowance(address _from, address _to, uint256 _value, address spender) internal {
require(_value <= allowances.allowanceOf(_from, spender));
allowances.subAllowance(_from, spender, _value);
transferAllArgsNoAllowance(_from, _to, _value);
}
/**
* @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) {
approveAllArgs(_spender, _value, msg.sender);
return true;
}
function approveAllArgs(address _spender, uint256 _value, address _tokenHolder) internal {
allowances.setAllowance(_tokenHolder, _spender, _value);
Approval(_tokenHolder, _spender, _value);
}
/**
* @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 allowances.allowanceOf(_owner, _spender);
}
/**
* @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 increaseApproval(address _spender, uint _addedValue) public returns (bool) {
increaseApprovalAllArgs(_spender, _addedValue, msg.sender);
return true;
}
function increaseApprovalAllArgs(address _spender, uint _addedValue, address tokenHolder) internal {
allowances.addAllowance(tokenHolder, _spender, _addedValue);
Approval(tokenHolder, _spender, allowances.allowanceOf(tokenHolder, _spender));
}
/**
* @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 decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
decreaseApprovalAllArgs(_spender, _subtractedValue, msg.sender);
return true;
}
function decreaseApprovalAllArgs(address _spender, uint _subtractedValue, address tokenHolder) internal {
uint oldValue = allowances.allowanceOf(tokenHolder, _spender);
if (_subtractedValue > oldValue) {
allowances.setAllowance(tokenHolder, _spender, 0);
} else {
allowances.subAllowance(tokenHolder, _spender, _subtractedValue);
}
Approval(tokenHolder, _spender, allowances.allowanceOf(tokenHolder, _spender));
}
}
contract CanDelegate is StandardToken {
// If this contract needs to be upgraded, the new contract will be stored
// in 'delegate' and any ERC20 calls to this contract will be delegated to that one.
DelegateERC20 public delegate;
event DelegatedTo(address indexed newContract);
// Can undelegate by passing in newContract = address(0)
function delegateToNewContract(DelegateERC20 newContract) public onlyOwner {
delegate = newContract;
DelegatedTo(delegate);
}
// If a delegate has been designated, all ERC20 calls are forwarded to it
function transfer(address to, uint256 value) public returns (bool) {
if (delegate == address(0)) {
return super.transfer(to, value);
} else {
return delegate.delegateTransfer(to, value, msg.sender);
}
}
function transferFrom(address from, address to, uint256 value) public returns (bool) {
if (delegate == address(0)) {
return super.transferFrom(from, to, value);
} else {
return delegate.delegateTransferFrom(from, to, value, msg.sender);
}
}
function balanceOf(address who) public view returns (uint256) {
if (delegate == address(0)) {
return super.balanceOf(who);
} else {
return delegate.delegateBalanceOf(who);
}
}
function approve(address spender, uint256 value) public returns (bool) {
if (delegate == address(0)) {
return super.approve(spender, value);
} else {
return delegate.delegateApprove(spender, value, msg.sender);
}
}
function allowance(address _owner, address spender) public view returns (uint256) {
if (delegate == address(0)) {
return super.allowance(_owner, spender);
} else {
return delegate.delegateAllowance(_owner, spender);
}
}
function totalSupply() public view returns (uint256) {
if (delegate == address(0)) {
return super.totalSupply();
} else {
return delegate.delegateTotalSupply();
}
}
function increaseApproval(address spender, uint addedValue) public returns (bool) {
if (delegate == address(0)) {
return super.increaseApproval(spender, addedValue);
} else {
return delegate.delegateIncreaseApproval(spender, addedValue, msg.sender);
}
}
function decreaseApproval(address spender, uint subtractedValue) public returns (bool) {
if (delegate == address(0)) {
return super.decreaseApproval(spender, subtractedValue);
} else {
return delegate.delegateDecreaseApproval(spender, subtractedValue, msg.sender);
}
}
}
contract StandardDelegate is StandardToken, DelegateERC20 {
address public delegatedFrom;
modifier onlySender(address source) {
require(msg.sender == source);
_;
}
function setDelegatedFrom(address addr) onlyOwner public {
delegatedFrom = addr;
}
// All delegate ERC20 functions are forwarded to corresponding normal functions
function delegateTotalSupply() public view returns (uint256) {
return totalSupply();
}
function delegateBalanceOf(address who) public view returns (uint256) {
return balanceOf(who);
}
function delegateTransfer(address to, uint256 value, address origSender) onlySender(delegatedFrom) public returns (bool) {
transferAllArgsNoAllowance(origSender, to, value);
return true;
}
function delegateAllowance(address owner, address spender) public view returns (uint256) {
return allowance(owner, spender);
}
function delegateTransferFrom(address from, address to, uint256 value, address origSender) onlySender(delegatedFrom) public returns (bool) {
transferAllArgsYesAllowance(from, to, value, origSender);
return true;
}
function delegateApprove(address spender, uint256 value, address origSender) onlySender(delegatedFrom) public returns (bool) {
approveAllArgs(spender, value, origSender);
return true;
}
function delegateIncreaseApproval(address spender, uint addedValue, address origSender) onlySender(delegatedFrom) public returns (bool) {
increaseApprovalAllArgs(spender, addedValue, origSender);
return true;
}
function delegateDecreaseApproval(address spender, uint subtractedValue, address origSender) onlySender(delegatedFrom) public returns (bool) {
decreaseApprovalAllArgs(spender, subtractedValue, origSender);
return true;
}
}
contract PausableToken is StandardToken, Pausable {
function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) {
return super.transfer(_to, _value);
}
function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) {
return super.transferFrom(_from, _to, _value);
}
function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) {
return super.approve(_spender, _value);
}
function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) {
return super.increaseApproval(_spender, _addedValue);
}
function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) {
return super.decreaseApproval(_spender, _subtractedValue);
}
}
contract TrueUSD is StandardDelegate, PausableToken, BurnableToken, NoOwner, CanDelegate {
string public name = "TrueUSD";
string public symbol = "TUSD";
uint8 public constant decimals = 18;
AddressList public canReceiveMintWhiteList;
AddressList public canBurnWhiteList;
AddressList public blackList;
AddressList public noFeesList;
uint256 public burnMin = 10000 * 10**uint256(decimals);
uint256 public burnMax = 20000000 * 10**uint256(decimals);
uint80 public transferFeeNumerator = 7;
uint80 public transferFeeDenominator = 10000;
uint80 public mintFeeNumerator = 0;
uint80 public mintFeeDenominator = 10000;
uint256 public mintFeeFlat = 0;
uint80 public burnFeeNumerator = 0;
uint80 public burnFeeDenominator = 10000;
uint256 public burnFeeFlat = 0;
address public staker;
event ChangeBurnBoundsEvent(uint256 newMin, uint256 newMax);
event Mint(address indexed to, uint256 amount);
event WipedAccount(address indexed account, uint256 balance);
function TrueUSD() public {
totalSupply_ = 0;
staker = msg.sender;
}
function setLists(AddressList _canReceiveMintWhiteList, AddressList _canBurnWhiteList, AddressList _blackList, AddressList _noFeesList) onlyOwner public {
canReceiveMintWhiteList = _canReceiveMintWhiteList;
canBurnWhiteList = _canBurnWhiteList;
blackList = _blackList;
noFeesList = _noFeesList;
}
function changeName(string _name, string _symbol) onlyOwner public {
name = _name;
symbol = _symbol;
}
//Burning functions as withdrawing money from the system. The platform will keep track of who burns coins,
//and will send them back the equivalent amount of money (rounded down to the nearest cent).
function burn(uint256 _value) public {
require(canBurnWhiteList.onList(msg.sender));
require(_value >= burnMin);
require(_value <= burnMax);
uint256 fee = payStakingFee(msg.sender, _value, burnFeeNumerator, burnFeeDenominator, burnFeeFlat, 0x0);
uint256 remaining = _value.sub(fee);
super.burn(remaining);
}
//Create _amount new tokens and transfer them to _to.
//Based on code by OpenZeppelin: https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/MintableToken.sol
function mint(address _to, uint256 _amount) onlyOwner public {
require(canReceiveMintWhiteList.onList(_to));
totalSupply_ = totalSupply_.add(_amount);
balances.addBalance(_to, _amount);
Mint(_to, _amount);
Transfer(address(0), _to, _amount);
payStakingFee(_to, _amount, mintFeeNumerator, mintFeeDenominator, mintFeeFlat, 0x0);
}
//Change the minimum and maximum amount that can be burned at once. Burning
//may be disabled by setting both to 0 (this will not be done under normal
//operation, but we can't add checks to disallow it without losing a lot of
//flexibility since burning could also be as good as disabled
//by setting the minimum extremely high, and we don't want to lock
//in any particular cap for the minimum)
function changeBurnBounds(uint newMin, uint newMax) onlyOwner public {
require(newMin <= newMax);
burnMin = newMin;
burnMax = newMax;
ChangeBurnBoundsEvent(newMin, newMax);
}
// transfer and transferFrom are both dispatched to this function, so we
// check blacklist and pay staking fee here.
function transferAllArgsNoAllowance(address _from, address _to, uint256 _value) internal {
require(!blackList.onList(_from));
require(!blackList.onList(_to));
super.transferAllArgsNoAllowance(_from, _to, _value);
payStakingFee(_to, _value, transferFeeNumerator, transferFeeDenominator, 0, _from);
}
function wipeBlacklistedAccount(address account) public onlyOwner {
require(blackList.onList(account));
uint256 oldValue = balanceOf(account);
balances.setBalance(account, 0);
totalSupply_ = totalSupply_.sub(oldValue);
WipedAccount(account, oldValue);
}
function payStakingFee(address payer, uint256 value, uint80 numerator, uint80 denominator, uint256 flatRate, address otherParticipant) private returns (uint256) {
if (noFeesList.onList(payer) || noFeesList.onList(otherParticipant)) {
return 0;
}
uint256 stakingFee = value.mul(numerator).div(denominator).add(flatRate);
if (stakingFee > 0) {
super.transferAllArgsNoAllowance(payer, staker, stakingFee);
}
return stakingFee;
}
function changeStakingFees(uint80 _transferFeeNumerator,
uint80 _transferFeeDenominator,
uint80 _mintFeeNumerator,
uint80 _mintFeeDenominator,
uint256 _mintFeeFlat,
uint80 _burnFeeNumerator,
uint80 _burnFeeDenominator,
uint256 _burnFeeFlat) public onlyOwner {
require(_transferFeeDenominator != 0);
require(_mintFeeDenominator != 0);
require(_burnFeeDenominator != 0);
transferFeeNumerator = _transferFeeNumerator;
transferFeeDenominator = _transferFeeDenominator;
mintFeeNumerator = _mintFeeNumerator;
mintFeeDenominator = _mintFeeDenominator;
mintFeeFlat = _mintFeeFlat;
burnFeeNumerator = _burnFeeNumerator;
burnFeeDenominator = _burnFeeDenominator;
burnFeeFlat = _burnFeeFlat;
}
function changeStaker(address newStaker) public onlyOwner {
require(newStaker != address(0));
staker = newStaker;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":false,"inputs":[{"name":"_other","type":"address"}],"name":"issueClaimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_canReceiveMintWhiteList","type":"address"},{"name":"_canBurnWhiteList","type":"address"},{"name":"_blackList","type":"address"},{"name":"_noFeesList","type":"address"}],"name":"setLists","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"delegate","type":"address"}],"name":"delegateToNewContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_transferFeeNumerator","type":"uint80"},{"name":"_transferFeeDenominator","type":"uint80"},{"name":"_mintFeeNumerator","type":"uint80"},{"name":"_mintFeeDenominator","type":"uint80"},{"name":"_mintFeeFlat","type":"uint256"},{"name":"_burnFeeNumerator","type":"uint80"},{"name":"_burnFeeDenominator","type":"uint80"},{"name":"_burnFeeFlat","type":"uint256"}],"name":"changeStakingFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"requestMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"list","type":"address"},{"name":"entry","type":"address"},{"name":"flag","type":"bool"}],"name":"updateList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newAdmin","type":"address"}],"name":"transferAdminship","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_source","type":"address"}],"name":"setDelegatedFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"trueUSD","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newMin","type":"uint256"},{"name":"newMax","type":"uint256"}],"name":"changeBurnBounds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"other","type":"address"}],"name":"requestReclaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"}],"name":"changeName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"blocksDelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"index","type":"uint256"}],"name":"finalizeMint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"list","type":"address"},{"name":"name","type":"string"}],"name":"renameList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newStaker","type":"address"}],"name":"changeStaker","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_child","type":"address"},{"name":"_newOwner","type":"address"}],"name":"transferChild","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from_","type":"address"},{"name":"value_","type":"uint256"},{"name":"data_","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pendingOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"mintOperations","outputs":[{"name":"to","type":"address"},{"name":"amount","type":"uint256"},{"name":"admin","type":"address"},{"name":"deferBlock","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newContract","type":"address"}],"name":"setTrueUSD","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"deferBlock","type":"uint256"},{"indexed":false,"name":"opIndex","type":"uint256"}],"name":"MintOperationEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_child","type":"address"},{"indexed":true,"name":"_newOwner","type":"address"}],"name":"TransferChildEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"other","type":"address"}],"name":"ReclaimEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newMin","type":"uint256"},{"indexed":false,"name":"newMax","type":"uint256"}],"name":"ChangeBurnBoundsEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_transferFeeNumerator","type":"uint80"},{"indexed":false,"name":"_transferFeeDenominator","type":"uint80"},{"indexed":false,"name":"_mintFeeNumerator","type":"uint80"},{"indexed":false,"name":"_mintFeeDenominator","type":"uint80"},{"indexed":false,"name":"_mintFeeFlat","type":"uint256"},{"indexed":false,"name":"_burnFeeNumerator","type":"uint80"},{"indexed":false,"name":"_burnFeeDenominator","type":"uint80"},{"indexed":false,"name":"_burnFeeFlat","type":"uint256"}],"name":"ChangeStakingFeesEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newStaker","type":"address"}],"name":"ChangeStakerEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"delegate","type":"address"}],"name":"DelegateEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"source","type":"address"}],"name":"SetDelegatedFromEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ChangeTrueUSDEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"name","type":"string"},{"indexed":false,"name":"symbol","type":"string"}],"name":"ChangeNameEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]Contract Creation Code
6060604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060003414151561005357600080fd5b612e83806100626000396000f30060606040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630581345e1461016c5780630ce51179146101a557806317ffc3201461023b5780631d2d8400146102745780631db8cb3f146102ad57806331a02bce1461035757806337a87dfa146103995780634e71e0c8146103fc5780635be7cc161461041157806361927adb1461044a57806362ffb3bf1461048357806370df42e1146104d857806371e268a41461050457806386575e401461053d5780638a689784146105dd5780638da5cb5b146106065780638e3af93f1461065b5780639f727c271461067e578063a9c9532814610693578063ab55979d1461070f578063ae11ea9b14610748578063c0ee0b8a146107a0578063e30c3978146107f6578063ec38e8551461084b578063f2fde38b146108ef578063f851a44014610928578063f8e8b93d1461097d575b341561016a57600080fd5b005b341561017757600080fd5b6101a3600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506109b6565b005b34156101b057600080fd5b610239600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ae9565b005b341561024657600080fd5b610272600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cb6565b005b341561027f57600080fd5b6102ab600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e23565b005b34156102b857600080fd5b610355600480803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff1690602001909190803590602001909190803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff16906020019091908035906020019091905050610fb4565b005b341561036257600080fd5b610397600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611284565b005b34156103a457600080fd5b6103fa600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035151590602001909190505061155c565b005b341561040757600080fd5b61040f6116ce565b005b341561041c57600080fd5b610448600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061186d565b005b341561045557600080fd5b610481600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611988565b005b341561048e57600080fd5b610496611b19565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104e357600080fd5b6105026004808035906020019091908035906020019091905050611b3f565b005b341561050f57600080fd5b61053b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c89565b005b341561054857600080fd5b6105db600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611dfa565b005b34156105e857600080fd5b6105f06120d8565b6040518082815260200191505060405180910390f35b341561061157600080fd5b6106196120de565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561066657600080fd5b61067c6004808035906020019091905050612103565b005b341561068957600080fd5b610691612489565b005b341561069e57600080fd5b61070d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061255b565b005b341561071a57600080fd5b610746600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506126f9565b005b341561075357600080fd5b61079e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061288a565b005b34156107ab57600080fd5b6107f4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001919091929050506129f1565b005b341561080157600080fd5b6108096129f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561085657600080fd5b61086c6004808035906020019091905050612a1c565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b34156108fa57600080fd5b610926600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612a9b565b005b341561093357600080fd5b61093b612b3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561098857600080fd5b6109b4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b60565b005b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a6057506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610a6b57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff16634e71e0c86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515610ad157600080fd5b6102c65a03f11515610ae257600080fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b4457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ce51179858585856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050600060405180830381600087803b1515610c9c57600080fd5b6102c65a03f11515610cad57600080fd5b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d1357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610db657600080fd5b6102c65a03f11515610dc757600080fd5b505050604051805190509050610e1f6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16612c629092919063ffffffff16565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7e57600080fd5b7fcd6bfcef0db0307e7a4ae723e2aa5e200099525c9925ce888748d19f235517c681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d2d8400826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515610f9d57600080fd5b6102c65a03f11515610fae57600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100f57600080fd5b7f7e7fd6efea17545a9ea2862462d59ed9dcd9fe8f072511389c5aaff646bb88388888888888888888604051808969ffffffffffffffffffff1669ffffffffffffffffffff1681526020018869ffffffffffffffffffff1669ffffffffffffffffffff1681526020018769ffffffffffffffffffff1669ffffffffffffffffffff1681526020018669ffffffffffffffffffff1669ffffffffffffffffffff1681526020018581526020018469ffffffffffffffffffff1669ffffffffffffffffffff1681526020018369ffffffffffffffffffff1669ffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631db8cb3f89898989898989896040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808969ffffffffffffffffffff1669ffffffffffffffffffff1681526020018869ffffffffffffffffffff1669ffffffffffffffffffff1681526020018769ffffffffffffffffffff1669ffffffffffffffffffff1681526020018669ffffffffffffffffffff1669ffffffffffffffffffff1681526020018581526020018469ffffffffffffffffffff1669ffffffffffffffffffff1681526020018369ffffffffffffffffffff1669ffffffffffffffffffff16815260200182815260200198505050505050505050600060405180830381600087803b151561126657600080fd5b6102c65a03f1151561127757600080fd5b5050505050505050505050565b600061128e612d53565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061133657506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561134157600080fd5b4391506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113b2576113af6105a083612d3590919063ffffffff16565b91505b6080604051908101604052808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381525090508373ffffffffffffffffffffffffffffffffffffffff167fc8643bc20dfb7bf63dc699abbc6b45c59fa995fb8c62fef9ddaa1c188b202fe1848460048054905060405180848152602001838152602001828152602001935050505060405180910390a26004805480600101828161149b9190612da8565b9160005260206000209060040201600083909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015550505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061160457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561160f57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663efbd9ec283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050600060405180830381600087803b15156116b557600080fd5b6102c65a03f115156116c657600080fd5b505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561172a57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2931ebb3d190545dcf6801c37aa686b74f2e1000e753d0fac6e471a2aa5a621360405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119e357600080fd5b7f52fbdfec73f7b6d8070f3ed3c7c461922483e40a0aadd8664e26e36721f4578f81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361927adb826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515611b0257600080fd5b6102c65a03f11515611b1357600080fd5b50505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9a57600080fd5b7ff8f7312d8aa9257dcfe43287f24cacc0f267875658809b6c7953b277565625228282604051808381526020018281526020019250505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370df42e183836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1515611c7157600080fd5b6102c65a03f11515611c8257600080fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ce457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff167f54aaf9dd6054e225ebeb401ff69369b5bd4fef4bd3747aa68422789d4073e77b60405160405180910390a2600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632aed7f3f826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515611de357600080fd5b6102c65a03f11515611df457600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e5557600080fd5b7f86254574b056421967dd18df31df91ca8cb6c2e1b379e422160090f27f93974c8282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ebc578082015181840152602081019050611ea1565b50505050905090810190601f168015611ee95780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f22578082015181840152602081019050611f07565b50505050905090810190601f168015611f4f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386575e4083836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561200d578082015181840152602081019050611ff2565b50505050905090810190601f16801561203a5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612073578082015181840152602081019050612058565b50505050905090810190601f1680156120a05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15156120c057600080fd5b6102c65a03f115156120d157600080fd5b5050505050565b6105a081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61210b612d53565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121b657506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156121c157600080fd5b6004848154811015156121d057fe5b9060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040015173ffffffffffffffffffffffffffffffffffffffff1614151561230c57600080fd5b4383606001511115151561231f57600080fd5b826000015191508260200151905060048481548110151561233c57fe5b9060005260206000209060040201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560038201600090555050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561246f57600080fd5b6102c65a03f1151561248057600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124e457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561255957fe5b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061260357506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561260e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff16635353a2d8826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561269657808201518184015260208101905061267b565b50505050905090810190601f1680156126c35780820380516001836020036101000a031916815260200191505b5092505050600060405180830381600087803b15156126e157600080fd5b6102c65a03f115156126f257600080fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561275457600080fd5b7ff53a20c615cf75fb126598071aff35483b5b08b1a6a248a545262e0e948752a181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab55979d826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b151561287357600080fd5b6102c65a03f1151561288457600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156128e557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ffaeefbd7a6c5ec1e47c0cd15c575d6211094f4fb15de8c1581209b415135be6c60405160405180910390a38173ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156129d957600080fd5b6102c65a03f115156129ea57600080fd5b5050505050565b600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481815481101515612a2b57fe5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612af657600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bbb57600080fd5b7f72dbf8e329c2df367291e237599eb6c6ed44942af039bebf79ba22d704d254c181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612d0d57600080fd5b6102c65a03f11515612d1e57600080fd5b505050604051805190501515612d3057fe5b505050565b6000808284019050838110151515612d4957fe5b8091505092915050565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b815481835581811511612dd557600402816004028360005260206000209182019101612dd49190612dda565b5b505050565b612e5491905b80821115612e5057600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382016000905550600401612de0565b5090565b905600a165627a7a72305820dd8c70e953f6af9867c11af980e089495e3e34257526f0fea619e2097b7106910029
Deployed Bytecode
0x60606040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630581345e1461016c5780630ce51179146101a557806317ffc3201461023b5780631d2d8400146102745780631db8cb3f146102ad57806331a02bce1461035757806337a87dfa146103995780634e71e0c8146103fc5780635be7cc161461041157806361927adb1461044a57806362ffb3bf1461048357806370df42e1146104d857806371e268a41461050457806386575e401461053d5780638a689784146105dd5780638da5cb5b146106065780638e3af93f1461065b5780639f727c271461067e578063a9c9532814610693578063ab55979d1461070f578063ae11ea9b14610748578063c0ee0b8a146107a0578063e30c3978146107f6578063ec38e8551461084b578063f2fde38b146108ef578063f851a44014610928578063f8e8b93d1461097d575b341561016a57600080fd5b005b341561017757600080fd5b6101a3600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506109b6565b005b34156101b057600080fd5b610239600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610ae9565b005b341561024657600080fd5b610272600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cb6565b005b341561027f57600080fd5b6102ab600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e23565b005b34156102b857600080fd5b610355600480803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff1690602001909190803590602001909190803569ffffffffffffffffffff1690602001909190803569ffffffffffffffffffff16906020019091908035906020019091905050610fb4565b005b341561036257600080fd5b610397600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611284565b005b34156103a457600080fd5b6103fa600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035151590602001909190505061155c565b005b341561040757600080fd5b61040f6116ce565b005b341561041c57600080fd5b610448600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061186d565b005b341561045557600080fd5b610481600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611988565b005b341561048e57600080fd5b610496611b19565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156104e357600080fd5b6105026004808035906020019091908035906020019091905050611b3f565b005b341561050f57600080fd5b61053b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c89565b005b341561054857600080fd5b6105db600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611dfa565b005b34156105e857600080fd5b6105f06120d8565b6040518082815260200191505060405180910390f35b341561061157600080fd5b6106196120de565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561066657600080fd5b61067c6004808035906020019091905050612103565b005b341561068957600080fd5b610691612489565b005b341561069e57600080fd5b61070d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061255b565b005b341561071a57600080fd5b610746600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506126f9565b005b341561075357600080fd5b61079e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061288a565b005b34156107ab57600080fd5b6107f4600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001908201803590602001919091929050506129f1565b005b341561080157600080fd5b6108096129f6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561085657600080fd5b61086c6004808035906020019091905050612a1c565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200194505050505060405180910390f35b34156108fa57600080fd5b610926600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612a9b565b005b341561093357600080fd5b61093b612b3a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561098857600080fd5b6109b4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b60565b005b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a6057506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610a6b57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff16634e71e0c86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1515610ad157600080fd5b6102c65a03f11515610ae257600080fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b4457600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ce51179858585856040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001945050505050600060405180830381600087803b1515610c9c57600080fd5b6102c65a03f11515610cad57600080fd5b50505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d1357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515610db657600080fd5b6102c65a03f11515610dc757600080fd5b505050604051805190509050610e1f6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16612c629092919063ffffffff16565b5050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e7e57600080fd5b7fcd6bfcef0db0307e7a4ae723e2aa5e200099525c9925ce888748d19f235517c681604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d2d8400826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515610f9d57600080fd5b6102c65a03f11515610fae57600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561100f57600080fd5b7f7e7fd6efea17545a9ea2862462d59ed9dcd9fe8f072511389c5aaff646bb88388888888888888888604051808969ffffffffffffffffffff1669ffffffffffffffffffff1681526020018869ffffffffffffffffffff1669ffffffffffffffffffff1681526020018769ffffffffffffffffffff1669ffffffffffffffffffff1681526020018669ffffffffffffffffffff1669ffffffffffffffffffff1681526020018581526020018469ffffffffffffffffffff1669ffffffffffffffffffff1681526020018369ffffffffffffffffffff1669ffffffffffffffffffff1681526020018281526020019850505050505050505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631db8cb3f89898989898989896040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808969ffffffffffffffffffff1669ffffffffffffffffffff1681526020018869ffffffffffffffffffff1669ffffffffffffffffffff1681526020018769ffffffffffffffffffff1669ffffffffffffffffffff1681526020018669ffffffffffffffffffff1669ffffffffffffffffffff1681526020018581526020018469ffffffffffffffffffff1669ffffffffffffffffffff1681526020018369ffffffffffffffffffff1669ffffffffffffffffffff16815260200182815260200198505050505050505050600060405180830381600087803b151561126657600080fd5b6102c65a03f1151561127757600080fd5b5050505050505050505050565b600061128e612d53565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061133657506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561134157600080fd5b4391506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113b2576113af6105a083612d3590919063ffffffff16565b91505b6080604051908101604052808573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381525090508373ffffffffffffffffffffffffffffffffffffffff167fc8643bc20dfb7bf63dc699abbc6b45c59fa995fb8c62fef9ddaa1c188b202fe1848460048054905060405180848152602001838152602001828152602001935050505060405180910390a26004805480600101828161149b9190612da8565b9160005260206000209060040201600083909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015550505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061160457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561160f57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663efbd9ec283836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018215151515815260200192505050600060405180830381600087803b15156116b557600080fd5b6102c65a03f115156116c657600080fd5b505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561172a57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2931ebb3d190545dcf6801c37aa686b74f2e1000e753d0fac6e471a2aa5a621360405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119e357600080fd5b7f52fbdfec73f7b6d8070f3ed3c7c461922483e40a0aadd8664e26e36721f4578f81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361927adb826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515611b0257600080fd5b6102c65a03f11515611b1357600080fd5b50505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b9a57600080fd5b7ff8f7312d8aa9257dcfe43287f24cacc0f267875658809b6c7953b277565625228282604051808381526020018281526020019250505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370df42e183836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1515611c7157600080fd5b6102c65a03f11515611c8257600080fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ce457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff167f54aaf9dd6054e225ebeb401ff69369b5bd4fef4bd3747aa68422789d4073e77b60405160405180910390a2600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632aed7f3f826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515611de357600080fd5b6102c65a03f11515611df457600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e5557600080fd5b7f86254574b056421967dd18df31df91ca8cb6c2e1b379e422160090f27f93974c8282604051808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ebc578082015181840152602081019050611ea1565b50505050905090810190601f168015611ee95780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f22578082015181840152602081019050611f07565b50505050905090810190601f168015611f4f5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166386575e4083836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561200d578082015181840152602081019050611ff2565b50505050905090810190601f16801561203a5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612073578082015181840152602081019050612058565b50505050905090810190601f1680156120a05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15156120c057600080fd5b6102c65a03f115156120d157600080fd5b5050505050565b6105a081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61210b612d53565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806121b657506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156121c157600080fd5b6004848154811015156121d057fe5b9060005260206000209060040201608060405190810160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820154815250509250600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040015173ffffffffffffffffffffffffffffffffffffffff1614151561230c57600080fd5b4383606001511115151561231f57600080fd5b826000015191508260200151905060048481548110151561233c57fe5b9060005260206000209060040201600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560038201600090555050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b151561246f57600080fd5b6102c65a03f1151561248057600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124e457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561255957fe5b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061260357506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561260e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff16635353a2d8826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561269657808201518184015260208101905061267b565b50505050905090810190601f1680156126c35780820380516001836020036101000a031916815260200191505b5092505050600060405180830381600087803b15156126e157600080fd5b6102c65a03f115156126f257600080fd5b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561275457600080fd5b7ff53a20c615cf75fb126598071aff35483b5b08b1a6a248a545262e0e948752a181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab55979d826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b151561287357600080fd5b6102c65a03f1151561288457600080fd5b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156128e557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167ffaeefbd7a6c5ec1e47c0cd15c575d6211094f4fb15de8c1581209b415135be6c60405160405180910390a38173ffffffffffffffffffffffffffffffffffffffff1663f2fde38b826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15156129d957600080fd5b6102c65a03f115156129ea57600080fd5b5050505050565b600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600481815481101515612a2b57fe5b90600052602060002090600402016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612af657600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612bbb57600080fd5b7f72dbf8e329c2df367291e237599eb6c6ed44942af039bebf79ba22d704d254c181604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a180600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612d0d57600080fd5b6102c65a03f11515612d1e57600080fd5b505050604051805190501515612d3057fe5b505050565b6000808284019050838110151515612d4957fe5b8091505092915050565b608060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b815481835581811511612dd557600402816004028360005260206000209182019101612dd49190612dda565b5b505050565b612e5491905b80821115612e5057600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600382016000905550600401612de0565b5090565b905600a165627a7a72305820dd8c70e953f6af9867c11af980e089495e3e34257526f0fea619e2097b7106910029
Swarm Source
bzzr://dd8c70e953f6af9867c11af980e089495e3e34257526f0fea619e2097b710691
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.