ETH Price: $3,266.88 (-7.09%)

Contract

0x9C94df9d594BA1eb94430C006c269C314B1A8281
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim126754202021-06-21 4:00:151307 days ago1624248015IN
0x9C94df9d...14B1A8281
0 ETH0.0004068117
Claim126754052021-06-21 3:55:461307 days ago1624247746IN
0x9C94df9d...14B1A8281
0 ETH0.0004068117
Claim122669562021-04-18 23:00:571370 days ago1618786857IN
0x9C94df9d...14B1A8281
0 ETH0.00798192
Claim121509382021-04-01 2:30:191388 days ago1617244219IN
0x9C94df9d...14B1A8281
0 ETH0.0142885170.00000145
Claim121390182021-03-30 6:27:051390 days ago1617085625IN
0x9C94df9d...14B1A8281
0 ETH0.0081528597.00000156
Claim121311392021-03-29 1:21:051391 days ago1616980865IN
0x9C94df9d...14B1A8281
0 ETH0.0071442585
Claim121166302021-03-26 19:44:221394 days ago1616787862IN
0x9C94df9d...14B1A8281
0 ETH0.011767140
Claim121129532021-03-26 6:16:001394 days ago1616739360IN
0x9C94df9d...14B1A8281
0 ETH0.0074804589.00000145
Claim120806702021-03-21 6:58:471399 days ago1616309927IN
0x9C94df9d...14B1A8281
0 ETH0.007564590
Claim120247092021-03-12 16:22:181408 days ago1615566138IN
0x9C94df9d...14B1A8281
0 ETH0.0141204168
Claim120073892021-03-09 23:55:101410 days ago1615334110IN
0x9C94df9d...14B1A8281
0 ETH0.00983385117
Claim119979322021-03-08 12:43:501412 days ago1615207430IN
0x9C94df9d...14B1A8281
0 ETH0.0081528597
Claim119703602021-03-04 7:11:461416 days ago1614841906IN
0x9C94df9d...14B1A8281
0 ETH0.0063037575
Claim119624472021-03-03 1:47:111417 days ago1614736031IN
0x9C94df9d...14B1A8281
0 ETH0.00893115106.26
Claim119465002021-02-28 14:55:381420 days ago1614524138IN
0x9C94df9d...14B1A8281
0 ETH0.006892182
Claim119289102021-02-25 21:59:391422 days ago1614290379IN
0x9C94df9d...14B1A8281
0 ETH0.01084245129
Claim119031882021-02-21 22:59:321426 days ago1613948372IN
0x9C94df9d...14B1A8281
0 ETH0.0076485591
Claim118843802021-02-19 1:36:511429 days ago1613698611IN
0x9C94df9d...14B1A8281
0 ETH0.01176532140
Claim118841542021-02-19 0:45:481429 days ago1613695548IN
0x9C94df9d...14B1A8281
0 ETH0.00455312155
Claim118841532021-02-19 0:45:451429 days ago1613695545IN
0x9C94df9d...14B1A8281
0 ETH0.00848905101
Claim118641012021-02-15 22:44:431432 days ago1613429083IN
0x9C94df9d...14B1A8281
0 ETH0.00966575115
Claim118626252021-02-15 17:13:471433 days ago1613409227IN
0x9C94df9d...14B1A8281
0 ETH0.00938916136
Claim118563172021-02-14 18:02:311434 days ago1613325751IN
0x9C94df9d...14B1A8281
0 ETH0.00882525105
Claim118464692021-02-13 5:32:401435 days ago1613194360IN
0x9C94df9d...14B1A8281
0 ETH0.01365812162.5
Claim118461802021-02-13 4:26:271435 days ago1613190387IN
0x9C94df9d...14B1A8281
0 ETH0.0079107100
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CompensationClaims

Compiler Version
v0.5.11+commit.22be8592

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-01-13
*/

/*
 * Origin Protocol
 * https://originprotocol.com
 *
 * Released under the MIT license
 * https://github.com/OriginProtocol/origin-dollar
 *
 * Copyright 2020 Origin Protocol, Inc
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
// File: @openzeppelin/upgrades/contracts/Initializable.sol

pragma solidity >=0.4.24 <0.7.0;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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;
    }
}

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.5.5;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following 
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol

pragma solidity ^0.5.0;



/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/governance/Governable.sol

pragma solidity 0.5.11;

/**
 * @title OUSD Governable Contract
 * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change
 *      from owner to governor and renounce methods removed. Does not use
 *      Context.sol like Ownable.sol does for simplification.
 * @author Origin Protocol Inc
 */
