More Info
Private Name Tags
ContractCreator
Transactions Sent
Latest:
N/A
First:
N/A
Funded By
N/A
Latest 25 from a total of 3,126 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Request Rate Upd... | 12222003 | 1215 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12215446 | 1216 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12208909 | 1217 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12202437 | 1218 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12195968 | 1219 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12189432 | 1220 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12182949 | 1221 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12176417 | 1222 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12169881 | 1223 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12163359 | 1224 days ago | IN | 0 ETH | 0.21303693 | ||||
Request Rate Upd... | 12156895 | 1225 days ago | IN | 0 ETH | 0.19366994 | ||||
Request Rate Upd... | 12150385 | 1226 days ago | IN | 0 ETH | 0.34309811 | ||||
Request Rate Upd... | 12143935 | 1227 days ago | IN | 0 ETH | 0.19366994 | ||||
Request Rate Upd... | 12137427 | 1228 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12130898 | 1229 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12124426 | 1230 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12117917 | 1231 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12111396 | 1232 days ago | IN | 0 ETH | 0.19366994 | ||||
Request Rate Upd... | 12104896 | 1233 days ago | IN | 0 ETH | 0.19366994 | ||||
Request Rate Upd... | 12098376 | 1234 days ago | IN | 0 ETH | 0.19366994 | ||||
Request Rate Upd... | 12091887 | 1235 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12085407 | 1236 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12078960 | 1237 days ago | IN | 0 ETH | 0.17606358 | ||||
Request Rate Upd... | 12072454 | 1238 days ago | IN | 0 ETH | 0.19366994 | ||||
Request Rate Upd... | 12065951 | 1239 days ago | IN | 0 ETH | 0.19366994 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
12327025 | 1199 days ago | 0 ETH |
Loading...
Loading
Contract Self Destruct called at Txn Hash 0x32bfd28cc3dcb2da3be7e595664fe0e41615a18e14537a3da7b0fc40c6323325
Contract Name:
Aggregator
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-01-06 */ /** * @dev A library for working with mutable byte buffers in Solidity. * * Byte buffers are mutable and expandable, and provide a variety of primitives * for writing to them. At any time you can fetch a bytes object containing the * current contents of the buffer. The bytes object should not be stored between * operations, as it may change due to resizing of the buffer. */ library Buffer { /** * @dev Represents a mutable buffer. Buffers have a current value (buf) and * a capacity. The capacity may be longer than the current value, in * which case it can be extended without the need to allocate more memory. */ struct buffer { bytes buf; uint capacity; } /** * @dev Initializes a buffer with an initial capacity. * @param buf The buffer to initialize. * @param capacity The number of bytes of space to allocate the buffer. * @return The buffer, for chaining. */ function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) { if (capacity % 32 != 0) { capacity += 32 - (capacity % 32); } // Allocate space for the buffer data buf.capacity = capacity; assembly { let ptr := mload(0x40) mstore(buf, ptr) mstore(ptr, 0) mstore(0x40, add(32, add(ptr, capacity))) } return buf; } /** * @dev Initializes a new buffer from an existing bytes object. * Changes to the buffer may mutate the original value. * @param b The bytes object to initialize the buffer with. * @return A new buffer. */ function fromBytes(bytes memory b) internal pure returns(buffer memory) { buffer memory buf; buf.buf = b; buf.capacity = b.length; return buf; } function resize(buffer memory buf, uint capacity) private pure { bytes memory oldbuf = buf.buf; init(buf, capacity); append(buf, oldbuf); } function max(uint a, uint b) private pure returns(uint) { if (a > b) { return a; } return b; } /** * @dev Sets buffer length to 0. * @param buf The buffer to truncate. * @return The original buffer, for chaining.. */ function truncate(buffer memory buf) internal pure returns (buffer memory) { assembly { let bufptr := mload(buf) mstore(bufptr, 0) } return buf; } /** * @dev Writes a byte string to a buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param off The start offset to write to. * @param data The data to append. * @param len The number of bytes to copy. * @return The original buffer, for chaining. */ function write(buffer memory buf, uint off, bytes memory data, uint len) internal pure returns(buffer memory) { require(len <= data.length); if (off + len > buf.capacity) { resize(buf, max(buf.capacity, len + off) * 2); } uint dest; uint src; assembly { // Memory address of the buffer data let bufptr := mload(buf) // Length of existing buffer data let buflen := mload(bufptr) // Start address = buffer address + offset + sizeof(buffer length) dest := add(add(bufptr, 32), off) // Update buffer length if we're extending it if gt(add(len, off), buflen) { mstore(bufptr, add(len, off)) } src := add(data, 32) } // Copy word-length chunks while possible for (; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } return buf; } /** * @dev Appends a byte string to a buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @param len The number of bytes to copy. * @return The original buffer, for chaining. */ function append(buffer memory buf, bytes memory data, uint len) internal pure returns (buffer memory) { return write(buf, buf.buf.length, data, len); } /** * @dev Appends a byte string to a buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chaining. */ function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) { return write(buf, buf.buf.length, data, data.length); } /** * @dev Writes a byte to the buffer. Resizes if doing so would exceed the * capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write the byte at. * @param data The data to append. * @return The original buffer, for chaining. */ function writeUint8(buffer memory buf, uint off, uint8 data) internal pure returns(buffer memory) { if (off >= buf.capacity) { resize(buf, buf.capacity * 2); } assembly { // Memory address of the buffer data let bufptr := mload(buf) // Length of existing buffer data let buflen := mload(bufptr) // Address = buffer address + sizeof(buffer length) + off let dest := add(add(bufptr, off), 32) mstore8(dest, data) // Update buffer length if we extended it if eq(off, buflen) { mstore(bufptr, add(buflen, 1)) } } return buf; } /** * @dev Appends a byte to the buffer. Resizes if doing so would exceed the * capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chaining. */ function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) { return writeUint8(buf, buf.buf.length, data); } /** * @dev Writes up to 32 bytes to the buffer. Resizes if doing so would * exceed the capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write at. * @param data The data to append. * @param len The number of bytes to write (left-aligned). * @return The original buffer, for chaining. */ function write(buffer memory buf, uint off, bytes32 data, uint len) private pure returns(buffer memory) { if (len + off > buf.capacity) { resize(buf, (len + off) * 2); } uint mask = 256 ** len - 1; // Right-align data data = data >> (8 * (32 - len)); assembly { // Memory address of the buffer data let bufptr := mload(buf) // Address = buffer address + sizeof(buffer length) + off + len let dest := add(add(bufptr, off), len) mstore(dest, or(and(mload(dest), not(mask)), data)) // Update buffer length if we extended it if gt(add(off, len), mload(bufptr)) { mstore(bufptr, add(off, len)) } } return buf; } /** * @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the * capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write at. * @param data The data to append. * @return The original buffer, for chaining. */ function writeBytes20(buffer memory buf, uint off, bytes20 data) internal pure returns (buffer memory) { return write(buf, off, bytes32(data), 20); } /** * @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chhaining. */ function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) { return write(buf, buf.buf.length, bytes32(data), 20); } /** * @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer, for chaining. */ function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) { return write(buf, buf.buf.length, data, 32); } /** * @dev Writes an integer to the buffer. Resizes if doing so would exceed * the capacity of the buffer. * @param buf The buffer to append to. * @param off The offset to write at. * @param data The data to append. * @param len The number of bytes to write (right-aligned). * @return The original buffer, for chaining. */ function writeInt(buffer memory buf, uint off, uint data, uint len) private pure returns(buffer memory) { if (len + off > buf.capacity) { resize(buf, (len + off) * 2); } uint mask = 256 ** len - 1; assembly { // Memory address of the buffer data let bufptr := mload(buf) // Address = buffer address + off + sizeof(buffer length) + len let dest := add(add(bufptr, off), len) mstore(dest, or(and(mload(dest), not(mask)), data)) // Update buffer length if we extended it if gt(add(off, len), mload(bufptr)) { mstore(bufptr, add(off, len)) } } return buf; } /** * @dev Appends a byte to the end of the buffer. Resizes if doing so would * exceed the capacity of the buffer. * @param buf The buffer to append to. * @param data The data to append. * @return The original buffer. */ function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) { return writeInt(buf, buf.buf.length, data, len); } } library CBOR { using Buffer for Buffer.buffer; uint8 private constant MAJOR_TYPE_INT = 0; uint8 private constant MAJOR_TYPE_NEGATIVE_INT = 1; uint8 private constant MAJOR_TYPE_BYTES = 2; uint8 private constant MAJOR_TYPE_STRING = 3; uint8 private constant MAJOR_TYPE_ARRAY = 4; uint8 private constant MAJOR_TYPE_MAP = 5; uint8 private constant MAJOR_TYPE_CONTENT_FREE = 7; function encodeType(Buffer.buffer memory buf, uint8 major, uint value) private pure { if(value <= 23) { buf.appendUint8(uint8((major << 5) | value)); } else if(value <= 0xFF) { buf.appendUint8(uint8((major << 5) | 24)); buf.appendInt(value, 1); } else if(value <= 0xFFFF) { buf.appendUint8(uint8((major << 5) | 25)); buf.appendInt(value, 2); } else if(value <= 0xFFFFFFFF) { buf.appendUint8(uint8((major << 5) | 26)); buf.appendInt(value, 4); } else if(value <= 0xFFFFFFFFFFFFFFFF) { buf.appendUint8(uint8((major << 5) | 27)); buf.appendInt(value, 8); } } function encodeIndefiniteLengthType(Buffer.buffer memory buf, uint8 major) private pure { buf.appendUint8(uint8((major << 5) | 31)); } function encodeUInt(Buffer.buffer memory buf, uint value) internal pure { encodeType(buf, MAJOR_TYPE_INT, value); } function encodeInt(Buffer.buffer memory buf, int value) internal pure { if(value >= 0) { encodeType(buf, MAJOR_TYPE_INT, uint(value)); } else { encodeType(buf, MAJOR_TYPE_NEGATIVE_INT, uint(-1 - value)); } } function encodeBytes(Buffer.buffer memory buf, bytes value) internal pure { encodeType(buf, MAJOR_TYPE_BYTES, value.length); buf.append(value); } function encodeString(Buffer.buffer memory buf, string value) internal pure { encodeType(buf, MAJOR_TYPE_STRING, bytes(value).length); buf.append(bytes(value)); } function startArray(Buffer.buffer memory buf) internal pure { encodeIndefiniteLengthType(buf, MAJOR_TYPE_ARRAY); } function startMap(Buffer.buffer memory buf) internal pure { encodeIndefiniteLengthType(buf, MAJOR_TYPE_MAP); } function endSequence(Buffer.buffer memory buf) internal pure { encodeIndefiniteLengthType(buf, MAJOR_TYPE_CONTENT_FREE); } } /** * @title Library for common Chainlink functions * @dev Uses imported CBOR library for encoding to buffer */ library Chainlink { uint256 internal constant defaultBufferSize = 256; // solhint-disable-line const-name-snakecase using CBOR for Buffer.buffer; struct Request { bytes32 id; address callbackAddress; bytes4 callbackFunctionId; uint256 nonce; Buffer.buffer buf; } /** * @notice Initializes a Chainlink request * @dev Sets the ID, callback address, and callback function signature on the request * @param self The uninitialized request * @param _id The Job Specification ID * @param _callbackAddress The callback address * @param _callbackFunction The callback function signature * @return The initialized request */ function initialize( Request memory self, bytes32 _id, address _callbackAddress, bytes4 _callbackFunction ) internal pure returns (Chainlink.Request memory) { Buffer.init(self.buf, defaultBufferSize); self.id = _id; self.callbackAddress = _callbackAddress; self.callbackFunctionId = _callbackFunction; return self; } /** * @notice Sets the data for the buffer without encoding CBOR on-chain * @dev CBOR can be closed with curly-brackets {} or they can be left off * @param self The initialized request * @param _data The CBOR data */ function setBuffer(Request memory self, bytes _data) internal pure { Buffer.init(self.buf, _data.length); Buffer.append(self.buf, _data); } /** * @notice Adds a string value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The string value to add */ function add(Request memory self, string _key, string _value) internal pure { self.buf.encodeString(_key); self.buf.encodeString(_value); } /** * @notice Adds a bytes value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The bytes value to add */ function addBytes(Request memory self, string _key, bytes _value) internal pure { self.buf.encodeString(_key); self.buf.encodeBytes(_value); } /** * @notice Adds a int256 value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The int256 value to add */ function addInt(Request memory self, string _key, int256 _value) internal pure { self.buf.encodeString(_key); self.buf.encodeInt(_value); } /** * @notice Adds a uint256 value to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _value The uint256 value to add */ function addUint(Request memory self, string _key, uint256 _value) internal pure { self.buf.encodeString(_key); self.buf.encodeUInt(_value); } /** * @notice Adds an array of strings to the request with a given key name * @param self The initialized request * @param _key The name of the key * @param _values The array of string values to add */ function addStringArray(Request memory self, string _key, string[] memory _values) internal pure { self.buf.encodeString(_key); self.buf.startArray(); for (uint256 i = 0; i < _values.length; i++) { self.buf.encodeString(_values[i]); } self.buf.endSequence(); } } interface ENSInterface { // Logged when the owner of a node assigns a new owner to a subnode. event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner); // Logged when the owner of a node transfers ownership to a new account. event Transfer(bytes32 indexed node, address owner); // Logged when the resolver for a node changes. event NewResolver(bytes32 indexed node, address resolver); // Logged when the TTL of a node changes event NewTTL(bytes32 indexed node, uint64 ttl); function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external; function setResolver(bytes32 node, address resolver) external; function setOwner(bytes32 node, address owner) external; function setTTL(bytes32 node, uint64 ttl) external; function owner(bytes32 node) external view returns (address); function resolver(bytes32 node) external view returns (address); function ttl(bytes32 node) external view returns (uint64); } interface LinkTokenInterface { function allowance(address owner, address spender) external returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external returns (uint256 balance); function decimals() external returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external returns (string tokenName); function symbol() external returns (string tokenSymbol); function totalSupply() external returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall(address to, uint256 value, bytes data) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool success); } interface ChainlinkRequestInterface { function oracleRequest( address sender, uint256 payment, bytes32 id, address callbackAddress, bytes4 callbackFunctionId, uint256 nonce, uint256 version, bytes data ) external; function cancelOracleRequest( bytes32 requestId, uint256 payment, bytes4 callbackFunctionId, uint256 expiration ) external; } interface PointerInterface { function getAddress() external view returns (address); } contract ENSResolver { function addr(bytes32 node) public view returns (address); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } /** * @title The ChainlinkClient contract * @notice Contract writers can inherit this contract in order to create requests for the * Chainlink network */ contract ChainlinkClient { using Chainlink for Chainlink.Request; using SafeMath for uint256; uint256 constant internal LINK = 10**18; uint256 constant private AMOUNT_OVERRIDE = 0; address constant private SENDER_OVERRIDE = 0x0; uint256 constant private ARGS_VERSION = 1; bytes32 constant private ENS_TOKEN_SUBNAME = keccak256("link"); bytes32 constant private ENS_ORACLE_SUBNAME = keccak256("oracle"); address constant private LINK_TOKEN_POINTER = 0xC89bD4E1632D3A43CB03AAAd5262cbe4038Bc571; ENSInterface private ens; bytes32 private ensNode; LinkTokenInterface private link; ChainlinkRequestInterface private oracle; uint256 private requests = 1; mapping(bytes32 => address) private pendingRequests; event ChainlinkRequested(bytes32 indexed id); event ChainlinkFulfilled(bytes32 indexed id); event ChainlinkCancelled(bytes32 indexed id); /** * @notice Creates a request that can hold additional parameters * @param _specId The Job Specification ID that the request will be created for * @param _callbackAddress The callback address that the response will be sent to * @param _callbackFunctionSignature The callback function signature to use for the callback address * @return A Chainlink Request struct in memory */ function buildChainlinkRequest( bytes32 _specId, address _callbackAddress, bytes4 _callbackFunctionSignature ) internal pure returns (Chainlink.Request memory) { Chainlink.Request memory req; return req.initialize(_specId, _callbackAddress, _callbackFunctionSignature); } /** * @notice Creates a Chainlink request to the stored oracle address * @dev Calls `chainlinkRequestTo` with the stored oracle address * @param _req The initialized Chainlink Request * @param _payment The amount of LINK to send for the request * @return The request ID */ function sendChainlinkRequest(Chainlink.Request memory _req, uint256 _payment) internal returns (bytes32) { return sendChainlinkRequestTo(oracle, _req, _payment); } /** * @notice Creates a Chainlink request to the specified oracle address * @dev Generates and stores a request ID, increments the local nonce, and uses `transferAndCall` to * send LINK which creates a request on the target oracle contract. * Emits ChainlinkRequested event. * @param _oracle The address of the oracle for the request * @param _req The initialized Chainlink Request * @param _payment The amount of LINK to send for the request * @return The request ID */ function sendChainlinkRequestTo(address _oracle, Chainlink.Request memory _req, uint256 _payment) internal returns (bytes32 requestId) { requestId = keccak256(abi.encodePacked(this, requests)); _req.nonce = requests; pendingRequests[requestId] = _oracle; emit ChainlinkRequested(requestId); require(link.transferAndCall(_oracle, _payment, encodeRequest(_req)), "unable to transferAndCall to oracle"); requests += 1; return requestId; } /** * @notice Allows a request to be cancelled if it has not been fulfilled * @dev Requires keeping track of the expiration value emitted from the oracle contract. * Deletes the request from the `pendingRequests` mapping. * Emits ChainlinkCancelled event. * @param _requestId The request ID * @param _payment The amount of LINK sent for the request * @param _callbackFunc The callback function specified for the request * @param _expiration The time of the expiration for the request */ function cancelChainlinkRequest( bytes32 _requestId, uint256 _payment, bytes4 _callbackFunc, uint256 _expiration ) internal { ChainlinkRequestInterface requested = ChainlinkRequestInterface(pendingRequests[_requestId]); delete pendingRequests[_requestId]; emit ChainlinkCancelled(_requestId); requested.cancelOracleRequest(_requestId, _payment, _callbackFunc, _expiration); } /** * @notice Sets the stored oracle address * @param _oracle The address of the oracle contract */ function setChainlinkOracle(address _oracle) internal { oracle = ChainlinkRequestInterface(_oracle); } /** * @notice Sets the LINK token address * @param _link The address of the LINK token contract */ function setChainlinkToken(address _link) internal { link = LinkTokenInterface(_link); } /** * @notice Sets the Chainlink token address for the public * network as given by the Pointer contract */ function setPublicChainlinkToken() internal { setChainlinkToken(PointerInterface(LINK_TOKEN_POINTER).getAddress()); } /** * @notice Retrieves the stored address of the LINK token * @return The address of the LINK token */ function chainlinkTokenAddress() internal view returns (address) { return address(link); } /** * @notice Retrieves the stored address of the oracle contract * @return The address of the oracle contract */ function chainlinkOracleAddress() internal view returns (address) { return address(oracle); } /** * @notice Allows for a request which was created on another contract to be fulfilled * on this contract * @param _oracle The address of the oracle contract that will fulfill the request * @param _requestId The request ID used for the response */ function addChainlinkExternalRequest(address _oracle, bytes32 _requestId) internal notPendingRequest(_requestId) { pendingRequests[_requestId] = _oracle; } /** * @notice Sets the stored oracle and LINK token contracts with the addresses resolved by ENS * @dev Accounts for subnodes having different resolvers * @param _ens The address of the ENS contract * @param _node The ENS node hash */ function useChainlinkWithENS(address _ens, bytes32 _node) internal { ens = ENSInterface(_ens); ensNode = _node; bytes32 linkSubnode = keccak256(abi.encodePacked(ensNode, ENS_TOKEN_SUBNAME)); ENSResolver resolver = ENSResolver(ens.resolver(linkSubnode)); setChainlinkToken(resolver.addr(linkSubnode)); updateChainlinkOracleWithENS(); } /** * @notice Sets the stored oracle contract with the address resolved by ENS * @dev This may be called on its own as long as `useChainlinkWithENS` has been called previously */ function updateChainlinkOracleWithENS() internal { bytes32 oracleSubnode = keccak256(abi.encodePacked(ensNode, ENS_ORACLE_SUBNAME)); ENSResolver resolver = ENSResolver(ens.resolver(oracleSubnode)); setChainlinkOracle(resolver.addr(oracleSubnode)); } /** * @notice Encodes the request to be sent to the oracle contract * @dev The Chainlink node expects values to be in order for the request to be picked up. Order of types * will be validated in the oracle contract. * @param _req The initialized Chainlink Request * @return The bytes payload for the `transferAndCall` method */ function encodeRequest(Chainlink.Request memory _req) private view returns (bytes memory) { return abi.encodeWithSelector( oracle.oracleRequest.selector, SENDER_OVERRIDE, // Sender value - overridden by onTokenTransfer by the requesting contract's address AMOUNT_OVERRIDE, // Amount value - overridden by onTokenTransfer by the actual amount of LINK sent _req.id, _req.callbackAddress, _req.callbackFunctionId, _req.nonce, ARGS_VERSION, _req.buf.buf); } /** * @notice Ensures that the fulfillment is valid for this contract * @dev Use if the contract developer prefers methods instead of modifiers for validation * @param _requestId The request ID for fulfillment */ function validateChainlinkCallback(bytes32 _requestId) internal recordChainlinkFulfillment(_requestId) // solhint-disable-next-line no-empty-blocks {} /** * @dev Reverts if the sender is not the oracle of the request. * Emits ChainlinkFulfilled event. * @param _requestId The request ID for fulfillment */ modifier recordChainlinkFulfillment(bytes32 _requestId) { require(msg.sender == pendingRequests[_requestId], "Source must be the oracle of the request"); delete pendingRequests[_requestId]; emit ChainlinkFulfilled(_requestId); _; } /** * @dev Reverts if the request is already pending * @param _requestId The request ID for fulfillment */ modifier notPendingRequest(bytes32 _requestId) { require(pendingRequests[_requestId] == address(0), "Request is already pending"); _; } } interface AggregatorInterface { function latestAnswer() external view returns (int256); function latestTimestamp() external view returns (uint256); function latestRound() external view returns (uint256); function getAnswer(uint256 roundId) external view returns (int256); function getTimestamp(uint256 roundId) external view returns (uint256); event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 timestamp); event NewRound(uint256 indexed roundId, address indexed startedBy); } library SignedSafeMath { /** * @dev Adds two int256s and makes sure the result doesn't overflow. Signed * integers aren't supported by the SafeMath library, thus this method * @param _a The first number to be added * @param _a The second number to be added */ function add(int256 _a, int256 _b) internal pure returns (int256) { int256 c = _a + _b; require((_b >= 0 && c >= _a) || (_b < 0 && c < _a), "SignedSafeMath: addition overflow"); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title An example Chainlink contract with aggregation * @notice Requesters can use this contract as a framework for creating * requests to multiple Chainlink nodes and running aggregation * as the contract receives answers. */ contract Aggregator is AggregatorInterface, ChainlinkClient, Ownable { using SignedSafeMath for int256; struct Answer { uint128 minimumResponses; uint128 maxResponses; int256[] responses; } event ResponseReceived(int256 indexed response, uint256 indexed answerId, address indexed sender); int256 private currentAnswerValue; uint256 private updatedTimestampValue; uint256 private latestCompletedAnswer; uint128 public paymentAmount; uint128 public minimumResponses; bytes32[] public jobIds; address[] public oracles; uint256 private answerCounter = 1; mapping(address => bool) public authorizedRequesters; mapping(bytes32 => uint256) private requestAnswers; mapping(uint256 => Answer) private answers; mapping(uint256 => int256) private currentAnswers; mapping(uint256 => uint256) private updatedTimestamps; uint256 constant private MAX_ORACLE_COUNT = 45; /** * @notice Deploy with the address of the LINK token and arrays of matching * length containing the addresses of the oracles and their corresponding * Job IDs. * @dev Sets the LinkToken address for the network, addresses of the oracles, * and jobIds in storage. * @param _link The address of the LINK token * @param _paymentAmount the amount of LINK to be sent to each oracle for each request * @param _minimumResponses the minimum number of responses * before an answer will be calculated * @param _oracles An array of oracle addresses * @param _jobIds An array of Job IDs */ constructor( address _link, uint128 _paymentAmount, uint128 _minimumResponses, address[] _oracles, bytes32[] _jobIds ) public Ownable() { setChainlinkToken(_link); updateRequestDetails(_paymentAmount, _minimumResponses, _oracles, _jobIds); } /** * @notice Creates a Chainlink request for each oracle in the oracles array. * @dev This example does not include request parameters. Reference any documentation * associated with the Job IDs used to determine the required parameters per-request. */ function requestRateUpdate() external ensureAuthorizedRequester() { Chainlink.Request memory request; bytes32 requestId; uint256 oraclePayment = paymentAmount; for (uint i = 0; i < oracles.length; i++) { request = buildChainlinkRequest(jobIds[i], this, this.chainlinkCallback.selector); requestId = sendChainlinkRequestTo(oracles[i], request, oraclePayment); requestAnswers[requestId] = answerCounter; } answers[answerCounter].minimumResponses = minimumResponses; answers[answerCounter].maxResponses = uint128(oracles.length); answerCounter = answerCounter.add(1); emit NewRound(answerCounter, msg.sender); } /** * @notice Receives the answer from the Chainlink node. * @dev This function can only be called by the oracle that received the request. * @param _clRequestId The Chainlink request ID associated with the answer * @param _response The answer provided by the Chainlink node */ function chainlinkCallback(bytes32 _clRequestId, int256 _response) external { validateChainlinkCallback(_clRequestId); uint256 answerId = requestAnswers[_clRequestId]; delete requestAnswers[_clRequestId]; answers[answerId].responses.push(_response); emit ResponseReceived(_response, answerId, msg.sender); updateLatestAnswer(answerId); deleteAnswer(answerId); } /** * @notice Updates the arrays of oracles and jobIds with new values, * overwriting the old values. * @dev Arrays are validated to be equal length. * @param _paymentAmount the amount of LINK to be sent to each oracle for each request * @param _minimumResponses the minimum number of responses * before an answer will be calculated * @param _oracles An array of oracle addresses * @param _jobIds An array of Job IDs */ function updateRequestDetails( uint128 _paymentAmount, uint128 _minimumResponses, address[] _oracles, bytes32[] _jobIds ) public onlyOwner() validateAnswerRequirements(_minimumResponses, _oracles, _jobIds) { paymentAmount = _paymentAmount; minimumResponses = _minimumResponses; jobIds = _jobIds; oracles = _oracles; } /** * @notice Allows the owner of the contract to withdraw any LINK balance * available on the contract. * @dev The contract will need to have a LINK balance in order to create requests. * @param _recipient The address to receive the LINK tokens * @param _amount The amount of LINK to send from the contract */ function transferLINK(address _recipient, uint256 _amount) public onlyOwner() { LinkTokenInterface linkToken = LinkTokenInterface(chainlinkTokenAddress()); require(linkToken.transfer(_recipient, _amount), "LINK transfer failed"); } /** * @notice Called by the owner to permission other addresses to generate new * requests to oracles. * @param _requester the address whose permissions are being set * @param _allowed boolean that determines whether the requester is * permissioned or not */ function setAuthorization(address _requester, bool _allowed) external onlyOwner() { authorizedRequesters[_requester] = _allowed; } /** * @notice Cancels an outstanding Chainlink request. * The oracle contract requires the request ID and additional metadata to * validate the cancellation. Only old answers can be cancelled. * @param _requestId is the identifier for the chainlink request being cancelled * @param _payment is the amount of LINK paid to the oracle for the request * @param _expiration is the time when the request expires */ function cancelRequest( bytes32 _requestId, uint256 _payment, uint256 _expiration ) external ensureAuthorizedRequester() { uint256 answerId = requestAnswers[_requestId]; require(answerId < latestCompletedAnswer, "Cannot modify an in-progress answer"); delete requestAnswers[_requestId]; answers[answerId].responses.push(0); deleteAnswer(answerId); cancelChainlinkRequest( _requestId, _payment, this.chainlinkCallback.selector, _expiration ); } /** * @notice Called by the owner to kill the contract. This transfers all LINK * balance and ETH balance (if there is any) to the owner. */ function destroy() external onlyOwner() { LinkTokenInterface linkToken = LinkTokenInterface(chainlinkTokenAddress()); transferLINK(owner, linkToken.balanceOf(address(this))); selfdestruct(owner); } /** * @dev Performs aggregation of the answers received from the Chainlink nodes. * Assumes that at least half the oracles are honest and so can't contol the * middle of the ordered responses. * @param _answerId The answer ID associated with the group of requests */ function updateLatestAnswer(uint256 _answerId) private ensureMinResponsesReceived(_answerId) ensureOnlyLatestAnswer(_answerId) { uint256 responseLength = answers[_answerId].responses.length; uint256 middleIndex = responseLength.div(2); int256 currentAnswerTemp; if (responseLength % 2 == 0) { int256 median1 = quickselect(answers[_answerId].responses, middleIndex); int256 median2 = quickselect(answers[_answerId].responses, middleIndex.add(1)); // quickselect is 1 indexed currentAnswerTemp = median1.add(median2) / 2; // signed integers are not supported by SafeMath } else { currentAnswerTemp = quickselect(answers[_answerId].responses, middleIndex.add(1)); // quickselect is 1 indexed } currentAnswerValue = currentAnswerTemp; latestCompletedAnswer = _answerId; updatedTimestampValue = now; updatedTimestamps[_answerId] = now; currentAnswers[_answerId] = currentAnswerTemp; emit AnswerUpdated(currentAnswerTemp, _answerId, now); } /** * @notice get the most recently reported answer */ function latestAnswer() external view returns (int256) { return currentAnswers[latestCompletedAnswer]; } /** * @notice get the last updated at block timestamp */ function latestTimestamp() external view returns (uint256) { return updatedTimestamps[latestCompletedAnswer]; } /** * @notice get past rounds answers * @param _roundId the answer number to retrieve the answer for */ function getAnswer(uint256 _roundId) external view returns (int256) { return currentAnswers[_roundId]; } /** * @notice get block timestamp when an answer was last updated * @param _roundId the answer number to retrieve the updated timestamp for */ function getTimestamp(uint256 _roundId) external view returns (uint256) { return updatedTimestamps[_roundId]; } /** * @notice get the latest completed round where the answer was updated */ function latestRound() external view returns (uint256) { return latestCompletedAnswer; } /** * @dev Returns the kth value of the ordered array * See: http://www.cs.yale.edu/homes/aspnes/pinewiki/QuickSelect.html * @param _a The list of elements to pull from * @param _k The index, 1 based, of the elements you want to pull from when ordered */ function quickselect(int256[] memory _a, uint256 _k) private pure returns (int256) { int256[] memory a = _a; uint256 k = _k; uint256 aLen = a.length; int256[] memory a1 = new int256[](aLen); int256[] memory a2 = new int256[](aLen); uint256 a1Len; uint256 a2Len; int256 pivot; uint256 i; while (true) { pivot = a[aLen.div(2)]; a1Len = 0; a2Len = 0; for (i = 0; i < aLen; i++) { if (a[i] < pivot) { a1[a1Len] = a[i]; a1Len++; } else if (a[i] > pivot) { a2[a2Len] = a[i]; a2Len++; } } if (k <= a1Len) { aLen = a1Len; (a, a1) = swap(a, a1); } else if (k > (aLen.sub(a2Len))) { k = k.sub(aLen.sub(a2Len)); aLen = a2Len; (a, a2) = swap(a, a2); } else { return pivot; } } } /** * @dev Swaps the pointers to two uint256 arrays in memory * @param _a The pointer to the first in memory array * @param _b The pointer to the second in memory array */ function swap(int256[] memory _a, int256[] memory _b) private pure returns(int256[] memory, int256[] memory) { return (_b, _a); } /** * @dev Cleans up the answer record if all responses have been received. * @param _answerId The identifier of the answer to be deleted */ function deleteAnswer(uint256 _answerId) private ensureAllResponsesReceived(_answerId) { delete answers[_answerId]; } /** * @dev Prevents taking an action if the minimum number of responses has not * been received for an answer. * @param _answerId The the identifier of the answer that keeps track of the responses. */ modifier ensureMinResponsesReceived(uint256 _answerId) { if (answers[_answerId].responses.length >= answers[_answerId].minimumResponses) { _; } } /** * @dev Prevents taking an action if not all responses are received for an answer. * @param _answerId The the identifier of the answer that keeps track of the responses. */ modifier ensureAllResponsesReceived(uint256 _answerId) { if (answers[_answerId].responses.length == answers[_answerId].maxResponses) { _; } } /** * @dev Prevents taking an action if a newer answer has been recorded. * @param _answerId The current answer's identifier. * Answer IDs are in ascending order. */ modifier ensureOnlyLatestAnswer(uint256 _answerId) { if (latestCompletedAnswer <= _answerId) { _; } } /** * @dev Ensures corresponding number of oracles and jobs. * @param _oracles The list of oracles. * @param _jobIds The list of jobs. */ modifier validateAnswerRequirements( uint256 _minimumResponses, address[] _oracles, bytes32[] _jobIds ) { require(_oracles.length <= MAX_ORACLE_COUNT, "cannot have more than 45 oracles"); require(_oracles.length >= _minimumResponses, "must have at least as many oracles as responses"); require(_oracles.length == _jobIds.length, "must have exactly as many oracles as job IDs"); _; } /** * @dev Reverts if `msg.sender` is not authorized to make requests. */ modifier ensureAuthorizedRequester() { require(authorizedRequesters[msg.sender] || msg.sender == owner, "Not an authorized address for creating requests"); _; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_requestId","type":"bytes32"},{"name":"_payment","type":"uint256"},{"name":"_expiration","type":"uint256"}],"name":"cancelRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"authorizedRequesters","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"jobIds","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestAnswer","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minimumResponses","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"oracles","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_amount","type":"uint256"}],"name":"transferLINK","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestRound","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clRequestId","type":"bytes32"},{"name":"_response","type":"int256"}],"name":"chainlinkCallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_paymentAmount","type":"uint128"},{"name":"_minimumResponses","type":"uint128"},{"name":"_oracles","type":"address[]"},{"name":"_jobIds","type":"bytes32[]"}],"name":"updateRequestDetails","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"latestTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paymentAmount","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"requestRateUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_requester","type":"address"},{"name":"_allowed","type":"bool"}],"name":"setAuthorization","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_link","type":"address"},{"name":"_paymentAmount","type":"uint128"},{"name":"_minimumResponses","type":"uint128"},{"name":"_oracles","type":"address[]"},{"name":"_jobIds","type":"bytes32[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"response","type":"int256"},{"indexed":true,"name":"answerId","type":"uint256"},{"indexed":true,"name":"sender","type":"address"}],"name":"ResponseReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"ChainlinkRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"ChainlinkFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"bytes32"}],"name":"ChainlinkCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"current","type":"int256"},{"indexed":true,"name":"roundId","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"roundId","type":"uint256"},{"indexed":true,"name":"startedBy","type":"address"}],"name":"NewRound","type":"event"}]
Contract Creation Code
608060405260016004556001600d553480156200001b57600080fd5b506040516200317738038062003177833981018060405281019080805190602001909291908051906020019092919080519060200190929190805182019291906020018051820192919050505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620000c385620000eb640100000000026401000000009004565b620000e0848484846200012f640100000000026401000000009004565b50505050506200055e565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156200018c57600080fd5b826fffffffffffffffffffffffffffffffff168282602d8251111515156200021c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f742068617665206d6f7265207468616e203435206f7261636c657381525060200191505060405180910390fd5b82825110151515620002bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6d7573742068617665206174206c65617374206173206d616e79206f7261636c81526020017f657320617320726573706f6e736573000000000000000000000000000000000081525060400191505060405180910390fd5b805182511415156200035c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d75737420686176652065786163746c79206173206d616e79206f7261636c6581526020017f73206173206a6f6220494473000000000000000000000000000000000000000081525060400191505060405180910390fd5b86600a60006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085600a60106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600b9080519060200190620003e692919062000409565b5084600c9080519060200190620003ff92919062000461565b5050505050505050565b8280548282559060005260206000209081019282156200044e579160200282015b828111156200044d5782518290600019169055916020019190600101906200042a565b5b5090506200045d9190620004f0565b5090565b828054828255906000526020600020908101928215620004dd579160200282015b82811115620004dc5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000482565b5b509050620004ec919062000518565b5090565b6200051591905b8082111562000511576000816000905550600101620004f7565b5090565b90565b6200055b91905b808211156200055757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200051f565b5090565b90565b612c09806200056e6000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806333bfcdd8146101175780633ea478aa1461015c5780634162cc88146101b757806350d25bcd1461020057806354bcd7ff1461022b5780635b69a7d81461027a5780635cd9b90b146102e7578063668a0f02146103345780636a9705b41461035f578063715018a61461039a57806378a66674146103b15780638205bf6a1461049257806383197ef0146104bd5780638da5cb5b146104d4578063b5ab58dc1461052b578063b633620c1461056c578063c35905c6146105ad578063daa6d556146105fc578063eecea00014610613578063f2fde38b14610662575b600080fd5b34801561012357600080fd5b5061015a600480360381019080803560001916906020019092919080359060200190929190803590602001909291905050506106a5565b005b34801561016857600080fd5b5061019d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610941565b604051808215151515815260200191505060405180910390f35b3480156101c357600080fd5b506101e260048036038101908080359060200190929190505050610961565b60405180826000191660001916815260200191505060405180910390f35b34801561020c57600080fd5b50610215610984565b6040518082815260200191505060405180910390f35b34801561023757600080fd5b506102406109a1565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028657600080fd5b506102a5600480360381019080803590602001909291905050506109c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102f357600080fd5b50610332600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a01565b005b34801561034057600080fd5b50610349610bc0565b6040518082815260200191505060405180910390f35b34801561036b57600080fd5b50610398600480360381019080803560001916906020019092919080359060200190929190505050610bca565b005b3480156103a657600080fd5b506103af610cae565b005b3480156103bd57600080fd5b5061049060048036038101908080356fffffffffffffffffffffffffffffffff16906020019092919080356fffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610db3565b005b34801561049e57600080fd5b506104a7611085565b6040518082815260200191505060405180910390f35b3480156104c957600080fd5b506104d26110a2565b005b3480156104e057600080fd5b506104e9611246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053757600080fd5b506105566004803603810190808035906020019092919050505061126c565b6040518082815260200191505060405180910390f35b34801561057857600080fd5b5061059760048036038101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b3480156105b957600080fd5b506105c26112a6565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060857600080fd5b506106116112c8565b005b34801561061f57600080fd5b50610660600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611640565b005b34801561066e57600080fd5b506106a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f7565b005b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061074c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156107e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600f60008560001916600019168152602001908152602001600020549050600954811015156108a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f74206d6f6469667920616e20696e2d70726f677265737320616e7381526020017f776572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600f6000856000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001016000908060018154018082558091505090600182039060005260206000200160009091929091909150555061090c8161175f565b61093b8484636a9705b47c01000000000000000000000000000000000000000000000000000000000285611836565b50505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600b8181548110151561097057fe5b906000526020600020016000915090505481565b600060116000600954815260200190815260200160002054905090565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1681565b600c818154811015156109d257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5f57600080fd5b610a676119d1565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b0c57600080fd5b505af1158015610b20573d6000803e3d6000fd5b505050506040513d6020811015610b3657600080fd5b81019080805190602001909291905050501515610bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c494e4b207472616e73666572206661696c656400000000000000000000000081525060200191505060405180910390fd5b505050565b6000600954905090565b6000610bd5836119fb565b600f60008460001916600019168152602001908152602001600020549050600f6000846000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001018290806001815401808255809150509060018203906000526020600020016000909192909190915055503373ffffffffffffffffffffffffffffffffffffffff1681837fb51168059c83c860caf5b830c5d2e64c2172c6fb2fe9f25447d9838e18d93b6060405160405180910390a4610ca081611b73565b610ca98161175f565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d0a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0f57600080fd5b826fffffffffffffffffffffffffffffffff168282602d825111151515610e9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f742068617665206d6f7265207468616e203435206f7261636c657381525060200191505060405180910390fd5b82825110151515610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6d7573742068617665206174206c65617374206173206d616e79206f7261636c81526020017f657320617320726573706f6e736573000000000000000000000000000000000081525060400191505060405180910390fd5b80518251141515610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d75737420686176652065786163746c79206173206d616e79206f7261636c6581526020017f73206173206a6f6220494473000000000000000000000000000000000000000081525060400191505060405180910390fd5b86600a60006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085600a60106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600b90805190602001906110649291906129b0565b5084600c908051906020019061107b929190612a03565b5050505050505050565b600060126000600954815260200190815260200160002054905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561110057600080fd5b6111086119d1565b905061120b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b8101908080519060200190929190505050610a01565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060116000838152602001908152602001600020549050919050565b600060126000838152602001908152602001600020549050919050565b600a60009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6112d0612a8d565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061137a5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169150600090505b600c80549050811015611517576114a0600b8281548110151561146b57fe5b906000526020600020015430636a9705b47c010000000000000000000000000000000000000000000000000000000002611e5c565b93506114e6600c828154811015156114b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168584611e8d565b9250600d54600f6000856000191660001916815260200190815260200160002081905550808060010191505061144c565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1660106000600d54815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600c8054905060106000600d54815260200190815260200160002060000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506115ee6001600d5461221990919063ffffffff16565b600d819055503373ffffffffffffffffffffffffffffffffffffffff16600d547fc3c45d1924f55369653f407ee9f095309d1e687b2c0011b1f709042d4f457e1760405160405180910390a350505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169c57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175357600080fd5b61175c81612235565b50565b806010600082815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16601060008381526020019081526020016000206001018054905014156118325760106000838152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905560018201600061182f9190612afb565b50505b5050565b600060056000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060056000866000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905584600019167fe1fe3afa0f7f761ff0a8b89086790efd5140d2907ebd5b7ff6bfcb5e075fd4c560405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff16636ee4d553868686866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808560001916600019168152602001848152602001837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001828152602001945050505050600060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060056000826000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f536f75726365206d75737420626520746865206f7261636c65206f662074686581526020017f207265717565737400000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60056000826000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600019167f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a60405160405180910390a25050565b6000806000806000856010600082815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166010600083815260200190815260200160002060010180549050101515611e53578680600954111515611e515760106000898152602001908152602001600020600101805490509650611c1e60028861233190919063ffffffff16565b95506000600288811515611c2e57fe5b061415611d4e57611ca3601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611c9857602002820191906000526020600020905b815481526020019060010190808311611c84575b505050505087612347565b9350611d26601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611d0857602002820191906000526020600020905b815481526020019060010190808311611cf4575b5050505050611d2160018961221990919063ffffffff16565b612347565b92506002611d3d848661257590919063ffffffff16565b811515611d4657fe5b059450611dd2565b611dcf601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611db157602002820191906000526020600020905b815481526020019060010190808311611d9d575b5050505050611dca60018961221990919063ffffffff16565b612347565b94505b84600781905550876009819055504260088190555042601260008a81526020019081526020016000208190555084601160008a81526020019081526020016000208190555087857f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040518082815260200191505060405180910390a35b505b50505050505050565b611e64612a8d565b611e6c612a8d565b611e8385858584612648909392919063ffffffff16565b9150509392505050565b600030600454604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611f295780518252602082019150602081019050602083039250611f04565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506004548360600181815250508360056000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600019167fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af960405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634000aea0858461203887612702565b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120db5780820151818401526020810190506120c0565b50505050905090810190601f1680156121085780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d602081101561215357600080fd5b810190808051906020019092919050505015156121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f726181526020017f636c65000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016004600082825401925050819055508090509392505050565b6000818301905082811015151561222c57fe5b80905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561227157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818381151561233e57fe5b04905092915050565b600060606000806060806000806000808b98508a975088519650866040519080825280602002602001820160405280156123905781602001602082028038833980820191505090505b509550866040519080825280602002602001820160405280156123c25781602001602082028038833980820191505090505b5094505b60011561256557886123e260028961233190919063ffffffff16565b8151811015156123ee57fe5b9060200190602002015191506000935060009250600090505b868110156124d95781898281518110151561241e57fe5b90602001906020020151121561246f57888181518110151561243c57fe5b90602001906020020151868581518110151561245457fe5b906020019060200201818152505083806001019450506124cc565b81898281518110151561247e57fe5b9060200190602002015113156124cb57888181518110151561249c57fe5b9060200190602002015185848151811015156124b457fe5b906020019060200201818152505082806001019350505b5b8080600101915050612407565b83881115156124fc578396506124ef898761292d565b809750819a505050612560565b61250f838861293d90919063ffffffff16565b8811156125575761253b61252c848961293d90919063ffffffff16565b8961293d90919063ffffffff16565b975082965061254a898661292d565b809650819a50505061255f565b819950612566565b5b6123c6565b5b50505050505050505092915050565b60008082840190506000831215801561258e5750838112155b806125a457506000831280156125a357508381125b5b151561263e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8091505092915050565b612650612a8d565b6126608560800151610100612956565b50838560000190600019169081600019168152505082856020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508185604001907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525050849050949350505050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634042994690507c01000000000000000000000000000000000000000000000000000000000260008084600001518560200151866040015187606001516001896080015160000151604051602401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187600019166000191681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612890578082015181840152602081019050612875565b50505050905090810190601f1680156128bd5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050919050565b6060808284915091509250929050565b600082821115151561294b57fe5b818303905092915050565b61295e612b1c565b600060208381151561296c57fe5b061415156129895760208281151561298057fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b8280548282559060005260206000209081019282156129f2579160200282015b828111156129f15782518290600019169055916020019190600101906129d0565b5b5090506129ff9190612b36565b5090565b828054828255906000526020600020908101928215612a7c579160200282015b82811115612a7b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612a23565b5b509050612a899190612b5b565b5090565b60c06040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001612af5612b9e565b81525090565b5080546000825590600052602060002090810190612b199190612bb8565b50565b604080519081016040528060608152602001600081525090565b612b5891905b80821115612b54576000816000905550600101612b3c565b5090565b90565b612b9b91905b80821115612b9757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612b61565b5090565b90565b604080519081016040528060608152602001600081525090565b612bda91905b80821115612bd6576000816000905550600101612bbe565b5090565b905600a165627a7a72305820cfa1e1585e31082cbee20dfc5f43b2b66f78dd30f9a0f0cf85ac62d8f0b40e580029000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000600000000000000000000000029e3b3c76e7ae0d681bf1a6bcee1c0e7d17dbaa900000000000000000000000024a718307ce9b2420962fd5043fb876e174309340000000000000000000000009308b0bd23794063423f484cd21c59ed38898108000000000000000000000000049bd8c3adc3fe7d3fc2a44541d955a537c2a484000000000000000000000000b92ec7d213a28e21b426d79ede3c9bbcf6917c0900000000000000000000000089f70fa9f439dbd0a1bc22a09befc56ada04d9b40000000000000000000000000000000000000000000000000000000000000006623333373762363863316565343730616265633839326130326465356366313030646466653235333064653734353834386533636335656162373030383630393036346539376330623263333435306639323564616632333961323534373437396632316139363737616535343439376262653835333731336337373266653763636139336436356236343334333062386164613661326661393237353161343262616230656635393333343461623062633937396366316636646262663632
Deployed Bytecode
0x608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806333bfcdd8146101175780633ea478aa1461015c5780634162cc88146101b757806350d25bcd1461020057806354bcd7ff1461022b5780635b69a7d81461027a5780635cd9b90b146102e7578063668a0f02146103345780636a9705b41461035f578063715018a61461039a57806378a66674146103b15780638205bf6a1461049257806383197ef0146104bd5780638da5cb5b146104d4578063b5ab58dc1461052b578063b633620c1461056c578063c35905c6146105ad578063daa6d556146105fc578063eecea00014610613578063f2fde38b14610662575b600080fd5b34801561012357600080fd5b5061015a600480360381019080803560001916906020019092919080359060200190929190803590602001909291905050506106a5565b005b34801561016857600080fd5b5061019d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610941565b604051808215151515815260200191505060405180910390f35b3480156101c357600080fd5b506101e260048036038101908080359060200190929190505050610961565b60405180826000191660001916815260200191505060405180910390f35b34801561020c57600080fd5b50610215610984565b6040518082815260200191505060405180910390f35b34801561023757600080fd5b506102406109a1565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561028657600080fd5b506102a5600480360381019080803590602001909291905050506109c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102f357600080fd5b50610332600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610a01565b005b34801561034057600080fd5b50610349610bc0565b6040518082815260200191505060405180910390f35b34801561036b57600080fd5b50610398600480360381019080803560001916906020019092919080359060200190929190505050610bca565b005b3480156103a657600080fd5b506103af610cae565b005b3480156103bd57600080fd5b5061049060048036038101908080356fffffffffffffffffffffffffffffffff16906020019092919080356fffffffffffffffffffffffffffffffff1690602001909291908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610db3565b005b34801561049e57600080fd5b506104a7611085565b6040518082815260200191505060405180910390f35b3480156104c957600080fd5b506104d26110a2565b005b3480156104e057600080fd5b506104e9611246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053757600080fd5b506105566004803603810190808035906020019092919050505061126c565b6040518082815260200191505060405180910390f35b34801561057857600080fd5b5061059760048036038101908080359060200190929190505050611289565b6040518082815260200191505060405180910390f35b3480156105b957600080fd5b506105c26112a6565b60405180826fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561060857600080fd5b506106116112c8565b005b34801561061f57600080fd5b50610660600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611640565b005b34801561066e57600080fd5b506106a3600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506116f7565b005b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061074c5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156107e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600f60008560001916600019168152602001908152602001600020549050600954811015156108a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f43616e6e6f74206d6f6469667920616e20696e2d70726f677265737320616e7381526020017f776572000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600f6000856000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001016000908060018154018082558091505090600182039060005260206000200160009091929091909150555061090c8161175f565b61093b8484636a9705b47c01000000000000000000000000000000000000000000000000000000000285611836565b50505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b600b8181548110151561097057fe5b906000526020600020016000915090505481565b600060116000600954815260200190815260200160002054905090565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1681565b600c818154811015156109d257fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5f57600080fd5b610a676119d1565b90508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610b0c57600080fd5b505af1158015610b20573d6000803e3d6000fd5b505050506040513d6020811015610b3657600080fd5b81019080805190602001909291905050501515610bbb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4c494e4b207472616e73666572206661696c656400000000000000000000000081525060200191505060405180910390fd5b505050565b6000600954905090565b6000610bd5836119fb565b600f60008460001916600019168152602001908152602001600020549050600f6000846000191660001916815260200190815260200160002060009055601060008281526020019081526020016000206001018290806001815401808255809150509060018203906000526020600020016000909192909190915055503373ffffffffffffffffffffffffffffffffffffffff1681837fb51168059c83c860caf5b830c5d2e64c2172c6fb2fe9f25447d9838e18d93b6060405160405180910390a4610ca081611b73565b610ca98161175f565b505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d0a57600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e0f57600080fd5b826fffffffffffffffffffffffffffffffff168282602d825111151515610e9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f63616e6e6f742068617665206d6f7265207468616e203435206f7261636c657381525060200191505060405180910390fd5b82825110151515610f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f6d7573742068617665206174206c65617374206173206d616e79206f7261636c81526020017f657320617320726573706f6e736573000000000000000000000000000000000081525060400191505060405180910390fd5b80518251141515610fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f6d75737420686176652065786163746c79206173206d616e79206f7261636c6581526020017f73206173206a6f6220494473000000000000000000000000000000000000000081525060400191505060405180910390fd5b86600a60006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555085600a60106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600b90805190602001906110649291906129b0565b5084600c908051906020019061107b929190612a03565b5050505050505050565b600060126000600954815260200190815260200160002054905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561110057600080fd5b6111086119d1565b905061120b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156111cb57600080fd5b505af11580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b8101908080519060200190929190505050610a01565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060116000838152602001908152602001600020549050919050565b600060126000838152602001908152602001600020549050919050565b600a60009054906101000a90046fffffffffffffffffffffffffffffffff1681565b6112d0612a8d565b6000806000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061137a5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4e6f7420616e20617574686f72697a6564206164647265737320666f7220637281526020017f656174696e67207265717565737473000000000000000000000000000000000081525060400191505060405180910390fd5b600a60009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169150600090505b600c80549050811015611517576114a0600b8281548110151561146b57fe5b906000526020600020015430636a9705b47c010000000000000000000000000000000000000000000000000000000002611e5c565b93506114e6600c828154811015156114b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168584611e8d565b9250600d54600f6000856000191660001916815260200190815260200160002081905550808060010191505061144c565b600a60109054906101000a90046fffffffffffffffffffffffffffffffff1660106000600d54815260200190815260200160002060000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550600c8054905060106000600d54815260200190815260200160002060000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506115ee6001600d5461221990919063ffffffff16565b600d819055503373ffffffffffffffffffffffffffffffffffffffff16600d547fc3c45d1924f55369653f407ee9f095309d1e687b2c0011b1f709042d4f457e1760405160405180910390a350505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561169c57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175357600080fd5b61175c81612235565b50565b806010600082815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16601060008381526020019081526020016000206001018054905014156118325760106000838152602001908152602001600020600080820160006101000a8154906fffffffffffffffffffffffffffffffff02191690556000820160106101000a8154906fffffffffffffffffffffffffffffffff021916905560018201600061182f9190612afb565b50505b5050565b600060056000866000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060056000866000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905584600019167fe1fe3afa0f7f761ff0a8b89086790efd5140d2907ebd5b7ff6bfcb5e075fd4c560405160405180910390a28073ffffffffffffffffffffffffffffffffffffffff16636ee4d553868686866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808560001916600019168152602001848152602001837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001828152602001945050505050600060405180830381600087803b1580156119b257600080fd5b505af11580156119c6573d6000803e3d6000fd5b505050505050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8060056000826000191660001916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001807f536f75726365206d75737420626520746865206f7261636c65206f662074686581526020017f207265717565737400000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60056000826000191660001916815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580600019167f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a60405160405180910390a25050565b6000806000806000856010600082815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166010600083815260200190815260200160002060010180549050101515611e53578680600954111515611e515760106000898152602001908152602001600020600101805490509650611c1e60028861233190919063ffffffff16565b95506000600288811515611c2e57fe5b061415611d4e57611ca3601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611c9857602002820191906000526020600020905b815481526020019060010190808311611c84575b505050505087612347565b9350611d26601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611d0857602002820191906000526020600020905b815481526020019060010190808311611cf4575b5050505050611d2160018961221990919063ffffffff16565b612347565b92506002611d3d848661257590919063ffffffff16565b811515611d4657fe5b059450611dd2565b611dcf601060008a8152602001908152602001600020600101805480602002602001604051908101604052809291908181526020018280548015611db157602002820191906000526020600020905b815481526020019060010190808311611d9d575b5050505050611dca60018961221990919063ffffffff16565b612347565b94505b84600781905550876009819055504260088190555042601260008a81526020019081526020016000208190555084601160008a81526020019081526020016000208190555087857f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f426040518082815260200191505060405180910390a35b505b50505050505050565b611e64612a8d565b611e6c612a8d565b611e8385858584612648909392919063ffffffff16565b9150509392505050565b600030600454604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401828152602001925050506040516020818303038152906040526040518082805190602001908083835b602083101515611f295780518252602082019150602081019050602083039250611f04565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051809103902090506004548360600181815250508360056000836000191660001916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600019167fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af960405160405180910390a2600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634000aea0858461203887612702565b6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120db5780820151818401526020810190506120c0565b50505050905090810190601f1680156121085780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561212957600080fd5b505af115801561213d573d6000803e3d6000fd5b505050506040513d602081101561215357600080fd5b810190808051906020019092919050505015156121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f726181526020017f636c65000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016004600082825401925050819055508090509392505050565b6000818301905082811015151561222c57fe5b80905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561227157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000818381151561233e57fe5b04905092915050565b600060606000806060806000806000808b98508a975088519650866040519080825280602002602001820160405280156123905781602001602082028038833980820191505090505b509550866040519080825280602002602001820160405280156123c25781602001602082028038833980820191505090505b5094505b60011561256557886123e260028961233190919063ffffffff16565b8151811015156123ee57fe5b9060200190602002015191506000935060009250600090505b868110156124d95781898281518110151561241e57fe5b90602001906020020151121561246f57888181518110151561243c57fe5b90602001906020020151868581518110151561245457fe5b906020019060200201818152505083806001019450506124cc565b81898281518110151561247e57fe5b9060200190602002015113156124cb57888181518110151561249c57fe5b9060200190602002015185848151811015156124b457fe5b906020019060200201818152505082806001019350505b5b8080600101915050612407565b83881115156124fc578396506124ef898761292d565b809750819a505050612560565b61250f838861293d90919063ffffffff16565b8811156125575761253b61252c848961293d90919063ffffffff16565b8961293d90919063ffffffff16565b975082965061254a898661292d565b809650819a50505061255f565b819950612566565b5b6123c6565b5b50505050505050505092915050565b60008082840190506000831215801561258e5750838112155b806125a457506000831280156125a357508381125b5b151561263e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f81526020017f770000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8091505092915050565b612650612a8d565b6126608560800151610100612956565b50838560000190600019169081600019168152505082856020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508185604001907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681525050849050949350505050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634042994690507c01000000000000000000000000000000000000000000000000000000000260008084600001518560200151866040015187606001516001896080015160000151604051602401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187600019166000191681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612890578082015181840152602081019050612875565b50505050905090810190601f1680156128bd5780820380516001836020036101000a031916815260200191505b509950505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050919050565b6060808284915091509250929050565b600082821115151561294b57fe5b818303905092915050565b61295e612b1c565b600060208381151561296c57fe5b061415156129895760208281151561298057fe5b06602003820191505b81836020018181525050604051808452600081528281016020016040525082905092915050565b8280548282559060005260206000209081019282156129f2579160200282015b828111156129f15782518290600019169055916020019190600101906129d0565b5b5090506129ff9190612b36565b5090565b828054828255906000526020600020908101928215612a7c579160200282015b82811115612a7b5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190612a23565b5b509050612a899190612b5b565b5090565b60c06040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200160008152602001612af5612b9e565b81525090565b5080546000825590600052602060002090810190612b199190612bb8565b50565b604080519081016040528060608152602001600081525090565b612b5891905b80821115612b54576000816000905550600101612b3c565b5090565b90565b612b9b91905b80821115612b9757600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101612b61565b5090565b90565b604080519081016040528060608152602001600081525090565b612bda91905b80821115612bd6576000816000905550600101612bbe565b5090565b905600a165627a7a72305820cfa1e1585e31082cbee20dfc5f43b2b66f78dd30f9a0f0cf85ac62d8f0b40e580029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca00000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000600000000000000000000000029e3b3c76e7ae0d681bf1a6bcee1c0e7d17dbaa900000000000000000000000024a718307ce9b2420962fd5043fb876e174309340000000000000000000000009308b0bd23794063423f484cd21c59ed38898108000000000000000000000000049bd8c3adc3fe7d3fc2a44541d955a537c2a484000000000000000000000000b92ec7d213a28e21b426d79ede3c9bbcf6917c0900000000000000000000000089f70fa9f439dbd0a1bc22a09befc56ada04d9b40000000000000000000000000000000000000000000000000000000000000006623333373762363863316565343730616265633839326130326465356366313030646466653235333064653734353834386533636335656162373030383630393036346539376330623263333435306639323564616632333961323534373437396632316139363737616535343439376262653835333731336337373266653763636139336436356236343334333062386164613661326661393237353161343262616230656635393333343461623062633937396366316636646262663632
-----Decoded View---------------
Arg [0] : _link (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [1] : _paymentAmount (uint128): 160000000000000000
Arg [2] : _minimumResponses (uint128): 5
Arg [3] : _oracles (address[]): 0x29e3b3c76e7ae0d681bf1a6BceE1c0E7d17DBAA9,0x24A718307Ce9B2420962fd5043fb876e17430934,0x9308B0Bd23794063423f484Cd21c59eD38898108,0x049Bd8C3adC3fE7d3Fc2a44541d955A537c2A484,0xB92ec7D213a28e21b426D79EDe3c9BBcf6917c09,0x89f70fA9F439dbd0A1BC22a09BEFc56adA04d9b4
Arg [4] : _jobIds (bytes32[]): System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[]
-----Encoded View---------------
19 Constructor Arguments found :
Arg [0] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [1] : 00000000000000000000000000000000000000000000000002386f26fc100000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [6] : 00000000000000000000000029e3b3c76e7ae0d681bf1a6bcee1c0e7d17dbaa9
Arg [7] : 00000000000000000000000024a718307ce9b2420962fd5043fb876e17430934
Arg [8] : 0000000000000000000000009308b0bd23794063423f484cd21c59ed38898108
Arg [9] : 000000000000000000000000049bd8c3adc3fe7d3fc2a44541d955a537c2a484
Arg [10] : 000000000000000000000000b92ec7d213a28e21b426d79ede3c9bbcf6917c09
Arg [11] : 00000000000000000000000089f70fa9f439dbd0a1bc22a09befc56ada04d9b4
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [13] : 6233333737623638633165653437306162656338393261303264653563663130
Arg [14] : 3064646665323533306465373435383438653363633565616237303038363039
Arg [15] : 3036346539376330623263333435306639323564616632333961323534373437
Arg [16] : 3966323161393637376165353434393762626538353337313363373732666537
Arg [17] : 6363613933643635623634333433306238616461366132666139323735316134
Arg [18] : 3262616230656635393333343461623062633937396366316636646262663632
Deployed Bytecode Sourcemap
31912:13094:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37790:544;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37790:544:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32525:52;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32525:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32428:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32428:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40135:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40135:130:0;;;;;;;;;;;;;;;;;;;;;;;32392:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32392:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;32456:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32456:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36644:257;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36644:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41126:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41126:96:0;;;;;;;;;;;;;;;;;;;;;;;35043:411;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35043:411:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30958:114;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30958:114:0;;;;;;35919:381;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35919:381:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40339:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40339:137:0;;;;;;;;;;;;;;;;;;;;;;;38496:228;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38496:228:0;;;;;;30163:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30163:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;40601:130;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40601:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40895:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40895:137:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32359:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32359:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;34042:694;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34042:694:0;;;;;;37193:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37193:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31240:105;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31240:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37790:544;37949:16;44880:20;:32;44901:10;44880:32;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;44930:5;;;;;;;;;;;44916:19;;:10;:19;;;44880:55;44872:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37968:14;:26;37983:10;37968:26;;;;;;;;;;;;;;;;;;37949:45;;38020:21;;38009:8;:32;38001:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38097:14;:26;38112:10;38097:26;;;;;;;;;;;;;;;;;38090:33;;;38130:7;:17;38138:8;38130:17;;;;;;;;;;;:27;;38163:1;38130:35;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;38130:35:0;;;;;;;;;;;;;;;;;;;;;;38172:22;38185:8;38172:12;:22::i;:::-;38203:125;38234:10;38253:8;38270:31;;;38310:11;38203:22;:125::i;:::-;37790:544;;;;:::o;32525:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;32428:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40135:130::-;40197:6;40222:14;:37;40237:21;;40222:37;;;;;;;;;;;;40215:44;;40135:130;:::o;32392:31::-;;;;;;;;;;;;;:::o;32456:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36644:257::-;36742:28;30666:5;;;;;;;;;;;30652:19;;:10;:19;;;30644:28;;;;;;;;36792:23;:21;:23::i;:::-;36742:74;;36831:9;:18;;;36850:10;36862:7;36831:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36831:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36831:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36831:39:0;;;;;;;;;;;;;;;;36823:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36644:257;;;:::o;41126:96::-;41172:7;41195:21;;41188:28;;41126:96;:::o;35043:411::-;35182:16;35134:39;35160:12;35134:25;:39::i;:::-;35201:14;:28;35216:12;35201:28;;;;;;;;;;;;;;;;;;35182:47;;35243:14;:28;35258:12;35243:28;;;;;;;;;;;;;;;;;35236:35;;;35280:7;:17;35288:8;35280:17;;;;;;;;;;;:27;;35313:9;35280:43;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;35280:43:0;;;;;;;;;;;;;;;;;;;;;;35373:10;35335:49;;35363:8;35352:9;35335:49;;;;;;;;;;35391:28;35410:8;35391:18;:28::i;:::-;35426:22;35439:8;35426:12;:22::i;:::-;35043:411;;;:::o;30958:114::-;30666:5;;;;;;;;;;;30652:19;;:10;:19;;;30644:28;;;;;;;;31035:5;;;;;;;;;;;31016:25;;;;;;;;;;;;31064:1;31048:5;;:18;;;;;;;;;;;;;;;;;;30958:114::o;35919:381::-;30666:5;;;;;;;;;;;30652:19;;:10;:19;;;30644:28;;;;;;;;36125:17;44314:423;;36144:8;36154:7;32842:2;44451:8;:15;:35;;44443:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44557:17;44538:8;:15;:36;;44530:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44660:7;:14;44641:8;:15;:33;44633:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36189:14;36173:13;;:30;;;;;;;;;;;;;;;;;;36229:17;36210:16;;:36;;;;;;;;;;;;;;;;;;36262:7;36253:6;:16;;;;;;;;;;;;:::i;:::-;;36286:8;36276:7;:18;;;;;;;;;;;;:::i;:::-;;30679:1;;;35919:381;;;;:::o;40339:137::-;40404:7;40430:17;:40;40448:21;;40430:40;;;;;;;;;;;;40423:47;;40339:137;:::o;38496:228::-;38556:28;30666:5;;;;;;;;;;;30652:19;;:10;:19;;;30644:28;;;;;;;;38606:23;:21;:23::i;:::-;38556:74;;38637:55;38650:5;;;;;;;;;;;38657:9;:19;;;38685:4;38657:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38657:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38657:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38657:34:0;;;;;;;;;;;;;;;;38637:12;:55::i;:::-;38712:5;;;;;;;;;;;38699:19;;;30163:20;;;;;;;;;;;;;:::o;40601:130::-;40676:6;40701:14;:24;40716:8;40701:24;;;;;;;;;;;;40694:31;;40601:130;;;:::o;40895:137::-;40973:7;40999:17;:27;41017:8;40999:27;;;;;;;;;;;;40992:34;;40895:137;;;:::o;32359:28::-;;;;;;;;;;;;;:::o;34042:694::-;34128:32;;:::i;:::-;34167:17;34191:21;34242:6;44880:20;:32;44901:10;44880:32;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;44930:5;;;;;;;;;;;44916:19;;:10;:19;;;44880:55;44872:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34215:13;;;;;;;;;;;34191:37;;;;34251:1;34242:10;;34237:269;34258:7;:14;;;;34254:1;:18;34237:269;;;34298:71;34320:6;34327:1;34320:9;;;;;;;;;;;;;;;;;;34331:4;34337:31;;;34298:21;:71::i;:::-;34288:81;;34390:58;34413:7;34421:1;34413:10;;;;;;;;;;;;;;;;;;;;;;;;;;;34425:7;34434:13;34390:22;:58::i;:::-;34378:70;;34485:13;;34457:14;:25;34472:9;34457:25;;;;;;;;;;;;;;;;;:41;;;;34274:3;;;;;;;34237:269;;;34554:16;;;;;;;;;;;34512:7;:22;34520:13;;34512:22;;;;;;;;;;;:39;;;:58;;;;;;;;;;;;;;;;;;34623:7;:14;;;;34577:7;:22;34585:13;;34577:22;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34661:20;34679:1;34661:13;;:17;;:20;;;;:::i;:::-;34645:13;:36;;;;34719:10;34695:35;;34704:13;;34695:35;;;;;;;;;;34042:694;;;;:::o;37193:151::-;30666:5;;;;;;;;;;;30652:19;;:10;:19;;;30644:28;;;;;;;;37330:8;37295:20;:32;37316:10;37295:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;37193:151;;:::o;31240:105::-;30666:5;;;;;;;;;;;30652:19;;:10;:19;;;30644:28;;;;;;;;31310:29;31329:9;31310:18;:29::i;:::-;31240:105;:::o;42952:138::-;43038:9;43783:7;:18;43791:9;43783:18;;;;;;;;;;;:31;;;;;;;;;;;;43744:70;;:7;:18;43752:9;43744:18;;;;;;;;;;;:28;;:35;;;;:70;43740:94;;;43066:7;:18;43074:9;43066:18;;;;;;;;;;;;43059:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43740:94;42952:138;;:::o;23674:429::-;23836:35;23900:15;:27;23916:10;23900:27;;;;;;;;;;;;;;;;;;;;;;;;;;;23836:92;;23942:15;:27;23958:10;23942:27;;;;;;;;;;;;;;;;;;23935:34;;;;;;;;;;;24000:10;23981:30;;;;;;;;;;;;;24018:9;:29;;;24048:10;24060:8;24070:13;24085:11;24018:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24018:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24018:79:0;;;;23674:429;;;;;:::o;24929:116::-;25000:7;25034:4;;;;;;;;;;;25019:20;;24929:116;:::o;28009:168::-;28110:10;28442:15;:27;28458:10;28442:27;;;;;;;;;;;;;;;;;;;;;;;;;;;28428:41;;:10;:41;;;28420:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28528:15;:27;28544:10;28528:27;;;;;;;;;;;;;;;;;;28521:34;;;;;;;;;;;28586:10;28567:30;;;;;;;;;;;;;28009:168;;:::o;39020:1043::-;39172:22;39239:19;39289:24;39358:14;39438;39112:9;43421:7;:18;43429:9;43421:18;;;;;;;;;;;:35;;;;;;;;;;;;43382:74;;:7;:18;43390:9;43382:18;;;;;;;;;;;:28;;:35;;;;:74;;43378:98;;;39151:9;44117;44092:21;;:34;;44088:58;;;39197:7;:18;39205:9;39197:18;;;;;;;;;;;:28;;:35;;;;39172:60;;39261:21;39280:1;39261:14;:18;;:21;;;;:::i;:::-;39239:43;;39346:1;39341;39324:14;:18;;;;;;;;:23;39320:466;;;39375:54;39387:7;:18;39395:9;39387:18;;;;;;;;;;;:28;;39375:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39417:11;39375;:54::i;:::-;39358:71;;39455:61;39467:7;:18;39475:9;39467:18;;;;;;;;;;;:28;;39455:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39497:18;39513:1;39497:11;:15;;:18;;;;:::i;:::-;39455:11;:61::i;:::-;39438:78;;39596:1;39573:20;39585:7;39573;:11;;:20;;;;:::i;:::-;:24;;;;;;;;39553:44;;39320:466;;;39689:61;39701:7;:18;39709:9;39701:18;;;;;;;;;;;:28;;39689:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39731:18;39747:1;39731:11;:15;;:18;;;;:::i;:::-;39689:11;:61::i;:::-;39669:81;;39320:466;39813:17;39792:18;:38;;;;39861:9;39837:21;:33;;;;39901:3;39877:21;:27;;;;39942:3;39911:17;:28;39929:9;39911:28;;;;;;;;;;;:34;;;;39980:17;39952:14;:25;39967:9;39952:25;;;;;;;;;;;:45;;;;40042:9;40023:17;40009:48;40053:3;40009:48;;;;;;;;;;;;;;;;;;44088:58;43467:1;43378:98;39020:1043;;;;;;;:::o;21345:302::-;21497:17;;:::i;:::-;21530:28;;:::i;:::-;21572:69;21587:7;21596:16;21614:26;21572:3;:14;;:69;;;;;;:::i;:::-;21565:76;;21345:302;;;;;;:::o;22654:488::-;22780:17;22848:4;22854:8;;22831:32;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22831:32:0;;;22821:43;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;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;;;22821:43:0;;;;;;;;;;;;;;;;22809:55;;22884:8;;22871:4;:10;;:21;;;;;22928:7;22899:15;:26;22915:9;22899:26;;;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22966:9;22947:29;;;;;;;;;;;;;22991:4;;;;;;;;;;;:20;;;23012:7;23021:8;23031:19;23045:4;23031:13;:19::i;:::-;22991:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;22991:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22991:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22991:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22991:60:0;;;;;;;;;;;;;;;;22983:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23110:1;23098:8;;:13;;;;;;;;;;;23127:9;23120:16;;22654:488;;;;;:::o;19733:132::-;19793:9;19820:2;19815;:7;19811:11;;19841:2;19836:1;:7;;19829:15;;;;;;19858:1;19851:8;;19733:132;;;;:::o;31486:175::-;31578:1;31557:23;;:9;:23;;;;31549:32;;;;;;;;31621:9;31593:38;;31614:5;;;;;;;;;;;31593:38;;;;;;;;;;;;31646:9;31638:5;;:17;;;;;;;;;;;;;;;;;;31486:175;:::o;19142:288::-;19202:7;19422:2;19417;:7;;;;;;;;19410:14;;19142:288;;;;:::o;41506:932::-;41596:6;41614:17;41643:9;41664:12;41694:18;41740;41786:13;41806;41826:12;41845:9;41634:2;41614:22;;41655:2;41643:14;;41679:1;:8;41664:23;;41728:4;41715:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;41715:18:0;;;;41694:39;;41774:4;41761:18;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;41761:18:0;;;;41740:39;;41863:570;41870:4;41863:570;;;41893:1;41895:11;41904:1;41895:4;:8;;:11;;;;:::i;:::-;41893:14;;;;;;;;;;;;;;;;;;41885:22;;41924:1;41916:9;;41942:1;41934:9;;41961:1;41957:5;;41952:211;41968:4;41964:1;:8;41952:211;;;42001:5;41994:1;41996;41994:4;;;;;;;;;;;;;;;;;;:12;41990:164;;;42033:1;42035;42033:4;;;;;;;;;;;;;;;;;;42021:2;42024:5;42021:9;;;;;;;;;;;;;;;;;:16;;;;;42050:7;;;;;;;41990:164;;;42086:5;42079:1;42081;42079:4;;;;;;;;;;;;;;;;;;:12;42075:79;;;42118:1;42120;42118:4;;;;;;;;;;;;;;;;;;42106:2;42109:5;42106:9;;;;;;;;;;;;;;;;;:16;;;;;42135:7;;;;;;;42075:79;41990:164;41974:3;;;;;;;41952:211;;;42180:5;42175:1;:10;;42171:255;;;42205:5;42198:12;;42231:11;42236:1;42239:2;42231:4;:11::i;:::-;42221:21;;;;;;;;42171:255;;;42267:15;42276:5;42267:4;:8;;:15;;;;:::i;:::-;42262:1;:21;42258:168;;;42300:22;42306:15;42315:5;42306:4;:8;;:15;;;;:::i;:::-;42300:1;:5;;:22;;;;:::i;:::-;42296:26;;42340:5;42333:12;;42366:11;42371:1;42374:2;42366:4;:11::i;:::-;42356:21;;;;;;;;42258:168;;;42411:5;42404:12;;;;42258:168;42171:255;41863:570;;;41506:932;;;;;;;;;;;;;;:::o;29712:227::-;29785:6;29803:8;29819:2;29814;:7;29803:18;;29843:1;29837:2;:7;;:18;;;;;29853:2;29848:1;:7;;29837:18;29836:42;;;;29866:1;29861:2;:6;:16;;;;;29875:2;29871:1;:6;29861:16;29836:42;29828:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29932:1;29925:8;;29712:227;;;;;:::o;13061:367::-;13215:17;;:::i;:::-;13248:40;13260:4;:8;;;12434:3;13248:11;:40::i;:::-;;13305:3;13295:4;:7;;:13;;;;;;;;;;;;;13338:16;13315:4;:20;;:39;;;;;;;;;;;13387:17;13361:4;:23;;:43;;;;;;;;;;;;;13418:4;13411:11;;13061:367;;;;;;:::o;27229:542::-;27320:5;27382:6;;;;;;;;;;;:20;;;:29;;;;20276:3;20227:1;27635:4;:7;;;27651:4;:20;;;27680:4;:23;;;27712:4;:10;;;20324:1;27752:4;:8;;;:12;;;27351:414;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27351:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27351:414:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;27351:414:0;27344:421;;27229:542;;;:::o;42635:155::-;42725:8;42742;42777:2;42781;42769:15;;;;42635:155;;;;;:::o;19547:119::-;19607:7;19636:2;19630;:8;;19623:16;;;;;;19658:2;19653;:7;19646:14;;19547:119;;;;:::o;941:408::-;1011:6;;:::i;:::-;1054:1;1048:2;1037:8;:13;;;;;;;;:18;;1033:73;;;1095:2;1084:8;:13;;;;;;;;1078:2;:20;1066:32;;;;1033:73;1170:8;1155:3;:12;;:23;;;;;1220:4;1214:11;1245:3;1240;1233:16;1269:1;1264:3;1257:14;1309:8;1304:3;1300:18;1296:2;1292:27;1286:4;1279:41;1194:133;1340:3;1333:10;;941:408;;;;:::o;31912:13094::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://cfa1e1585e31082cbee20dfc5f43b2b66f78dd30f9a0f0cf85ac62d8f0b40e58
Loading...
Loading
Loading...
Loading
OVERVIEW
Decentralized oracle networks for price reference data.Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.