ETH Price: $3,166.11 (-5.54%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Renounce Whiteli...191126212024-01-29 13:56:35363 days ago1706536595IN
0xC5519f3f...9a00080f9
0 ETH0.0004325918.77277501
Add Whitelist Ad...191126202024-01-29 13:56:23363 days ago1706536583IN
0xC5519f3f...9a00080f9
0 ETH0.0008712618.26596614
Update Aggregato...186902532023-12-01 8:03:47422 days ago1701417827IN
0xC5519f3f...9a00080f9
0 ETH0.0008957631.17228463
Update Aggregato...186902522023-12-01 8:03:35422 days ago1701417815IN
0xC5519f3f...9a00080f9
0 ETH0.0015339931.540265
Update Aggregato...186846092023-11-30 13:06:23423 days ago1701349583IN
0xC5519f3f...9a00080f9
0 ETH0.000971633.7971669
Update Aggregato...186846082023-11-30 13:06:11423 days ago1701349571IN
0xC5519f3f...9a00080f9
0 ETH0.0016460833.83661459
Update Aggregato...185214952023-11-07 17:13:23446 days ago1699377203IN
0xC5519f3f...9a00080f9
0 ETH0.0016457457.24717206
Update Aggregato...185214942023-11-07 17:13:11446 days ago1699377191IN
0xC5519f3f...9a00080f9
0 ETH0.0028417258.41396806
Update Aggregato...183618412023-10-16 8:48:11468 days ago1697446091IN
0xC5519f3f...9a00080f9
0 ETH0.00024188.40752951
Update Aggregato...183618402023-10-16 8:47:59468 days ago1697446079IN
0xC5519f3f...9a00080f9
0 ETH0.000392678.06969763
Update Aggregato...180348162023-08-31 13:20:23514 days ago1693488023IN
0xC5519f3f...9a00080f9
0 ETH0.0005169219.50056744
Update Aggregato...178858952023-08-10 17:11:23535 days ago1691687483IN
0xC5519f3f...9a00080f9
0 ETH0.001284944.69542922
Update Aggregato...178858942023-08-10 17:11:11535 days ago1691687471IN
0xC5519f3f...9a00080f9
0 ETH0.0020276141.67922239
Update Aggregato...178853752023-08-10 15:27:11535 days ago1691681231IN
0xC5519f3f...9a00080f9
0 ETH0.0027313831.80910921
Update Aggregato...178853722023-08-10 15:26:35535 days ago1691681195IN
0xC5519f3f...9a00080f9
0 ETH0.0096603331.6973413
Update Aggregato...170398462023-04-13 17:14:47654 days ago1681406087IN
0xC5519f3f...9a00080f9
0 ETH0.0015899355.30580139
Update Aggregato...170398452023-04-13 17:14:35654 days ago1681406075IN
0xC5519f3f...9a00080f9
0 ETH0.0027653256.84349837
Update Aggregato...170398422023-04-13 17:13:47654 days ago1681406027IN
0xC5519f3f...9a00080f9
0 ETH0.0016073155.91066324
Update Aggregato...170398412023-04-13 17:13:35654 days ago1681406015IN
0xC5519f3f...9a00080f9
0 ETH0.0014352449.92492587
Update Aggregato...170398392023-04-13 17:12:59654 days ago1681405979IN
0xC5519f3f...9a00080f9
0 ETH0.0024963551.31457516
Update Aggregato...165328572023-02-01 8:44:59725 days ago1675241099IN
0xC5519f3f...9a00080f9
0 ETH0.0004888117.00332282
Update Aggregato...165328552023-02-01 8:44:35725 days ago1675241075IN
0xC5519f3f...9a00080f9
0 ETH0.0007918616.27735678
Update Aggregato...161336392022-12-07 15:11:47781 days ago1670425907IN
0xC5519f3f...9a00080f9
0 ETH0.0004724116.43311858
Update Aggregato...161336392022-12-07 15:11:47781 days ago1670425907IN
0xC5519f3f...9a00080f9
0 ETH0.0004724116.43311858
Update Aggregato...160187012022-11-21 13:31:23797 days ago1669037483IN
0xC5519f3f...9a00080f9
0 ETH0.0004134514.38809107
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:
ChainlinkConversionPath

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2021-04-12
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.25 <0.7.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.
     */
    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.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @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.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}


