ETH Price: $3,344.42 (-0.98%)

Contract

0xAFcE80b19A8cE13DEc0739a1aaB7A028d6845Eb3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Initialize101481042020-05-27 13:32:531670 days ago1590586373IN
mStable: Nexus
0 ETH0.0060869441

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Nexus

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2020-05-28
*/

pragma solidity 0.5.16;

/**
  * @title INexus
  * @dev Basic interface for interacting with the Nexus i.e. SystemKernel
  */
interface INexus {
    function governor() external view returns (address);
    function getModule(bytes32 key) external view returns (address);

    function proposeModule(bytes32 _key, address _addr) external;
    function cancelProposedModule(bytes32 _key) external;
    function acceptProposedModule(bytes32 _key) external;
    function acceptProposedModules(bytes32[] calldata _keys) external;

    function requestLockModule(bytes32 _key) external;
    function cancelLockModule(bytes32 _key) external;
    function lockModule(bytes32 _key) external;
}

/**
 * @title   Governable
 * @author  Stability Labs Pty. Ltd.
 * @notice  Simple contract implementing an Ownable pattern.
 * @dev     Derives from OpenZeppelin 2.3.0 Ownable.sol
 *          Modified to have custom name and features
 */
contract Governable {

    event GovernorChanged(address indexed previousGovernor, address indexed newGovernor);

    address private _governor;


    /**
     * @dev Initializes the contract setting the deployer as the initial Governor.
     */
    constructor () internal {
        _governor = msg.sender;
        emit GovernorChanged(address(0), _governor);
    }

    /**
     * @dev Returns the address of the current Governor.
     */
    function governor() public view returns (address) {
        return _governor;
    }

    /**
     * @dev Throws if called by any account other than the Governor.
     */
    modifier onlyGovernor() {
        require(isGovernor(), "GOV: caller is not the Governor");
        _;
    }

    /**
     * @dev Returns true if the caller is the current Governor.
     */
    function isGovernor() public view returns (bool) {
        return msg.sender == _governor;
    }

    /**
     * @dev Transfers Governance of the contract to a new account (`newGovernor`).
     * Can only be called by the current Governor.
     * @param _newGovernor Address of the new Governor
     */
    function changeGovernor(address _newGovernor) external onlyGovernor {
        _changeGovernor(_newGovernor);
    }

    /**
     * @dev Change Governance of the contract to a new account (`newGovernor`).
     * @param _newGovernor Address of the new Governor
     */
    function _changeGovernor(address _newGovernor) internal {
        require(_newGovernor != address(0), "GOV: new Governor is address(0)");
        emit GovernorChanged(_governor, _newGovernor);
        _governor = _newGovernor;
    }
}

/**
 * @title   ClaimableGovernor
 * @author  Stability Labs Pty. Ltd.
 * @notice  2 way handshake for Governance transfer
 */