contract Governable {
    // Storage position of the owner and pendingOwner of the contract
    // keccak256("OUSD.governor");
    bytes32
        private constant governorPosition = 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;

    // keccak256("OUSD.pending.governor");
    bytes32
        private constant pendingGovernorPosition = 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;

    // keccak256("OUSD.reentry.status");
    bytes32
        private constant reentryStatusPosition = 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;

    // See OpenZeppelin ReentrancyGuard implementation
    uint256 constant _NOT_ENTERED = 1;
    uint256 constant _ENTERED = 2;

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

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

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

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

    /**
     * @dev Returns the address of the current Governor.
     */
    function _governor() internal view returns (address governorOut) {
        bytes32 position = governorPosition;
        assembly {
            governorOut := sload(position)
        }
    }

    /**
     * @dev Returns the address of the pending Governor.
     */
    function _pendingGovernor()
        internal
        view
        returns (address pendingGovernor)
    {
        bytes32 position = pendingGovernorPosition;
        assembly {
            pendingGovernor := sload(position)
        }
    }

    /**
     * @dev Throws if called by any account other than the Governor.
     */
    modifier onlyGovernor() {
        require(isGovernor(), "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();
    }

    function _setGovernor(address newGovernor) internal {
        bytes32 position = governorPosition;
        assembly {
            sstore(position, newGovernor)
        }
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        bytes32 position = reentryStatusPosition;
        uint256 _reentry_status;
        assembly {
            _reentry_status := sload(position)
        }

        // On the first call to nonReentrant, _notEntered will be true
        require(_reentry_status != _ENTERED, "Reentrant call");

        // Any calls to nonReentrant after this point will fail
        assembly {
            sstore(position, _ENTERED)
        }

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        assembly {
            sstore(position, _NOT_ENTERED)
        }
    }

    function _setPendingGovernor(address newGovernor) internal {
        bytes32 position = pendingGovernorPosition;
        assembly {
            sstore(position, newGovernor)
        }
    }

    /**
     * @dev Transfers Governance of the contract to a new account (`newGovernor`).
     * Can only be called by the current Governor. Must be claimed for this to complete
     * @param _newGovernor Address of the new Governor
     */
    function transferGovernance(address _newGovernor) external onlyGovernor {
        _setPendingGovernor(_newGovernor);
        emit PendingGovernorshipTransfer(_governor(), _newGovernor);
    }

    /**
     * @dev Claim Governance of the contract to a new account (`newGovernor`).
     * Can only be called by the new Governor.
     */
    function claimGovernance() external {
        require(
            msg.sender == _pendingGovernor(),
            "Only the pending Governor can complete the claim"
        );
        _changeGovernor(msg.sender);
    }

    /**
     * @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), "New Governor is address(0)");
        emit GovernorshipTransferred(_governor(), _newGovernor);
        _setGovernor(_newGovernor);
    }
}

// File: contracts/compensation/CompensationClaims.sol

pragma solidity 0.5.11;





/**
 * @title Compensation Claims
 * @author Origin Protocol Inc
 * @dev Airdrop for ERC20 tokens.
 *
 *   Provides a coin airdrop with a verification period in which everyone
 *   can check that all claims are correct before any actual funds are moved
 *   to the contract.
 *
 *      - Users can claim funds during the claim period.
 *
 *      - The adjuster can set the amount of each user's claim,
 *         but only when unlocked, and not during the claim period.
 *
 *      - The governor can unlock and lock the adjuster, outside the claim period.
 *      - The governor can start the claim period, if it's not started.
 *      - The governor can collect any remaining funds after the claim period is over.
 *
 *  Intended use sequence:
 *
 *   1. Governor unlocks the adjuster
 *   2. Adjuster uploads claims
 *   3. Governor locks the adjuster
 *   4. Everyone verifies that the claim amounts and totals are correct
 *   5. Payout funds are moved to the contract
 *   6. The claim period starts
 *   7. Users claim funds
 *   8. The claim period ends
 *   9. Governor can collect any remaing funds
 *
 */
contract CompensationClaims is Governable {
    address public adjuster;
    address public token;
    uint256 public end;
    uint256 public totalClaims;
    mapping(address => uint256) claims;
    bool public isAdjusterLocked;

    using SafeMath for uint256;

    event Claim(address indexed recipient, uint256 amount);
    event ClaimSet(address indexed recipient, uint256 amount);
    event Start(uint256 end);
    event Lock();
    event Unlock();
    event Collect(address indexed coin, uint256 amount);

    constructor(address _token, address _adjuster) public onlyGovernor {
        token = _token;
        adjuster = _adjuster;
        isAdjusterLocked = true;
    }

    function balanceOf(address _account) external view returns (uint256) {
        return claims[_account];
    }

    function decimals() external view returns (uint8) {
        return IERC20Decimals(token).decimals();
    }

    /* -- User -- */

    function claim(address _recipient) external onlyInClaimPeriod nonReentrant {
        uint256 amount = claims[_recipient];
        require(amount > 0, "Amount must be greater than 0");
        claims[_recipient] = 0;
        totalClaims = totalClaims.sub(amount);
        SafeERC20.safeTransfer(IERC20(token), _recipient, amount);
        emit Claim(_recipient, amount);
    }

    /* -- Adjustor -- */

    function setClaims(
        address[] calldata _addresses,
        uint256[] calldata _amounts
    ) external notInClaimPeriod onlyUnlockedAdjuster {
        require(
            _addresses.length == _amounts.length,
            "Addresses and amounts must match"
        );
        uint256 len = _addresses.length;
        for (uint256 i = 0; i < len; i++) {
            address recipient = _addresses[i];
            uint256 newAmount = _amounts[i];
            uint256 oldAmount = claims[recipient];
            claims[recipient] = newAmount;
            totalClaims = totalClaims.add(newAmount).sub(oldAmount);
            emit ClaimSet(recipient, newAmount);
        }
    }

    /* -- Governor -- */

    function lockAdjuster() external onlyGovernor notInClaimPeriod {
        _lockAdjuster();
    }

    function _lockAdjuster() internal {
        isAdjusterLocked = true;
        emit Lock();
    }

    function unlockAdjuster() external onlyGovernor notInClaimPeriod {
        isAdjusterLocked = false;
        emit Unlock();
    }

    function start(uint256 _seconds)
        external
        onlyGovernor
        notInClaimPeriod
        nonReentrant
    {
        require(totalClaims > 0, "No claims");
        uint256 funding = IERC20(token).balanceOf(address(this));
        require(funding >= totalClaims, "Insufficient funds for all claims");
        _lockAdjuster();
        end = block.timestamp.add(_seconds);
        require(end.sub(block.timestamp) < 31622400, "Duration too long"); // 31622400 = 366*24*60*60
        emit Start(end);
    }

    function collect(address _coin)
        external
        onlyGovernor
        notInClaimPeriod
        nonReentrant
    {
        uint256 amount = IERC20(_coin).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_coin), address(governor()), amount);
        emit Collect(_coin, amount);
    }

    /* -- modifiers -- */

    modifier onlyInClaimPeriod() {
        require(block.timestamp <= end, "Should be in claim period");
        _;
    }

    modifier notInClaimPeriod() {
        require(block.timestamp > end, "Should not be in claim period");
        _;
    }

    modifier onlyUnlockedAdjuster() {
        require(isAdjusterLocked == false, "Adjuster must be unlocked");
        require(msg.sender == adjuster, "Must be adjuster");
        _;
    }
}

