ETH Price: $3,113.04 (-2.20%)

Contract

0x5BA020a8835ed40936941562bdF42D66F65fc00f
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...97958592020-04-03 0:50:331686 days ago1585875033IN
0x5BA020a8...6F65fc00f
0 ETH0.000159097
Transfer Ownersh...97066362020-03-20 5:21:541700 days ago1584681714IN
0x5BA020a8...6F65fc00f
0 ETH0.0003124710
0x6080604097066242020-03-20 5:19:121700 days ago1584681552IN
 Create: AddressToAddressWhiteList
0 ETH0.0158322810

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AddressToAddressWhiteList

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 200 runs

Other Settings:
byzantium EvmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-03-20
*/

pragma solidity ^0.5.2;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     * @notice Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.2;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

// File: contracts/lib/TimeLockUpgradeV2.sol

/*
    Copyright 2018 Set Labs Inc.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

pragma solidity 0.5.7;




/**
 * @title TimeLockUpgradeV2
 * @author Set Protocol
 *
 * The TimeLockUpgradeV2 contract contains a modifier for handling minimum time period updates
 *
 * CHANGELOG:
 * - Requires that the caller is the owner
 * - New function to allow deletion of existing timelocks
 * - Added upgradeData to UpgradeRegistered event
 */
contract TimeLockUpgradeV2 is
    Ownable
{
    using SafeMath for uint256;

    /* ============ State Variables ============ */

    // Timelock Upgrade Period in seconds
    uint256 public timeLockPeriod;

    // Mapping of maps hash of registered upgrade to its registration timestam
    mapping(bytes32 => uint256) public timeLockedUpgrades;

    /* ============ Events ============ */

    event UpgradeRegistered(
        bytes32 indexed _upgradeHash,
        uint256 _timestamp,
        bytes _upgradeData
    );

    event RemoveRegisteredUpgrade(
        bytes32 indexed _upgradeHash
    );

    /* ============ Modifiers ============ */

    modifier timeLockUpgrade() {
        require(
            isOwner(),
            "TimeLockUpgradeV2: The caller must be the owner"
        );

        // If the time lock period is 0, then allow non-timebound upgrades.
        // This is useful for initialization of the protocol and for testing.
        if (timeLockPeriod > 0) {
            // The upgrade hash is defined by the hash of the transaction call data,
            // which uniquely identifies the function as well as the passed in arguments.
            bytes32 upgradeHash = keccak256(
                abi.encodePacked(
                    msg.data
                )
            );

            uint256 registrationTime = timeLockedUpgrades[upgradeHash];

            // If the upgrade hasn't been registered, register with the current time.
            if (registrationTime == 0) {
                timeLockedUpgrades[upgradeHash] = block.timestamp;

                emit UpgradeRegistered(
                    upgradeHash,
                    block.timestamp,
                    msg.data
                );

                return;
            }

            require(
                block.timestamp >= registrationTime.add(timeLockPeriod),
                "TimeLockUpgradeV2: Time lock period must have elapsed."
            );

            // Reset the timestamp to 0
            timeLockedUpgrades[upgradeHash] = 0;

        }

        // Run the rest of the upgrades
        _;
    }

    /* ============ Function ============ */

    /**
     * Removes an existing upgrade.
     *
     * @param  _upgradeHash    Keccack256 hash that uniquely identifies function called and arguments
     */
    function removeRegisteredUpgrade(
        bytes32 _upgradeHash
    )
        external
        onlyOwner
    {
        require(
            timeLockedUpgrades[_upgradeHash] != 0,
            "TimeLockUpgradeV2.removeRegisteredUpgrade: Upgrade hash must be registered"
        );

        // Reset the timestamp to 0
        timeLockedUpgrades[_upgradeHash] = 0;

        emit RemoveRegisteredUpgrade(
            _upgradeHash
        );
    }

    /**
     * Change timeLockPeriod period. Generally called after initially settings have been set up.
     *
     * @param  _timeLockPeriod   Time in seconds that upgrades need to be evaluated before execution
     */
    function setTimeLockPeriod(
        uint256 _timeLockPeriod
    )
        external
        onlyOwner
    {
        // Only allow setting of the timeLockPeriod if the period is greater than the existing
        require(
            _timeLockPeriod > timeLockPeriod,
            "TimeLockUpgradeV2: New period must be greater than existing"
        );

        timeLockPeriod = _timeLockPeriod;
    }
}

// File: contracts/lib/AddressArrayUtils.sol

// Pulled in from Cryptofin Solidity package in order to control Solidity compiler version
// https://github.com/cryptofinlabs/cryptofin-solidity/blob/master/contracts/array-utils/AddressArrayUtils.sol

pragma solidity 0.5.7;