contract ClaimableGovernor is Governable {

    event GovernorChangeClaimed(address indexed proposedGovernor);
    event GovernorChangeCancelled(address indexed governor, address indexed proposed);
    event GovernorChangeRequested(address indexed governor, address indexed proposed);

    address public proposedGovernor = address(0);

    /**
     * @dev Throws if called by any account other than the Proposed Governor.
     */
    modifier onlyProposedGovernor() {
        require(msg.sender == proposedGovernor, "Sender is not proposed governor");
        _;
    }

    constructor(address _governorAddr) public {
        _changeGovernor(_governorAddr);
    }

    //@override
    function changeGovernor(address) external onlyGovernor {
        revert("Direct change not allowed");
    }

    /**
     * @dev Current Governor request to proposes a new Governor
     * @param _proposedGovernor Address of the proposed Governor
     */
    function requestGovernorChange(address _proposedGovernor) public onlyGovernor {
        require(_proposedGovernor != address(0), "Proposed governor is address(0)");
        require(proposedGovernor == address(0), "Proposed governor already set");

        proposedGovernor = _proposedGovernor;
        emit GovernorChangeRequested(governor(), _proposedGovernor);
    }

    /**
     * @dev Current Governor cancel Governor change request
     */
    function cancelGovernorChange() public onlyGovernor {
        require(proposedGovernor != address(0), "Proposed Governor not set");

        emit GovernorChangeCancelled(governor(), proposedGovernor);
        proposedGovernor = address(0);
    }

    /**
     * @dev Proposed Governor can claim governance ownership
     */
    function claimGovernorChange() public onlyProposedGovernor {
        _changeGovernor(proposedGovernor);
        emit GovernorChangeClaimed(proposedGovernor);
        proposedGovernor = address(0);
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @title   DelayedClaimableGovernor
 * @author  Stability Labs Pty. Ltd.
 * @notice  Current Governor can initiate governance change request.
 *          After a defined delay, proposed Governor can claim governance
 *          ownership.
 */
contract DelayedClaimableGovernor is ClaimableGovernor {

    using SafeMath for uint256;

    uint256 public delay = 0;
    uint256 public requestTime = 0;

    /**
     * @dev Initializes the contract with given delay
     * @param _governorAddr Initial governor
     * @param _delay    Delay in seconds for 2 way handshake
     */
    constructor(address _governorAddr, uint256 _delay)
        public
        ClaimableGovernor(_governorAddr)
    {
        require(_delay > 0, "Delay must be greater than zero");
        delay = _delay;
    }

    //@override
    /**
     * @dev Requests change of governor and logs request time
     * @param _proposedGovernor Address of the new governor
     */
    function requestGovernorChange(address _proposedGovernor) public onlyGovernor {
        requestTime = now;
        super.requestGovernorChange(_proposedGovernor);
    }

    //@override
    /**
     * @dev Cancels an outstanding governor change request by resetting request time
     */
    function cancelGovernorChange() public onlyGovernor {
        requestTime = 0;
        super.cancelGovernorChange();
    }

    //@override
    /**
     * @dev Proposed governor claims new position, callable after time elapsed
     */
    function claimGovernorChange() public onlyProposedGovernor {
        require(now >= (requestTime.add(delay)), "Delay not over");
        super.claimGovernorChange();
        requestTime = 0;
    }
}

/**
 * @title   Nexus
 * @author  Stability Labs Pty. Ltd.
 * @notice  This is the system address kernel, it also facilitates the changing of governor
 * @dev     The Nexus is mStable's Kernel, and allows the publishing and propagating
 *          of new system Modules. Other Modules will read from the Nexus
 */
contract Nexus is INexus, DelayedClaimableGovernor {

    event ModuleProposed(bytes32 indexed key, address addr, uint256 timestamp);
    event ModuleAdded(bytes32 indexed key, address addr, bool isLocked);
    event ModuleCancelled(bytes32 indexed key);
    event ModuleLockRequested(bytes32 indexed key, uint256 timestamp);
    event ModuleLockEnabled(bytes32 indexed key);
    event ModuleLockCancelled(bytes32 indexed key);

    /** @dev Struct to store information about current modules */
    struct Module {
        address addr;       // Module address
        bool isLocked;      // Module lock status
    }

    /** @dev Struct to store information about proposed modules */
    struct Proposal {
        address newAddress; // Proposed Module address
        uint256 timestamp;  // Timestamp when module upgrade was proposed
    }

    // 1 week delayed upgrade period
    uint256 public constant UPGRADE_DELAY = 1 weeks;

    // Module-key => Module
    mapping(bytes32 => Module) public modules;
    // Module-address => Module-key
    mapping(address => bytes32) private addressToModule;
    // Module-key => Proposal
    mapping(bytes32 => Proposal) public proposedModules;
    // Module-key => Timestamp when lock was proposed
    mapping(bytes32 => uint256) public proposedLockModules;

    // Init flag to allow add modules at the time of deplyment without delay
    bool public initialized = false;

    /**
     * @dev Modifier allows functions calls only when contract is not initialized.
     */
    modifier whenNotInitialized() {
        require(!initialized, "Nexus is already initialized");
        _;
    }

    /**
     * @dev Initialises the Nexus and adds the core data to the Kernel (itself and governor)
     * @param _governorAddr Governor address
     */
    constructor(address _governorAddr)
        public
        DelayedClaimableGovernor(_governorAddr, UPGRADE_DELAY)
    {}

    /**
     * @dev Adds multiple new modules to the system to initialize the
     *      Nexus contract with default modules. This should be called first
     *      after deploying Nexus contract.
     * @param _keys         Keys of the new modules in bytes32 form
     * @param _addresses    Contract addresses of the new modules
     * @param _isLocked     IsLocked flag for the new modules
     * @param _governorAddr New Governor address
     * @return bool         Success of publishing new Modules
     */
    function initialize(
        bytes32[] calldata _keys,
        address[] calldata _addresses,
        bool[] calldata _isLocked,
        address _governorAddr
    )
        external
        onlyGovernor
        whenNotInitialized
        returns (bool)
    {
        uint256 len = _keys.length;
        require(len > 0, "No keys provided");
        require(len == _addresses.length, "Insufficient address data");
        require(len == _isLocked.length, "Insufficient locked statuses");

        for(uint256 i = 0 ; i < len; i++) {
            _publishModule(_keys[i], _addresses[i], _isLocked[i]);
        }

        if(_governorAddr != governor()) _changeGovernor(_governorAddr);

        initialized = true;
        return true;
    }

    /***************************************
                MODULE ADDING
    ****************************************/

    /**
     * @dev Propose a new or update existing module
     * @param _key  Key of the module
     * @param _addr Address of the module
     */
    function proposeModule(bytes32 _key, address _addr)
        external
        onlyGovernor
    {
        require(_key != bytes32(0x0), "Key must not be zero");
        require(_addr != address(0), "Module address must not be 0");
        require(!modules[_key].isLocked, "Module must be unlocked");
        require(modules[_key].addr != _addr, "Module already has same address");
        Proposal storage p = proposedModules[_key];
        require(p.timestamp == 0, "Module already proposed");

        p.newAddress = _addr;
        p.timestamp = now;
        emit ModuleProposed(_key, _addr, now);
    }

    /**
     * @dev Cancel a proposed module request
     * @param _key Key of the module
     */
    function cancelProposedModule(bytes32 _key)
        external
        onlyGovernor
    {
        uint256 timestamp = proposedModules[_key].timestamp;
        require(timestamp > 0, "Proposed module not found");

        delete proposedModules[_key];
        emit ModuleCancelled(_key);
    }

    /**
     * @dev Accept and publish an already proposed module
     * @param _key Key of the module
     */
    function acceptProposedModule(bytes32 _key)
        external
        onlyGovernor
    {
        _acceptProposedModule(_key);
    }

    /**
     * @dev Accept and publish already proposed modules
     * @param _keys Keys array of the modules
     */
    function acceptProposedModules(bytes32[] calldata _keys)
        external
        onlyGovernor
    {
        uint256 len = _keys.length;
        require(len > 0, "Keys array empty");

        for(uint256 i = 0 ; i < len; i++) {
            _acceptProposedModule(_keys[i]);
        }
    }

    /**
     * @dev Accept a proposed module
     * @param _key Key of the module
     */
    function _acceptProposedModule(bytes32 _key) internal {
        Proposal memory p = proposedModules[_key];
        require(_isDelayOver(p.timestamp), "Module upgrade delay not over");

        delete proposedModules[_key];
        _publishModule(_key, p.newAddress, false);
    }

    /**
     * @dev Internal func to publish a module to kernel
     * @param _key      Key of the new module in bytes32 form
     * @param _addr     Contract address of the new module
     * @param _isLocked Flag to lock a module
     */
    function _publishModule(bytes32 _key, address _addr, bool _isLocked) internal {
        require(addressToModule[_addr] == bytes32(0x0), "Modules must have unique addr");
        require(!modules[_key].isLocked, "Module must be unlocked");
        // Old no longer points to a moduleAddress
        address oldModuleAddr = modules[_key].addr;
        if(oldModuleAddr != address(0x0)) {
            addressToModule[oldModuleAddr] = bytes32(0x0);
        }
        modules[_key].addr = _addr;
        modules[_key].isLocked = _isLocked;
        addressToModule[_addr] = _key;
        emit ModuleAdded(_key, _addr, _isLocked);
    }

    /***************************************
                MODULE LOCKING
    ****************************************/

    /**
     * @dev Request to lock an existing module
     * @param _key Key of the module
     */
    function requestLockModule(bytes32 _key)
        external
        onlyGovernor
    {
        require(moduleExists(_key), "Module must exist");
        require(!modules[_key].isLocked, "Module must be unlocked");
        require(proposedLockModules[_key] == 0, "Lock already proposed");

        proposedLockModules[_key] = now;
        emit ModuleLockRequested(_key, now);
    }

    /**
     * @dev Cancel a lock module request
     * @param _key Key of the module
     */
    function cancelLockModule(bytes32 _key)
        external
        onlyGovernor
    {
        require(proposedLockModules[_key] > 0, "Module lock request not found");

        delete proposedLockModules[_key];
        emit ModuleLockCancelled(_key);
    }

    /**
     * @dev Permanently lock a module to its current settings
     * @param _key Bytes32 key of the module
     */
    function lockModule(bytes32 _key)
        external
        onlyGovernor
    {
        require(_isDelayOver(proposedLockModules[_key]), "Delay not over");

        modules[_key].isLocked = true;
        delete proposedLockModules[_key];
        emit ModuleLockEnabled(_key);
    }

    /***************************************
                HELPERS & GETTERS
    ****************************************/

    /**
     * @dev Checks if a module exists
     * @param _key  Key of the module
     * @return      Returns 'true' when a module exists, otherwise 'false'
     */
    function moduleExists(bytes32 _key) public view returns (bool) {
        if(_key != 0 && modules[_key].addr != address(0))
            return true;
        return false;
    }

    /**
     * @dev Get the module address
     * @param _key  Key of the module
     * @return      Return the address of the module
     */
    function getModule(bytes32 _key) external view returns (address addr) {
        addr = modules[_key].addr;
    }

    /**
     * @dev Checks if upgrade delay over
     * @param _timestamp    Timestamp to check
     * @return              Return 'true' when delay is over, otherwise 'false'
     */
    function _isDelayOver(uint256 _timestamp) private view returns (bool) {
        if(_timestamp > 0 && now >= _timestamp.add(UPGRADE_DELAY))
            return true;
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_governorAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"governor","type":"address"},{"indexed":true,"internalType":"address","name":"proposed","type":"address"}],"name":"GovernorChangeCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposedGovernor","type":"address"}],"name":"GovernorChangeClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"governor","type":"address"},{"indexed":true,"internalType":"address","name":"proposed","type":"address"}],"name":"GovernorChangeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"isLocked","type":"bool"}],"name":"ModuleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"ModuleCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"ModuleLockCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"ModuleLockEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ModuleLockRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ModuleProposed","type":"event"},{"constant":true,"inputs":[],"name":"UPGRADE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"acceptProposedModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32[]","name":"_keys","type":"bytes32[]"}],"name":"acceptProposedModules","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"cancelGovernorChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"cancelLockModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"cancelProposedModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"changeGovernor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimGovernorChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"delay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"getModule","outputs":[{"internalType":"address","name":"addr","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32[]","name":"_keys","type":"bytes32[]"},{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool[]","name":"_isLocked","type":"bool[]"},{"internalType":"address","name":"_governorAddr","type":"address"}],"name":"initialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"lockModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"moduleExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"modules","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"isLocked","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"},{"internalType":"address","name":"_addr","type":"address"}],"name":"proposeModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"proposedGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"proposedLockModules","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"proposedModules","outputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proposedGovernor","type":"address"}],"name":"requestGovernorChange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"_key","type":"bytes32"}],"name":"requestLockModule","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requestTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