interface IERC20Decimals {
    function decimals() external view returns (uint8);
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"internalType":"address","name":"_coin","type":"address"}],"name":"collect","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"setClaims","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unlockAdjuster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"start","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isAdjusterLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adjuster","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"_newGovernor","type":"address"}],"name":"transferGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"lockAdjuster","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"end","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_adjuster","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"end","type":"uint256"}],"name":"Start","type":"event"},{"anonymous":false,"inputs":[],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[],"name":"Unlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"coin","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Collect","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"PendingGovernorshipTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"}]

60806040523480156200001157600080fd5b50604051620016b9380380620016b9833981810160405260408110156200003757600080fd5b50805160209091015162000054336001600160e01b036200016816565b620000676001600160e01b036200017b16565b6001600160a01b031660006001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3620000ba6001600160e01b036200018f16565b6200012657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604482015290519081900360640190fd5b600180546001600160a01b039384166001600160a01b031991821617825560008054939094169216919091179091556005805460ff19169091179055620001bd565b6000805160206200169983398151915255565b600080516020620016998339815191525490565b6000620001a46001600160e01b036200017b16565b6001600160a01b0316336001600160a01b031614905090565b6114cc80620001cd6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063c7af335211610071578063c7af3352146102f3578063d38bfff4146102fb578063e96ea84c14610321578063efbe1c1c14610329578063fc0c546a146103315761010b565b806370a082311461028c57806395805dad146102b2578063a99cb75f146102cf578063be989523146102eb5761010b565b80633b650d29116100de5780633b650d29146101a057806341c6138314610262578063524549861461027c5780635d36b190146102845761010b565b806306ec16f8146101105780630c340a24146101385780631e83409a1461015c578063313ce56714610182575b600080fd5b6101366004803603602081101561012657600080fd5b50356001600160a01b0316610339565b005b610140610504565b604080516001600160a01b039092168252519081900360200190f35b6101366004803603602081101561017257600080fd5b50356001600160a01b0316610513565b61018a6106d1565b6040805160ff9092168252519081900360200190f35b610136600480360360408110156101b657600080fd5b8101906020810181356401000000008111156101d157600080fd5b8201836020820111156101e357600080fd5b8035906020019184602083028401116401000000008311171561020557600080fd5b91939092909160208101903564010000000081111561022357600080fd5b82018360208201111561023557600080fd5b8035906020019184602083028401116401000000008311171561025757600080fd5b509092509050610747565b61026a61096b565b60408051918252519081900360200190f35b610136610971565b610136610a31565b61026a600480360360208110156102a257600080fd5b50356001600160a01b0316610a93565b610136600480360360208110156102c857600080fd5b5035610aae565b6102d7610d5c565b604080519115158252519081900360200190f35b610140610d65565b6102d7610d74565b6101366004803603602081101561031157600080fd5b50356001600160a01b0316610d97565b610136610e31565b61026a610ec4565b610140610eca565b610341610d74565b610380576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b60025442116103c4576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b7f53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45358054600281141561042e576040805162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60028255604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561047c57600080fd5b505afa158015610490573d6000803e3d6000fd5b505050506040513d60208110156104a657600080fd5b505190506104bc846104b6610504565b83610ed9565b6040805182815290516001600160a01b038616917f4256a058fa2b123d727576d3d31e3a272db98ee5fe264e229610ce43dc849999919081900360200190a250506001905550565b600061050e610f30565b905090565b60025442111561056a576040805162461bcd60e51b815260206004820152601960248201527f53686f756c6420626520696e20636c61696d20706572696f6400000000000000604482015290519081900360640190fd5b7f53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535805460028114156105d4576040805162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600282556001600160a01b03831660009081526004602052604090205480610643576040805162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604081205560035461066f908263ffffffff610f5516565b600355600154610689906001600160a01b03168583610ed9565b6040805182815290516001600160a01b038616917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4919081900360200190a250506001905550565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b15801561071657600080fd5b505afa15801561072a573d6000803e3d6000fd5b505050506040513d602081101561074057600080fd5b5051905090565b600254421161078b576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b60055460ff16156107e3576040805162461bcd60e51b815260206004820152601960248201527f41646a7573746572206d75737420626520756e6c6f636b656400000000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610835576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329030b2353ab9ba32b960811b604482015290519081900360640190fd5b828114610889576040805162461bcd60e51b815260206004820181905260248201527f41646472657373657320616e6420616d6f756e7473206d757374206d61746368604482015290519081900360640190fd5b8260005b818110156109635760008686838181106108a357fe5b905060200201356001600160a01b0316905060008585848181106108c357fe5b6001600160a01b03851660009081526004602090815260409091208054919092029390930135908190556003549093506109169150829061090a908563ffffffff610f9e16565b9063ffffffff610f5516565b6003556040805183815290516001600160a01b038516917f6dafe15ce3b23ddd739e5550df1d961528643f07fca79b88151baadf149a2c73919081900360200190a250505060010161088d565b505050505050565b60035481565b610979610d74565b6109b8576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b60025442116109fc576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b6005805460ff191690556040517f70e3fffea7bbb557facdee48ed7f7af5179030adef9ad0c876df039a718f359e90600090a1565b610a39610ff8565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b81526004018080602001828103825260308152602001806114686030913960400191505060405180910390fd5b610a913361101d565b565b6001600160a01b031660009081526004602052604090205490565b610ab6610d74565b610af5576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b6002544211610b39576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b7f53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac453580546002811415610ba3576040805162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60028255600060035411610bea576040805162461bcd60e51b81526020600482015260096024820152684e6f20636c61696d7360b81b604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610c3557600080fd5b505afa158015610c49573d6000803e3d6000fd5b505050506040513d6020811015610c5f57600080fd5b5051600354909150811015610ca55760405162461bcd60e51b81526004018080602001828103825260218152602001806113fd6021913960400191505060405180910390fd5b610cad6110cb565b610cbd428563ffffffff610f9e16565b60028190556301e2850090610cd8904263ffffffff610f5516565b10610d1e576040805162461bcd60e51b81526020600482015260116024820152704475726174696f6e20746f6f206c6f6e6760781b604482015290519081900360640190fd5b60025460408051918252517ff06a29c94c6f4edc1085072972d9441f7603e81c8535a308f214285d0653c8509181900360200190a150506001905550565b60055460ff1681565b6000546001600160a01b031681565b6000610d7e610f30565b6001600160a01b0316336001600160a01b031614905090565b610d9f610d74565b610dde576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b610de781611103565b806001600160a01b0316610df9610f30565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b610e39610d74565b610e78576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b6002544211610ebc576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b610a916110cb565b60025481565b6001546001600160a01b031681565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f2b908490611127565b505050565b7f7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a5490565b6000610f9783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112e5565b9392505050565b600082820183811015610f97576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db5490565b6001600160a01b038116611078576040805162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f722069732061646472657373283029000000000000604482015290519081900360640190fd5b806001600160a01b031661108a610f30565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36110c88161137c565b50565b6005805460ff191660011790556040517f46620e39f4e119bf05f13544f8ef38338fc06c17f6b731c7f95bee356572db9690600090a1565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b611139826001600160a01b03166113a0565b61118a576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106111c85780518252601f1990920191602091820191016111a9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b509150915081611286576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156112df578080602001905160208110156112a257600080fd5b50516112df5760405162461bcd60e51b815260040180806020018281038252602a81526020018061141e602a913960400191505060405180910390fd5b50505050565b600081848411156113745760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611339578181015183820152602001611321565b50505050905090810190601f1680156113665780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b7f7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a55565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906113d457508115155b94935050505056fe43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000496e73756666696369656e742066756e647320666f7220616c6c20636c61696d735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656453686f756c64206e6f7420626520696e20636c61696d20706572696f640000004f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f6d706c6574652074686520636c61696da265627a7a723158204d165f4d46050bf4b493a480fedccc553f9b06d6b7a69d965a479cafb11a424264736f6c634300050b00327bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a0000000000000000000000002a8e1e676ec238d8a992307b495b45b3feaa5e8600000000000000000000000071f78361537a6f7b6818e7a760c8bc0146d93f50

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a2578063c7af335211610071578063c7af3352146102f3578063d38bfff4146102fb578063e96ea84c14610321578063efbe1c1c14610329578063fc0c546a146103315761010b565b806370a082311461028c57806395805dad146102b2578063a99cb75f146102cf578063be989523146102eb5761010b565b80633b650d29116100de5780633b650d29146101a057806341c6138314610262578063524549861461027c5780635d36b190146102845761010b565b806306ec16f8146101105780630c340a24146101385780631e83409a1461015c578063313ce56714610182575b600080fd5b6101366004803603602081101561012657600080fd5b50356001600160a01b0316610339565b005b610140610504565b604080516001600160a01b039092168252519081900360200190f35b6101366004803603602081101561017257600080fd5b50356001600160a01b0316610513565b61018a6106d1565b6040805160ff9092168252519081900360200190f35b610136600480360360408110156101b657600080fd5b8101906020810181356401000000008111156101d157600080fd5b8201836020820111156101e357600080fd5b8035906020019184602083028401116401000000008311171561020557600080fd5b91939092909160208101903564010000000081111561022357600080fd5b82018360208201111561023557600080fd5b8035906020019184602083028401116401000000008311171561025757600080fd5b509092509050610747565b61026a61096b565b60408051918252519081900360200190f35b610136610971565b610136610a31565b61026a600480360360208110156102a257600080fd5b50356001600160a01b0316610a93565b610136600480360360208110156102c857600080fd5b5035610aae565b6102d7610d5c565b604080519115158252519081900360200190f35b610140610d65565b6102d7610d74565b6101366004803603602081101561031157600080fd5b50356001600160a01b0316610d97565b610136610e31565b61026a610ec4565b610140610eca565b610341610d74565b610380576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b60025442116103c4576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b7f53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45358054600281141561042e576040805162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60028255604080516370a0823160e01b815230600482015290516000916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561047c57600080fd5b505afa158015610490573d6000803e3d6000fd5b505050506040513d60208110156104a657600080fd5b505190506104bc846104b6610504565b83610ed9565b6040805182815290516001600160a01b038616917f4256a058fa2b123d727576d3d31e3a272db98ee5fe264e229610ce43dc849999919081900360200190a250506001905550565b600061050e610f30565b905090565b60025442111561056a576040805162461bcd60e51b815260206004820152601960248201527f53686f756c6420626520696e20636c61696d20706572696f6400000000000000604482015290519081900360640190fd5b7f53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535805460028114156105d4576040805162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600282556001600160a01b03831660009081526004602052604090205480610643576040805162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604482015290519081900360640190fd5b6001600160a01b03841660009081526004602052604081205560035461066f908263ffffffff610f5516565b600355600154610689906001600160a01b03168583610ed9565b6040805182815290516001600160a01b038616917f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d4919081900360200190a250506001905550565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b15801561071657600080fd5b505afa15801561072a573d6000803e3d6000fd5b505050506040513d602081101561074057600080fd5b5051905090565b600254421161078b576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b60055460ff16156107e3576040805162461bcd60e51b815260206004820152601960248201527f41646a7573746572206d75737420626520756e6c6f636b656400000000000000604482015290519081900360640190fd5b6000546001600160a01b03163314610835576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329030b2353ab9ba32b960811b604482015290519081900360640190fd5b828114610889576040805162461bcd60e51b815260206004820181905260248201527f41646472657373657320616e6420616d6f756e7473206d757374206d61746368604482015290519081900360640190fd5b8260005b818110156109635760008686838181106108a357fe5b905060200201356001600160a01b0316905060008585848181106108c357fe5b6001600160a01b03851660009081526004602090815260409091208054919092029390930135908190556003549093506109169150829061090a908563ffffffff610f9e16565b9063ffffffff610f5516565b6003556040805183815290516001600160a01b038516917f6dafe15ce3b23ddd739e5550df1d961528643f07fca79b88151baadf149a2c73919081900360200190a250505060010161088d565b505050505050565b60035481565b610979610d74565b6109b8576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b60025442116109fc576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b6005805460ff191690556040517f70e3fffea7bbb557facdee48ed7f7af5179030adef9ad0c876df039a718f359e90600090a1565b610a39610ff8565b6001600160a01b0316336001600160a01b031614610a885760405162461bcd60e51b81526004018080602001828103825260308152602001806114686030913960400191505060405180910390fd5b610a913361101d565b565b6001600160a01b031660009081526004602052604090205490565b610ab6610d74565b610af5576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b6002544211610b39576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b7f53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac453580546002811415610ba3576040805162461bcd60e51b815260206004820152600e60248201526d1499595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60028255600060035411610bea576040805162461bcd60e51b81526020600482015260096024820152684e6f20636c61696d7360b81b604482015290519081900360640190fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610c3557600080fd5b505afa158015610c49573d6000803e3d6000fd5b505050506040513d6020811015610c5f57600080fd5b5051600354909150811015610ca55760405162461bcd60e51b81526004018080602001828103825260218152602001806113fd6021913960400191505060405180910390fd5b610cad6110cb565b610cbd428563ffffffff610f9e16565b60028190556301e2850090610cd8904263ffffffff610f5516565b10610d1e576040805162461bcd60e51b81526020600482015260116024820152704475726174696f6e20746f6f206c6f6e6760781b604482015290519081900360640190fd5b60025460408051918252517ff06a29c94c6f4edc1085072972d9441f7603e81c8535a308f214285d0653c8509181900360200190a150506001905550565b60055460ff1681565b6000546001600160a01b031681565b6000610d7e610f30565b6001600160a01b0316336001600160a01b031614905090565b610d9f610d74565b610dde576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b610de781611103565b806001600160a01b0316610df9610f30565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b610e39610d74565b610e78576040805162461bcd60e51b815260206004820152601a60248201526000805160206113dd833981519152604482015290519081900360640190fd5b6002544211610ebc576040805162461bcd60e51b815260206004820152601d6024820152600080516020611448833981519152604482015290519081900360640190fd5b610a916110cb565b60025481565b6001546001600160a01b031681565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f2b908490611127565b505050565b7f7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a5490565b6000610f9783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112e5565b9392505050565b600082820183811015610f97576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db5490565b6001600160a01b038116611078576040805162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f722069732061646472657373283029000000000000604482015290519081900360640190fd5b806001600160a01b031661108a610f30565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36110c88161137c565b50565b6005805460ff191660011790556040517f46620e39f4e119bf05f13544f8ef38338fc06c17f6b731c7f95bee356572db9690600090a1565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b611139826001600160a01b03166113a0565b61118a576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106111c85780518252601f1990920191602091820191016111a9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461122a576040519150601f19603f3d011682016040523d82523d6000602084013e61122f565b606091505b509150915081611286576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156112df578080602001905160208110156112a257600080fd5b50516112df5760405162461bcd60e51b815260040180806020018281038252602a81526020018061141e602a913960400191505060405180910390fd5b50505050565b600081848411156113745760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611339578181015183820152602001611321565b50505050905090810190601f1680156113665780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b7f7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a55565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906113d457508115155b94935050505056fe43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000496e73756666696369656e742066756e647320666f7220616c6c20636c61696d735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656453686f756c64206e6f7420626520696e20636c61696d20706572696f640000004f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f6d706c6574652074686520636c61696da265627a7a723158204d165f4d46050bf4b493a480fedccc553f9b06d6b7a69d965a479cafb11a424264736f6c634300050b0032

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