/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(msg.sender);
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(msg.sender));
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(msg.sender);
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

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

interface AggregatorFraction {
  function decimals() external view returns (uint8);
  function latestAnswer() external view returns (int256);
  function latestTimestamp() external view returns (uint256);
}


/**
 * @title ChainlinkConversionPath
 *
 * @notice ChainlinkConversionPath is a contract computing currency conversion rates based on Chainlink aggretators
 */
contract ChainlinkConversionPath is WhitelistAdminRole {
  using SafeMath for uint256;

  uint constant DECIMALS = 1e18;

  // Mapping of Chainlink aggregators (input currency => output currency => contract address)
  // input & output currencies are the addresses of the ERC20 contracts OR the sha3("currency code")
  mapping(address => mapping(address => address)) public allAggregators;

  // declare a new aggregator
  event AggregatorUpdated(address _input, address _output, address _aggregator);

  /**
    * @notice Update an aggregator
    * @param _input address representing the input currency
    * @param _output address representing the output currency
    * @param _aggregator address of the aggregator contract
  */
  function updateAggregator(address _input, address _output, address _aggregator)
    external
    onlyWhitelistAdmin
  {
    allAggregators[_input][_output] = _aggregator;
    emit AggregatorUpdated(_input, _output, _aggregator);
  }

  /**
    * @notice Update a list of aggregators
    * @param _inputs list of addresses representing the input currencies
    * @param _outputs list of addresses representing the output currencies
    * @param _aggregators list of addresses of the aggregator contracts
  */
  function updateAggregatorsList(address[] calldata _inputs, address[] calldata _outputs, address[] calldata _aggregators)
    external
    onlyWhitelistAdmin
  {
    require(_inputs.length == _outputs.length, "arrays must have the same length");
    require(_inputs.length == _aggregators.length, "arrays must have the same length");

    // For every conversions of the path
    for (uint i; i < _inputs.length; i++) {
      allAggregators[_inputs[i]][_outputs[i]] = _aggregators[i];
      emit AggregatorUpdated(_inputs[i], _outputs[i], _aggregators[i]);
    }
  }

  /**
  * @notice Computes the conversion of an amount through a list of intermediate conversions
  * @param _amountIn Amount to convert
  * @param _path List of addresses representing the currencies for the intermediate conversions
  * @return result The result after all the conversions
  * @return oldestRateTimestamp The oldest timestamp of the path
  */
  function getConversion(
    uint256 _amountIn,
    address[] calldata _path
  )
    external
    view
    returns (uint256 result, uint256 oldestRateTimestamp)
  {
    (uint256 rate, uint256 timestamp, uint256 decimals) = getRate(_path);

    // initialize the result
    result = _amountIn.mul(rate).div(decimals);

    oldestRateTimestamp = timestamp;
  }

  /**
  * @notice Computes the conversion rate from a list of currencies
  * @param _path List of addresses representing the currencies for the conversions
  * @return rate The rate
  * @return oldestRateTimestamp The oldest timestamp of the path
  * @return decimals of the conversion rate
  */
  function getRate(
    address[] memory _path
  )
    public
    view
    returns (uint256 rate, uint256 oldestRateTimestamp, uint256 decimals)
  {
    // initialize the result with 18 decimals (for more precision)
    rate = DECIMALS;
    decimals = DECIMALS;
    oldestRateTimestamp = block.timestamp;

    // For every conversion of the path
    for (uint i; i < _path.length - 1; i++) {
      (AggregatorFraction aggregator, bool reverseAggregator, uint256 decimalsInput, uint256 decimalsOutput) = getAggregatorAndDecimals(_path[i], _path[i + 1]);

      // store the latest timestamp of the path
      uint256 currentTimestamp = aggregator.latestTimestamp();
      if (currentTimestamp < oldestRateTimestamp) {
        oldestRateTimestamp = currentTimestamp;
      }

      // get the rate of the current step
      uint256 currentRate = uint256(aggregator.latestAnswer());
      // get the number of decimals of the current rate
      uint256 decimalsAggregator = uint256(aggregator.decimals());

      // mul with the difference of decimals before the current rate computation (for more precision)
      if (decimalsAggregator > decimalsInput) {
        rate = rate.mul(10**(decimalsAggregator-decimalsInput));
      }
      if (decimalsAggregator < decimalsOutput) {
        rate = rate.mul(10**(decimalsOutput-decimalsAggregator));
      }

      // Apply the current rate (if path uses an aggregator in the reverse way, div instead of mul)
      if (reverseAggregator) {
        rate = rate.mul(10**decimalsAggregator).div(currentRate);
      } else {
        rate = rate.mul(currentRate).div(10**decimalsAggregator);
      }

      // div with the difference of decimals AFTER the current rate computation (for more precision)
      if (decimalsAggregator < decimalsInput) {
        rate = rate.div(10**(decimalsInput-decimalsAggregator));
      }
      if (decimalsAggregator > decimalsOutput) {
        rate = rate.div(10**(decimalsAggregator-decimalsOutput));
      }
    }
  }

  /**
  * @notice Gets aggregators and decimals of two currencies
  * @param _input input Address
  * @param _output output Address
  * @return aggregator to get the rate between the two currencies
  * @return reverseAggregator true if the aggregator returned give the rate from _output to _input
  * @return decimalsInput decimals of _input
  * @return decimalsOutput decimals of _output
  */
  function getAggregatorAndDecimals(address _input, address _output)
    private
    view
    returns (AggregatorFraction aggregator, bool reverseAggregator, uint256 decimalsInput, uint256 decimalsOutput)
  {
    // Try to get the right aggregator for the conversion
    aggregator = AggregatorFraction(allAggregators[_input][_output]);
    reverseAggregator = false;

    // if no aggregator found we try to find an aggregator in the reverse way
    if (address(aggregator) == address(0x00)) {
      aggregator = AggregatorFraction(allAggregators[_output][_input]);
      reverseAggregator = true;
    }

    require(address(aggregator) != address(0x00), "No aggregator found");

    // get the decimals for the two currencies
    decimalsInput = getDecimals(_input);
    decimalsOutput = getDecimals(_output);
  }

  /**
  * @notice Gets decimals from an address currency
  * @param _addr address to check
  * @return decimals number of decimals
  */
  function getDecimals(address _addr)
    private
    view
    returns (uint256 decimals)
  {
    // by default we assume it is FIAT so 8 decimals
    decimals = 8;
    // if address is the hash of the ETH currency
    if (_addr == address(0xF5AF88e117747e87fC5929F2ff87221B1447652E)) {
      decimals = 18;
    } else if (isContract(_addr)) {
      // otherwise, we get the decimals from the erc20 directly
      decimals = ERC20fraction(_addr).decimals();
    }
  }

  /**
  * @notice Checks if an address is a contract
  * @param _addr Address to check
  * @return true if the address hosts a contract, false otherwise
  */
  function isContract(address _addr)
    private
    view
    returns (bool)
  {
    uint32 size;
    // solium-disable security/no-inline-assembly
    assembly {
      size := extcodesize(_addr)
    }
    return (size > 0);
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_input","type":"address"},{"indexed":false,"internalType":"address","name":"_output","type":"address"},{"indexed":false,"internalType":"address","name":"_aggregator","type":"address"}],"name":"AggregatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allAggregators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"},{"internalType":"address[]","name":"_path","type":"address[]"}],"name":"getConversion","outputs":[{"internalType":"uint256","name":"result","type":"uint256"},{"internalType":"uint256","name":"oldestRateTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_path","type":"address[]"}],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint256","name":"oldestRateTimestamp","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_input","type":"address"},{"internalType":"address","name":"_output","type":"address"},{"internalType":"address","name":"_aggregator","type":"address"}],"name":"updateAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_inputs","type":"address[]"},{"internalType":"address[]","name":"_outputs","type":"address[]"},{"internalType":"address[]","name":"_aggregators","type":"address[]"}],"name":"updateAggregatorsList","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061001a3361001f565b6100ef565b61003781600061006e60201b610b981790919060201c565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6001600160a01b03811661008157600080fd5b61008b82826100ba565b1561009557600080fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b0382166100cf57600080fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b611148806100fe6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806397edd4fa1161005b57806397edd4fa14610173578063a3d7afa314610234578063bb5f747b14610348578063fbd4122a1461038f57610088565b806308d5bc581461008d5780634b6c8879146100f15780634c5a628c146101385780637362d9c814610140575b600080fd5b6100c8600480360360408110156100a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661041f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101366004803603606081101561010757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160409091013516610452565b005b61013661050b565b6101366004803603602081101561015657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610516565b6102166004803603602081101561018957600080fd5b8101906020810181356401000000008111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460208302840111640100000000831117156101d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610534945050505050565b60408051938452602084019290925282820152519081900360600190f35b6101366004803603606081101561024a57600080fd5b81019060208101813564010000000081111561026557600080fd5b82018360208201111561027757600080fd5b8035906020019184602083028401116401000000008311171561029957600080fd5b9193909290916020810190356401000000008111156102b757600080fd5b8201836020820111156102c957600080fd5b803590602001918460208302840111640100000000831117156102eb57600080fd5b91939092909160208101903564010000000081111561030957600080fd5b82018360208201111561031b57600080fd5b8035906020019184602083028401116401000000008311171561033d57600080fd5b5090925090506107df565b61037b6004803603602081101561035e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b1d565b604080519115158252519081900360200190f35b610406600480360360408110156103a557600080fd5b813591908101906040810160208201356401000000008111156103c757600080fd5b8201836020820111156103d957600080fd5b803590602001918460208302840111640100000000831117156103fb57600080fd5b509092509050610b31565b6040805192835260208301919091528051918290030190f35b600160209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b61045b33610b1d565b61046457600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083208786168085529083529281902080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000909616861790558051938452908301919091528181019290925290517f589e912830d38d62f14a6cf3cea8f8a002fc9288b37f0d914b5e7dc107d278bf9181900360600190a1505050565b61051433610c1c565b565b61051f33610b1d565b61052857600080fd5b61053181610c6b565b50565b670de0b6b3a7640000428160005b60018551038110156107d75760008060008061058789868151811061056357fe5b60200260200101518a876001018151811061057a57fe5b6020026020010151610cba565b935093509350935060008473ffffffffffffffffffffffffffffffffffffffff16638205bf6a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105d757600080fd5b505afa1580156105eb573d6000803e3d6000fd5b505050506040513d602081101561060157600080fd5b5051905087811015610611578097505b60008573ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b5051604080517f313ce567000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff89169163313ce567916004808301926020929190829003018186803b1580156106f157600080fd5b505afa158015610705573d6000803e3d6000fd5b505050506040513d602081101561071b57600080fd5b505160ff1690508481111561073c576107398b868303600a0a610dd7565b9a505b83811015610756576107538b828603600a0a610dd7565b9a505b851561077b576107748261076e8d600a85900a610dd7565b90610e53565b9a50610790565b61078d600a82900a61076e8d85610dd7565b9a505b848110156107aa576107a78b828703600a0a610e53565b9a505b838111156107c4576107c18b858303600a0a610e53565b9a505b5050600190950194506105429350505050565b509193909250565b6107e833610b1d565b6107f157600080fd5b84831461085f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f617272617973206d7573742068617665207468652073616d65206c656e677468604482015290519081900360640190fd5b8481146108cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f617272617973206d7573742068617665207468652073616d65206c656e677468604482015290519081900360640190fd5b60005b85811015610b14578282828181106108e457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166001600089898581811061091157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087878581811061097657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f589e912830d38d62f14a6cf3cea8f8a002fc9288b37f0d914b5e7dc107d278bf878783818110610a3857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16868684818110610a6157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16858585818110610a8a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a16001016108d0565b50505050505050565b6000610b298183610e95565b90505b919050565b6000806000806000610b7587878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061053492505050565b91945092509050610b8a8161076e8a86610dd7565b989197509095505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116610bb857600080fd5b610bc28282610e95565b15610bcc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610c27600082610ee4565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b610c76600082610b98565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320858516845290915281205490911690808083610d365773ffffffffffffffffffffffffffffffffffffffff80861660009081526001602081815260408084208b8616855290915290912054909116945092505b73ffffffffffffffffffffffffffffffffffffffff8416610db857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f2061676772656761746f7220666f756e6400000000000000000000000000604482015290519081900360640190fd5b610dc186610f64565b9150610dcc85610f64565b905092959194509250565b600082610de657506000610e4d565b82820282848281610df357fe5b0414610e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806110f26021913960400191505060405180910390fd5b90505b92915050565b6000610e4a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611029565b600073ffffffffffffffffffffffffffffffffffffffff8216610eb757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8116610f0457600080fd5b610f0e8282610e95565b610f1757600080fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600873ffffffffffffffffffffffffffffffffffffffff821673f5af88e117747e87fc5929f2ff87221b1447652e1415610fa057506012610b2c565b610fa9826110e5565b15610b2c578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff457600080fd5b505afa158015611008573d6000803e3d6000fd5b505050506040513d602081101561101e57600080fd5b505160ff1692915050565b600081836110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561109457818101518382015260200161107c565b50505050905090810190601f1680156110c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816110db57fe5b0495945050505050565b3b63ffffffff1615159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122046629d88fad78f77c785e4fae8dba3eedf36f6be9105732a331669a3216903c164736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c806397edd4fa1161005b57806397edd4fa14610173578063a3d7afa314610234578063bb5f747b14610348578063fbd4122a1461038f57610088565b806308d5bc581461008d5780634b6c8879146100f15780634c5a628c146101385780637362d9c814610140575b600080fd5b6100c8600480360360408110156100a357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602001351661041f565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101366004803603606081101561010757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160409091013516610452565b005b61013661050b565b6101366004803603602081101561015657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610516565b6102166004803603602081101561018957600080fd5b8101906020810181356401000000008111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460208302840111640100000000831117156101d857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610534945050505050565b60408051938452602084019290925282820152519081900360600190f35b6101366004803603606081101561024a57600080fd5b81019060208101813564010000000081111561026557600080fd5b82018360208201111561027757600080fd5b8035906020019184602083028401116401000000008311171561029957600080fd5b9193909290916020810190356401000000008111156102b757600080fd5b8201836020820111156102c957600080fd5b803590602001918460208302840111640100000000831117156102eb57600080fd5b91939092909160208101903564010000000081111561030957600080fd5b82018360208201111561031b57600080fd5b8035906020019184602083028401116401000000008311171561033d57600080fd5b5090925090506107df565b61037b6004803603602081101561035e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b1d565b604080519115158252519081900360200190f35b610406600480360360408110156103a557600080fd5b813591908101906040810160208201356401000000008111156103c757600080fd5b8201836020820111156103d957600080fd5b803590602001918460208302840111640100000000831117156103fb57600080fd5b509092509050610b31565b6040805192835260208301919091528051918290030190f35b600160209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b61045b33610b1d565b61046457600080fd5b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260408083208786168085529083529281902080549587167fffffffffffffffffffffffff0000000000000000000000000000000000000000909616861790558051938452908301919091528181019290925290517f589e912830d38d62f14a6cf3cea8f8a002fc9288b37f0d914b5e7dc107d278bf9181900360600190a1505050565b61051433610c1c565b565b61051f33610b1d565b61052857600080fd5b61053181610c6b565b50565b670de0b6b3a7640000428160005b60018551038110156107d75760008060008061058789868151811061056357fe5b60200260200101518a876001018151811061057a57fe5b6020026020010151610cba565b935093509350935060008473ffffffffffffffffffffffffffffffffffffffff16638205bf6a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105d757600080fd5b505afa1580156105eb573d6000803e3d6000fd5b505050506040513d602081101561060157600080fd5b5051905087811015610611578097505b60008573ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065957600080fd5b505afa15801561066d573d6000803e3d6000fd5b505050506040513d602081101561068357600080fd5b5051604080517f313ce567000000000000000000000000000000000000000000000000000000008152905191925060009173ffffffffffffffffffffffffffffffffffffffff89169163313ce567916004808301926020929190829003018186803b1580156106f157600080fd5b505afa158015610705573d6000803e3d6000fd5b505050506040513d602081101561071b57600080fd5b505160ff1690508481111561073c576107398b868303600a0a610dd7565b9a505b83811015610756576107538b828603600a0a610dd7565b9a505b851561077b576107748261076e8d600a85900a610dd7565b90610e53565b9a50610790565b61078d600a82900a61076e8d85610dd7565b9a505b848110156107aa576107a78b828703600a0a610e53565b9a505b838111156107c4576107c18b858303600a0a610e53565b9a505b5050600190950194506105429350505050565b509193909250565b6107e833610b1d565b6107f157600080fd5b84831461085f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f617272617973206d7573742068617665207468652073616d65206c656e677468604482015290519081900360640190fd5b8481146108cd57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f617272617973206d7573742068617665207468652073616d65206c656e677468604482015290519081900360640190fd5b60005b85811015610b14578282828181106108e457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166001600089898581811061091157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600087878581811061097657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f589e912830d38d62f14a6cf3cea8f8a002fc9288b37f0d914b5e7dc107d278bf878783818110610a3857fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16868684818110610a6157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16858585818110610a8a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a16001016108d0565b50505050505050565b6000610b298183610e95565b90505b919050565b6000806000806000610b7587878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061053492505050565b91945092509050610b8a8161076e8a86610dd7565b989197509095505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116610bb857600080fd5b610bc28282610e95565b15610bcc57600080fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b610c27600082610ee4565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b610c76600082610b98565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600160209081526040808320858516845290915281205490911690808083610d365773ffffffffffffffffffffffffffffffffffffffff80861660009081526001602081815260408084208b8616855290915290912054909116945092505b73ffffffffffffffffffffffffffffffffffffffff8416610db857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f2061676772656761746f7220666f756e6400000000000000000000000000604482015290519081900360640190fd5b610dc186610f64565b9150610dcc85610f64565b905092959194509250565b600082610de657506000610e4d565b82820282848281610df357fe5b0414610e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806110f26021913960400191505060405180910390fd5b90505b92915050565b6000610e4a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611029565b600073ffffffffffffffffffffffffffffffffffffffff8216610eb757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff8116610f0457600080fd5b610f0e8282610e95565b610f1757600080fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600873ffffffffffffffffffffffffffffffffffffffff821673f5af88e117747e87fc5929f2ff87221b1447652e1415610fa057506012610b2c565b610fa9826110e5565b15610b2c578173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff457600080fd5b505afa158015611008573d6000803e3d6000fd5b505050506040513d602081101561101e57600080fd5b505160ff1692915050565b600081836110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561109457818101518382015260200161107c565b50505050905090810190601f1680156110c15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816110db57fe5b0495945050505050565b3b63ffffffff1615159056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122046629d88fad78f77c785e4fae8dba3eedf36f6be9105732a331669a3216903c164736f6c634300060c0033