6080604052600180546001600160a01b0319169055600060028190556003556008805460ff1916905534801561003457600080fd5b5060405162001ba238038062001ba28339818101604052602081101561005957600080fd5b5051600080546001600160a01b0319163317808255604051839262093a809284926001600160a01b0391909116919060008051602062001b82833981519152908290a36100ae816001600160e01b0361010f16565b5060008111610104576040805162461bcd60e51b815260206004820152601f60248201527f44656c6179206d7573742062652067726561746572207468616e207a65726f00604482015290519081900360640190fd5b600255506101b49050565b6001600160a01b03811661016a576040805162461bcd60e51b815260206004820152601f60248201527f474f563a206e657720476f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b600080546040516001600160a01b038085169392169160008051602062001b8283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6119be80620001c46000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806385acd641116100c3578063b0b6cc1a1161007c578063b0b6cc1a1461049e578063c7af3352146104de578063d7e0842a146104e6578063d7fd0e7714610503578063e4c0aaf41461050b578063efa2f3a21461053157610158565b806385acd6411461042f5780638a11a3701461044c5780638c33c19c1461045457806394ccb1371461045c57806397f5fea614610479578063ad339d7a1461049657610158565b8063381042c811610115578063381042c81461023d57806347fe8b1d146103545780636921ea411461035c5780636a42b8f8146103ca5780636a89934b146103d25780636d4e19911461041257610158565b8063099c47bc1461015d57806309ea14aa146101855780630c340a24146101b1578063158ef93e146101d5578063165ed306146101f157806328066b8614610220575b600080fd5b6101836004803603602081101561017357600080fd5b50356001600160a01b031661054e565b005b6101836004803603604081101561019b57600080fd5b50803590602001356001600160a01b03166105a5565b6101b961082d565b604080516001600160a01b039092168252519081900360200190f35b6101dd61083c565b604080519115158252519081900360200190f35b61020e6004803603602081101561020757600080fd5b5035610845565b60408051918252519081900360200190f35b6101836004803603602081101561023657600080fd5b5035610857565b6101dd6004803603608081101561025357600080fd5b810190602081018135600160201b81111561026d57600080fd5b82018360208201111561027f57600080fd5b803590602001918460208302840111600160201b831117156102a057600080fd5b919390929091602081019035600160201b8111156102bd57600080fd5b8201836020820111156102cf57600080fd5b803590602001918460208302840111600160201b831117156102f057600080fd5b919390929091602081019035600160201b81111561030d57600080fd5b82018360208201111561031f57600080fd5b803590602001918460208302840111600160201b8311171561034057600080fd5b9193509150356001600160a01b03166108a7565b61020e610adc565b6101836004803603602081101561037257600080fd5b810190602081018135600160201b81111561038c57600080fd5b82018360208201111561039e57600080fd5b803590602001918460208302840111600160201b831117156103bf57600080fd5b509092509050610ae3565b61020e610ba4565b6103ef600480360360208110156103e857600080fd5b5035610baa565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101836004803603602081101561042857600080fd5b5035610bcf565b6101b96004803603602081101561044557600080fd5b5035610cc6565b6101b9610ce1565b610183610cf0565b6101dd6004803603602081101561047257600080fd5b5035610d46565b6101836004803603602081101561048f57600080fd5b5035610d83565b610183610f22565b6104bb600480360360208110156104b457600080fd5b5035610fea565b604080516001600160a01b03909316835290151560208301528051918290030190f35b6101dd611011565b610183600480360360208110156104fc57600080fd5b5035611022565b61020e61111a565b6101836004803603602081101561052157600080fd5b50356001600160a01b0316611120565b6101836004803603602081101561054757600080fd5b50356111b4565b610556611011565b610595576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b426003556105a281611296565b50565b6105ad611011565b6105ec576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b81610635576040805162461bcd60e51b81526020600482015260146024820152734b6579206d757374206e6f74206265207a65726f60601b604482015290519081900360640190fd5b6001600160a01b038116610690576040805162461bcd60e51b815260206004820152601c60248201527f4d6f64756c652061646472657373206d757374206e6f74206265203000000000604482015290519081900360640190fd5b600082815260046020526040902054600160a01b900460ff16156106f5576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b0382811691161415610764576040805162461bcd60e51b815260206004820152601f60248201527f4d6f64756c6520616c7265616479206861732073616d65206164647265737300604482015290519081900360640190fd5b60008281526006602052604090206001810154156107c9576040805162461bcd60e51b815260206004820152601760248201527f4d6f64756c6520616c72656164792070726f706f736564000000000000000000604482015290519081900360640190fd5b80546001600160a01b0319166001600160a01b03831690811782554260018301819055604080519283526020830191909152805185927fa5917e6bf5563219e2772cffe6989d6f2ef8235ab280ab88f8c37479562e58a392908290030190a2505050565b6000546001600160a01b031690565b60085460ff1681565b60076020526000908152604090205481565b61085f611011565b61089e576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6105a2816113f4565b60006108b1611011565b6108f0576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60085460ff1615610948576040805162461bcd60e51b815260206004820152601c60248201527f4e6578757320697320616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b868061098e576040805162461bcd60e51b815260206004820152601060248201526f139bc81ad95e5cc81c1c9bdd9a59195960821b604482015290519081900360640190fd5b8086146109e2576040805162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742061646472657373206461746100000000000000604482015290519081900360640190fd5b808414610a36576040805162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74206c6f636b656420737461747573657300000000604482015290519081900360640190fd5b60005b81811015610a9557610a8d8a8a83818110610a5057fe5b90506020020135898984818110610a6357fe5b905060200201356001600160a01b0316888885818110610a7f57fe5b9050602002013515156114bc565b600101610a39565b50610a9e61082d565b6001600160a01b0316836001600160a01b031614610abf57610abf83611651565b50506008805460ff19166001908117909155979650505050505050565b62093a8081565b610aeb611011565b610b2a576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b8080610b70576040805162461bcd60e51b815260206004820152601060248201526f4b65797320617272617920656d70747960801b604482015290519081900360640190fd5b60005b81811015610b9e57610b96848483818110610b8a57fe5b905060200201356113f4565b600101610b73565b50505050565b60025481565b600660205260009081526040902080546001909101546001600160a01b039091169082565b610bd7611011565b610c16576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260076020526040902054610c2e90611707565b610c70576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b6000818152600460209081526040808320805460ff60a01b1916600160a01b17905560079091528082208290555182917f097d0a4360ac95150faf267a7b4a999756a69238c2c7023cac729d81f0b733a391a250565b6000908152600460205260409020546001600160a01b031690565b6001546001600160a01b031681565b610cf8611011565b610d37576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6000600355610d44611734565b565b60008115801590610d6d57506000828152600460205260409020546001600160a01b031615155b15610d7a57506001610d7e565b5060005b919050565b610d8b611011565b610dca576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b610dd381610d46565b610e18576040805162461bcd60e51b8152602060048201526011602482015270135bd91d5b19481b5d5cdd08195e1a5cdd607a1b604482015290519081900360640190fd5b600081815260046020526040902054600160a01b900460ff1615610e7d576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b60008181526007602052604090205415610ed6576040805162461bcd60e51b8152602060048201526015602482015274131bd8dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b60008181526007602090815260409182902042908190558251908152915183927f57456e8dc47899fbd8a75be3129514a3e4cca602e26b766d4bbb821975c4375892908290030190a250565b6001546001600160a01b03163314610f81576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600254600354610f969163ffffffff61183316565b421015610fdb576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b610fe3611894565b6000600355565b6004602052600090815260409020546001600160a01b03811690600160a01b900460ff1682565b6000546001600160a01b0316331490565b61102a611011565b611069576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260066020526040902060010154806110cd576040805162461bcd60e51b815260206004820152601960248201527f50726f706f736564206d6f64756c65206e6f7420666f756e6400000000000000604482015290519081900360640190fd5b60008281526006602052604080822080546001600160a01b03191681556001018290555183917f4dd889c845f5a942b8304764283938168000b8f4903940690beb685ca2fc16cc91a25050565b60035481565b611128611011565b611167576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601960248201527f446972656374206368616e6765206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b6111bc611011565b6111fb576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60008181526007602052604090205461125b576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c65206c6f636b2072657175657374206e6f7420666f756e64000000604482015290519081900360640190fd5b6000818152600760205260408082208290555182917f3d670309414f84151711e0ac2795a2b1686580ad9faca995492166a486255db391a250565b61129e611011565b6112dd576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001600160a01b038116611338576040805162461bcd60e51b815260206004820152601f60248201527f50726f706f73656420676f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b6001546001600160a01b031615611396576040805162461bcd60e51b815260206004820152601d60248201527f50726f706f73656420676f7665726e6f7220616c726561647920736574000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383169081179091556113bc61082d565b6001600160a01b03167fa48c163cc46eb28aba8bdb525da18f15a83020cc18f439c933d79ea3ad9b50bb60405160405180910390a350565b6113fc611952565b50600081815260066020908152604091829020825180840190935280546001600160a01b031683526001015490820181905261143790611707565b611488576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6520757067726164652064656c6179206e6f74206f766572000000604482015290519081900360640190fd5b600082815260066020526040812080546001600160a01b031916815560010181905581516114b8918491906114bc565b5050565b6001600160a01b03821660009081526005602052604090205415611527576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6573206d757374206861766520756e697175652061646472000000604482015290519081900360640190fd5b600083815260046020526040902054600160a01b900460ff161561158c576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000838152600460205260409020546001600160a01b031680156115c4576001600160a01b0381166000908152600560205260408120555b60008481526004602090815260408083208054861515600160a01b810260ff60a01b196001600160a01b038b166001600160a01b0319909416841716179092558085526005845293829020889055815193845291830191909152805186927f7bf901a62d0edd068a4e74518eb8241133713d384171c7d0a3b7f6eb5c04095d92908290030190a250505050565b6001600160a01b0381166116ac576040805162461bcd60e51b815260206004820152601f60248201527f474f563a206e657720476f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8491a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008082118015610d6d57506117268262093a8063ffffffff61183316565b4210610d7a57506001610d7e565b61173c611011565b61177b576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001546001600160a01b03166117d8576040805162461bcd60e51b815260206004820152601960248201527f50726f706f73656420476f7665726e6f72206e6f742073657400000000000000604482015290519081900360640190fd5b6001546001600160a01b03166117ec61082d565b6001600160a01b03167f2f7bb10f75b8694ea78291d7ca4c9f2a75bc45f0f97046164ad3ee984bdf4bba60405160405180910390a3600180546001600160a01b0319169055565b60008282018381101561188d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001546001600160a01b031633146118f3576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600154611908906001600160a01b0316611651565b6001546040516001600160a01b03909116907f0ad714cb5607f3b529b5d3292190925ae992a77b291e39ec09c390d4787896ba90600090a2600180546001600160a01b0319169055565b60408051808201909152600080825260208201529056fe474f563a2063616c6c6572206973206e6f742074686520476f7665726e6f7200a265627a7a723158207086f7e9d76bb328fe79dc25bc590a966d779a27870e3eec7f942a4930b7f35864736f6c63430005100032de4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8400000000000000000000000019f12c947d25ff8a3b748829d8001ca09a28d46d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806385acd641116100c3578063b0b6cc1a1161007c578063b0b6cc1a1461049e578063c7af3352146104de578063d7e0842a146104e6578063d7fd0e7714610503578063e4c0aaf41461050b578063efa2f3a21461053157610158565b806385acd6411461042f5780638a11a3701461044c5780638c33c19c1461045457806394ccb1371461045c57806397f5fea614610479578063ad339d7a1461049657610158565b8063381042c811610115578063381042c81461023d57806347fe8b1d146103545780636921ea411461035c5780636a42b8f8146103ca5780636a89934b146103d25780636d4e19911461041257610158565b8063099c47bc1461015d57806309ea14aa146101855780630c340a24146101b1578063158ef93e146101d5578063165ed306146101f157806328066b8614610220575b600080fd5b6101836004803603602081101561017357600080fd5b50356001600160a01b031661054e565b005b6101836004803603604081101561019b57600080fd5b50803590602001356001600160a01b03166105a5565b6101b961082d565b604080516001600160a01b039092168252519081900360200190f35b6101dd61083c565b604080519115158252519081900360200190f35b61020e6004803603602081101561020757600080fd5b5035610845565b60408051918252519081900360200190f35b6101836004803603602081101561023657600080fd5b5035610857565b6101dd6004803603608081101561025357600080fd5b810190602081018135600160201b81111561026d57600080fd5b82018360208201111561027f57600080fd5b803590602001918460208302840111600160201b831117156102a057600080fd5b919390929091602081019035600160201b8111156102bd57600080fd5b8201836020820111156102cf57600080fd5b803590602001918460208302840111600160201b831117156102f057600080fd5b919390929091602081019035600160201b81111561030d57600080fd5b82018360208201111561031f57600080fd5b803590602001918460208302840111600160201b8311171561034057600080fd5b9193509150356001600160a01b03166108a7565b61020e610adc565b6101836004803603602081101561037257600080fd5b810190602081018135600160201b81111561038c57600080fd5b82018360208201111561039e57600080fd5b803590602001918460208302840111600160201b831117156103bf57600080fd5b509092509050610ae3565b61020e610ba4565b6103ef600480360360208110156103e857600080fd5b5035610baa565b604080516001600160a01b03909316835260208301919091528051918290030190f35b6101836004803603602081101561042857600080fd5b5035610bcf565b6101b96004803603602081101561044557600080fd5b5035610cc6565b6101b9610ce1565b610183610cf0565b6101dd6004803603602081101561047257600080fd5b5035610d46565b6101836004803603602081101561048f57600080fd5b5035610d83565b610183610f22565b6104bb600480360360208110156104b457600080fd5b5035610fea565b604080516001600160a01b03909316835290151560208301528051918290030190f35b6101dd611011565b610183600480360360208110156104fc57600080fd5b5035611022565b61020e61111a565b6101836004803603602081101561052157600080fd5b50356001600160a01b0316611120565b6101836004803603602081101561054757600080fd5b50356111b4565b610556611011565b610595576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b426003556105a281611296565b50565b6105ad611011565b6105ec576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b81610635576040805162461bcd60e51b81526020600482015260146024820152734b6579206d757374206e6f74206265207a65726f60601b604482015290519081900360640190fd5b6001600160a01b038116610690576040805162461bcd60e51b815260206004820152601c60248201527f4d6f64756c652061646472657373206d757374206e6f74206265203000000000604482015290519081900360640190fd5b600082815260046020526040902054600160a01b900460ff16156106f5576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000828152600460205260409020546001600160a01b0382811691161415610764576040805162461bcd60e51b815260206004820152601f60248201527f4d6f64756c6520616c7265616479206861732073616d65206164647265737300604482015290519081900360640190fd5b60008281526006602052604090206001810154156107c9576040805162461bcd60e51b815260206004820152601760248201527f4d6f64756c6520616c72656164792070726f706f736564000000000000000000604482015290519081900360640190fd5b80546001600160a01b0319166001600160a01b03831690811782554260018301819055604080519283526020830191909152805185927fa5917e6bf5563219e2772cffe6989d6f2ef8235ab280ab88f8c37479562e58a392908290030190a2505050565b6000546001600160a01b031690565b60085460ff1681565b60076020526000908152604090205481565b61085f611011565b61089e576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6105a2816113f4565b60006108b1611011565b6108f0576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60085460ff1615610948576040805162461bcd60e51b815260206004820152601c60248201527f4e6578757320697320616c726561647920696e697469616c697a656400000000604482015290519081900360640190fd5b868061098e576040805162461bcd60e51b815260206004820152601060248201526f139bc81ad95e5cc81c1c9bdd9a59195960821b604482015290519081900360640190fd5b8086146109e2576040805162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742061646472657373206461746100000000000000604482015290519081900360640190fd5b808414610a36576040805162461bcd60e51b815260206004820152601c60248201527f496e73756666696369656e74206c6f636b656420737461747573657300000000604482015290519081900360640190fd5b60005b81811015610a9557610a8d8a8a83818110610a5057fe5b90506020020135898984818110610a6357fe5b905060200201356001600160a01b0316888885818110610a7f57fe5b9050602002013515156114bc565b600101610a39565b50610a9e61082d565b6001600160a01b0316836001600160a01b031614610abf57610abf83611651565b50506008805460ff19166001908117909155979650505050505050565b62093a8081565b610aeb611011565b610b2a576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b8080610b70576040805162461bcd60e51b815260206004820152601060248201526f4b65797320617272617920656d70747960801b604482015290519081900360640190fd5b60005b81811015610b9e57610b96848483818110610b8a57fe5b905060200201356113f4565b600101610b73565b50505050565b60025481565b600660205260009081526040902080546001909101546001600160a01b039091169082565b610bd7611011565b610c16576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260076020526040902054610c2e90611707565b610c70576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b6000818152600460209081526040808320805460ff60a01b1916600160a01b17905560079091528082208290555182917f097d0a4360ac95150faf267a7b4a999756a69238c2c7023cac729d81f0b733a391a250565b6000908152600460205260409020546001600160a01b031690565b6001546001600160a01b031681565b610cf8611011565b610d37576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6000600355610d44611734565b565b60008115801590610d6d57506000828152600460205260409020546001600160a01b031615155b15610d7a57506001610d7e565b5060005b919050565b610d8b611011565b610dca576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b610dd381610d46565b610e18576040805162461bcd60e51b8152602060048201526011602482015270135bd91d5b19481b5d5cdd08195e1a5cdd607a1b604482015290519081900360640190fd5b600081815260046020526040902054600160a01b900460ff1615610e7d576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b60008181526007602052604090205415610ed6576040805162461bcd60e51b8152602060048201526015602482015274131bd8dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b60008181526007602090815260409182902042908190558251908152915183927f57456e8dc47899fbd8a75be3129514a3e4cca602e26b766d4bbb821975c4375892908290030190a250565b6001546001600160a01b03163314610f81576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600254600354610f969163ffffffff61183316565b421015610fdb576040805162461bcd60e51b815260206004820152600e60248201526d2232b630bc903737ba1037bb32b960911b604482015290519081900360640190fd5b610fe3611894565b6000600355565b6004602052600090815260409020546001600160a01b03811690600160a01b900460ff1682565b6000546001600160a01b0316331490565b61102a611011565b611069576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b600081815260066020526040902060010154806110cd576040805162461bcd60e51b815260206004820152601960248201527f50726f706f736564206d6f64756c65206e6f7420666f756e6400000000000000604482015290519081900360640190fd5b60008281526006602052604080822080546001600160a01b03191681556001018290555183917f4dd889c845f5a942b8304764283938168000b8f4903940690beb685ca2fc16cc91a25050565b60035481565b611128611011565b611167576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6040805162461bcd60e51b815260206004820152601960248201527f446972656374206368616e6765206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b6111bc611011565b6111fb576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b60008181526007602052604090205461125b576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c65206c6f636b2072657175657374206e6f7420666f756e64000000604482015290519081900360640190fd5b6000818152600760205260408082208290555182917f3d670309414f84151711e0ac2795a2b1686580ad9faca995492166a486255db391a250565b61129e611011565b6112dd576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001600160a01b038116611338576040805162461bcd60e51b815260206004820152601f60248201527f50726f706f73656420676f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b6001546001600160a01b031615611396576040805162461bcd60e51b815260206004820152601d60248201527f50726f706f73656420676f7665726e6f7220616c726561647920736574000000604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0383169081179091556113bc61082d565b6001600160a01b03167fa48c163cc46eb28aba8bdb525da18f15a83020cc18f439c933d79ea3ad9b50bb60405160405180910390a350565b6113fc611952565b50600081815260066020908152604091829020825180840190935280546001600160a01b031683526001015490820181905261143790611707565b611488576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6520757067726164652064656c6179206e6f74206f766572000000604482015290519081900360640190fd5b600082815260066020526040812080546001600160a01b031916815560010181905581516114b8918491906114bc565b5050565b6001600160a01b03821660009081526005602052604090205415611527576040805162461bcd60e51b815260206004820152601d60248201527f4d6f64756c6573206d757374206861766520756e697175652061646472000000604482015290519081900360640190fd5b600083815260046020526040902054600160a01b900460ff161561158c576040805162461bcd60e51b8152602060048201526017602482015276135bd91d5b19481b5d5cdd081899481d5b9b1bd8dad959604a1b604482015290519081900360640190fd5b6000838152600460205260409020546001600160a01b031680156115c4576001600160a01b0381166000908152600560205260408120555b60008481526004602090815260408083208054861515600160a01b810260ff60a01b196001600160a01b038b166001600160a01b0319909416841716179092558085526005845293829020889055815193845291830191909152805186927f7bf901a62d0edd068a4e74518eb8241133713d384171c7d0a3b7f6eb5c04095d92908290030190a250505050565b6001600160a01b0381166116ac576040805162461bcd60e51b815260206004820152601f60248201527f474f563a206e657720476f7665726e6f72206973206164647265737328302900604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fde4b3f61490b74c0ed6237523974fe299126bbbf8a8a7482fd220104c59b0c8491a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008082118015610d6d57506117268262093a8063ffffffff61183316565b4210610d7a57506001610d7e565b61173c611011565b61177b576040805162461bcd60e51b815260206004820152601f602482015260008051602061196a833981519152604482015290519081900360640190fd5b6001546001600160a01b03166117d8576040805162461bcd60e51b815260206004820152601960248201527f50726f706f73656420476f7665726e6f72206e6f742073657400000000000000604482015290519081900360640190fd5b6001546001600160a01b03166117ec61082d565b6001600160a01b03167f2f7bb10f75b8694ea78291d7ca4c9f2a75bc45f0f97046164ad3ee984bdf4bba60405160405180910390a3600180546001600160a01b0319169055565b60008282018381101561188d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001546001600160a01b031633146118f3576040805162461bcd60e51b815260206004820152601f60248201527f53656e646572206973206e6f742070726f706f73656420676f7665726e6f7200604482015290519081900360640190fd5b600154611908906001600160a01b0316611651565b6001546040516001600160a01b03909116907f0ad714cb5607f3b529b5d3292190925ae992a77b291e39ec09c390d4787896ba90600090a2600180546001600160a01b0319169055565b60408051808201909152600080825260208201529056fe474f563a2063616c6c6572206973206e6f742074686520476f7665726e6f7200a265627a7a723158207086f7e9d76bb328fe79dc25bc590a966d779a27870e3eec7f942a4930b7f35864736f6c63430005100032

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000019f12c947d25ff8a3b748829d8001ca09a28d46d