library AddressArrayUtils {

    /**
     * Finds the index of the first occurrence of the given element.
     * @param A The input array to search
     * @param a The value to find
     * @return Returns (index and isIn) for the first occurrence starting from index 0
     */
    function indexOf(address[] memory A, address a) internal pure returns (uint256, bool) {
        uint256 length = A.length;
        for (uint256 i = 0; i < length; i++) {
            if (A[i] == a) {
                return (i, true);
            }
        }
        return (0, false);
    }

    /**
    * Returns true if the value is present in the list. Uses indexOf internally.
    * @param A The input array to search
    * @param a The value to find
    * @return Returns isIn for the first occurrence starting from index 0
    */
    function contains(address[] memory A, address a) internal pure returns (bool) {
        bool isIn;
        (, isIn) = indexOf(A, a);
        return isIn;
    }

    /**
     * Returns the combination of the two arrays
     * @param A The first array
     * @param B The second array
     * @return Returns A extended by B
     */
    function extend(address[] memory A, address[] memory B) internal pure returns (address[] memory) {
        uint256 aLength = A.length;
        uint256 bLength = B.length;
        address[] memory newAddresses = new address[](aLength + bLength);
        for (uint256 i = 0; i < aLength; i++) {
            newAddresses[i] = A[i];
        }
        for (uint256 j = 0; j < bLength; j++) {
            newAddresses[aLength + j] = B[j];
        }
        return newAddresses;
    }

    /**
     * Returns the array with a appended to A.
     * @param A The first array
     * @param a The value to append
     * @return Returns A appended by a
     */
    function append(address[] memory A, address a) internal pure returns (address[] memory) {
        address[] memory newAddresses = new address[](A.length + 1);
        for (uint256 i = 0; i < A.length; i++) {
            newAddresses[i] = A[i];
        }
        newAddresses[A.length] = a;
        return newAddresses;
    }

    /**
     * Returns the intersection of two arrays. Arrays are treated as collections, so duplicates are kept.
     * @param A The first array
     * @param B The second array
     * @return The intersection of the two arrays
     */
    function intersect(address[] memory A, address[] memory B) internal pure returns (address[] memory) {
        uint256 length = A.length;
        bool[] memory includeMap = new bool[](length);
        uint256 newLength = 0;
        for (uint256 i = 0; i < length; i++) {
            if (contains(B, A[i])) {
                includeMap[i] = true;
                newLength++;
            }
        }
        address[] memory newAddresses = new address[](newLength);
        uint256 j = 0;
        for (uint256 k = 0; k < length; k++) {
            if (includeMap[k]) {
                newAddresses[j] = A[k];
                j++;
            }
        }
        return newAddresses;
    }

    /**
     * Returns the union of the two arrays. Order is not guaranteed.
     * @param A The first array
     * @param B The second array
     * @return The union of the two arrays
     */
    function union(address[] memory A, address[] memory B) internal pure returns (address[] memory) {
        address[] memory leftDifference = difference(A, B);
        address[] memory rightDifference = difference(B, A);
        address[] memory intersection = intersect(A, B);
        return extend(leftDifference, extend(intersection, rightDifference));
    }

    /**
     * Computes the difference of two arrays. Assumes there are no duplicates.
     * @param A The first array
     * @param B The second array
     * @return The difference of the two arrays
     */
    function difference(address[] memory A, address[] memory B) internal pure returns (address[] memory) {
        uint256 length = A.length;
        bool[] memory includeMap = new bool[](length);
        uint256 count = 0;
        // First count the new length because can't push for in-memory arrays
        for (uint256 i = 0; i < length; i++) {
            address e = A[i];
            if (!contains(B, e)) {
                includeMap[i] = true;
                count++;
            }
        }
        address[] memory newAddresses = new address[](count);
        uint256 j = 0;
        for (uint256 k = 0; k < length; k++) {
            if (includeMap[k]) {
                newAddresses[j] = A[k];
                j++;
            }
        }
        return newAddresses;
    }

    /**
    * Removes specified index from array
    * Resulting ordering is not guaranteed
    * @return Returns the new array and the removed entry
    */
    function pop(address[] memory A, uint256 index)
        internal
        pure
        returns (address[] memory, address)
    {
        uint256 length = A.length;
        address[] memory newAddresses = new address[](length - 1);
        for (uint256 i = 0; i < index; i++) {
            newAddresses[i] = A[i];
        }
        for (uint256 j = index + 1; j < length; j++) {
            newAddresses[j - 1] = A[j];
        }
        return (newAddresses, A[index]);
    }

    /**
     * @return Returns the new array
     */
    function remove(address[] memory A, address a)
        internal
        pure
        returns (address[] memory)
    {
        (uint256 index, bool isIn) = indexOf(A, a);
        if (!isIn) {
            revert();
        } else {
            (address[] memory _A,) = pop(A, index);
            return _A;
        }
    }

    /**
     * Returns whether or not there's a duplicate. Runs in O(n^2).
     * @param A Array to search
     * @return Returns true if duplicate, false otherwise
     */
    function hasDuplicate(address[] memory A) internal pure returns (bool) {
        if (A.length == 0) {
            return false;
        }
        for (uint256 i = 0; i < A.length - 1; i++) {
            for (uint256 j = i + 1; j < A.length; j++) {
                if (A[i] == A[j]) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * Returns whether the two arrays are equal.
     * @param A The first array
     * @param B The second array
     * @return True is the arrays are equal, false if not.
     */
    function isEqual(address[] memory A, address[] memory B) internal pure returns (bool) {
        if (A.length != B.length) {
            return false;
        }
        for (uint256 i = 0; i < A.length; i++) {
            if (A[i] != B[i]) {
                return false;
            }
        }
        return true;
    }
}

// File: contracts/lib/AddressToAddressWhiteList.sol

/*
    Copyright 2020 Set Labs Inc.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
*/

pragma solidity 0.5.7;




/**
 * @title AddressToAddressWhiteList
 * @author Set Protocol
 *
 * WhiteList that matches addresses to other addresses
 */
contract AddressToAddressWhiteList is
    TimeLockUpgradeV2
{
    using AddressArrayUtils for address[];

    /* ============ State Variables ============ */

    address[] public keys;
    mapping(address => address) public whitelist;

    /* ============ Events ============ */

    event PairAdded(
        address indexed key,
        address value
    );

    event PairRemoved(
        address indexed key,
        address value
    );

    /* ============ Constructor ============ */

    /**
     * Constructor function for AddressToAddressWhiteList
     *
     * Allow initial addresses to be passed in so a separate transaction is not required for each.
     * Each key type address passed is matched with a corresponding value type token address at the same index.
     * The _initialKeys and _initialValues arrays must be equal length.
     *
     * @param _initialKeys         Starting set of key type addresses to whitelist
     * @param _initialValues       Starting set of value type addresses to whitelist
     */
    constructor(
        address[] memory _initialKeys,
        address[] memory _initialValues
    )
        public
    {
        require(
            _initialKeys.length == _initialValues.length,
            "AddressToAddressWhiteList.constructor: Address array lengths must match."
        );

        // Add each of initial addresses to state
        for (uint256 i = 0; i < _initialKeys.length; i++) {
            address keyTypeAddressToAdd = _initialKeys[i];

            // Require keys are unique
            require(
                whitelist[keyTypeAddressToAdd] == address(0),
                "AddressToAddressWhiteList.constructor: Key must be unique."
            );

            // Require values are non zero addresses
            require(
                _initialValues[i] != address(0),
                "AddressToAddressWhiteList.constructor: Value must be non zero."
            );

            keys.push(keyTypeAddressToAdd);
            whitelist[keyTypeAddressToAdd] = _initialValues[i];
        }
    }

    /* ============ External Functions ============ */

    /**
     * Add an address to the whitelist
     *
     * @param _key     Key type address to add to the whitelist
     * @param _value   Value type address to add to the whitelist under _key
     */
    function addPair(
        address _key,
        address _value
    )
        external
        timeLockUpgrade
    {
        require(
            whitelist[_key] == address(0),
            "AddressToAddressWhiteList.addPair: Address pair already exists."
        );

        require(
            _value != address(0),
            "AddressToAddressWhiteList.addPair: Value must be non zero."
        );

        keys.push(_key);
        whitelist[_key] = _value;

        emit PairAdded(_key, _value);
    }

    /**
     * Remove a address to address pair from the whitelist
     *
     * @param _key    Key type address to remove to the whitelist
     */
    function removePair(
        address _key
    )
        external
        timeLockUpgrade
    {
        address valueToRemove = whitelist[_key];

        require(
            valueToRemove != address(0),
            "AddressToAddressWhiteList.removePair: key type address is not current whitelisted."
        );

        keys = keys.remove(_key);
        whitelist[_key] = address(0);

        emit PairRemoved(_key, valueToRemove);
    }

    /**
     * Edit value type address associated with a key
     *
     * @param _key       Key type address to add to the whitelist
     * @param _value     Value type address to add to the whitelist under _key
     */
    function editPair(
        address _key,
        address _value
    )
        external
        timeLockUpgrade
    {
        require(
            whitelist[_key] != address(0),
            "AddressToAddressWhiteList.editPair: Address pair must exist."
        );

        require(
            _value != address(0),
            "AddressToAddressWhiteList.editPair: New value must be non zero."
        );

        emit PairRemoved(
            _key,
            whitelist[_key]
        );

        // Set new value type address for passed key type address
        whitelist[_key] = _value;

        emit PairAdded(
            _key,
            _value
        );
    }

    /**
     * Return array of all whitelisted addresses
     *
     * @return address[]      Array of key type addresses
     */
    function validAddresses()
        external
        view
        returns (address[] memory)
    {
        return keys;
    }

    /**
     * Return array of value type addresses based on passed in key type addresses
     *
     * @param  _key                Array of key type addresses to get value type addresses for
     * @return address[]           Array of value type addresses
     */
    function getValues(
        address[] calldata _key
    )
        external
        view
        returns (address[] memory)
    {
        // Get length of passed array
        uint256 arrayLength = _key.length;

        // Instantiate value type addresses array
        address[] memory values = new address[](arrayLength);

        for (uint256 i = 0; i < arrayLength; i++) {
            // Get value type address for key type address at index i
            values[i] = getValue(
                _key[i]
            );
        }

        return values;
    }

    /**
     * Return value type address associated with a passed key type address
     *
     * @param  _key               Address of key type
     * @return address            Address associated with _key
     */
    function getValue(
        address _key
    )
        public
        view
        returns (address)
    {
        // Require key to have matching value type address
        require(
            whitelist[_key] != address(0),
            "AddressToAddressWhiteList.getValue: No value for that address."
        );

        // Return address associated with key
        return whitelist[_key];
    }

    /**
     * Verifies an array of addresses against the whitelist
     *
     * @param  _keys                Array of key type addresses to check if value exists
     * @return bool                 Whether all addresses in the list are whitelisted
     */
    function areValidAddresses(
        address[] calldata _keys
    )
        external
        view
        returns (bool)
    {
        // Get length of passed array
        uint256 arrayLength = _keys.length;

        for (uint256 i = 0; i < arrayLength; i++) {
            // Return false if key type address doesn't have matching value type address
            if (whitelist[_keys[i]] == address(0)) {
                return false;
            }
        }

        return true;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_key","type":"address[]"}],"name":"getValues","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"keys","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"timeLockedUpgrades","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_keys","type":"address[]"}],"name":"areValidAddresses","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_key","type":"address"}],"name":"getValue","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_value","type":"address"}],"name":"editPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timeLockPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_timeLockPeriod","type":"uint256"}],"name":"setTimeLockPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"address"}],"name":"removePair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"address"},{"name":"_value","type":"address"}],"name":"addPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_upgradeHash","type":"bytes32"}],"name":"removeRegisteredUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"validAddresses","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialKeys","type":"address[]"},{"name":"_initialValues","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"key","type":"address"},{"indexed":false,"name":"value","type":"address"}],"name":"PairAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"key","type":"address"},{"indexed":false,"name":"value","type":"address"}],"name":"PairRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_upgradeHash","type":"bytes32"},{"indexed":false,"name":"_timestamp","type":"uint256"},{"indexed":false,"name":"_upgradeData","type":"bytes"}],"name":"UpgradeRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_upgradeHash","type":"bytes32"}],"name":"RemoveRegisteredUpgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040523480156200001157600080fd5b50604051620019b9380380620019b9833981018060405260408110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b820160208101848111156200006457600080fd5b81518560208202830111640100000000821117156200008257600080fd5b505092919060200180516401000000008111156200009f57600080fd5b82016020810184811115620000b357600080fd5b8151856020820283011164010000000082111715620000d157600080fd5b505060008054600160a060020a0319163317808255604051929550600160a060020a0316935091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a380518251146200017a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180620018f96048913960600191505060405180910390fd5b60005b82518110156200033a5760008382815181106200019657fe5b602090810291909101810151600160a060020a0380821660009081526004909352604090922054909250161562000219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806200197f603a913960400191505060405180910390fd5b6000600160a060020a03168383815181106200023157fe5b6020026020010151600160a060020a031614156200029b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018062001941603e913960400191505060405180910390fd5b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018054600160a060020a031916600160a060020a0383161790558251839083908110620002f557fe5b602090810291909101810151600160a060020a039283166000908152600490925260409091208054600160a060020a031916929091169190911790556001016200017d565b5050506115ac806200034d6000396000f3fe608060405234801561001057600080fd5b5060043610610128576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100bf578063af6c9c1d1161008e578063af6c9c1d14610392578063b6f3e087146103b8578063cc75c9b0146103e6578063e7d22fdb14610403578063f2fde38b1461040b57610128565b80638da5cb5b1461033f5780638f32d59b146103475780639303b16f1461034f5780639b19251a1461036c57610128565b80633ccc0522116100fb5780633ccc0522146102d95780636090777b146102ff578063715018a61461032f57806378446bc11461033757610128565b8063031979141461012d5780630cb6aaf1146101ed5780631766486d1461022657806332ed010e14610255575b600080fd5b61019d6004803603602081101561014357600080fd5b81019060208101813564010000000081111561015e57600080fd5b82018360208201111561017057600080fd5b8035906020019184602083028401116401000000008311171561019257600080fd5b509092509050610431565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101d95781810151838201526020016101c1565b505050509050019250505060405180910390f35b61020a6004803603602081101561020357600080fd5b50356104ca565b60408051600160a060020a039092168252519081900360200190f35b6102436004803603602081101561023c57600080fd5b50356104f1565b60408051918252519081900360200190f35b6102c56004803603602081101561026b57600080fd5b81019060208101813564010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460208302840111640100000000831117156102ba57600080fd5b509092509050610503565b604080519115158252519081900360200190f35b61020a600480360360208110156102ef57600080fd5b5035600160a060020a0316610570565b61032d6004803603604081101561031557600080fd5b50600160a060020a03813581169160200135166105ea565b005b61032d6108d0565b61024361092b565b61020a610931565b6102c5610941565b61032d6004803603602081101561036557600080fd5b5035610952565b61020a6004803603602081101561038257600080fd5b5035600160a060020a03166109ab565b61032d600480360360208110156103a857600080fd5b5035600160a060020a03166109c6565b61032d600480360360408110156103ce57600080fd5b50600160a060020a0381358116916020013516610c90565b61032d600480360360208110156103fc57600080fd5b5035610f5a565b61019d610ff3565b61032d6004803603602081101561042157600080fd5b5035600160a060020a0316611055565b60408051828152602080840282010190915260609082908290828015610461578160200160208202803883390190505b50905060005b828110156104bf5761049386868381811061047e57fe5b90506020020135600160a060020a0316610570565b82828151811061049f57fe5b600160a060020a0390921660209283029190910190910152600101610467565b509150505b92915050565b600381815481106104d757fe5b600091825260209091200154600160a060020a0316905081565b60026020526000908152604090205481565b600081815b8181101561056557600060048187878581811061052157fe5b600160a060020a036020918202939093013583168452830193909352604090910160002054169190911415905061055d576000925050506104c4565b600101610508565b506001949350505050565b600160a060020a038181166000908152600460205260408120549091166105cb5760405160e560020a62461bcd02815260040180806020018281038252603e815260200180611398603e913960400191505060405180910390fd5b50600160a060020a039081166000908152600460205260409020541690565b6105f2610941565b6106305760405160e560020a62461bcd02815260040180806020018281038252602f815260200180611485602f913960400191505060405180910390fd5b600154156107725760008036604051602001808383808284376040805191909301818103601f190182528352805160209182012060008181526002909252929020549195509093505050811515905061070c57426002600084815260200190815260200160002081905550817fe44f46be6285c6d0bb89d91e4b554c2fd26cf7c68fc1379279b8e97a2d712b6a4260003660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a250506108cc565b60015461072090829063ffffffff61106f16565b4210156107615760405160e560020a62461bcd0281526004018080602001828103825260368152602001806114156036913960400191505060405180910390fd5b506000908152600260205260408120555b600160a060020a03828116600090815260046020526040902054166107cb5760405160e560020a62461bcd02815260040180806020018281038252603c8152602001806114b4603c913960400191505060405180910390fd5b600160a060020a0381166108135760405160e560020a62461bcd02815260040180806020018281038252603f8152602001806114f0603f913960400191505060405180910390fd5b600160a060020a0380831660008181526004602090815260409182902054825194168452905191927fcfacf9d602eaae62e56c577b2340ef89b971ff33287fa964a1d17027e8ea2d42929081900390910190a2600160a060020a038281166000818152600460209081526040918290208054600160a060020a03191694861694851790558151938452905191927fc26cc79589f7c5b1fb18650002371abf239e6083ab356e4179c11da5185611ec929081900390910190a25b5050565b6108d8610941565b6108e157600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054600160a060020a0319169055565b60015481565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b61095a610941565b61096357600080fd5b60015481116109a65760405160e560020a62461bcd02815260040180806020018281038252603b815260200180611313603b913960400191505060405180910390fd5b600155565b600460205260009081526040902054600160a060020a031681565b6109ce610941565b610a0c5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180611485602f913960400191505060405180910390fd5b60015415610b4e5760008036604051602001808383808284376040805191909301818103601f1901825283528051602091820120600081815260029092529290205491955090935050508115159050610ae857426002600084815260200190815260200160002081905550817fe44f46be6285c6d0bb89d91e4b554c2fd26cf7c68fc1379279b8e97a2d712b6a4260003660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a25050610c8d565b600154610afc90829063ffffffff61106f16565b421015610b3d5760405160e560020a62461bcd0281526004018080602001828103825260368152602001806114156036913960400191505060405180910390fd5b506000908152600260205260408120555b600160a060020a038082166000908152600460205260409020541680610ba85760405160e560020a62461bcd02815260040180806020018281038252605281526020018061152f6052913960600191505060405180910390fd5b610c15826003805480602002602001604051908101604052809291908181526020018280548015610c0257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610be4575b505050505061108890919063ffffffff16565b8051610c2991600391602090910190611289565b50600160a060020a038083166000818152600460209081526040918290208054600160a060020a031916905581519385168452905191927fcfacf9d602eaae62e56c577b2340ef89b971ff33287fa964a1d17027e8ea2d42929081900390910190a2505b50565b610c98610941565b610cd65760405160e560020a62461bcd02815260040180806020018281038252602f815260200180611485602f913960400191505060405180910390fd5b60015415610e185760008036604051602001808383808284376040805191909301818103601f1901825283528051602091820120600081815260029092529290205491955090935050508115159050610db257426002600084815260200190815260200160002081905550817fe44f46be6285c6d0bb89d91e4b554c2fd26cf7c68fc1379279b8e97a2d712b6a4260003660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a250506108cc565b600154610dc690829063ffffffff61106f16565b421015610e075760405160e560020a62461bcd0281526004018080602001828103825260368152602001806114156036913960400191505060405180910390fd5b506000908152600260205260408120555b600160a060020a038281166000908152600460205260409020541615610e725760405160e560020a62461bcd02815260040180806020018281038252603f8152602001806113d6603f913960400191505060405180910390fd5b600160a060020a038116610eba5760405160e560020a62461bcd02815260040180806020018281038252603a81526020018061144b603a913960400191505060405180910390fd5b60038054600181019091557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018054600160a060020a03808516600160a060020a0319928316811790935560008381526004602090815260409182902080549387169390941683179093558051918252517fc26cc79589f7c5b1fb18650002371abf239e6083ab356e4179c11da5185611ec929181900390910190a25050565b610f62610941565b610f6b57600080fd5b600081815260026020526040902054610fb85760405160e560020a62461bcd02815260040180806020018281038252604a81526020018061134e604a913960600191505060405180910390fd5b6000818152600260205260408082208290555182917f068cc8f97648f23db94d0e1a707a54447d07effeb11c1c297168aa67321dc4ec91a250565b6060600380548060200260200160405190810160405280929190818152602001828054801561104b57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161102d575b5050505050905090565b61105d610941565b61106657600080fd5b610c8d816110bd565b60008282018381101561108157600080fd5b9392505050565b6060600080611097858561112b565b91509150806110a557600080fd5b60606110b1868461118f565b5093506104c492505050565b600160a060020a0381166110d057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b81516000908190815b8181101561117e5784600160a060020a031686828151811061115257fe5b6020026020010151600160a060020a03161415611176579250600191506111889050565b600101611134565b5060009250829150505b9250929050565b6060600080845190506060600182036040519080825280602002602001820160405280156111c7578160200160208202803883390190505b50905060005b85811015611215578681815181106111e157fe5b60200260200101518282815181106111f557fe5b600160a060020a03909216602092830291909101909101526001016111cd565b50600185015b828110156112665786818151811061122f57fe5b602002602001015182600183038151811061124657fe5b600160a060020a039092166020928302919091019091015260010161121b565b508086868151811061127457fe5b60200260200101519350935050509250929050565b8280548282559060005260206000209081019282156112de579160200282015b828111156112de5782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906112a9565b506112ea9291506112ee565b5090565b61093e91905b808211156112ea578054600160a060020a03191681556001016112f456fe54696d654c6f636b5570677261646556323a204e657720706572696f64206d7573742062652067726561746572207468616e206578697374696e6754696d654c6f636b5570677261646556322e72656d6f766552656769737465726564557067726164653a20557067726164652068617368206d757374206265207265676973746572656441646472657373546f4164647265737357686974654c6973742e67657456616c75653a204e6f2076616c756520666f72207468617420616464726573732e41646472657373546f4164647265737357686974654c6973742e616464506169723a2041646472657373207061697220616c7265616479206578697374732e54696d654c6f636b5570677261646556323a2054696d65206c6f636b20706572696f64206d757374206861766520656c61707365642e41646472657373546f4164647265737357686974654c6973742e616464506169723a2056616c7565206d757374206265206e6f6e207a65726f2e54696d654c6f636b5570677261646556323a205468652063616c6c6572206d75737420626520746865206f776e657241646472657373546f4164647265737357686974654c6973742e65646974506169723a20416464726573732070616972206d7573742065786973742e41646472657373546f4164647265737357686974654c6973742e65646974506169723a204e65772076616c7565206d757374206265206e6f6e207a65726f2e41646472657373546f4164647265737357686974654c6973742e72656d6f7665506169723a206b657920747970652061646472657373206973206e6f742063757272656e742077686974656c69737465642ea165627a7a72305820d5bc0527b22e8015f6b117810fa9636643f07edb958db09e19dae9fc43c349b4002941646472657373546f4164647265737357686974654c6973742e636f6e7374727563746f723a2041646472657373206172726179206c656e67746873206d757374206d617463682e41646472657373546f4164647265737357686974654c6973742e636f6e7374727563746f723a2056616c7565206d757374206265206e6f6e207a65726f2e41646472657373546f4164647265737357686974654c6973742e636f6e7374727563746f723a204b6579206d75737420626520756e697175652e0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000060000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4070000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e00000000000000000000000000000000000000000000000000000000000000060000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8620000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4980000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef

Deployed Bytecode

0x608060405234801561001057600080fd5b5060043610610128576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100bf578063af6c9c1d1161008e578063af6c9c1d14610392578063b6f3e087146103b8578063cc75c9b0146103e6578063e7d22fdb14610403578063f2fde38b1461040b57610128565b80638da5cb5b1461033f5780638f32d59b146103475780639303b16f1461034f5780639b19251a1461036c57610128565b80633ccc0522116100fb5780633ccc0522146102d95780636090777b146102ff578063715018a61461032f57806378446bc11461033757610128565b8063031979141461012d5780630cb6aaf1146101ed5780631766486d1461022657806332ed010e14610255575b600080fd5b61019d6004803603602081101561014357600080fd5b81019060208101813564010000000081111561015e57600080fd5b82018360208201111561017057600080fd5b8035906020019184602083028401116401000000008311171561019257600080fd5b509092509050610431565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101d95781810151838201526020016101c1565b505050509050019250505060405180910390f35b61020a6004803603602081101561020357600080fd5b50356104ca565b60408051600160a060020a039092168252519081900360200190f35b6102436004803603602081101561023c57600080fd5b50356104f1565b60408051918252519081900360200190f35b6102c56004803603602081101561026b57600080fd5b81019060208101813564010000000081111561028657600080fd5b82018360208201111561029857600080fd5b803590602001918460208302840111640100000000831117156102ba57600080fd5b509092509050610503565b604080519115158252519081900360200190f35b61020a600480360360208110156102ef57600080fd5b5035600160a060020a0316610570565b61032d6004803603604081101561031557600080fd5b50600160a060020a03813581169160200135166105ea565b005b61032d6108d0565b61024361092b565b61020a610931565b6102c5610941565b61032d6004803603602081101561036557600080fd5b5035610952565b61020a6004803603602081101561038257600080fd5b5035600160a060020a03166109ab565b61032d600480360360208110156103a857600080fd5b5035600160a060020a03166109c6565b61032d600480360360408110156103ce57600080fd5b50600160a060020a0381358116916020013516610c90565b61032d600480360360208110156103fc57600080fd5b5035610f5a565b61019d610ff3565b61032d6004803603602081101561042157600080fd5b5035600160a060020a0316611055565b60408051828152602080840282010190915260609082908290828015610461578160200160208202803883390190505b50905060005b828110156104bf5761049386868381811061047e57fe5b90506020020135600160a060020a0316610570565b82828151811061049f57fe5b600160a060020a0390921660209283029190910190910152600101610467565b509150505b92915050565b600381815481106104d757fe5b600091825260209091200154600160a060020a0316905081565b60026020526000908152604090205481565b600081815b8181101561056557600060048187878581811061052157fe5b600160a060020a036020918202939093013583168452830193909352604090910160002054169190911415905061055d576000925050506104c4565b600101610508565b506001949350505050565b600160a060020a038181166000908152600460205260408120549091166105cb5760405160e560020a62461bcd02815260040180806020018281038252603e815260200180611398603e913960400191505060405180910390fd5b50600160a060020a039081166000908152600460205260409020541690565b6105f2610941565b6106305760405160e560020a62461bcd02815260040180806020018281038252602f815260200180611485602f913960400191505060405180910390fd5b600154156107725760008036604051602001808383808284376040805191909301818103601f190182528352805160209182012060008181526002909252929020549195509093505050811515905061070c57426002600084815260200190815260200160002081905550817fe44f46be6285c6d0bb89d91e4b554c2fd26cf7c68fc1379279b8e97a2d712b6a4260003660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a250506108cc565b60015461072090829063ffffffff61106f16565b4210156107615760405160e560020a62461bcd0281526004018080602001828103825260368152602001806114156036913960400191505060405180910390fd5b506000908152600260205260408120555b600160a060020a03828116600090815260046020526040902054166107cb5760405160e560020a62461bcd02815260040180806020018281038252603c8152602001806114b4603c913960400191505060405180910390fd5b600160a060020a0381166108135760405160e560020a62461bcd02815260040180806020018281038252603f8152602001806114f0603f913960400191505060405180910390fd5b600160a060020a0380831660008181526004602090815260409182902054825194168452905191927fcfacf9d602eaae62e56c577b2340ef89b971ff33287fa964a1d17027e8ea2d42929081900390910190a2600160a060020a038281166000818152600460209081526040918290208054600160a060020a03191694861694851790558151938452905191927fc26cc79589f7c5b1fb18650002371abf239e6083ab356e4179c11da5185611ec929081900390910190a25b5050565b6108d8610941565b6108e157600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054600160a060020a0319169055565b60015481565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b61095a610941565b61096357600080fd5b60015481116109a65760405160e560020a62461bcd02815260040180806020018281038252603b815260200180611313603b913960400191505060405180910390fd5b600155565b600460205260009081526040902054600160a060020a031681565b6109ce610941565b610a0c5760405160e560020a62461bcd02815260040180806020018281038252602f815260200180611485602f913960400191505060405180910390fd5b60015415610b4e5760008036604051602001808383808284376040805191909301818103601f1901825283528051602091820120600081815260029092529290205491955090935050508115159050610ae857426002600084815260200190815260200160002081905550817fe44f46be6285c6d0bb89d91e4b554c2fd26cf7c68fc1379279b8e97a2d712b6a4260003660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a25050610c8d565b600154610afc90829063ffffffff61106f16565b421015610b3d5760405160e560020a62461bcd0281526004018080602001828103825260368152602001806114156036913960400191505060405180910390fd5b506000908152600260205260408120555b600160a060020a038082166000908152600460205260409020541680610ba85760405160e560020a62461bcd02815260040180806020018281038252605281526020018061152f6052913960600191505060405180910390fd5b610c15826003805480602002602001604051908101604052809291908181526020018280548015610c0257602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311610be4575b505050505061108890919063ffffffff16565b8051610c2991600391602090910190611289565b50600160a060020a038083166000818152600460209081526040918290208054600160a060020a031916905581519385168452905191927fcfacf9d602eaae62e56c577b2340ef89b971ff33287fa964a1d17027e8ea2d42929081900390910190a2505b50565b610c98610941565b610cd65760405160e560020a62461bcd02815260040180806020018281038252602f815260200180611485602f913960400191505060405180910390fd5b60015415610e185760008036604051602001808383808284376040805191909301818103601f1901825283528051602091820120600081815260029092529290205491955090935050508115159050610db257426002600084815260200190815260200160002081905550817fe44f46be6285c6d0bb89d91e4b554c2fd26cf7c68fc1379279b8e97a2d712b6a4260003660405180848152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f1916909201829003965090945050505050a250506108cc565b600154610dc690829063ffffffff61106f16565b421015610e075760405160e560020a62461bcd0281526004018080602001828103825260368152602001806114156036913960400191505060405180910390fd5b506000908152600260205260408120555b600160a060020a038281166000908152600460205260409020541615610e725760405160e560020a62461bcd02815260040180806020018281038252603f8152602001806113d6603f913960400191505060405180910390fd5b600160a060020a038116610eba5760405160e560020a62461bcd02815260040180806020018281038252603a81526020018061144b603a913960400191505060405180910390fd5b60038054600181019091557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018054600160a060020a03808516600160a060020a0319928316811790935560008381526004602090815260409182902080549387169390941683179093558051918252517fc26cc79589f7c5b1fb18650002371abf239e6083ab356e4179c11da5185611ec929181900390910190a25050565b610f62610941565b610f6b57600080fd5b600081815260026020526040902054610fb85760405160e560020a62461bcd02815260040180806020018281038252604a81526020018061134e604a913960600191505060405180910390fd5b6000818152600260205260408082208290555182917f068cc8f97648f23db94d0e1a707a54447d07effeb11c1c297168aa67321dc4ec91a250565b6060600380548060200260200160405190810160405280929190818152602001828054801561104b57602002820191906000526020600020905b8154600160a060020a0316815260019091019060200180831161102d575b5050505050905090565b61105d610941565b61106657600080fd5b610c8d816110bd565b60008282018381101561108157600080fd5b9392505050565b6060600080611097858561112b565b91509150806110a557600080fd5b60606110b1868461118f565b5093506104c492505050565b600160a060020a0381166110d057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054600160a060020a031916600160a060020a0392909216919091179055565b81516000908190815b8181101561117e5784600160a060020a031686828151811061115257fe5b6020026020010151600160a060020a03161415611176579250600191506111889050565b600101611134565b5060009250829150505b9250929050565b6060600080845190506060600182036040519080825280602002602001820160405280156111c7578160200160208202803883390190505b50905060005b85811015611215578681815181106111e157fe5b60200260200101518282815181106111f557fe5b600160a060020a03909216602092830291909101909101526001016111cd565b50600185015b828110156112665786818151811061122f57fe5b602002602001015182600183038151811061124657fe5b600160a060020a039092166020928302919091019091015260010161121b565b508086868151811061127457fe5b60200260200101519350935050509250929050565b8280548282559060005260206000209081019282156112de579160200282015b828111156112de5782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906112a9565b506112ea9291506112ee565b5090565b61093e91905b808211156112ea578054600160a060020a03191681556001016112f456fe54696d654c6f636b5570677261646556323a204e657720706572696f64206d7573742062652067726561746572207468616e206578697374696e6754696d654c6f636b5570677261646556322e72656d6f766552656769737465726564557067726164653a20557067726164652068617368206d757374206265207265676973746572656441646472657373546f4164647265737357686974654c6973742e67657456616c75653a204e6f2076616c756520666f72207468617420616464726573732e41646472657373546f4164647265737357686974654c6973742e616464506169723a2041646472657373207061697220616c7265616479206578697374732e54696d654c6f636b5570677261646556323a2054696d65206c6f636b20706572696f64206d757374206861766520656c61707365642e41646472657373546f4164647265737357686974654c6973742e616464506169723a2056616c7565206d757374206265206e6f6e207a65726f2e54696d654c6f636b5570677261646556323a205468652063616c6c6572206d75737420626520746865206f776e657241646472657373546f4164647265737357686974654c6973742e65646974506169723a20416464726573732070616972206d7573742065786973742e41646472657373546f4164647265737357686974654c6973742e65646974506169723a204e65772076616c7565206d757374206265206e6f6e207a65726f2e41646472657373546f4164647265737357686974654c6973742e72656d6f7665506169723a206b657920747970652061646472657373206973206e6f742063757272656e742077686974656c69737465642ea165627a7a72305820d5bc0527b22e8015f6b117810fa9636643f07edb958db09e19dae9fc43c349b40029

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000060000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e364300000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d4070000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e00000000000000000000000000000000000000000000000000000000000000060000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e8620000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f4980000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef

-----Decoded View---------------
Arg [0] : _initialKeys (address[]): 0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643,0x39AA39c021dfbaE8faC545936693aC917d5E7563,0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1,0xC11b1268C1A384e55C48c2391d8d480264A3A7F4,0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407,0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E
Arg [1] : _initialValues (address[]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0x1985365e9f78359a9B6AD760e32412f4a445E862,0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599,0xE41d2489571d322189246DaFA5ebDe1F4699F498,0x0D8775F648430679A709E98d2b0Cb6250d2887EF

-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [3] : 0000000000000000000000005d3a536e4d6dbd6114cc1ead35777bab948e3643
Arg [4] : 00000000000000000000000039aa39c021dfbae8fac545936693ac917d5e7563
Arg [5] : 000000000000000000000000158079ee67fce2f58472a96584a73c7ab9ac95c1
Arg [6] : 000000000000000000000000c11b1268c1a384e55c48c2391d8d480264a3a7f4
Arg [7] : 000000000000000000000000b3319f5d18bc0d84dd1b4825dcde5d5f7266d407
Arg [8] : 0000000000000000000000006c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [10] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [11] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [12] : 0000000000000000000000001985365e9f78359a9b6ad760e32412f4a445e862
Arg [13] : 0000000000000000000000002260fac5e5542a773aa44fbcfedf7c193bc2c599
Arg [14] : 000000000000000000000000e41d2489571d322189246dafa5ebde1f4699f498
Arg [15] : 0000000000000000000000000d8775f648430679a709e98d2b0cb6250d2887ef


Deployed Bytecode Sourcemap

16811:7015:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16811:7015:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21829:579;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21829:579:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21829:579:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21829:579:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;21829:579:0;;-1:-1:-1;21829:579:0;-1:-1:-1;21829:579:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;21829:579:0;;;;;;;;;;;;;;;;;16981:21;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16981:21:0;;:::i;:::-;;;;-1:-1:-1;;;;;16981:21:0;;;;;;;;;;;;;;5567:53;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5567:53:0;;:::i;:::-;;;;;;;;;;;;;;;;23321:502;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23321:502:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;23321:502:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;23321:502:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;-1:-1;23321:502:0;;-1:-1:-1;23321:502:0;-1:-1:-1;23321:502:0;:::i;:::-;;;;;;;;;;;;;;;;;;22637:412;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22637:412:0;-1:-1:-1;;;;;22637:412:0;;:::i;20582:696::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20582:696:0;;;;;;;;;;:::i;:::-;;1473:140;;;:::i;5449:29::-;;;:::i;683:79::-;;;:::i;1018:92::-;;;:::i;8356:411::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8356:411:0;;:::i;17009:44::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17009:44:0;-1:-1:-1;;;;;17009:44:0;;:::i;19893:454::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19893:454:0;-1:-1:-1;;;;;19893:454:0;;:::i;19206:526::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19206:526:0;;;;;;;;;;:::i;7664:458::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7664:458:0;;:::i;21421:129::-;;;:::i;1790:109::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1790:109:0;-1:-1:-1;;;;;1790:109:0;;:::i;21829:579::-;22135:26;;;;;;;;;;;;;;;;21939:16;;22034:4;;21939:16;;22034:4;22135:26;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;22135:26:0;-1:-1:-1;22109:52:0;-1:-1:-1;22179:9:0;22174:201;22198:11;22194:1;:15;22174:201;;;22314:49;22341:4;;22346:1;22341:7;;;;;;;;;;;;;-1:-1:-1;;;;;22341:7:0;22314:8;:49::i;:::-;22302:6;22309:1;22302:9;;;;;;;;-1:-1:-1;;;;;22302:61:0;;;:9;;;;;;;;;;;:61;22211:3;;22174:201;;;-1:-1:-1;22394:6:0;-1:-1:-1;;21829:579:0;;;;;:::o;16981:21::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16981:21:0;;-1:-1:-1;16981:21:0;:::o;5567:53::-;;;;;;;;;;;;;:::o;23321:502::-;23440:4;23523:5;23440:4;23548:244;23572:11;23568:1;:15;23548:244;;;23730:1;23699:9;23730:1;23709:5;;23715:1;23709:8;;;;;;;-1:-1:-1;;;;;23709:8:0;;;;;;;;;;;23699:19;;;;;;;;;;;;-1:-1:-1;23699:19:0;;;:33;;;;23695:86;;-1:-1:-1;23695:86:0;;23760:5;23753:12;;;;;;23695:86;23585:3;;23548:244;;;-1:-1:-1;23811:4:0;;23321:502;-1:-1:-1;;;;23321:502:0:o;22637:412::-;-1:-1:-1;;;;;22840:15:0;;;22733:7;22840:15;;;:9;:15;;;;;;22733:7;;22840:15;22818:141;;;;-1:-1:-1;;;;;22818:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23026:15:0;;;;;;;:9;:15;;;;;;;;22637:412::o;20582:696::-;6004:9;:7;:9::i;:::-;5982:106;;;;-1:-1:-1;;;;;5982:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:14;;:18;6257:1123;;6473:19;6562:8;;6523:66;;;;;;;30:3:-1;22:6;14;1:33;6523:66:0;;;45:16:-1;;;;26:21;;;-1:-1;;22:32;6:49;;6523:66:0;;6495:109;;49:4:-1;6495:109:0;;;;6621:24;6648:31;;;:18;:31;;;;;;;6495:109;;-1:-1:-1;6648:31:0;;-1:-1:-1;;;6787:21:0;;6783:303;;-1:-1:-1;6783:303:0;;6863:15;6829:18;:31;6848:11;6829:31;;;;;;;;;;;:49;;;;6944:11;6904:139;6978:15;7016:8;;6904:139;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;6904:139:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6904:139:0;;;;-1:-1:-1;6904:139:0;;-1:-1:-1;;;;;6904:139:0;7064:7;;;;6783:303;7168:14;;7147:36;;:16;;:36;:20;:36;:::i;:::-;7128:15;:55;;7102:171;;;;-1:-1:-1;;;;;7102:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7365:1:0;7331:31;;;:18;:31;;;;;:35;6257:1123;-1:-1:-1;;;;;20736:15:0;;;20763:1;20736:15;;;:9;:15;;;;;;;20714:139;;;;-1:-1:-1;;;;;20714:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20888:20:0;;20866:133;;;;-1:-1:-1;;;;;20866:133:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21017:71:0;;;21062:15;;;;:9;:15;;;;;;;;;;21017:71;;21062:15;;21017:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21168:15:0;;;;;;;:9;:15;;;;;;;;;:24;;-1:-1:-1;;;;;;21168:24:0;;;;;;;;;21210:60;;;;;;;21168:15;;21210:60;;;;;;;;;;;20582:696;;;:::o;1473:140::-;895:9;:7;:9::i;:::-;887:18;;;;;;1572:1;1556:6;;1535:40;;-1:-1:-1;;;;;1556:6:0;;;;1535:40;;1572:1;;1535:40;1603:1;1586:19;;-1:-1:-1;;;;;;1586:19:0;;;1473:140::o;5449:29::-;;;;:::o;683:79::-;721:7;748:6;-1:-1:-1;;;;;748:6:0;683:79;;:::o;1018:92::-;1058:4;1096:6;-1:-1:-1;;;;;1096:6:0;1082:10;:20;;1018:92::o;8356:411::-;895:9;:7;:9::i;:::-;887:18;;;;;;8613:14;;8595:15;:32;8573:141;;;;-1:-1:-1;;;;;8573:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8727:14;:32;8356:411::o;17009:44::-;;;;;;;;;;;;-1:-1:-1;;;;;17009:44:0;;:::o;19893:454::-;6004:9;:7;:9::i;:::-;5982:106;;;;-1:-1:-1;;;;;5982:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:14;;:18;6257:1123;;6473:19;6562:8;;6523:66;;;;;;;30:3:-1;22:6;14;1:33;6523:66:0;;;45:16:-1;;;;26:21;;;-1:-1;;22:32;6:49;;6523:66:0;;6495:109;;49:4:-1;6495:109:0;;;;6621:24;6648:31;;;:18;:31;;;;;;;6495:109;;-1:-1:-1;6648:31:0;;-1:-1:-1;;;6787:21:0;;6783:303;;-1:-1:-1;6783:303:0;;6863:15;6829:18;:31;6848:11;6829:31;;;;;;;;;;;:49;;;;6944:11;6904:139;6978:15;7016:8;;6904:139;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;6904:139:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6904:139:0;;;;-1:-1:-1;6904:139:0;;-1:-1:-1;;;;;6904:139:0;7064:7;;;;6783:303;7168:14;;7147:36;;:16;;:36;:20;:36;:::i;:::-;7128:15;:55;;7102:171;;;;-1:-1:-1;;;;;7102:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7365:1:0;7331:31;;;:18;:31;;;;;:35;6257:1123;-1:-1:-1;;;;;20026:15:0;;;20002:21;20026:15;;;:9;:15;;;;;;;20076:27;20054:159;;;;-1:-1:-1;;;;;20054:159:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20233:17;20245:4;20233;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20233:11:0;;;;;;;;;;;;;;;;;;;;;;;:17;;;;:::i;:::-;20226:24;;;;:4;;:24;;;;;;:::i;:::-;-1:-1:-1;;;;;;20261:15:0;;;20287:1;20261:15;;;:9;:15;;;;;;;;;:28;;-1:-1:-1;;;;;;20261:28:0;;;20307:32;;;;;;;;;20261:15;;20307:32;;;;;;;;;;;7433:1;19893:454;;:::o;19206:526::-;6004:9;:7;:9::i;:::-;5982:106;;;;-1:-1:-1;;;;;5982:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6261:14;;:18;6257:1123;;6473:19;6562:8;;6523:66;;;;;;;30:3:-1;22:6;14;1:33;6523:66:0;;;45:16:-1;;;;26:21;;;-1:-1;;22:32;6:49;;6523:66:0;;6495:109;;49:4:-1;6495:109:0;;;;6621:24;6648:31;;;:18;:31;;;;;;;6495:109;;-1:-1:-1;6648:31:0;;-1:-1:-1;;;6787:21:0;;6783:303;;-1:-1:-1;6783:303:0;;6863:15;6829:18;:31;6848:11;6829:31;;;;;;;;;;;:49;;;;6944:11;6904:139;6978:15;7016:8;;6904:139;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;6904:139:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;6904:139:0;;;;-1:-1:-1;6904:139:0;;-1:-1:-1;;;;;6904:139:0;7064:7;;;;6783:303;7168:14;;7147:36;;:16;;:36;:20;:36;:::i;:::-;7128:15;:55;;7102:171;;;;-1:-1:-1;;;;;7102:171:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7365:1:0;7331:31;;;:18;:31;;;;;:35;6257:1123;-1:-1:-1;;;;;19359:15:0;;;19386:1;19359:15;;;:9;:15;;;;;;;:29;19337:142;;;;-1:-1:-1;;;;;19337:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19514:20:0;;19492:128;;;;-1:-1:-1;;;;;19492:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19633:4;27:10:-1;;39:1;23:18;;45:23;;;19633:15:0;;;;-1:-1:-1;;;;;19633:15:0;;;-1:-1:-1;;;;;;19633:15:0;;;;;;;;-1:-1:-1;19659:15:0;;;:9;19633:15;19659;;;;;;;;:24;;;;;;;;;;;;;;19701:23;;;;;;;;;;;;;;;;;19206:526;;:::o;7664:458::-;895:9;:7;:9::i;:::-;887:18;;;;;;7810:32;;;;:18;:32;;;;;;7788:161;;;;-1:-1:-1;;;;;7788:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8034:1;7999:32;;;:18;:32;;;;;;:36;;;8053:61;8018:12;;8053:61;;;7664:458;:::o;21421:129::-;21497:16;21538:4;21531:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21531:11:0;;;;;;;;;;;;;;;;;;;;;;;21421:129;:::o;1790:109::-;895:9;:7;:9::i;:::-;887:18;;;;;;1863:28;1882:8;1863:18;:28::i;3793:150::-;3851:7;3883:5;;;3907:6;;;;3899:15;;;;;;3934:1;3793:150;-1:-1:-1;;;3793:150:0:o;14521:332::-;14618:16;14653:13;14668:9;14681:13;14689:1;14692;14681:7;:13::i;:::-;14652:42;;;;14710:4;14705:141;;14731:8;;;14705:141;14773:19;14797:13;14801:1;14804:5;14797:3;:13::i;:::-;-1:-1:-1;14772:38:0;-1:-1:-1;14825:9:0;;-1:-1:-1;;;14825:9:0;2049:187;-1:-1:-1;;;;;2123:22:0;;2115:31;;;;;;2183:6;;;2162:38;;-1:-1:-1;;;;;2162:38:0;;;;2183:6;;;2162:38;;;2211:6;:17;;-1:-1:-1;;;;;;2211:17:0;-1:-1:-1;;;;;2211:17:0;;;;;;;;;;2049:187::o;9345:297::-;9459:8;;9416:7;;;;;9478:129;9502:6;9498:1;:10;9478:129;;;9542:1;-1:-1:-1;;;;;9534:9:0;:1;9536;9534:4;;;;;;;;;;;;;;-1:-1:-1;;;;;9534:9:0;;9530:66;;;9572:1;-1:-1:-1;9575:4:0;;-1:-1:-1;9564:16:0;;-1:-1:-1;9564:16:0;9530:66;9510:3;;9478:129;;;-1:-1:-1;9625:1:0;;-1:-1:-1;9625:1:0;;-1:-1:-1;;9345:297:0;;;;;;:::o;13970:487::-;14068:16;14086:7;14111:14;14128:1;:8;14111:25;;14147:29;14202:1;14193:6;:10;14179:25;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;14179:25:0;-1:-1:-1;14147:57:0;-1:-1:-1;14220:9:0;14215:85;14239:5;14235:1;:9;14215:85;;;14284:1;14286;14284:4;;;;;;;;;;;;;;14266:12;14279:1;14266:15;;;;;;;;-1:-1:-1;;;;;14266:22:0;;;:15;;;;;;;;;;;:22;14246:3;;14215:85;;;-1:-1:-1;14335:1:0;14327:9;;14310:98;14342:6;14338:1;:10;14310:98;;;14392:1;14394;14392:4;;;;;;;;;;;;;;14370:12;14387:1;14383;:5;14370:19;;;;;;;;-1:-1:-1;;;;;14370:26:0;;;:19;;;;;;;;;;;:26;14350:3;;14310:98;;;;14426:12;14440:1;14442:5;14440:8;;;;;;;;;;;;;;14418:31;;;;;;13970:487;;;;;:::o;16811:7015::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16811:7015:0;-1:-1:-1;;;;;16811:7015:0;;;;;;;;;;;-1:-1:-1;16811:7015:0;;;;;;;-1:-1:-1;16811:7015:0;;;-1:-1:-1;16811:7015:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;16811:7015:0;;;;;;

Swarm Source

bzzr://d5bc0527b22e8015f6b117810fa9636643f07edb958db09e19dae9fc43c349b4

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.