Deployed Bytecode Sourcemap

8026:7221:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8352:69;;;;;;;;;;;;;;;;-1:-1:-1;8352:69:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8777:238;;;;;;;;;;;;;;;;-1:-1:-1;8777:238:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7143:93;;;:::i;7019:116::-;;;;;;;;;;;;;;;;-1:-1:-1;7019:116:0;;;;:::i;10930:2040::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10930:2040:0;;-1:-1:-1;10930:2040:0;;-1:-1:-1;;;;;10930:2040:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;9301:577;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9301:577:0;;-1:-1:-1;9301:577:0;-1:-1:-1;9301:577:0;:::i;6886:125::-;;;;;;;;;;;;;;;;-1:-1:-1;6886:125:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10250:371;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10250:371:0;;-1:-1:-1;10250:371:0;-1:-1:-1;10250:371:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;8352:69;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8777:238::-;6829:28;6846:10;6829:16;:28::i;:::-;6821:37;;;;;;8905:22:::1;::::0;;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;;:31;;::::1;::::0;;;;;;;;;;:45;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;8962:47;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;8777:238:::0;;;:::o;7143:93::-;7195:33;7217:10;7195:21;:33::i;:::-;7143:93::o;7019:116::-;6829:28;6846:10;6829:16;:28::i;:::-;6821:37;;;;;;7100:27:::1;7119:7;7100:18;:27::i;:::-;7019:116:::0;:::o;10930:2040::-;8144:4;11226:15;8144:4;11017:12;11291:1674;11323:1;11308:5;:12;:16;11304:1;:20;11291:1674;;;11341:29;11372:22;11396:21;11419:22;11445:48;11470:5;11476:1;11470:8;;;;;;;;;;;;;;11480:5;11486:1;11490;11486:5;11480:12;;;;;;;;;;;;;;11445:24;:48::i;:::-;11340:153;;;;;;;;11553:24;11580:10;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11580:28:0;;-1:-1:-1;11621:38:0;;;11617:103;;;11694:16;11672:38;;11617:103;11773:19;11803:10;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11803:25:0;11932:21;;;;;;;;11803:25;;-1:-1:-1;11895:26:0;;11932:19;;;;;;:21;;;;;11803:25;;11932:21;;;;;;;:19;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11932:21:0;11924:30;;;-1:-1:-1;12072:34:0;;;12068:116;;;12126:48;:4;12140:32;;;12135:2;:38;12126:8;:48::i;:::-;12119:55;;12068:116;12217:14;12196:18;:35;12192:118;;;12251:49;:4;12265:33;;;12260:2;:39;12251:8;:49::i;:::-;12244:56;;12192:118;12425:17;12421:183;;;12462:49;12499:11;12462:32;:4;12471:2;:22;;;12462:8;:32::i;:::-;:36;;:49::i;:::-;12455:56;;12421:183;;;12545:49;12571:2;:22;;;12545:21;:4;12554:11;12545:8;:21::i;:49::-;12538:56;;12421:183;12741:13;12720:18;:34;12716:116;;;12774:48;:4;12788:32;;;12783:2;:38;12774:8;:48::i;:::-;12767:55;;12716:116;12865:14;12844:18;:35;12840:118;;;12899:49;:4;12913:33;;;12908:2;:39;12899:8;:49::i;:::-;12892:56;;12840:118;-1:-1:-1;;11326:3:0;;;;;-1:-1:-1;11291:1674:0;;-1:-1:-1;;;;11291:1674:0;;;10930:2040;;;;;:::o;9301:577::-;6829:28;6846:10;6829:16;:28::i;:::-;6821:37;;;;;;9478:33;;::::1;9470:78;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9563:37:::0;;::::1;9555:82;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9693:6;9688:185;9701:18:::0;;::::1;9688:185;;;9777:12;;9790:1;9777:15;;;;;;;;;;;;;;;9735:14;:26;9750:7;;9758:1;9750:10;;;;;;;;;;;;;;;9735:26;;;;;;;;;;;;;;;:39;9762:8;;9771:1;9762:11;;;;;;;;;;;;;;;9735:39;;;;;;;;;;;;;;;;:57;;;;;;;;;;;;;;;;;;9806:59;9824:7;;9832:1;9824:10;;;;;;;;;;;;;;;9836:8;;9845:1;9836:11;;;;;;;;;;;;;;;9849:12;;9862:1;9849:15;;;;;;;;;;;;;;;9806:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9721:3;;9688:185;;;;9301:577:::0;;;;;;:::o;6886:125::-;6950:4;6974:29;6950:4;6995:7;6974:20;:29::i;:::-;6967:36;;6886:125;;;;:::o;10250:371::-;10371:14;10387:27;10427:12;10441:17;10460:16;10480:14;10488:5;;10480:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10480:7:0;;-1:-1:-1;;;10480:14:0:i;:::-;10426:68;;-1:-1:-1;10426:68:0;-1:-1:-1;10426:68:0;-1:-1:-1;10542:33:0;10426:68;10542:19;:9;10426:68;10542:13;:19::i;:33::-;10533:42;10606:9;;-1:-1:-1;10250:371:0;;-1:-1:-1;;;;;;10250:371:0:o;5615:186::-;5692:21;;;5684:30;;;;;;5734:18;5738:4;5744:7;5734:3;:18::i;:::-;5733:19;5725:28;;;;;;5766:20;;:11;:20;;;;;;;;;;;:27;;;;5789:4;5766:27;;;5615:186::o;7398:154::-;7466:32;:16;7490:7;7466:23;:32::i;:::-;7514:30;;;;;;;;;;;7398:154;:::o;7244:146::-;7309:29;:16;7330:7;7309:20;:29::i;:::-;7354:28;;;;;;;;;;;7244:146;:::o;13379:833::-;13686:22;;;;13483:29;13686:22;;;:14;:22;;;;;;;;:31;;;;;;;;;;;;;;;13483:29;;13842:36;13838:156;;13921:23;;;;;;;;:14;:23;;;;;;;;:31;;;;;;;;;;;;;;;;-1:-1:-1;13921:14:0;-1:-1:-1;13838:156:0;14010:36;;;14002:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14143:19;14155:6;14143:11;:19::i;:::-;14127:35;;14186:20;14198:7;14186:11;:20::i;:::-;14169:37;;13379:833;;;;;;;:::o;2263:471::-;2321:7;2566:6;2562:47;;-1:-1:-1;2596:1:0;2589:8;;2562:47;2633:5;;;2637:1;2633;:5;:1;2657:5;;;;;:10;2649:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2725:1;-1:-1:-1;2263:471:0;;;;;:::o;3210:132::-;3268:7;3295:39;3299:1;3302;3295:39;;;;;;;;;;;;;;;;;:3;:39::i;6163:165::-;6235:4;6260:21;;;6252:30;;;;;;-1:-1:-1;6300:20:0;;:11;:20;;;;;;;;;;;;;;;6163:165::o;5880:189::-;5960:21;;;5952:30;;;;;;6001:18;6005:4;6011:7;6001:3;:18::i;:::-;5993:27;;;;;;6033:20;;6056:5;6033:20;;;;;;;;;;;:28;;;;;;5880:189::o;14359:479::-;14525:1;14588:60;;;14605:42;14588:60;14584:249;;;-1:-1:-1;14670:2:0;14584:249;;;14690:17;14701:5;14690:10;:17::i;:::-;14686:147;;;14808:5;14794:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14794:31:0;14783:42;;;14359:479;-1:-1:-1;;14359:479:0:o;3838:278::-;3924:7;3959:12;3952:5;3944:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:9;3999:1;3995;:5;;;;;;;3838:278;-1:-1:-1;;;;;3838:278:0:o;15007:237::-;15190:18;15229:8;;;;;15007:237::o

Swarm Source

ipfs://46629d88fad78f77c785e4fae8dba3eedf36f6be9105732a331669a3216903c1

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.