-----Decoded View---------------
Arg [0] : _governorAddr (address): 0x19F12C947D25Ff8a3b748829D8001cA09a28D46d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000019f12c947d25ff8a3b748829d8001ca09a28d46d


Deployed Bytecode Sourcemap

11761:9106:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11761:9106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10685:171;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10685:171:0;-1:-1:-1;;;;;10685:171:0;;:::i;:::-;;15304:617;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15304:617:0;;;;;;-1:-1:-1;;;;;15304:617:0;;:::i;1415:85::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1415:85:0;;;;;;;;;;;;;;13180:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;13039:54;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13039:54:0;;:::i;:::-;;;;;;;;;;;;;;;;16453:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16453:135:0;;:::i;14256:761::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14256:761:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14256:761:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14256:761:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14256:761:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14256:761:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14256:761:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14256:761:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;14256:761:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14256:761:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;14256:761:0;;-1:-1:-1;14256:761:0;-1:-1:-1;14256:761:0;-1:-1:-1;;;;;14256:761:0;;:::i;12667:47::-;;;:::i;16718:298::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16718:298:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;16718:298:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16718:298:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;16718:298:0;;-1:-1:-1;16718:298:0;-1:-1:-1;16718:298:0;:::i;10055:24::-;;;:::i;12926:51::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12926:51:0;;:::i;:::-;;;;-1:-1:-1;;;;;12926:51:0;;;;;;;;;;;;;;;;;;;;;19426:288;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19426:288:0;;:::i;20358:114::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20358:114:0;;:::i;3064:44::-;;;:::i;10985:125::-;;;:::i;20024:179::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20024:179:0;;:::i;18536:388::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18536:388:0;;:::i;11233:200::-;;;:::i;12752:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12752:41:0;;:::i;:::-;;;;-1:-1:-1;;;;;12752:41:0;;;;;;;;;;;;;;;;;;;;;1798:98;;;:::i;16031:299::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16031:299:0;;:::i;10086:30::-;;;:::i;3475:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3475:109:0;-1:-1:-1;;;;;3475:109:0;;:::i;19030:261::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19030:261:0;;:::i;10685:171::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;10788:3;10774:11;:17;10802:46;10830:17;10802:27;:46::i;:::-;10685:171;:::o;15304:617::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;15420:20;15412:53;;;;;-1:-1:-1;;;15412:53:0;;;;;;;;;;;;-1:-1:-1;;;15412:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15484:19:0;;15476:60;;;;;-1:-1:-1;;;15476:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15556:13;;;;:7;:13;;;;;:22;-1:-1:-1;;;15556:22:0;;;;15555:23;15547:59;;;;;-1:-1:-1;;;15547:59:0;;;;;;;;;;;;-1:-1:-1;;;15547:59:0;;;;;;;;;;;;;;;15625:13;;;;:7;:13;;;;;:18;-1:-1:-1;;;;;15625:27:0;;;:18;;:27;;15617:71;;;;;-1:-1:-1;;;15617:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15699:18;15720:21;;;:15;:21;;;;;15760:11;;;;:16;15752:52;;;;;-1:-1:-1;;;15752:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15817:20;;-1:-1:-1;;;;;;15817:20:0;-1:-1:-1;;;;;15817:20:0;;;;;;;15862:3;-1:-1:-1;15848:11:0;;:17;;;15881:32;;;;;;;;;;;;;;;15896:4;;15881:32;;;;;;;;;1698:1;15304:617;;:::o;1415:85::-;1456:7;1483:9;-1:-1:-1;;;;;1483:9:0;1415:85;:::o;13180:31::-;;;;;;:::o;13039:54::-;;;;;;;;;;;;;:::o;16453:135::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;16553:27;16575:4;16553:21;:27::i;14256:761::-;14512:4;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;13372:11;;;;13371:12;13363:53;;;;;-1:-1:-1;;;13363:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14548:5;14579:7;14571:36;;;;;-1:-1:-1;;;14571:36:0;;;;;;;;;;;;-1:-1:-1;;;14571:36:0;;;;;;;;;;;;;;;14626:24;;;14618:62;;;;;-1:-1:-1;;;14618:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14699:23;;;14691:64;;;;;-1:-1:-1;;;14691:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14772:9;14768:114;14792:3;14788:1;:7;14768:114;;;14817:53;14832:5;;14838:1;14832:8;;;;;;;;;;;;;14842:10;;14853:1;14842:13;;;;;;;;;;;;;-1:-1:-1;;;;;14842:13:0;14857:9;;14867:1;14857:12;;;;;;;;;;;;;;;14817:14;:53::i;:::-;14797:3;;14768:114;;;;14914:10;:8;:10::i;:::-;-1:-1:-1;;;;;14897:27:0;:13;-1:-1:-1;;;;;14897:27:0;;14894:62;;14926:30;14942:13;14926:15;:30::i;:::-;-1:-1:-1;;14969:11:0;:18;;-1:-1:-1;;14969:18:0;14983:4;14969:18;;;;;;14256:761;;;;;;;;;:::o;12667:47::-;12707:7;12667:47;:::o;16718:298::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;16845:5;16876:7;16868:36;;;;;-1:-1:-1;;;16868:36:0;;;;;;;;;;;;-1:-1:-1;;;16868:36:0;;;;;;;;;;;;;;;16921:9;16917:92;16941:3;16937:1;:7;16917:92;;;16966:31;16988:5;;16994:1;16988:8;;;;;;;;;;;;;16966:21;:31::i;:::-;16946:3;;16917:92;;;;1698:1;16718:298;;:::o;10055:24::-;;;;:::o;12926:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12926:51:0;;;;;:::o;19426:288::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;19537:25;;;;:19;:25;;;;;;19524:39;;:12;:39::i;:::-;19516:66;;;;;-1:-1:-1;;;19516:66:0;;;;;;;;;;;;-1:-1:-1;;;19516:66:0;;;;;;;;;;;;;;;19595:13;;;;:7;:13;;;;;;;;:29;;-1:-1:-1;;;;19595:29:0;-1:-1:-1;;;19595:29:0;;;19642:19;:25;;;;;;19635:32;;;19683:23;19603:4;;19683:23;;;19426:288;:::o;20358:114::-;20414:12;20446:13;;;:7;:13;;;;;:18;-1:-1:-1;;;;;20446:18:0;;20358:114::o;3064:44::-;;;-1:-1:-1;;;;;3064:44:0;;:::o;10985:125::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;11062:1;11048:11;:15;11074:28;:26;:28::i;:::-;10985:125::o;20024:179::-;20081:4;20101:9;;;;;:45;;-1:-1:-1;20144:1:0;20114:13;;;:7;:13;;;;;:18;-1:-1:-1;;;;;20114:18:0;:32;;20101:45;20098:74;;;-1:-1:-1;20168:4:0;20161:11;;20098:74;-1:-1:-1;20190:5:0;20024:179;;;;:::o;18536:388::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;18641:18;18654:4;18641:12;:18::i;:::-;18633:48;;;;;-1:-1:-1;;;18633:48:0;;;;;;;;;;;;-1:-1:-1;;;18633:48:0;;;;;;;;;;;;;;;18701:13;;;;:7;:13;;;;;:22;-1:-1:-1;;;18701:22:0;;;;18700:23;18692:59;;;;;-1:-1:-1;;;18692:59:0;;;;;;;;;;;;-1:-1:-1;;;18692:59:0;;;;;;;;;;;;;;;18770:25;;;;:19;:25;;;;;;:30;18762:64;;;;;-1:-1:-1;;;18762:64:0;;;;;;;;;;;;-1:-1:-1;;;18762:64:0;;;;;;;;;;;;;;;18839:25;;;;:19;:25;;;;;;;;;18867:3;18839:31;;;;18886:30;;;;;;;18859:4;;18886:30;;;;;;;;;18536:388;:::o;11233:200::-;3279:16;;-1:-1:-1;;;;;3279:16:0;3265:10;:30;3257:74;;;;;-1:-1:-1;;;3257:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11335:5;;11319:11;;:22;;;:15;:22;:::i;:::-;11311:3;:31;;11303:58;;;;;-1:-1:-1;;;11303:58:0;;;;;;;;;;;;-1:-1:-1;;;11303:58:0;;;;;;;;;;;;;;;11372:27;:25;:27::i;:::-;11424:1;11410:11;:15;11233:200::o;12752:41::-;;;;;;;;;;;;-1:-1:-1;;;;;12752:41:0;;;-1:-1:-1;;;12752:41:0;;;;;:::o;1798:98::-;1841:4;1879:9;-1:-1:-1;;;;;1879:9:0;1865:10;:23;;1798:98::o;16031:299::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;16131:17;16151:21;;;:15;:21;;;;;:31;;;16201:13;16193:51;;;;;-1:-1:-1;;;16193:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16264:21;;;;:15;:21;;;;;;16257:28;;-1:-1:-1;;;;;;16257:28:0;;;;;;;;16301:21;16280:4;;16301:21;;;1698:1;16031:299;:::o;10086:30::-;;;;:::o;3475:109::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;3541:35;;;-1:-1:-1;;;3541:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19030:261;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;19162:1;19134:25;;;:19;:25;;;;;;19126:71;;;;;-1:-1:-1;;;19126:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19217:25;;;;:19;:25;;;;;;19210:32;;;19258:25;19237:4;;19258:25;;;19030:261;:::o;3741:374::-;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3838:31:0;;3830:75;;;;;-1:-1:-1;;;3830:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3924:16;;-1:-1:-1;;;;;3924:16:0;:30;3916:72;;;;;-1:-1:-1;;;3916:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4001:16;:36;;-1:-1:-1;;;;;;4001:36:0;-1:-1:-1;;;;;4001:36:0;;;;;;;;4077:10;:8;:10::i;:::-;-1:-1:-1;;;;;4053:54:0;;;;;;;;;;;3741:374;:::o;17118:285::-;17183:17;;:::i;:::-;-1:-1:-1;17203:21:0;;;;:15;:21;;;;;;;;;17183:41;;;;;;;;;;-1:-1:-1;;;;;17183:41:0;;;;;;;;;;;;17243:25;;:12;:25::i;:::-;17235:67;;;;;-1:-1:-1;;;17235:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17322:21;;;;:15;:21;;;;;17315:28;;-1:-1:-1;;;;;;17315:28:0;;;;;;;;17375:12;;17354:41;;17338:4;;17375:12;17354:14;:41::i;:::-;17118:285;;:::o;17656:641::-;-1:-1:-1;;;;;17753:22:0;;17787:3;17753:22;;;:15;:22;;;;;;:38;17745:80;;;;;-1:-1:-1;;;17745:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17845:13;;;;:7;:13;;;;;:22;-1:-1:-1;;;17845:22:0;;;;17844:23;17836:59;;;;;-1:-1:-1;;;17836:59:0;;;;;;;;;;;;-1:-1:-1;;;17836:59:0;;;;;;;;;;;;;;;17958:21;17982:13;;;:7;:13;;;;;:18;-1:-1:-1;;;;;17982:18:0;18014:29;;18011:106;;-1:-1:-1;;;;;18060:30:0;;18101:3;18060:30;;;:15;:30;;;;;:45;18011:106;18127:13;;;;:7;:13;;;;;;;;:26;;18164:34;;;-1:-1:-1;;;18164:34:0;;-1:-1:-1;;;;;;;;;18127:26:0;;-1:-1:-1;;;;;;18127:26:0;;;;;18164:34;;;;;18209:22;;;:15;:22;;;;;;:29;;;18254:35;;;;;;;;;;;;;;18135:4;;18254:35;;;;;;;;;17656:641;;;;:::o;2393:236::-;-1:-1:-1;;;;;2468:26:0;;2460:70;;;;;-1:-1:-1;;;2460:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2562:9;;;2546:40;;-1:-1:-1;;;;;2546:40:0;;;;2562:9;;;2546:40;;;2597:9;:24;;-1:-1:-1;;;;;;2597:24:0;-1:-1:-1;;;;;2597:24:0;;;;;;;;;;2393:236::o;20669:195::-;20733:4;20766:1;20753:10;:14;:54;;;;-1:-1:-1;20778:29:0;:10;12707:7;20778:29;:14;:29;:::i;:::-;20771:3;:36;20750:83;;-1:-1:-1;20829:4:0;20822:11;;4202:250;1639:12;:10;:12::i;:::-;1631:56;;;;;-1:-1:-1;;;1631:56:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1631:56:0;;;;;;;;;;;;;;;4273:16;;-1:-1:-1;;;;;4273:16:0;4265:68;;;;;-1:-1:-1;;;4265:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4387:16;;-1:-1:-1;;;;;4387:16:0;4375:10;:8;:10::i;:::-;-1:-1:-1;;;;;4351:53:0;;;;;;;;;;;4415:16;:29;;-1:-1:-1;;;;;;4415:29:0;;;4202:250::o;5104:181::-;5162:7;5194:5;;;5218:6;;;;5210:46;;;;;-1:-1:-1;;;5210:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5276:1;5104:181;-1:-1:-1;;;5104:181:0:o;4540:206::-;3279:16;;-1:-1:-1;;;;;3279:16:0;3265:10;:30;3257:74;;;;;-1:-1:-1;;;3257:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4626:16;;4610:33;;-1:-1:-1;;;;;4626:16:0;4610:15;:33::i;:::-;4681:16;;4659:39;;-1:-1:-1;;;;;4681:16:0;;;;4659:39;;4681:16;;4659:39;4709:16;:29;;-1:-1:-1;;;;;;4709:29:0;;;4540:206::o;11761:9106::-;;;;;;;;;;-1:-1:-1;11761:9106:0;;;;;;;;:::o

Swarm Source

bzzr://7086f7e9d76bb328fe79dc25bc590a966d779a27870e3eec7f942a4930b7f358

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.