ETH Price: $2,522.01 (-5.11%)

Token

GATOR (GATR)
 

Overview

Max Total Supply

32,625,747.630757213393634744 GATR

Holders

204 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,013.645489396653898559 GATR

Value
$0.00
0x14b13e0fef124d6d91989493aaaadbd5ebf5df2b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

It's a positive-only rebaser that dynamically re-pegs the price upwards. $GATR tokens will be used for card auctions, exclusive card sales, online games, and more. $GATR tokens may also be farmed for free by holding an NFT card.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GatorToken

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: Gator.sol
pragma solidity 0.4.24;

// import "./SafeMath.sol";
// import "./Ownable.sol";
// import "./ERC20Detailed.sol";

// import "./SafeMathInt.sol";


library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
contract Context {
    function _msgSender() internal constant returns (address ) {
        return msg.sender;
    }

    function _msgData() internal constant returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public constant returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b)
        internal
        pure
        returns (int256)
    {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a)
        internal
        pure
        returns (int256)
    {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

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;

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address owner) public view returns (uint256) {
        return _balances[owner];
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowed[owner][spender];
    }

    function transfer(address to, uint256 value) public returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    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;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        require(from != address(0));
        require(to != address(0));
        _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value);
        _transfer(from, to, value);
        emit Approval(from, msg.sender, _allowed[from][msg.sender]);
        return true;
    }

    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;
    }

    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;
    }

    function _transfer(address from, address to, uint256 value) internal {
        require(to != address(0), "invalid to address");
        require(from != address(0), "invalid from address");

        _balances[from] = _balances[from].sub(value);
        _balances[to] = _balances[to].add(value);
        emit Transfer(from, to, value);
    }

    function _mint(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.add(value);
        _balances[account] = _balances[account].add(value);
        emit Transfer(address(0), account, value);
    }

    function _burn(address account, uint256 value) internal {
        require(account != address(0));

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    function _burnFrom(address account, uint256 value) internal {
        require(account != address(0));
        _allowed[account][msg.sender] = _allowed[account][msg.sender].sub(value);
        _burn(account, value);
        emit Approval(account, msg.sender, _allowed[account][msg.sender]);
    }
}