0000000000000000000000002a8e1e676ec238d8a992307b495b45b3feaa5e8600000000000000000000000071f78361537a6f7b6818e7a760c8bc0146d93f50

-----Decoded View---------------
Arg [0] : _token (address): 0x2A8e1E676Ec238d8A992307B495b45B3fEAa5e86
Arg [1] : _adjuster (address): 0x71F78361537A6f7B6818e7A760c8bC0146D93f50

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002a8e1e676ec238d8a992307b495b45b3feaa5e86
Arg [1] : 00000000000000000000000071f78361537a6f7b6818e7a760c8bc0146d93f50


Deployed Bytecode Sourcemap

25445:3803:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25445:3803:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28448:314;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28448:314:0;-1:-1:-1;;;;;28448:314:0;;:::i;:::-;;20405:87;;;:::i;:::-;;;;-1:-1:-1;;;;;20405:87:0;;;;;;;;;;;;;;26410:382;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26410:382:0;-1:-1:-1;;;;;26410:382:0;;:::i;26270:108::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26828:696;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;26828:696:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;26828:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26828:696: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;26828:696:0;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;26828:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26828:696: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;26828:696:0;;-1:-1:-1;26828:696:0;-1:-1:-1;26828:696:0;:::i;25576:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;27771:132;;;:::i;23570:223::-;;;:::i;26151:111::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26151:111:0;-1:-1:-1;;;;;26151:111:0;;:::i;27911:529::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27911:529:0;;:::i;25650:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;25494:23;;;:::i;21395:100::-;;;:::i;23222:194::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23222:194:0;-1:-1:-1;;;;;23222:194:0;;:::i;27560:97::-;;;:::i;25551:18::-;;;:::i;25524:20::-;;;:::i;28448:314::-;21241:12;:10;:12::i;:::-;21233:51;;;;;-1:-1:-1;;;21233:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21233:51:0;;;;;;;;;;;;;;;28992:3;;28974:15;:21;28966:63;;;;;-1:-1:-1;;;28966:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28966:63:0;;;;;;;;;;;;;;;19624:66;22230:15;;19823:1;22348:27;;;22340:54;;;;;-1:-1:-1;;;22340:54:0;;;;;;;;;;;;-1:-1:-1;;;22340:54:0;;;;;;;;;;;;;;;22513:8;22496:26;;28601:38;;;-1:-1:-1;;;28601:38:0;;28633:4;28601:38;;;;;;28584:14;;-1:-1:-1;;;;;28601:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;28601:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28601:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28601:38:0;;-1:-1:-1;28650:66:0;28680:5;28696:10;:8;:10::i;:::-;28709:6;28650:22;:66::i;:::-;28732:22;;;;;;;;-1:-1:-1;;;;;28732:22:0;;;;;;;;;;;;;-1:-1:-1;;22734:12:0;22717:30;;-1:-1:-1;28448:314:0:o;20405:87::-;20446:7;20473:11;:9;:11::i;:::-;20466:18;;20405:87;:::o;26410:382::-;28866:3;;28847:15;:22;;28839:60;;;;;-1:-1:-1;;;28839:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19624:66;22230:15;;19823:1;22348:27;;;22340:54;;;;;-1:-1:-1;;;22340:54:0;;;;;;;;;;;;-1:-1:-1;;;22340:54:0;;;;;;;;;;;;;;;22513:8;22496:26;;-1:-1:-1;;;;;26513:18:0;;26496:14;26513:18;;;:6;:18;;;;;;26550:10;26542:52;;;;;-1:-1:-1;;;26542:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26605:18:0;;26626:1;26605:18;;;:6;:18;;;;;:22;26652:11;;:23;;26668:6;26652:23;:15;:23;:::i;:::-;26638:11;:37;26716:5;;26686:57;;-1:-1:-1;;;;;26716:5:0;26724:10;26736:6;26686:22;:57::i;:::-;26759:25;;;;;;;;-1:-1:-1;;;;;26759:25:0;;;;;;;;;;;;;-1:-1:-1;;22734:12:0;22717:30;;-1:-1:-1;26410:382:0:o;26270:108::-;26353:5;;26338:32;;;-1:-1:-1;;;26338:32:0;;;;26313:5;;-1:-1:-1;;;;;26353:5:0;;26338:30;;:32;;;;;;;;;;;;;;26353:5;26338:32;;;5:2:-1;;;;30:1;27;20:12;5:2;26338:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26338:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26338:32:0;;-1:-1:-1;26270:108:0;:::o;26828:696::-;28992:3;;28974:15;:21;28966:63;;;;;-1:-1:-1;;;28966:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28966:63:0;;;;;;;;;;;;;;;29108:16;;;;:25;29100:63;;;;;-1:-1:-1;;;29100:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29196:8;;-1:-1:-1;;;;;29196:8:0;29182:10;:22;29174:51;;;;;-1:-1:-1;;;29174:51:0;;;;;;;;;;;;-1:-1:-1;;;29174:51:0;;;;;;;;;;;;;;;27012:36;;;26990:118;;;;;-1:-1:-1;;;26990:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27133:10;27119:11;27161:356;27185:3;27181:1;:7;27161:356;;;27210:17;27230:10;;27241:1;27230:13;;;;;;;;;;;;;-1:-1:-1;;;;;27230:13:0;27210:33;;27258:17;27278:8;;27287:1;27278:11;;;;;;;-1:-1:-1;;;;;27324:17:0;;27304;27324;;;:6;27278:11;27324:17;;;;;;;;;27278:11;;;;;;;;;27356:29;;;;27414:11;;27278;;-1:-1:-1;27414:41:0;;-1:-1:-1;27324:17:0;;27414:26;;27278:11;27414:26;:15;:26;:::i;:::-;:30;:41;:30;:41;:::i;:::-;27400:11;:55;27475:30;;;;;;;;-1:-1:-1;;;;;27475:30:0;;;;;;;;;;;;;-1:-1:-1;;;27190:3:0;;27161:356;;;;29236:1;26828:696;;;;:::o;25576:26::-;;;;:::o;27771:132::-;21241:12;:10;:12::i;:::-;21233:51;;;;;-1:-1:-1;;;21233:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21233:51:0;;;;;;;;;;;;;;;28992:3;;28974:15;:21;28966:63;;;;;-1:-1:-1;;;28966:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28966:63:0;;;;;;;;;;;;;;;27847:16;:24;;-1:-1:-1;;27847:24:0;;;27887:8;;;;27866:5;;27887:8;27771:132::o;23570:223::-;23653:18;:16;:18::i;:::-;-1:-1:-1;;;;;23639:32:0;:10;-1:-1:-1;;;;;23639:32:0;;23617:130;;;;-1:-1:-1;;;23617:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23758:27;23774:10;23758:15;:27::i;:::-;23570:223::o;26151:111::-;-1:-1:-1;;;;;26238:16:0;26211:7;26238:16;;;:6;:16;;;;;;;26151:111::o;27911:529::-;21241:12;:10;:12::i;:::-;21233:51;;;;;-1:-1:-1;;;21233:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21233:51:0;;;;;;;;;;;;;;;28992:3;;28974:15;:21;28966:63;;;;;-1:-1:-1;;;28966:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28966:63:0;;;;;;;;;;;;;;;19624:66;22230:15;;19823:1;22348:27;;;22340:54;;;;;-1:-1:-1;;;22340:54:0;;;;;;;;;;;;-1:-1:-1;;;22340:54:0;;;;;;;;;;;;;;;22513:8;22503;22496:26;28070:1;28056:11;;:15;28048:37;;;;;-1:-1:-1;;;28048:37:0;;;;;;;;;;;;-1:-1:-1;;;28048:37:0;;;;;;;;;;;;;;;28121:5;;28114:38;;;-1:-1:-1;;;28114:38:0;;28146:4;28114:38;;;;;;28096:15;;-1:-1:-1;;;;;28121:5:0;;28114:23;;:38;;;;;;;;;;;;;;28121:5;28114:38;;;5:2:-1;;;;30:1;27;20:12;5:2;28114:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28114:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28114:38:0;28182:11;;28114:38;;-1:-1:-1;28171:22:0;;;28163:68;;;;-1:-1:-1;;;28163:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28242:15;:13;:15::i;:::-;28274:29;:15;28294:8;28274:29;:19;:29;:::i;:::-;28268:3;:35;;;28349:8;;28322:24;;28330:15;28322:24;:7;:24;:::i;:::-;:35;28314:65;;;;;-1:-1:-1;;;28314:65:0;;;;;;;;;;;;-1:-1:-1;;;28314:65:0;;;;;;;;;;;;;;;28428:3;;28422:10;;;;;;;;;;;;;;;;-1:-1:-1;;22734:12:0;22717:30;;-1:-1:-1;27911:529:0:o;25650:28::-;;;;;;:::o;25494:23::-;;;-1:-1:-1;;;;;25494:23:0;;:::o;21395:100::-;21438:4;21476:11;:9;:11::i;:::-;-1:-1:-1;;;;;21462:25:0;:10;-1:-1:-1;;;;;21462:25:0;;21455:32;;21395:100;:::o;23222:194::-;21241:12;:10;:12::i;:::-;21233:51;;;;;-1:-1:-1;;;21233:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21233:51:0;;;;;;;;;;;;;;;23305:33;23325:12;23305:19;:33::i;:::-;23395:12;-1:-1:-1;;;;;23354:54:0;23382:11;:9;:11::i;:::-;-1:-1:-1;;;;;23354:54:0;;;;;;;;;;;23222:194;:::o;27560:97::-;21241:12;:10;:12::i;:::-;21233:51;;;;;-1:-1:-1;;;21233:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21233:51:0;;;;;;;;;;;;;;;28992:3;;28974:15;:21;28966:63;;;;;-1:-1:-1;;;28966:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;28966:63:0;;;;;;;;;;;;;;;27634:15;:13;:15::i;25551:18::-;;;;:::o;25524:20::-;;;-1:-1:-1;;;;;25524:20:0;;:::o;15552:176::-;15661:58;;;-1:-1:-1;;;;;15661:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15661:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15635:85:0;;15654:5;;15635:18;:85::i;:::-;15552:176;;;:::o;20576:194::-;19270:66;20737:15;;20707:56::o;7679:136::-;7737:7;7764:43;7768:1;7771;7764:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7757:50;7679:136;-1:-1:-1;;;7679:136:0:o;7223:181::-;7281:7;7313:5;;;7337:6;;;;7329:46;;;;;-1:-1:-1;;;7329:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20854:248;19449:66;21069:15;;21035:60::o;23956:243::-;-1:-1:-1;;;;;24031:26:0;;24023:65;;;;;-1:-1:-1;;;24023:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24141:12;-1:-1:-1;;;;;24104:50:0;24128:11;:9;:11::i;:::-;-1:-1:-1;;;;;24104:50:0;;;;;;;;;;;24165:26;24178:12;24165;:26::i;:::-;23956:243;:::o;27665:98::-;27710:16;:23;;-1:-1:-1;;27710:23:0;27729:4;27710:23;;;27749:6;;;;27710:16;;27749:6;27665:98::o;22773:194::-;19449:66;22920:29;22905:55::o;17591:1114::-;18195:27;18203:5;-1:-1:-1;;;;;18195:25:0;;:27::i;:::-;18187:71;;;;;-1:-1:-1;;;18187:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18332:12;18346:23;18381:5;-1:-1:-1;;;;;18373:19:0;18393:4;18373:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18373:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18331:67:0;;;;18417:7;18409:52;;;;;-1:-1:-1;;;18409:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18478:17;;:21;18474:224;;18620:10;18609:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18609:30:0;18601:85;;;;-1:-1:-1;;;18601:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17591:1114;;;;:::o;8152:192::-;8238:7;8274:12;8266:6;;;;8258:29;;;;-1:-1:-1;;;8258:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8258:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8310:5:0;;;8152:192::o;21503:180::-;19270:66;21636:29;21621:55::o;12583:619::-;12643:4;13111:20;;12954:66;13151:23;;;;;;:42;;-1:-1:-1;13178:15:0;;;13151:42;13143:51;12583:619;-1:-1:-1;;;;12583:619:0:o

Swarm Source

bzzr://4d165f4d46050bf4b493a480fedccc553f9b06d6b7a69d965a479cafb11a4242

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.