contract ERC20Detailed is ERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    
    constructor(string name, string symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    function name() public view returns (string) {
        return _name;
    }

    function symbol() public view returns (string) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract GatorToken is ERC20Detailed {

    using SafeMath for uint256;
    using SafeMathInt for int256;
    address private _owner;

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event LogMonetaryPolicyUpdated(address monetaryPolicy);

    // Used for authentication
    address public monetaryPolicy;

    modifier onlyMonetaryPolicy() {
        require(msg.sender == monetaryPolicy);
        _;
    }

    modifier validRecipient(address to) {
        require(to != address(0));
        require(to != address(this));
        _;
    }

    uint256 public constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 350000*10**DECIMALS;

    // uint256 private constant MAX_SUPPLY = 300000*10**DECIMALS;  // (2^128) - 1
    uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    mapping(address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowedFragments;

    function owner() public constant returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public onlyOwner {
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _owner = newOwner;
    }

    function setMonetaryPolicy(address monetaryPolicy_)
        external
        onlyOwner
    {
        require(monetaryPolicy_ != address(0), "empty monetaryPolicy address");
        
        monetaryPolicy = monetaryPolicy_;
        emit LogMonetaryPolicyUpdated(monetaryPolicy_);
    }

    function rebase(uint256 epoch, int256 supplyDelta)
        external
        onlyMonetaryPolicy
        returns (uint256)
    {   

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }
        uint256 _supplyDelta = uint256(supplyDelta);

        _totalSupply = _totalSupply.div(_gonsPerFragment);

        if (supplyDelta >= 0) {
            _totalSupply = _totalSupply.add(_supplyDelta);
        }
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _totalSupply = _totalSupply.mul(_gonsPerFragment);

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    constructor() ERC20Detailed("GATOR", "GATR", uint8(DECIMALS))
        public
    {
        _owner = msg.sender;
        
        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);
        _totalSupply = INITIAL_FRAGMENTS_SUPPLY.mul(_gonsPerFragment);
        _balances[_owner] = INITIAL_FRAGMENTS_SUPPLY.mul(_gonsPerFragment);

        emit Transfer(address(0), _owner, _totalSupply);
    }

    function totalSupply()
        public
        view
        returns (uint256)
    {
        return _totalSupply.div(_gonsPerFragment);
    }

    function balanceOf(address who)
        public
        view
        returns (uint256)
    {
        return _balances[who].div(_gonsPerFragment);
    }

    function transfer(address to, uint256 value)
        public
        validRecipient(to)
        returns (bool)
    {
        require(to != address(0));
        uint256 gonValue = value.mul(_gonsPerFragment);
        _balances[msg.sender] = _balances[msg.sender].sub(gonValue);
        _balances[to] = _balances[to].add(gonValue);
        emit Transfer(msg.sender, to, value);
        return true;
    }

    function allowance(address owner_, address spender)
        public
        view
        returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    function transferFrom(address from, address to, uint256 value)
        public
        validRecipient(to)
        returns (bool)
    {
        require(from != address(0));
        _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value);

        uint256 gonValue = value.mul(_gonsPerFragment);
        _balances[from] = _balances[from].sub(gonValue);
        _balances[to] = _balances[to].add(gonValue);
        emit Transfer(from, to, value);

        return true;
    }

    function approve(address spender, uint256 value)
        public
        returns (bool)
    {
        require(spender != address(0));
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        returns (bool)
    {
        require(spender != address(0));
        _allowedFragments[msg.sender][spender] =
            _allowedFragments[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        returns (bool)
    {
        require(spender != address(0));
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue);
        }
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }
    
    /*
    function mint(address account, uint256 amount)
    public
    onlyOwner
    {
        require(account != address(0), "ERC20: mint to the zero address");
        amount = amount.mul(10**DECIMALS);
        _totalSupply = _totalSupply.div(_gonsPerFragment);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].div(_gonsPerFragment);
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _totalSupply = _totalSupply.mul(_gonsPerFragment);

        _balances[account] = _balances[account].add(amount);
        _balances[account] = _balances[account].mul(_gonsPerFragment);

        emit Transfer(address(0), account, amount);
    }
    */
}

File 2 of 3: GatorPolicy.sol
pragma solidity 0.4.24;

import "./Gator.sol";

library UInt256Lib {
    
    uint256 private constant MAX_INT256 = (2**255)-1;

    /**
     * @dev Safely converts a uint256 to an int256.
     */
    function toInt256Safe(uint256 a)
        internal
        pure
        returns (int256)
    {
        require(a <= MAX_INT256, "SafeCast: value doesn't fit in an int256");
        return int256(a);
    }
}

contract GatorPolicy is Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using UInt256Lib for uint256;

    event LogRebase(
        uint256 indexed epoch,
        uint256 exchangeRate,
        uint256 cpi,
        int256 requestedSupplyAdjustment,
        uint256 timestampSec
    );

    GatorToken public uFrags;

    // CPI value at the time of launch, as an 18 decimal fixed point number.
    // uint256 private baseCpi;

    uint256 public deviationThreshold;

    // The actual token price, will update only if deviationThreshold crossed
    uint256 public token_price;

    // The rebase lag parameter, used to dampen the applied supply adjustment by 1 / rebaseLag
    // Check setRebaseLag comments for more details.
    // Natural number, no decimal places.
    //uint256 public rebaseLag;

    // More than this much time must pass between rebase operations.
    uint256 public minRebaseTimeIntervalSec;

    // Block timestamp of last rebase operation
    uint256 public lastRebaseTimestampSec;

    // The rebase window begins this many seconds into the minRebaseTimeInterval period.
    // For example if minRebaseTimeInterval is 24hrs, it represents the time of day in seconds.
    //uint256 public rebaseWindowOffsetSec;

    // The length of the time window where a rebase operation is allowed to execute, in seconds.
    //uint256 public rebaseWindowLengthSec;

    // The number of rebase cycles since inception
    uint256 public epoch;

    uint256 private constant DECIMALS = 18;

    // Due to the expression in computeSupplyDelta(), MAX_RATE * MAX_SUPPLY must fit into an int256.
    // Both are 18 decimals fixed point numbers.
    uint256 private constant MAX_RATE = 10**6*10**DECIMALS;
    // MAX_SUPPLY = MAX_INT256 / MAX_RATE
    uint256 private constant MAX_SUPPLY = ~(uint256(1) << 255) / MAX_RATE;

    // This module orchestrates the rebase execution and downstream notification.
    address public orchestrator;

    modifier onlyOrchestrator() {
        require(msg.sender == orchestrator);
        _;
    }

    function rebase(uint256 wei_token_price) external
    onlyOrchestrator
    {
        //sets the epoch
        epoch = epoch.add(1);
        
        //compute supply delta    
        int256 supplyDelta = computeSupplyDelta(wei_token_price);
        
        if(supplyDelta == 0) {
            //require that 24 hours has passed and then set the current token price without rebasing supply
            require(lastRebaseTimestampSec + 24 hours < now, "24 hours has not passed since the last rebase");

            //set the price and return
            token_price = wei_token_price;
            
            // Snap the rebase time after changes are made
            lastRebaseTimestampSec = now;
        } else {
            
            // This comparison also ensures there is no reentrancy.
            require(lastRebaseTimestampSec.add(minRebaseTimeIntervalSec) < now , "30 minutes has not passed since last rebase");
            
            //to continue from here, the price must have increased past the old price
            require(supplyDelta != 0,"not a 5% increase");
            
            //this sets the total_supply to max_supply
            if (supplyDelta > 0 && uFrags.totalSupply().add(uint256(supplyDelta)) > MAX_SUPPLY) {
                supplyDelta = (MAX_SUPPLY.sub(uFrags.totalSupply())).toInt256Safe();
            }
            
            //only repegs up
            uint old_token_price = token_price;
            require(wei_token_price > old_token_price, "new token price is not greater than old");
            
            //split the difference b/w old and new
            uint actual_new_token_price = old_token_price + uint(wei_token_price - old_token_price).div(2);
            int256 actual_rebase_price_delta = computeSupplyDelta(actual_new_token_price);
            
            //update totals
            uFrags.rebase(epoch, actual_rebase_price_delta);
            
            // Snap the rebase time to the start of this window. Ensures 30 minutes passed since last rebase call
            lastRebaseTimestampSec = now;
            
            token_price = actual_new_token_price;
        }
            
    }
        
    function setOrchestrator(address orchestrator_)
        external
        onlyOwner
    {
        require(orchestrator_ != address(0));
        orchestrator = orchestrator_;
    }

    function setTokenPrice(uint256 _token_price)
        external
        onlyOwner
    {   
        //set in wei
        token_price = _token_price;
    }

    function setDeviationThreshold(uint256 deviationThreshold_)
        external
        onlyOwner
    {
        // deviationThreshold = 0.05e18 = 5e16 5%
        deviationThreshold = deviationThreshold_;
    }

    function setRebaseTimingParameters(
        uint256 minRebaseTimeIntervalSec_,
        uint256 rebaseWindowOffsetSec_)
        external
        onlyOwner
    {
        require(minRebaseTimeIntervalSec_ > 0);
        require(rebaseWindowOffsetSec_ < minRebaseTimeIntervalSec_);

        minRebaseTimeIntervalSec = minRebaseTimeIntervalSec_;
    }

    constructor(GatorToken uFrags_, uint256 _token_price)
        public
    {
        
        token_price = _token_price;

        // deviationThreshold = 0.05e18 = 5e16
        deviationThreshold = 5 * 10 ** (DECIMALS-2); // 5%

        minRebaseTimeIntervalSec = 30 minutes;
        lastRebaseTimestampSec = now;
        epoch = 0;

        uFrags = uFrags_;

    }

    function computeSupplyDelta(uint256 new_price)
        public
        view
        returns (int256)
    {
        if (withinDeviationThreshold(new_price, token_price)) {
            return 0;
        }
        if (new_price < token_price) {
            return 0;
        }

        // supplyDelta = totalSupply * (rate - targetRate) / targetRate
        int256 targetRateSigned = token_price.toInt256Safe();

        return uFrags.totalSupply().toInt256Safe()
            .mul(new_price.toInt256Safe().sub(targetRateSigned))
            .div(targetRateSigned);
    }


    function withinDeviationThreshold(uint256 new_price, uint256 old_price)
        public
        view
        returns (bool)
    {
        uint256 absoluteDeviationThreshold = old_price.mul(deviationThreshold).div(10**DECIMALS);
        
        return (new_price >= old_price && new_price.sub(old_price) < absoluteDeviationThreshold)
            || (new_price < old_price && old_price.sub(new_price) < absoluteDeviationThreshold);
    }
}

File 3 of 3: Orchestrator.sol
pragma solidity 0.4.24;

import "./GatorPolicy.sol";

/**
 * @title Orchestrator
 * @notice The orchestrator is the main entry point for rebase operations. It coordinates the policy
 * actions with external consumers.
 */
contract Orchestrator is Ownable {

    struct Transaction {
        bool enabled;
        address destination;
        bytes data;
    }

    event TransactionFailed(address indexed destination, uint index, bytes data);
    event TransactionSent(address indexed destination, uint index, bytes data);
    /*event TransactionRemoved(address indexed destination, uint index, bytes data);*/
    
    // Stable ordering is not guaranteed.
    Transaction[] public transactions;

    GatorPolicy public policy;

    /**
     * @param policy_ Address of the UFragments policy.
     */
    constructor(address policy_) public {
        require(policy_ != address(0), "policy is not set correctly");
        policy = GatorPolicy(policy_);
    }

    /**
     * @notice Main entry point to initiate a rebase operation.
     *         The Orchestrator calls rebase on the policy and notifies downstream applications.
     *         Contracts are guarded from calling, to avoid flash loan attacks on liquidity
     *         providers.
     *         If a transaction in the transaction list reverts, it is swallowed and the remaining
     *         transactions are executed.
     */

    function rebase(uint256 wei_token_price)
    onlyOwner
    external
    {
        
       // require(msg.sender == tx.origin);  // solhint-disable-line avoid-tx-origin
        policy.rebase(wei_token_price);

        for (uint i = 0; i < transactions.length; i++) {
            Transaction storage t = transactions[i];
            if (t.enabled) {
                emit TransactionSent(t.destination, i, t.data);
                bool result =
                    externalCall(t.destination, t.data);
                if (!result) {
                    //commented out due to revert.. 
                    //emit TransactionFailed(t.destination, i, t.data);
                    revert("Transaction Failed");
                }
            }
        }
    }

    /**
     * @notice Adds a transaction that gets called for a downstream receiver of rebases
     * @param destination Address of contract destination
     * @param data Transaction data payload
     */
    function addTransaction(address destination, bytes data)
        external
        onlyOwner
    {
        require(destination != address(0));
        transactions.push(Transaction({
            enabled: true,
            destination: destination,
            data: data
        }));
    }

    /**
     * @param index Index of transaction to remove.
     *              Transaction ordering may have changed since adding.
     */
     /*
    function removeTransaction(uint index)
        external
        onlyOwner
    {
        require(index < transactions.length, "index out of bounds");
        
        emit TransactionRemoved(transactions[index].destination, index, transactions[index].data);
        
        if (index < transactions.length - 1) {
            transactions[index] = transactions[transactions.length - 1];
        }

        transactions.length--;
    }
    */
    

    /**
     * @param index Index of transaction. Transaction ordering may have changed since adding.
     * @param enabled True for enabled, false for disabled.
     */
    function setTransactionEnabled(uint index, bool enabled)
        external
        onlyOwner
    {
        require(index < transactions.length, "index must be in range of stored tx list");
        transactions[index].enabled = enabled;
    }

    /**
     * @return Number of transactions, both enabled and disabled, in transactions list.
     */
    function transactionsSize()
        external
        view
        returns (uint256)
    {
        return transactions.length;
    }

    /**
     * @dev wrapper to call the encoded transactions on downstream consumers.
     * @param destination Address of destination contract.
     * @param data The encoded data payload.
     * @return True on success
     */
    function externalCall(address destination, bytes data)
        internal
        returns (bool)
    {
        require(destination != address(0));
        bool result;
        assembly {  // solhint-disable-line no-inline-assembly
            // "Allocate" memory for output
            // (0x40 is where "free memory" pointer is stored by convention)
            let outputAddress := mload(0x40)

            // First 32 bytes are the padded length of data, so exclude that
            let dataAddress := add(data, 32)

            result := call(
                // 34710 is the value that solidity is currently emitting
                // It includes callGas (700) + callVeryLow (3, to pay for SUB)
                // + callValueTransferGas (9000) + callNewAccountGas
                // (25000, in case the destination address does not exist and needs creating)
                sub(gas, 34710),

                destination,
                0, // transfer value in wei
                dataAddress,
                mload(data),  // Size of the input, in bytes. Stored in position 0 of the array.
                outputAddress,
                0  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }
}

Contract Security Audit

Contract ABI

[{"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":"totalSupply","outputs":[{"name":"","type":"uint256"}],"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":"DECIMALS","outputs":[{"name":"","type":"uint256"}],"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":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"epoch","type":"uint256"},{"name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"monetaryPolicy_","type":"address"}],"name":"setMonetaryPolicy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"monetaryPolicy","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","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":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":"owner_","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"epoch","type":"uint256"},{"indexed":false,"name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"monetaryPolicy","type":"address"}],"name":"LogMonetaryPolicyUpdated","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"}]

60806040523480156200001157600080fd5b50604080518082018252600581527f4741544f5200000000000000000000000000000000000000000000000000000060208083019182528351808501909452600484527f4741545200000000000000000000000000000000000000000000000000000000908401528151919291601291620000909160039190620003a7565b508151620000a6906004906020850190620003a7565b506005805460ff191660ff929092169190911761010060a860020a03191661010033021790555050694a1d89bb94865ec00000600781905562000101908060001906600019039064010000000062000e1a620001c482021704565b60088190556200012b90694a1d89bb94865ec000009064010000000062000ea56200021e82021704565b6007556008546200015690694a1d89bb94865ec000009064010000000062000ea56200021e82021704565b60058054600160a060020a036101009182900481166000908152600960209081526040808320969096559354600754865190815295519390049091169390927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36200044c565b60006200021783836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620002e3640100000000026401000000009004565b9392505050565b600080831515620002335760009150620002dc565b508282028284828115156200024457fe5b0414620002d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8091505b5092915050565b6000808281851162000390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620003545781810151838201526020016200033a565b50505050905090810190601f168015620003825780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5083858115156200039d57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003ea57805160ff19168380011785556200041a565b828001600101855582156200041a579182015b828111156200041a578251825591602001919060010190620003fd565b50620004289291506200042c565b5090565b6200044991905b8082111562000428576000815560010162000433565b90565b6110d6806200045c6000396000f3006080604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610100578063095ea7b31461018a57806318160ddd146101c257806323b872dd146101e95780632e0f262514610213578063313ce56714610228578063395093511461025357806370a0823114610277578063715018a6146102985780637a43e23f146102af5780638b5a6a08146102ca5780638da5cb5b146102eb5780638e27d7d71461031c57806395d89b4114610331578063a457c2d714610346578063a9059cbb1461036a578063dd62ed3e1461038e578063f2fde38b146103b5575b600080fd5b34801561010c57600080fd5b506101156103d6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561019657600080fd5b506101ae600160a060020a036004351660243561046c565b604080519115158252519081900360200190f35b3480156101ce57600080fd5b506101d76104ea565b60408051918252519081900360200190f35b3480156101f557600080fd5b506101ae600160a060020a0360043581169060243516604435610508565b34801561021f57600080fd5b506101d761067c565b34801561023457600080fd5b5061023d610681565b6040805160ff9092168252519081900360200190f35b34801561025f57600080fd5b506101ae600160a060020a036004351660243561068a565b34801561028357600080fd5b506101d7600160a060020a036004351661073a565b3480156102a457600080fd5b506102ad61076e565b005b3480156102bb57600080fd5b506101d76004356024356107f5565b3480156102d657600080fd5b506102ad600160a060020a036004351661090c565b3480156102f757600080fd5b50610300610a34565b60408051600160a060020a039092168252519081900360200190f35b34801561032857600080fd5b50610300610a48565b34801561033d57600080fd5b50610115610a57565b34801561035257600080fd5b506101ae600160a060020a0360043516602435610ab8565b34801561037657600080fd5b506101ae600160a060020a0360043516602435610bc0565b34801561039a57600080fd5b506101d7600160a060020a0360043581169060243516610ccd565b3480156103c157600080fd5b506102ad600160a060020a0360043516610cf8565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104625780601f1061043757610100808354040283529160200191610462565b820191906000526020600020905b81548152906001019060200180831161044557829003601f168201915b5050505050905090565b6000600160a060020a038316151561048357600080fd5b336000818152600a60209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6000610503600854600754610e1a90919063ffffffff16565b905090565b60008083600160a060020a038116151561052157600080fd5b600160a060020a03811630141561053757600080fd5b600160a060020a038616151561054c57600080fd5b600160a060020a0386166000908152600a60209081526040808320338452909152902054610580908563ffffffff610e6316565b600160a060020a0387166000908152600a602090815260408083203384529091529020556008546105b890859063ffffffff610ea516565b600160a060020a0387166000908152600960205260409020549092506105e4908363ffffffff610e6316565b600160a060020a038088166000908152600960205260408082209390935590871681522054610619908363ffffffff610f4416565b600160a060020a0380871660008181526009602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350600195945050505050565b601281565b60055460ff1690565b6000600160a060020a03831615156106a157600080fd5b336000908152600a60209081526040808320600160a060020a03871684529091529020546106d5908363ffffffff610f4416565b336000818152600a60209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600854600160a060020a0382166000908152600960205260408120549091610768919063ffffffff610e1a16565b92915050565b6005546101009004600160a060020a031633146107d5576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6006546000908190600160a060020a0316331461081157600080fd5b82151561085a57600754604080519182525185917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a26007549150610905565b506008546007548391610873919063ffffffff610e1a16565b6007556000831261089557600754610891908263ffffffff610f4416565b6007555b6007546108ae9069281e842641e57dbfffff1990610e1a565b60088190556007546108c59163ffffffff610ea516565b6007819055604080519182525185917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a260075491505b5092915050565b6005546101009004600160a060020a03163314610973576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600160a060020a03811615156109d3576040805160e560020a62461bcd02815260206004820152601c60248201527f656d707479206d6f6e6574617279506f6c696379206164647265737300000000604482015290519081900360640190fd5b60068054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f0e6961f1a1afb87eaf51fd64f22ddc10062e23aa7838eac5d0bdf140bfd389729181900360200190a150565b6005546101009004600160a060020a031690565b600654600160a060020a031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104625780601f1061043757610100808354040283529160200191610462565b600080600160a060020a0384161515610ad057600080fd5b50336000908152600a60209081526040808320600160a060020a0387168452909152902054808310610b2557336000908152600a60209081526040808320600160a060020a0388168452909152812055610b5a565b610b35818463ffffffff610e6316565b336000908152600a60209081526040808320600160a060020a03891684529091529020555b336000818152600a60209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008083600160a060020a0381161515610bd957600080fd5b600160a060020a038116301415610bef57600080fd5b600160a060020a0385161515610c0457600080fd5b600854610c1890859063ffffffff610ea516565b33600090815260096020526040902054909250610c3b908363ffffffff610e6316565b3360009081526009602052604080822092909255600160a060020a03871681522054610c6d908363ffffffff610f4416565b600160a060020a0386166000818152600960209081526040918290209390935580518781529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001949350505050565b600160a060020a039182166000908152600a6020908152604080832093909416825291909152205490565b6005546101009004600160a060020a03163314610d5f576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600160a060020a0381161515610de5576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60058054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000610e5c83836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610fa1565b9392505050565b6000610e5c83836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611049565b600080831515610eb85760009150610905565b50828202828482811515610ec857fe5b0414610e5c576040805160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600082820183811015610e5c576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080828185116110335760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ff8578181015183820152602001610fe0565b50505050905090810190601f1680156110255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50838581151561103f57fe5b0495945050505050565b60008082858511156110a05760405160e560020a62461bcd02815260040180806020018281038252838181518152602001915080519060200190808383600083811015610ff8578181015183820152602001610fe0565b50505091039190505600a165627a7a72305820a848b1df84512eb3f57ac65be568e954856e6addd0a9b91a150981f8bbf0709c0029

Deployed Bytecode

0x6080604052600436106100fb5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610100578063095ea7b31461018a57806318160ddd146101c257806323b872dd146101e95780632e0f262514610213578063313ce56714610228578063395093511461025357806370a0823114610277578063715018a6146102985780637a43e23f146102af5780638b5a6a08146102ca5780638da5cb5b146102eb5780638e27d7d71461031c57806395d89b4114610331578063a457c2d714610346578063a9059cbb1461036a578063dd62ed3e1461038e578063f2fde38b146103b5575b600080fd5b34801561010c57600080fd5b506101156103d6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014f578181015183820152602001610137565b50505050905090810190601f16801561017c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561019657600080fd5b506101ae600160a060020a036004351660243561046c565b604080519115158252519081900360200190f35b3480156101ce57600080fd5b506101d76104ea565b60408051918252519081900360200190f35b3480156101f557600080fd5b506101ae600160a060020a0360043581169060243516604435610508565b34801561021f57600080fd5b506101d761067c565b34801561023457600080fd5b5061023d610681565b6040805160ff9092168252519081900360200190f35b34801561025f57600080fd5b506101ae600160a060020a036004351660243561068a565b34801561028357600080fd5b506101d7600160a060020a036004351661073a565b3480156102a457600080fd5b506102ad61076e565b005b3480156102bb57600080fd5b506101d76004356024356107f5565b3480156102d657600080fd5b506102ad600160a060020a036004351661090c565b3480156102f757600080fd5b50610300610a34565b60408051600160a060020a039092168252519081900360200190f35b34801561032857600080fd5b50610300610a48565b34801561033d57600080fd5b50610115610a57565b34801561035257600080fd5b506101ae600160a060020a0360043516602435610ab8565b34801561037657600080fd5b506101ae600160a060020a0360043516602435610bc0565b34801561039a57600080fd5b506101d7600160a060020a0360043581169060243516610ccd565b3480156103c157600080fd5b506102ad600160a060020a0360043516610cf8565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104625780601f1061043757610100808354040283529160200191610462565b820191906000526020600020905b81548152906001019060200180831161044557829003601f168201915b5050505050905090565b6000600160a060020a038316151561048357600080fd5b336000818152600a60209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6000610503600854600754610e1a90919063ffffffff16565b905090565b60008083600160a060020a038116151561052157600080fd5b600160a060020a03811630141561053757600080fd5b600160a060020a038616151561054c57600080fd5b600160a060020a0386166000908152600a60209081526040808320338452909152902054610580908563ffffffff610e6316565b600160a060020a0387166000908152600a602090815260408083203384529091529020556008546105b890859063ffffffff610ea516565b600160a060020a0387166000908152600960205260409020549092506105e4908363ffffffff610e6316565b600160a060020a038088166000908152600960205260408082209390935590871681522054610619908363ffffffff610f4416565b600160a060020a0380871660008181526009602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a350600195945050505050565b601281565b60055460ff1690565b6000600160a060020a03831615156106a157600080fd5b336000908152600a60209081526040808320600160a060020a03871684529091529020546106d5908363ffffffff610f4416565b336000818152600a60209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600854600160a060020a0382166000908152600960205260408120549091610768919063ffffffff610e1a16565b92915050565b6005546101009004600160a060020a031633146107d5576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6006546000908190600160a060020a0316331461081157600080fd5b82151561085a57600754604080519182525185917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a26007549150610905565b506008546007548391610873919063ffffffff610e1a16565b6007556000831261089557600754610891908263ffffffff610f4416565b6007555b6007546108ae9069281e842641e57dbfffff1990610e1a565b60088190556007546108c59163ffffffff610ea516565b6007819055604080519182525185917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a260075491505b5092915050565b6005546101009004600160a060020a03163314610973576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600160a060020a03811615156109d3576040805160e560020a62461bcd02815260206004820152601c60248201527f656d707479206d6f6e6574617279506f6c696379206164647265737300000000604482015290519081900360640190fd5b60068054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f0e6961f1a1afb87eaf51fd64f22ddc10062e23aa7838eac5d0bdf140bfd389729181900360200190a150565b6005546101009004600160a060020a031690565b600654600160a060020a031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104625780601f1061043757610100808354040283529160200191610462565b600080600160a060020a0384161515610ad057600080fd5b50336000908152600a60209081526040808320600160a060020a0387168452909152902054808310610b2557336000908152600a60209081526040808320600160a060020a0388168452909152812055610b5a565b610b35818463ffffffff610e6316565b336000908152600a60209081526040808320600160a060020a03891684529091529020555b336000818152600a60209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008083600160a060020a0381161515610bd957600080fd5b600160a060020a038116301415610bef57600080fd5b600160a060020a0385161515610c0457600080fd5b600854610c1890859063ffffffff610ea516565b33600090815260096020526040902054909250610c3b908363ffffffff610e6316565b3360009081526009602052604080822092909255600160a060020a03871681522054610c6d908363ffffffff610f4416565b600160a060020a0386166000818152600960209081526040918290209390935580518781529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3506001949350505050565b600160a060020a039182166000908152600a6020908152604080832093909416825291909152205490565b6005546101009004600160a060020a03163314610d5f576040805160e560020a62461bcd02815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600160a060020a0381161515610de5576040805160e560020a62461bcd02815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60058054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6000610e5c83836040805190810160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610fa1565b9392505050565b6000610e5c83836040805190810160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611049565b600080831515610eb85760009150610905565b50828202828482811515610ec857fe5b0414610e5c576040805160e560020a62461bcd02815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600082820183811015610e5c576040805160e560020a62461bcd02815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080828185116110335760405160e560020a62461bcd0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ff8578181015183820152602001610fe0565b50505050905090810190601f1680156110255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50838581151561103f57fe5b0495945050505050565b60008082858511156110a05760405160e560020a62461bcd02815260040180806020018281038252838181518152602001915080519060200190808383600083811015610ff8578181015183820152602001610fe0565b50505091039190505600a165627a7a72305820a848b1df84512eb3f57ac65be568e954856e6addd0a9b91a150981f8bbf0709c0029

Deployed Bytecode Sourcemap

8593:6309:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8344:74;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8344:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8344:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13000:266;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13000:266:0;-1:-1:-1;;;;;13000:266:0;;;;;;;;;;;;;;;;;;;;;;;;;11613:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11613:139:0;;;;;;;;;;;;;;;;;;;;12495:499;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12495:499:0;-1:-1:-1;;;;;12495:499:0;;;;;;;;;;;;9159:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9159:37:0;;;;8508:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8508:81:0;;;;;;;;;;;;;;;;;;;;;;;13272:375;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13272:375:0;-1:-1:-1;;;;;13272:375:0;;;;;;;11758:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11758:150:0;-1:-1:-1;;;;;11758:150:0;;;;;9933:82;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9933:82:0;;;;;;10497:667;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10497:667:0;;;;;;;10206:285;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10206:285:0;-1:-1:-1;;;;;10206:285:0;;;;;9727:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9727:81:0;;;;;;;;-1:-1:-1;;;;;9727:81:0;;;;;;;;;;;;;;8889:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8889:29:0;;;;8424:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8424:78:0;;;;13653:540;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13653:540:0;-1:-1:-1;;;;;13653:540:0;;;;;;;11914:401;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11914:401:0;-1:-1:-1;;;;;11914:401:0;;;;;;;12321:168;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12321:168:0;-1:-1:-1;;;;;12321:168:0;;;;;;;;;;10021:179;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10021:179:0;-1:-1:-1;;;;;10021:179:0;;;;;8344:74;8406:5;8399:12;;;;;;;;-1:-1:-1;;8399:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8381:6;;8399:12;;8406:5;;8399:12;;8406:5;8399:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8344:74;:::o;13000:266::-;13081:4;-1:-1:-1;;;;;13109:21:0;;;;13101:30;;;;;;13159:10;13141:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;13141:38:0;;;;;;;;;;;;:46;;;13202:36;;;;;;;13141:38;;13159:10;13202:36;;;;;;;;;;;-1:-1:-1;13255:4:0;13000:266;;;;:::o;11613:139::-;11681:7;11711:34;11728:16;;11711:12;;:16;;:34;;;;:::i;:::-;11704:41;;11613:139;:::o;12495:499::-;12617:4;;12596:2;-1:-1:-1;;;;;9080:16:0;;;;9072:25;;;;;;-1:-1:-1;;;;;9115:19:0;;9129:4;9115:19;;9107:28;;;;;;-1:-1:-1;;;;;12645:18:0;;;;12637:27;;;;;;-1:-1:-1;;;;;12712:23:0;;;;;;:17;:23;;;;;;;;12736:10;12712:35;;;;;;;;:46;;12752:5;12712:46;:39;:46;:::i;:::-;-1:-1:-1;;;;;12674:23:0;;;;;;:17;:23;;;;;;;;12698:10;12674:35;;;;;;;:84;12798:16;;12788:27;;:5;;:27;:9;:27;:::i;:::-;-1:-1:-1;;;;;12843:15:0;;;;;;:9;:15;;;;;;12769:46;;-1:-1:-1;12843:29:0;;12769:46;12843:29;:19;:29;:::i;:::-;-1:-1:-1;;;;;12825:15:0;;;;;;;:9;:15;;;;;;:47;;;;12898:13;;;;;;;:27;;12916:8;12898:27;:17;:27;:::i;:::-;-1:-1:-1;;;;;12882:13:0;;;;;;;:9;:13;;;;;;;;;:43;;;;12940:25;;;;;;;12882:13;;12940:25;;;;;;;;;;;;;-1:-1:-1;12983:4:0;;12495:499;-1:-1:-1;;;;;12495:499:0:o;9159:37::-;9194:2;9159:37;:::o;8508:81::-;8573:9;;;;8508:81;:::o;13272:375::-;13368:4;-1:-1:-1;;;;;13396:21:0;;;;13388:30;;;;;;13499:10;13481:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;13481:38:0;;;;;;;;;;:54;;13524:10;13481:54;:42;:54;:::i;:::-;13446:10;13428:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;13428:38:0;;;;;;;;;;;;:107;;;13550:69;;;;;;13428:38;;13550:69;;;;;;;;;;;-1:-1:-1;13636:4:0;13272:375;;;;:::o;11758:150::-;11884:16;;-1:-1:-1;;;;;11865:14:0;;11835:7;11865:14;;;:9;:14;;;;;;11835:7;;11865:36;;:14;:36;:18;:36;:::i;:::-;11858:43;11758:150;-1:-1:-1;;11758:150:0:o;9933:82::-;9853:6;;;;;-1:-1:-1;;;;;9853:6:0;9863:10;9853:20;9845:65;;;;;-1:-1:-1;;;;;9845:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9989:6;:19;;-1:-1:-1;;9989:19:0;;;9933:82::o;10497:667::-;8987:14;;10609:7;;;;-1:-1:-1;;;;;8987:14:0;8973:10;:28;8965:37;;;;;;10640:16;;10636:115;;;10694:12;;10677:30;;;;;;;10687:5;;10677:30;;;;;;;;;;10728:12;;10721:19;;;;10636:115;-1:-1:-1;10846:16:0;;10829:12;;10791:11;;10829:34;;:12;:34;:16;:34;:::i;:::-;10814:12;:49;10893:1;10878:16;;10874:92;;10925:12;;:30;;10942:12;10925:30;:16;:30;:::i;:::-;10910:12;:45;10874:92;11009:12;;10994:28;;-1:-1:-1;;9461:54:0;10994:14;:28::i;:::-;10975:16;:47;;;11048:12;;:34;;;:16;:34;:::i;:::-;11033:12;:49;;;11098:30;;;;;;;11108:5;;11098:30;;;;;;;;;;11145:12;;11138:19;;9012:1;10497:667;;;;;:::o;10206:285::-;9853:6;;;;;-1:-1:-1;;;;;9853:6:0;9863:10;9853:20;9845:65;;;;;-1:-1:-1;;;;;9845:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10315:29:0;;;;10307:70;;;;;-1:-1:-1;;;;;10307:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10396:14;:32;;-1:-1:-1;;;;;10396:32:0;;-1:-1:-1;;10396:32:0;;;;;;;;10443:41;;;;;;;;;;;;;;;;10206:285;:::o;9727:81::-;9795:6;;;;;-1:-1:-1;;;;;9795:6:0;;9727:81::o;8889:29::-;;;-1:-1:-1;;;;;8889:29:0;;:::o;8424:78::-;8488:7;8481:14;;;;;;;;-1:-1:-1;;8481:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8463:6;;8481:14;;8488:7;;8481:14;;8488:7;8481:14;;;;;;;;;;;;;;;;;;;;;;;;13653:540;13754:4;;-1:-1:-1;;;;;13782:21:0;;;;13774:30;;;;;;-1:-1:-1;13851:10:0;13833:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;13833:38:0;;;;;;;;;;13885:27;;;13881:201;;13946:10;13969:1;13928:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;13928:38:0;;;;;;;;;:42;13881:201;;;14042:29;:8;14055:15;14042:29;:12;:29;:::i;:::-;14019:10;14001:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;14001:38:0;;;;;;;;;:70;13881:201;14105:10;14126:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;14096:69:0;;14126:38;;;;;;;;;;;14096:69;;;;;;;;;14105:10;14096:69;;;;;;;;;;;-1:-1:-1;14182:4:0;;13653:540;-1:-1:-1;;;13653:540:0:o;11914:401::-;12018:4;;11997:2;-1:-1:-1;;;;;9080:16:0;;;;9072:25;;;;;;-1:-1:-1;;;;;9115:19:0;;9129:4;9115:19;;9107:28;;;;;;-1:-1:-1;;;;;12046:16:0;;;;12038:25;;;;;;12102:16;;12092:27;;:5;;:27;:9;:27;:::i;:::-;12163:10;12153:21;;;;:9;:21;;;;;;12073:46;;-1:-1:-1;12153:35:0;;12073:46;12153:35;:25;:35;:::i;:::-;12139:10;12129:21;;;;:9;:21;;;;;;:59;;;;-1:-1:-1;;;;;12214:13:0;;;;;;:27;;12232:8;12214:27;:17;:27;:::i;:::-;-1:-1:-1;;;;;12198:13:0;;;;;;:9;:13;;;;;;;;;:43;;;;12256:31;;;;;;;12198:13;;12265:10;;12256:31;;;;;;;;;;-1:-1:-1;12304:4:0;;11914:401;-1:-1:-1;;;;11914:401:0:o;12321:168::-;-1:-1:-1;;;;;12448:25:0;;;12418:7;12448:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;12321:168::o;10021:179::-;9853:6;;;;;-1:-1:-1;;;;;9853:6:0;9863:10;9853:20;9845:65;;;;;-1:-1:-1;;;;;9845:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10101:22:0;;;;10093:73;;;;;-1:-1:-1;;;;;10093:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10176:6;:17;;-1:-1:-1;;;;;10176:17:0;;;;;-1:-1:-1;;10176:17:0;;;;;;;;;10021:179::o;934:130::-;992:7;1018:39;1022:1;1025;1018:39;;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1011:46;934:130;-1:-1:-1;;;934:130:0:o;353:134::-;411:7;437:43;441:1;444;437:43;;;;;;;;;;;;;;;;;;:3;:43::i;686:242::-;744:7;;768:6;;764:45;;;797:1;790:8;;;;764:45;-1:-1:-1;831:5:0;;;835:1;831;:5;854;;;;;;;;:10;846:56;;;;;-1:-1:-1;;;;;846:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;171:176;229:7;260:5;;;283:6;;;;275:46;;;;;-1:-1:-1;;;;;275:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1070:272;1156:7;;1190:12;1183:5;;;1175:28;;;;-1:-1:-1;;;;;1175:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1175:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1229:1;1225;:5;;;;;;;;;1070:272;-1:-1:-1;;;;;1070:272:0:o;493:187::-;579:7;;614:12;606:6;;;;598:29;;;;-1:-1:-1;;;;;598:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;598:29:0;-1:-1:-1;;;649:5:0;;;493:187;-1:-1:-1;493:187:0:o

Swarm Source

bzzr://a848b1df84512eb3f57ac65be568e954856e6addd0a9b91a150981f8bbf0709c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.