Contract Overview
Balance:
0 MATIC
My Name Tag:
Not Available
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xc77963699e2b304c0289693ed5441a8bf63b7611f4d6c027916b27589ef49bde | 0x60806040 | 29200305 | 131 days 2 hrs ago | 0x4d303b4f20d55b9d0ea269b45ab5610abaf53e09 | IN | Create: Autopay | 0 MATIC | 0.2049068 |
[ Download CSV Export ]
Contract Name:
Autopay
Compiler Version
v0.8.3+commit.8d00100c
Optimization Enabled:
Yes with 300 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.3; import { UsingTellor } from "usingtellor/contracts/UsingTellor.sol"; import { IERC20 } from "./interfaces/IERC20.sol"; import "./interfaces/IQueryDataStorage.sol"; /** @author Tellor Inc. @title Autopay @dev This is a contract for automatically paying for Tellor oracle data at * specific time intervals, as well as one time tips. */ contract Autopay is UsingTellor { // Storage IERC20 public token; // TRB token address IQueryDataStorage public queryDataStorage; // Query data storage contract uint256 public fee; // 1000 is 100%, 50 is 5%, etc. mapping(bytes32 => bytes32[]) currentFeeds; // mapping queryId to dataFeedIds array mapping(bytes32 => mapping(bytes32 => Feed)) dataFeed; // mapping queryId to dataFeedId to details mapping(bytes32 => bytes32) public queryIdFromDataFeedId; // mapping dataFeedId to queryId mapping(bytes32 => uint256) public queryIdsWithFundingIndex; // mapping queryId to queryIdsWithFunding index plus one (0 if not in array) mapping(bytes32 => Tip[]) public tips; // mapping queryId to tips mapping(address => uint256) public userTipsTotal; // track user tip total per user bytes32[] public feedsWithFunding; // array of dataFeedIds that have funding bytes32[] public queryIdsWithFunding; // array of queryIds that have funding // Structs struct Feed { FeedDetails details; mapping(uint256 => bool) rewardClaimed; // tracks which tips were already paid out } struct FeedDetails { uint256 reward; // amount paid for each eligible data submission uint256 balance; // account remaining balance uint256 startTime; // time of first payment window uint256 interval; // time between pay periods uint256 window; // amount of time data can be submitted per interval uint256 priceThreshold; //change in price necessitating an update 100 = 1% uint256 rewardIncreasePerSecond; // amount reward increases per second within window (0 for flat rewards) uint256 feedsWithFundingIndex; // index plus one of dataFeedID in feedsWithFunding array (0 if not in array) } struct FeedDetailsWithQueryData { FeedDetails details; // feed details for feed id with funding bytes queryData; // query data for requested data } struct SingleTipsWithQueryData { bytes queryData; // query data with single tip for requested data uint256 tip; // reward amount for request } struct Tip { uint256 amount; // amount tipped uint256 timestamp; // time tipped uint256 cumulativeTips; // cumulative tips for query ID } // Events event DataFeedFunded( bytes32 indexed _queryId, bytes32 indexed _feedId, uint256 indexed _amount, address _feedFunder, FeedDetails _feedDetails ); event NewDataFeed( bytes32 indexed _queryId, bytes32 indexed _feedId, bytes _queryData, address _feedCreator ); event OneTimeTipClaimed( bytes32 indexed _queryId, uint256 indexed _amount, address indexed _reporter ); event TipAdded( bytes32 indexed _queryId, uint256 indexed _amount, bytes _queryData, address _tipper ); event TipClaimed( bytes32 indexed _feedId, bytes32 indexed _queryId, uint256 indexed _amount, address _reporter ); // Functions /** * @dev Initializes system parameters * @param _tellor address of Tellor contract * @param _queryDataStorage address of query data storage contract * @param _fee percentage, 1000 is 100%, 50 is 5%, etc. */ constructor( address payable _tellor, address _queryDataStorage, uint256 _fee ) UsingTellor(_tellor) { token = IERC20(tellor.token()); queryDataStorage = IQueryDataStorage(_queryDataStorage); fee = _fee; } /** * @dev Function to claim singular tip * @param _queryId id of reported data * @param _timestamps[] batch of timestamps array of reported data eligible for reward */ function claimOneTimeTip(bytes32 _queryId, uint256[] calldata _timestamps) external { require( tips[_queryId].length > 0, "no tips submitted for this queryId" ); uint256 _cumulativeReward; for (uint256 _i = 0; _i < _timestamps.length; _i++) { _cumulativeReward += _getOneTimeTipAmount( _queryId, _timestamps[_i] ); } require( token.transfer( msg.sender, _cumulativeReward - ((_cumulativeReward * fee) / 1000) ) ); token.approve(address(tellor), (_cumulativeReward * fee) / 1000); tellor.addStakingRewards((_cumulativeReward * fee) / 1000); if (getCurrentTip(_queryId) == 0) { if (queryIdsWithFundingIndex[_queryId] != 0) { uint256 _idx = queryIdsWithFundingIndex[_queryId] - 1; // Replace unfunded feed in array with last element queryIdsWithFunding[_idx] = queryIdsWithFunding[ queryIdsWithFunding.length - 1 ]; bytes32 _queryIdLastFunded = queryIdsWithFunding[_idx]; queryIdsWithFundingIndex[_queryIdLastFunded] = _idx + 1; queryIdsWithFundingIndex[_queryId] = 0; queryIdsWithFunding.pop(); } } emit OneTimeTipClaimed(_queryId, _cumulativeReward, msg.sender); } /** * @dev Allows Tellor reporters to claim their tips in batches * @param _feedId unique feed identifier * @param _queryId ID of reported data * @param _timestamps batch of timestamps array of reported data eligible for reward */ function claimTip( bytes32 _feedId, bytes32 _queryId, uint256[] calldata _timestamps ) external { Feed storage _feed = dataFeed[_queryId][_feedId]; uint256 _balance = _feed.details.balance; require(_balance > 0, "no funds available for this feed"); uint256 _cumulativeReward; for (uint256 _i = 0; _i < _timestamps.length; _i++) { require( block.timestamp - _timestamps[_i] > 12 hours, "buffer time has not passed" ); require( getReporterByTimestamp(_queryId, _timestamps[_i]) == msg.sender, "message sender not reporter for given queryId and timestamp" ); _cumulativeReward += _getRewardAmount( _feedId, _queryId, _timestamps[_i] ); if (_cumulativeReward >= _balance) { // Balance runs out require( _i == _timestamps.length - 1, "insufficient balance for all submitted timestamps" ); _cumulativeReward = _balance; // Adjust currently funded feeds if (feedsWithFunding.length > 1) { uint256 _idx = _feed.details.feedsWithFundingIndex - 1; // Replace unfunded feed in array with last element feedsWithFunding[_idx] = feedsWithFunding[ feedsWithFunding.length - 1 ]; bytes32 _feedIdLastFunded = feedsWithFunding[_idx]; bytes32 _queryIdLastFunded = queryIdFromDataFeedId[ _feedIdLastFunded ]; dataFeed[_queryIdLastFunded][_feedIdLastFunded] .details .feedsWithFundingIndex = _idx + 1; } feedsWithFunding.pop(); _feed.details.feedsWithFundingIndex = 0; } _feed.rewardClaimed[_timestamps[_i]] = true; } _feed.details.balance -= _cumulativeReward; require( token.transfer( msg.sender, _cumulativeReward - ((_cumulativeReward * fee) / 1000) ) ); token.approve(address(tellor), (_cumulativeReward * fee) / 1000); tellor.addStakingRewards((_cumulativeReward * fee) / 1000); emit TipClaimed(_feedId, _queryId, _cumulativeReward, msg.sender); } /** * @dev Allows dataFeed account to be filled with tokens * @param _feedId unique feed identifier * @param _queryId identifier of reported data type associated with feed * @param _amount quantity of tokens to fund feed */ function fundFeed( bytes32 _feedId, bytes32 _queryId, uint256 _amount ) public { FeedDetails storage _feed = dataFeed[_queryId][_feedId].details; require(_feed.reward > 0, "feed not set up"); require(_amount > 0, "must be sending an amount"); _feed.balance += _amount; require( token.transferFrom(msg.sender, address(this), _amount), "ERC20: transfer amount exceeds balance" ); // Add to array of feeds with funding if (_feed.feedsWithFundingIndex == 0 && _feed.balance > 0) { feedsWithFunding.push(_feedId); _feed.feedsWithFundingIndex = feedsWithFunding.length; } userTipsTotal[msg.sender] += _amount; emit DataFeedFunded(_feedId, _queryId, _amount, msg.sender, _feed); } /** * @dev Initializes dataFeed parameters. * @param _queryId unique identifier of desired data feed * @param _reward tip amount per eligible data submission * @param _startTime timestamp of first autopay window * @param _interval amount of time between autopay windows * @param _window amount of time after each new interval when reports are eligible for tips * @param _priceThreshold amount price must change to automate update regardless of time (negated if 0, 100 = 1%) * @param _rewardIncreasePerSecond amount reward increases per second within a window (0 for flat reward) * @param _queryData the data used by reporters to fulfill the query * @param _amount optional initial amount to fund it with */ function setupDataFeed( bytes32 _queryId, uint256 _reward, uint256 _startTime, uint256 _interval, uint256 _window, uint256 _priceThreshold, uint256 _rewardIncreasePerSecond, bytes calldata _queryData, uint256 _amount ) external returns (bytes32 _feedId) { require( _queryId == keccak256(_queryData), "id must be hash of bytes data" ); _feedId = keccak256( abi.encode( _queryId, _reward, _startTime, _interval, _window, _priceThreshold, _rewardIncreasePerSecond ) ); FeedDetails storage _feed = dataFeed[_queryId][_feedId].details; require(_feed.reward == 0, "feed must not be set up already"); require(_reward > 0, "reward must be greater than zero"); require(_interval > 0, "interval must be greater than zero"); require( _window < _interval, "window must be less than interval length" ); _feed.reward = _reward; _feed.startTime = _startTime; _feed.interval = _interval; _feed.window = _window; _feed.priceThreshold = _priceThreshold; _feed.rewardIncreasePerSecond = _rewardIncreasePerSecond; currentFeeds[_queryId].push(_feedId); queryIdFromDataFeedId[_feedId] = _queryId; queryDataStorage.storeData(_queryData); emit NewDataFeed(_queryId, _feedId, _queryData, msg.sender); if (_amount > 0) { fundFeed(_feedId, _queryId, _amount); } return _feedId; } /** * @dev Function to run a single tip * @param _queryId ID of tipped data * @param _amount amount to tip * @param _queryData the data used by reporters to fulfill the query */ function tip( bytes32 _queryId, uint256 _amount, bytes calldata _queryData ) external { require( _queryId == keccak256(_queryData), "id must be hash of bytes data" ); require(_amount > 0, "tip must be greater than zero"); Tip[] storage _tips = tips[_queryId]; if (_tips.length == 0) { _tips.push(Tip(_amount, block.timestamp, _amount)); queryDataStorage.storeData(_queryData); } else { (, uint256 _timestampRetrieved) = _getCurrentValue(_queryId); if (_timestampRetrieved < _tips[_tips.length - 1].timestamp) { _tips[_tips.length - 1].timestamp = block.timestamp; _tips[_tips.length - 1].amount += _amount; _tips[_tips.length - 1].cumulativeTips += _amount; } else { _tips.push( Tip( _amount, block.timestamp, _tips[_tips.length - 1].cumulativeTips + _amount ) ); } } if ( queryIdsWithFundingIndex[_queryId] == 0 && getCurrentTip(_queryId) > 0 ) { queryIdsWithFunding.push(_queryId); queryIdsWithFundingIndex[_queryId] = queryIdsWithFunding.length; } require( token.transferFrom(msg.sender, address(this), _amount), "ERC20: transfer amount exceeds balance" ); userTipsTotal[msg.sender] += _amount; emit TipAdded(_queryId, _amount, _queryData, msg.sender); } // Getters /** * @dev Getter function to read current data feeds * @param _queryId id of reported data * @return feedIds array for queryId */ function getCurrentFeeds(bytes32 _queryId) external view returns (bytes32[] memory) { return currentFeeds[_queryId]; } /** * @dev Getter function to current oneTime tip by queryId * @param _queryId id of reported data * @return amount of tip */ function getCurrentTip(bytes32 _queryId) public view returns (uint256) { // if no tips, return 0 if (tips[_queryId].length == 0) { return 0; } (, uint256 _timestampRetrieved) = _getCurrentValue(_queryId); Tip memory _lastTip = tips[_queryId][tips[_queryId].length - 1]; if (_timestampRetrieved < _lastTip.timestamp) { return _lastTip.amount; } else { return 0; } } /** * @dev Getter function to read a specific dataFeed * @param _feedId unique feedId of parameters * @return FeedDetails details of specified feed */ function getDataFeed(bytes32 _feedId) external view returns (FeedDetails memory) { return (dataFeed[queryIdFromDataFeedId[_feedId]][_feedId].details); } /** * @dev Getter function for currently funded feed details * @return FeedDetailsWithQueryData[] array of details for funded feeds */ function getFundedFeedDetails() external view returns (FeedDetailsWithQueryData[] memory) { bytes32[] memory _feeds = this.getFundedFeeds(); FeedDetailsWithQueryData[] memory _details = new FeedDetailsWithQueryData[](_feeds.length); for (uint256 i = 0; i < _feeds.length; i++) { FeedDetails memory _feedDetail = this.getDataFeed(_feeds[i]); bytes32 _queryId = this.getQueryIdFromFeedId(_feeds[i]); bytes memory _queryData = queryDataStorage.getQueryData(_queryId); _details[i].details = _feedDetail; _details[i].queryData = _queryData; } return _details; } /** * @dev Getter function for currently funded feeds */ function getFundedFeeds() external view returns (bytes32[] memory) { return feedsWithFunding; } /** * @dev Getter function for queryIds with current one time tips */ function getFundedQueryIds() external view returns (bytes32[] memory) { return queryIdsWithFunding; } /** * @dev Getter function for currently funded single tips with queryData * @return SingleTipsWithQueryData[] array of current tips */ function getFundedSingleTipsInfo() external view returns (SingleTipsWithQueryData[] memory) { bytes32[] memory _fundedQueryIds = this.getFundedQueryIds(); SingleTipsWithQueryData[] memory _query = new SingleTipsWithQueryData[]( _fundedQueryIds.length ); for (uint256 i = 0; i < _fundedQueryIds.length; i++) { bytes memory _data = queryDataStorage.getQueryData( _fundedQueryIds[i] ); uint256 _reward = this.getCurrentTip(_fundedQueryIds[i]); _query[i].queryData = _data; _query[i].tip = _reward; } return _query; } /** * @dev Getter function to get number of past tips * @param _queryId id of reported data * @return count of tips available */ function getPastTipCount(bytes32 _queryId) external view returns (uint256) { return tips[_queryId].length; } /** * @dev Getter function for past tips * @param _queryId id of reported data * @return Tip struct (amount/timestamp) of all past tips */ function getPastTips(bytes32 _queryId) external view returns (Tip[] memory) { return tips[_queryId]; } /** * @dev Getter function for past tips by index * @param _queryId id of reported data * @param _index uint index in the Tip array * @return amount/timestamp of specific tip */ function getPastTipByIndex(bytes32 _queryId, uint256 _index) external view returns (Tip memory) { return tips[_queryId][_index]; } /** * @dev Getter function to lookup query IDs from dataFeed IDs * @param _feedId dataFeed unique identifier * @return bytes32 corresponding query ID */ function getQueryIdFromFeedId(bytes32 _feedId) external view returns (bytes32) { return queryIdFromDataFeedId[_feedId]; } /** * @dev Getter function to read potential rewards for a set of oracle submissions * NOTE: Does not consider reporter address, 12-hour dispute buffer period, or duplicate timestamps * @param _feedId dataFeed unique identifier * @param _queryId unique identifier of reported data * @param _timestamps array of timestamps of oracle submissions * @return _cumulativeReward total potential reward for the set of oracle submissions */ function getRewardAmount( bytes32 _feedId, bytes32 _queryId, uint256[] calldata _timestamps ) external view returns (uint256 _cumulativeReward) { FeedDetails storage _feed = dataFeed[_queryId][_feedId].details; for (uint256 _i = 0; _i < _timestamps.length; _i++) { _cumulativeReward += _getRewardAmount( _feedId, _queryId, _timestamps[_i] ); } if (_cumulativeReward > _feed.balance) { _cumulativeReward = _feed.balance; } _cumulativeReward -= ((_cumulativeReward * fee) / 1000); } /** * @dev Getter function for reading whether a reward has been claimed * @param _feedId feedId of dataFeed * @param _queryId id of reported data * @param _timestamp id or reported data * @return bool rewardClaimed */ function getRewardClaimedStatus( bytes32 _feedId, bytes32 _queryId, uint256 _timestamp ) external view returns (bool) { return dataFeed[_queryId][_feedId].rewardClaimed[_timestamp]; } /** * @dev Getter function for reading whether a reward has been claimed * @param _feedId feedId of dataFeed * @param _queryId queryId of reported data * @param _timestamp[] list of report timestamps * @return bool[] list of rewardClaim status */ function getRewardClaimStatusList( bytes32 _feedId, bytes32 _queryId, uint256[] calldata _timestamp ) external view returns (bool[] memory) { bool[] memory _status = new bool[](_timestamp.length); for (uint256 i = 0; i < _timestamp.length; i++) { _status[i] = dataFeed[_queryId][_feedId].rewardClaimed[ _timestamp[i] ]; } return _status; } /** * @dev Getter function for retrieving the total amount of tips paid by a given address * @param _user address of user to query * @return uint256 total amount of tips paid by user */ function getTipsByAddress(address _user) external view returns (uint256) { return userTipsTotal[_user]; } // Internal functions /** * @dev Internal function to read if a reward has been claimed * @param _b bytes value to convert to uint256 * @return _number uint256 converted from bytes */ function _bytesToUint(bytes memory _b) internal pure returns (uint256 _number) { for (uint256 _i = 0; _i < _b.length; _i++) { _number = _number * 256 + uint8(_b[_i]); } } /** ** @dev Internal function which determines tip eligibility for a given oracle submission * @param _queryId id of reported data * @param _timestamp timestamp of one time tip * @return _tipAmount of tip */ function _getOneTimeTipAmount(bytes32 _queryId, uint256 _timestamp) internal returns (uint256 _tipAmount) { require( block.timestamp - _timestamp > 12 hours, "buffer time has not passed" ); require(!isInDispute(_queryId, _timestamp), "value disputed"); require( msg.sender == getReporterByTimestamp(_queryId, _timestamp), "msg sender must be reporter address" ); Tip[] storage _tips = tips[_queryId]; uint256 _min = 0; uint256 _max = _tips.length; uint256 _mid; while (_max - _min > 1) { _mid = (_max + _min) / 2; if (_tips[_mid].timestamp > _timestamp) { _max = _mid; } else { _min = _mid; } } (, uint256 _timestampBefore) = getDataBefore(_queryId, _timestamp); require( _timestampBefore < _tips[_min].timestamp, "tip earned by previous submission" ); require( _timestamp >= _tips[_min].timestamp, "timestamp not eligible for tip" ); require(_tips[_min].amount > 0, "tip already claimed"); _tipAmount = _tips[_min].amount; _tips[_min].amount = 0; uint256 _minBackup = _min; // check whether eligible for previous tips in array due to disputes (, uint256 _indexNow) = getIndexForDataBefore(_queryId, _timestamp + 1); (bool _found, uint256 _indexBefore) = getIndexForDataBefore( _queryId, _timestampBefore + 1 ); if (_indexNow - _indexBefore > 1 || !_found) { if (!_found) { _tipAmount = _tips[_minBackup].cumulativeTips; } else { _max = _min; _min = 0; _mid; while (_max - _min > 1) { _mid = (_max + _min) / 2; if (_tips[_mid].timestamp > _timestampBefore) { _max = _mid; } else { _min = _mid; } } _min++; if (_min < _minBackup) { _tipAmount = _tips[_minBackup].cumulativeTips - _tips[_min].cumulativeTips + _tips[_min].amount; } } } } /** * @dev Allows the user to get the latest value for the queryId specified * @param _queryId is the id to look up the value for * @return _value the value retrieved * @return _timestampRetrieved the retrieved value's timestamp */ function _getCurrentValue(bytes32 _queryId) internal view returns (bytes memory _value, uint256 _timestampRetrieved) { uint256 _count = getNewValueCountbyQueryId(_queryId); if (_count == 0) { return (bytes(""), 0); } uint256 _time; //loop handles for dispute (value = "" if disputed) while (_count > 0) { _count--; _time = getTimestampbyQueryIdandIndex(_queryId, _count); _value = retrieveData(_queryId, _time); if (_value.length > 0) { return (_value, _time); } } return (bytes(""), _time); } /** * @dev Internal function which determines the reward amount for a given oracle submission * @param _feedId id of dataFeed * @param _queryId id of reported data * @param _timestamp timestamp of reported data eligible for reward * @return _rewardAmount potential reward amount for the given oracle submission */ function _getRewardAmount( bytes32 _feedId, bytes32 _queryId, uint256 _timestamp ) internal view returns (uint256 _rewardAmount) { require( block.timestamp - _timestamp < 4 weeks, "timestamp too old to claim tip" ); Feed storage _feed = dataFeed[_queryId][_feedId]; require(!_feed.rewardClaimed[_timestamp], "reward already claimed"); uint256 _n = (_timestamp - _feed.details.startTime) / _feed.details.interval; // finds closest interval _n to timestamp uint256 _c = _feed.details.startTime + _feed.details.interval * _n; // finds start timestamp _c of interval _n bytes memory _valueRetrieved = retrieveData(_queryId, _timestamp); require(_valueRetrieved.length != 0, "no value exists at timestamp"); ( bytes memory _valueRetrievedBefore, uint256 _timestampBefore ) = getDataBefore(_queryId, _timestamp); uint256 _priceChange = 0; // price change from last value to current value if (_feed.details.priceThreshold != 0) { uint256 _v1 = _bytesToUint(_valueRetrieved); uint256 _v2 = _bytesToUint(_valueRetrievedBefore); if (_v2 == 0) { _priceChange = 10000; } else if (_v1 >= _v2) { _priceChange = (10000 * (_v1 - _v2)) / _v2; } else { _priceChange = (10000 * (_v2 - _v1)) / _v2; } } _rewardAmount = _feed.details.reward; uint256 _timeDiff = _timestamp - _c; // time difference between report timestamp and start of interval // ensure either report is first within a valid window, or price change threshold is met if (_timeDiff < _feed.details.window && _timestampBefore < _c) { // add time based rewards if applicable _rewardAmount += _feed.details.rewardIncreasePerSecond * _timeDiff; } else { require( _priceChange > _feed.details.priceThreshold, "price threshold not met" ); } if (_feed.details.balance < _rewardAmount) { _rewardAmount = _feed.details.balance; } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import "./interface/ITellor.sol"; import "./interface/IERC2362.sol"; import "./interface/IMappingContract.sol"; import "hardhat/console.sol"; /** @author Tellor Inc @title UsingTellor @dev This contract helps smart contracts read data from Tellor */ contract UsingTellor is IERC2362 { ITellor public tellor; IMappingContract public idMappingContract; /*Constructor*/ /** * @dev the constructor sets the tellor address in storage * @param _tellor is the TellorMaster address */ constructor(address payable _tellor) { tellor = ITellor(_tellor); } /*Getters*/ /** * @dev Retrieves the next value for the queryId after the specified timestamp * @param _queryId is the queryId to look up the value for * @param _timestamp after which to search for next value * @return _value the value retrieved * @return _timestampRetrieved the value's timestamp */ function getDataAfter(bytes32 _queryId, uint256 _timestamp) public view returns (bytes memory _value, uint256 _timestampRetrieved) { (bool _found, uint256 _index) = getIndexForDataAfter( _queryId, _timestamp ); if (!_found) { return ("", 0); } _timestampRetrieved = getTimestampbyQueryIdandIndex(_queryId, _index); _value = retrieveData(_queryId, _timestampRetrieved); return (_value, _timestampRetrieved); } /** * @dev Retrieves the latest value for the queryId before the specified timestamp * @param _queryId is the queryId to look up the value for * @param _timestamp before which to search for latest value * @return _value the value retrieved * @return _timestampRetrieved the value's timestamp */ function getDataBefore(bytes32 _queryId, uint256 _timestamp) public view returns (bytes memory _value, uint256 _timestampRetrieved) { (, _value, _timestampRetrieved) = tellor.getDataBefore( _queryId, _timestamp ); } /** * @dev Retrieves next array index of data after the specified timestamp for the queryId * @param _queryId is the queryId to look up the index for * @param _timestamp is the timestamp after which to search for the next index * @return _found whether the index was found * @return _index the next index found after the specified timestamp */ function getIndexForDataAfter(bytes32 _queryId, uint256 _timestamp) public view returns (bool _found, uint256 _index) { (_found, _index) = tellor.getIndexForDataBefore(_queryId, _timestamp); if (_found) { _index++; } uint256 _valCount = tellor.getNewValueCountbyQueryId(_queryId); // no value after timestamp if (_valCount <= _index) { return (false, 0); } uint256 _timestampRetrieved = tellor.getTimestampbyQueryIdandIndex( _queryId, _index ); if (_timestampRetrieved > _timestamp) { return (true, _index); } // if _timestampRetrieved equals _timestamp, try next value _index++; // no value after timestamp if (_valCount <= _index) { return (false, 0); } _timestampRetrieved = tellor.getTimestampbyQueryIdandIndex( _queryId, _index ); return (true, _index); } /** * @dev Retrieves latest array index of data before the specified timestamp for the queryId * @param _queryId is the queryId to look up the index for * @param _timestamp is the timestamp before which to search for the latest index * @return _found whether the index was found * @return _index the latest index found before the specified timestamp */ // slither-disable-next-line calls-loop function getIndexForDataBefore(bytes32 _queryId, uint256 _timestamp) public view returns (bool _found, uint256 _index) { return tellor.getIndexForDataBefore(_queryId, _timestamp); } /** * @dev Retrieves multiple uint256 values before the specified timestamp * @param _queryId the unique id of the data query * @param _timestamp the timestamp before which to search for values * @param _maxAge the maximum number of seconds before the _timestamp to search for values * @param _maxCount the maximum number of values to return * @return _values the values retrieved, ordered from oldest to newest * @return _timestamps the timestamps of the values retrieved */ function getMultipleValuesBefore( bytes32 _queryId, uint256 _timestamp, uint256 _maxAge, uint256 _maxCount ) public view returns (bytes[] memory _values, uint256[] memory _timestamps) { (bool _ifRetrieve, uint256 _startIndex) = getIndexForDataAfter( _queryId, _timestamp - _maxAge ); // no value within range if (!_ifRetrieve) { return (new bytes[](0), new uint256[](0)); } uint256 _endIndex; (_ifRetrieve, _endIndex) = getIndexForDataBefore(_queryId, _timestamp); // no value before _timestamp if (!_ifRetrieve) { return (new bytes[](0), new uint256[](0)); } uint256 _valCount = _endIndex - _startIndex + 1; // more than _maxCount values found within range if (_valCount > _maxCount) { _startIndex = _endIndex - _maxCount + 1; _valCount = _maxCount; } bytes[] memory _valuesArray = new bytes[](_valCount); uint256[] memory _timestampsArray = new uint256[](_valCount); bytes memory _valueRetrieved; for (uint256 _i = 0; _i < _valCount; _i++) { _timestampsArray[_i] = getTimestampbyQueryIdandIndex( _queryId, (_startIndex + _i) ); _valueRetrieved = retrieveData(_queryId, _timestampsArray[_i]); _valuesArray[_i] = _valueRetrieved; } return (_valuesArray, _timestampsArray); } /** * @dev Counts the number of values that have been submitted for the queryId * @param _queryId the id to look up * @return uint256 count of the number of values received for the queryId */ function getNewValueCountbyQueryId(bytes32 _queryId) public view returns (uint256) { return tellor.getNewValueCountbyQueryId(_queryId); } /** * @dev Returns the address of the reporter who submitted a value for a data ID at a specific time * @param _queryId is ID of the specific data feed * @param _timestamp is the timestamp to find a corresponding reporter for * @return address of the reporter who reported the value for the data ID at the given timestamp */ function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp) public view returns (address) { return tellor.getReporterByTimestamp(_queryId, _timestamp); } /** * @dev Gets the timestamp for the value based on their index * @param _queryId is the id to look up * @param _index is the value index to look up * @return uint256 timestamp */ function getTimestampbyQueryIdandIndex(bytes32 _queryId, uint256 _index) public view returns (uint256) { return tellor.getTimestampbyQueryIdandIndex(_queryId, _index); } /** * @dev Determines whether a value with a given queryId and timestamp has been disputed * @param _queryId is the value id to look up * @param _timestamp is the timestamp of the value to look up * @return bool true if queryId/timestamp is under dispute */ function isInDispute(bytes32 _queryId, uint256 _timestamp) public view returns (bool) { return tellor.isInDispute(_queryId, _timestamp); } /** * @dev Retrieve value from oracle based on queryId/timestamp * @param _queryId being requested * @param _timestamp to retrieve data/value from * @return bytes value for query/timestamp submitted */ function retrieveData(bytes32 _queryId, uint256 _timestamp) public view returns (bytes memory) { return tellor.retrieveData(_queryId, _timestamp); } /** * @dev allows dev to set mapping contract for valueFor (EIP2362) * @param _addy address of mapping contract */ function setIdMappingContract(address _addy) external{ require(address(idMappingContract) == address(0)); idMappingContract = IMappingContract(_addy); } /** * @dev Retrieve most recent int256 value from oracle based on queryId * @param _id being requested * @return _value most recent value submitted * @return _timestamp timestamp of most recent value * @return _statusCode 200 if value found, 404 if not found */ function valueFor(bytes32 _id) external view override returns ( int256 _value, uint256 _timestamp, uint256 _statusCode ) { _id = idMappingContract.getTellorID(_id); uint256 _count = getNewValueCountbyQueryId(_id); if (_count == 0) { return (0, 0, 404); } _timestamp = getTimestampbyQueryIdandIndex(_id, _count - 1); bytes memory _valueBytes = retrieveData(_id, _timestamp); if (_valueBytes.length == 0) { return (0, 0, 404); } uint256 _valueUint = _sliceUint(_valueBytes); _value = int256(_valueUint); return (_value, _timestamp, 200); } // Internal functions /** * @dev Convert bytes to uint256 * @param _b bytes value to convert to uint256 * @return _number uint256 converted from bytes */ function _sliceUint(bytes memory _b) internal pure returns(uint256 _number){ for (uint256 _i = 0; _i < _b.length; _i++) { _number = _number * 256 + uint8(_b[_i]); } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.3; interface IERC20 { function transfer(address _to, uint256 _amount) external returns(bool); function transferFrom(address _from, address _to, uint256 _amount) external returns(bool); function approve(address _spender, uint256 _amount) external returns(bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IQueryDataStorage { function storeData(bytes memory _queryData) external; function getQueryData(bytes32 _queryId) external view returns (bytes memory); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; interface ITellor{ //Controller function addresses(bytes32) external view returns(address); function uints(bytes32) external view returns(uint256); function burn(uint256 _amount) external; function changeDeity(address _newDeity) external; function changeOwner(address _newOwner) external; function changeUint(bytes32 _target, uint256 _amount) external; function migrate() external; function mint(address _reciever, uint256 _amount) external; function init() external; function getAllDisputeVars(uint256 _disputeId) external view returns (bytes32,bool,bool,bool,address,address,address,uint256[9] memory,int256); function getDisputeIdByDisputeHash(bytes32 _hash) external view returns (uint256); function getDisputeUintVars(uint256 _disputeId, bytes32 _data) external view returns(uint256); function getLastNewValueById(uint256 _requestId) external view returns (uint256, bool); function retrieveData(uint256 _requestId, uint256 _timestamp) external view returns (uint256); function getNewValueCountbyRequestId(uint256 _requestId) external view returns (uint256); function getAddressVars(bytes32 _data) external view returns (address); function getUintVar(bytes32 _data) external view returns (uint256); function totalSupply() external view returns (uint256); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function isMigrated(address _addy) external view returns (bool); function allowance(address _user, address _spender) external view returns (uint256); function allowedToTrade(address _user, uint256 _amount) external view returns (bool); function approve(address _spender, uint256 _amount) external returns (bool); function approveAndTransferFrom(address _from, address _to, uint256 _amount) external returns(bool); function balanceOf(address _user) external view returns (uint256); function balanceOfAt(address _user, uint256 _blockNumber)external view returns (uint256); function transfer(address _to, uint256 _amount)external returns (bool success); function transferFrom(address _from,address _to,uint256 _amount) external returns (bool success) ; function depositStake() external; function requestStakingWithdraw() external; function withdrawStake() external; function changeStakingStatus(address _reporter, uint _status) external; function slashReporter(address _reporter, address _disputer) external; function getStakerInfo(address _staker) external view returns (uint256, uint256); function getTimestampbyRequestIDandIndex(uint256 _requestId, uint256 _index) external view returns (uint256); function getNewCurrentVariables()external view returns (bytes32 _c,uint256[5] memory _r,uint256 _d,uint256 _t); function getNewValueCountbyQueryId(bytes32 _queryId) external view returns(uint256); function getTimestampbyQueryIdandIndex(bytes32 _queryId, uint256 _index) external view returns(uint256); function retrieveData(bytes32 _queryId, uint256 _timestamp) external view returns(bytes memory); //Governance enum VoteResult {FAILED,PASSED,INVALID} function setApprovedFunction(bytes4 _func, bool _val) external; function beginDispute(bytes32 _queryId,uint256 _timestamp) external; function delegate(address _delegate) external; function delegateOfAt(address _user, uint256 _blockNumber) external view returns (address); function executeVote(uint256 _disputeId) external; function proposeVote(address _contract,bytes4 _function, bytes calldata _data, uint256 _timestamp) external; function tallyVotes(uint256 _disputeId) external; function governance() external view returns (address); function updateMinDisputeFee() external; function verify() external pure returns(uint); function vote(uint256 _disputeId, bool _supports, bool _invalidQuery) external; function voteFor(address[] calldata _addys,uint256 _disputeId, bool _supports, bool _invalidQuery) external; function getDelegateInfo(address _holder) external view returns(address,uint); function isFunctionApproved(bytes4 _func) external view returns(bool); function isApprovedGovernanceContract(address _contract) external returns (bool); function getVoteRounds(bytes32 _hash) external view returns(uint256[] memory); function getVoteCount() external view returns(uint256); function getVoteInfo(uint256 _disputeId) external view returns(bytes32,uint256[9] memory,bool[2] memory,VoteResult,bytes memory,bytes4,address[2] memory); function getDisputeInfo(uint256 _disputeId) external view returns(uint256,uint256,bytes memory, address); function getOpenDisputesOnId(bytes32 _queryId) external view returns(uint256); function didVote(uint256 _disputeId, address _voter) external view returns(bool); //Oracle function getReportTimestampByIndex(bytes32 _queryId, uint256 _index) external view returns(uint256); function getValueByTimestamp(bytes32 _queryId, uint256 _timestamp) external view returns(bytes memory); function getBlockNumberByTimestamp(bytes32 _queryId, uint256 _timestamp) external view returns(uint256); function getReportingLock() external view returns(uint256); function getReporterByTimestamp(bytes32 _queryId, uint256 _timestamp) external view returns(address); function reportingLock() external view returns(uint256); function removeValue(bytes32 _queryId, uint256 _timestamp) external; function getTipsByUser(address _user) external view returns(uint256); function tipQuery(bytes32 _queryId, uint256 _tip, bytes memory _queryData) external; function submitValue(bytes32 _queryId, bytes calldata _value, uint256 _nonce, bytes memory _queryData) external; function burnTips() external; function changeReportingLock(uint256 _newReportingLock) external; function getReportsSubmittedByAddress(address _reporter) external view returns(uint256); function changeTimeBasedReward(uint256 _newTimeBasedReward) external; function getReporterLastTimestamp(address _reporter) external view returns(uint256); function getTipsById(bytes32 _queryId) external view returns(uint256); function getTimeBasedReward() external view returns(uint256); function getTimestampCountById(bytes32 _queryId) external view returns(uint256); function getTimestampIndexByTimestamp(bytes32 _queryId, uint256 _timestamp) external view returns(uint256); function getCurrentReward(bytes32 _queryId) external view returns(uint256, uint256); function getCurrentValue(bytes32 _queryId) external view returns(bytes memory); function getDataBefore(bytes32 _queryId, uint256 _timestamp) external view returns(bool _ifRetrieve, bytes memory _value, uint256 _timestampRetrieved); function getIndexForDataBefore(bytes32 _queryId, uint256 _timestamp) external view returns(bool _found, uint256 _index); function getTimeOfLastNewValue() external view returns(uint256); function isInDispute(bytes32 _queryId, uint256 _timestamp) external view returns(bool); function depositStake(uint256 _amount) external; function requestStakingWithdraw(uint256 _amount) external; //Test functions function changeAddressVar(bytes32 _id, address _addy) external; //parachute functions function killContract() external; function migrateFor(address _destination,uint256 _amount) external; function rescue51PercentAttack(address _tokenHolder) external; function rescueBrokenDataReporting() external; function rescueFailedUpdate() external; //Tellor 360 function addStakingRewards(uint256 _amount) external; function getStakeAmount() external view returns(uint256); function stakeAmount() external view returns(uint256); function token() external view returns(address); function getGasUsedByReport(bytes32 _queryId, uint256 _timestamp) external view returns(uint256); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; /** * @dev EIP2362 Interface for pull oracles * https://github.com/tellor-io/EIP-2362 */ interface IERC2362 { /** * @dev Exposed function pertaining to EIP standards * @param _id bytes32 ID of the query * @return int,uint,uint returns the value, timestamp, and status code of query */ function valueFor(bytes32 _id) external view returns(int256,uint256,uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IMappingContract{ function getTellorID(bytes32 _id) external view returns(bytes32); }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
{ "optimizer": { "enabled": true, "runs": 300 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address payable","name":"_tellor","type":"address"},{"internalType":"address","name":"_queryDataStorage","type":"address"},{"internalType":"uint256","name":"_fee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_feedFunder","type":"address"},{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"},{"internalType":"uint256","name":"priceThreshold","type":"uint256"},{"internalType":"uint256","name":"rewardIncreasePerSecond","type":"uint256"},{"internalType":"uint256","name":"feedsWithFundingIndex","type":"uint256"}],"indexed":false,"internalType":"struct Autopay.FeedDetails","name":"_feedDetails","type":"tuple"}],"name":"DataFeedFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_feedCreator","type":"address"}],"name":"NewDataFeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"_reporter","type":"address"}],"name":"OneTimeTipClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_queryData","type":"bytes"},{"indexed":false,"internalType":"address","name":"_tipper","type":"address"}],"name":"TipAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_reporter","type":"address"}],"name":"TipClaimed","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"claimOneTimeTip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"claimTip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"feedsWithFunding","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"fundFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getCurrentFeeds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getCurrentTip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getDataAfter","outputs":[{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_timestampRetrieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getDataBefore","outputs":[{"internalType":"bytes","name":"_value","type":"bytes"},{"internalType":"uint256","name":"_timestampRetrieved","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"}],"name":"getDataFeed","outputs":[{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"},{"internalType":"uint256","name":"priceThreshold","type":"uint256"},{"internalType":"uint256","name":"rewardIncreasePerSecond","type":"uint256"},{"internalType":"uint256","name":"feedsWithFundingIndex","type":"uint256"}],"internalType":"struct Autopay.FeedDetails","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedFeedDetails","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"window","type":"uint256"},{"internalType":"uint256","name":"priceThreshold","type":"uint256"},{"internalType":"uint256","name":"rewardIncreasePerSecond","type":"uint256"},{"internalType":"uint256","name":"feedsWithFundingIndex","type":"uint256"}],"internalType":"struct Autopay.FeedDetails","name":"details","type":"tuple"},{"internalType":"bytes","name":"queryData","type":"bytes"}],"internalType":"struct Autopay.FeedDetailsWithQueryData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedFeeds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedQueryIds","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFundedSingleTipsInfo","outputs":[{"components":[{"internalType":"bytes","name":"queryData","type":"bytes"},{"internalType":"uint256","name":"tip","type":"uint256"}],"internalType":"struct Autopay.SingleTipsWithQueryData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getIndexForDataAfter","outputs":[{"internalType":"bool","name":"_found","type":"bool"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getIndexForDataBefore","outputs":[{"internalType":"bool","name":"_found","type":"bool"},{"internalType":"uint256","name":"_index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_maxAge","type":"uint256"},{"internalType":"uint256","name":"_maxCount","type":"uint256"}],"name":"getMultipleValuesBefore","outputs":[{"internalType":"bytes[]","name":"_values","type":"bytes[]"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getNewValueCountbyQueryId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getPastTipByIndex","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"cumulativeTips","type":"uint256"}],"internalType":"struct Autopay.Tip","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getPastTipCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"}],"name":"getPastTips","outputs":[{"components":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"cumulativeTips","type":"uint256"}],"internalType":"struct Autopay.Tip[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"}],"name":"getQueryIdFromFeedId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getReporterByTimestamp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamps","type":"uint256[]"}],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"_cumulativeReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256[]","name":"_timestamp","type":"uint256[]"}],"name":"getRewardClaimStatusList","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"},{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getRewardClaimedStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getTimestampbyQueryIdandIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getTipsByAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"idMappingContract","outputs":[{"internalType":"contract IMappingContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"isInDispute","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"queryDataStorage","outputs":[{"internalType":"contract IQueryDataStorage","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queryIdFromDataFeedId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"queryIdsWithFunding","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"queryIdsWithFundingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"retrieveData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addy","type":"address"}],"name":"setIdMappingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_reward","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_interval","type":"uint256"},{"internalType":"uint256","name":"_window","type":"uint256"},{"internalType":"uint256","name":"_priceThreshold","type":"uint256"},{"internalType":"uint256","name":"_rewardIncreasePerSecond","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setupDataFeed","outputs":[{"internalType":"bytes32","name":"_feedId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tellor","outputs":[{"internalType":"contract ITellor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_queryId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_queryData","type":"bytes"}],"name":"tip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tips","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"cumulativeTips","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userTipsTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_id","type":"bytes32"}],"name":"valueFor","outputs":[{"internalType":"int256","name":"_value","type":"int256"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_statusCode","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620048f5380380620048f5833981016040819052620000349162000124565b600080546001600160a01b0319166001600160a01b03851690811790915560408051637e062a3560e11b8152905163fc0c546a91600480820192602092909190829003018186803b1580156200008957600080fd5b505afa1580156200009e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c49190620000fe565b600280546001600160a01b039283166001600160a01b03199182161790915560038054949092169316929092179091556004555062000184565b60006020828403121562000110578081fd5b81516200011d816200016b565b9392505050565b60008060006060848603121562000139578182fd5b835162000146816200016b565b602085015190935062000159816200016b565b80925050604084015190509250925092565b6001600160a01b03811681146200018157600080fd5b50565b61476180620001946000396000f3fe608060405234801561001057600080fd5b50600436106102995760003560e01c806377b03e0d11610171578063bd05a23a116100d3578063e07c548611610097578063fc0c546a11610071578063fc0c546a146106c7578063fcd4a546146106da578063fdb9d0e2146106fb57610299565b8063e07c54861461068e578063f66f49c3146106a1578063f78eea83146106b457610299565b8063bd05a23a1461061f578063c5958af91461063f578063c7fafff81461065f578063ce5e11bf14610672578063ddca3f431461068557610299565b8063997b799011610135578063a9352c091161010f578063a9352c09146105cc578063b0e5fd07146105ec578063b7c9d376146105ff57610299565b8063997b79901461056c578063a733d2db146105a6578063a792765f146105b957610299565b806377b03e0d146104e55780637bcdfa7a146104f85780637f23d1ce14610526578063868d8b591461053957806393d539321461055957610299565b806344e87f911161021a5780634fff7099116101de57806364ee3c6d116101b857806364ee3c6d1461049157806366c1de50146104b2578063751c895c146104d257610299565b80634fff70991461043e57806357806e701461045e578063579b6d061461047157610299565b806344e87f91146103ac57806345740ccc146103cf57806345d60823146103e25780634637de0b1461040b5780634fce1e181461042b57610299565b80632af8aae0116102615780632af8aae014610347578063353d8ac91461035a57806337db4faf1461036f5780633d3fc43d1461038f57806342505164146103a457610299565b806309d6e27e1461029e578063193b505b146102bc5780631959ad5b146102d15780631af4075f146102fc578063294490851461031d575b600080fd5b6102a661070e565b6040516102b3919061431c565b60405180910390f35b6102cf6102ca366004613d59565b610a51565b005b6000546102e4906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b61030f61030a366004613f54565b610a96565b6040519081526020016102b3565b61033061032b366004613fd0565b610b4c565b6040805192151583526020830191909152016102b3565b6001546102e4906001600160a01b031681565b610362610bdb565b6040516102b3919061424b565b61030f61037d366004613eda565b60086020526000908152604090205481565b610397610c33565b6040516102b391906143e6565b610362610f00565b6103bf6103ba366004613fd0565b610f56565b60405190151581526020016102b3565b61030f6103dd366004613eda565b610fe3565b61030f6103f0366004613d59565b6001600160a01b03166000908152600a602052604090205490565b61041e610419366004613eda565b61109d565b6040516102b3919061456d565b61030f610439366004613eda565b611162565b61030f61044c366004613eda565b60009081526007602052604090205490565b6102cf61046c366004613f54565b611183565b61048461047f366004613eda565b6117d0565b6040516102b3919061445b565b6104a461049f366004613fd0565b611860565b6040516102b3929190614505565b61030f6104c0366004613d59565b600a6020526000908152604090205481565b6102cf6104e0366004613ff1565b6118b9565b61030f6104f3366004613eda565b611d9a565b61050b610506366004613fd0565b611e17565b604080519384526020840192909252908201526060016102b3565b6102cf610534366004613fa5565b611e59565b61030f610547366004613eda565b60076020526000908152604090205481565b610362610567366004613eda565b6120c9565b6103bf61057a366004613fa5565b600091825260066020908152604080842094845293815283832091835260089091019052205460ff1690565b61030f6105b4366004614067565b61212b565b6104a46105c7366004613fd0565b61246a565b6105df6105da366004613fd0565b612500565b6040516102b391906145c5565b6003546102e4906001600160a01b031681565b61030f61060d366004613eda565b60009081526009602052604090205490565b61063261062d366004613f54565b612591565b6040516102b39190614205565b61065261064d366004613fd0565b61269f565b6040516102b391906144f2565b61030f61066d366004613eda565b612727565b61030f610680366004613fd0565b612737565b61030f60045481565b6102e461069c366004613fd0565b6127bb565b6103306106af366004613fd0565b61283f565b61050b6106c2366004613eda565b612aba565b6002546102e4906001600160a01b031681565b6106ed6106e8366004614036565b612bb9565b6040516102b3929190614283565b6102cf610709366004613f0a565b612e3b565b60606000306001600160a01b031663353d8ac96040518163ffffffff1660e01b815260040160006040518083038186803b15801561074b57600080fd5b505afa15801561075f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107879190810190613d98565b90506000815167ffffffffffffffff8111156107b357634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107ec57816020015b6107d9613bfc565b8152602001906001900390816107d15790505b50905060005b8251811015610a4a576000306001600160a01b0316634637de0b85848151811061082c57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161085291815260200190565b6101006040518083038186803b15801561086b57600080fd5b505afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a3919061412d565b90506000306001600160a01b0316634fff70998685815181106108d657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016108fc91815260200190565b60206040518083038186803b15801561091457600080fd5b505afa158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c9190613ef2565b6003546040516341b6849f60e11b8152600481018390529192506000916001600160a01b039091169063836d093e9060240160006040518083038186803b15801561099657600080fd5b505afa1580156109aa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109d291908101906140fa565b9050828585815181106109f557634e487b7160e01b600052603260045260246000fd5b60200260200101516000018190525080858581518110610a2557634e487b7160e01b600052603260045260246000fd5b6020026020010151602001819052505050508080610a42906146cc565b9150506107f2565b5091505090565b6001546001600160a01b031615610a6757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008381526006602090815260408083208784529091528120815b83811015610b0857610aea8787878785818110610ade57634e487b7160e01b600052603260045260246000fd5b9050602002013561325f565b610af49084614617565b925080610b00816146cc565b915050610ab1565b508060010154821115610b1d57806001015491505b6103e860045483610b2e919061464f565b610b38919061462f565b610b42908361466e565b9695505050505050565b60008054604051632944908560e01b8152600481018590526024810184905282916001600160a01b031690632944908590604401604080518083038186803b158015610b9757600080fd5b505afa158015610bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcf9190613eaf565b915091505b9250929050565b6060600b805480602002602001604051908101604052809291908181526020018280548015610c2957602002820191906000526020600020905b815481526020019060010190808311610c15575b5050505050905090565b60606000306001600160a01b031663425051646040518163ffffffff1660e01b815260040160006040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cac9190810190613d98565b90506000815167ffffffffffffffff811115610cd857634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610d1e57816020015b604080518082019091526060815260006020820152815260200190600190039081610cf65790505b50905060005b8251811015610a4a5760035483516000916001600160a01b03169063836d093e90869085908110610d6557634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610d8b91815260200190565b60006040518083038186803b158015610da357600080fd5b505afa158015610db7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ddf91908101906140fa565b90506000306001600160a01b03166345740ccc868581518110610e1257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b8152600401610e3891815260200190565b60206040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e889190613ef2565b905081848481518110610eab57634e487b7160e01b600052603260045260246000fd5b60200260200101516000018190525080848481518110610edb57634e487b7160e01b600052603260045260246000fd5b6020026020010151602001818152505050508080610ef8906146cc565b915050610d24565b6060600c805480602002602001604051908101604052809291908181526020018280548015610c295760200282019190600052602060002090815481526020019060010190808311610c15575050505050905090565b600080546040516344e87f9160e01b815260048101859052602481018490526001600160a01b03909116906344e87f919060440160206040518083038186803b158015610fa257600080fd5b505afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613e40565b90505b92915050565b600081815260096020526040812054610ffe57506000611098565b60006110098361353c565b600085815260096020526040812080549294509092509061102c9060019061466e565b8154811061104a57634e487b7160e01b600052603260045260246000fd5b600091825260209182902060408051606081018252600390930290910180548352600181015493830184905260020154908201529150821015611091575191506110989050565b6000925050505b919050565b6110e560405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506000818152600760208181526040808420548452600680835281852095855294825292839020835161010081018552815481526001820154928101929092526002810154938201939093526003830154606082015260048301546080820152600583015460a08201529282015460c0840152015460e082015290565b600b818154811061117257600080fd5b600091825260209091200154905081565b600083815260066020908152604080832087845290915290206001810154806111f35760405162461bcd60e51b815260206004820181905260248201527f6e6f2066756e647320617661696c61626c6520666f722074686973206665656460448201526064015b60405180910390fd5b6000805b8481101561157a5761a8c086868381811061122257634e487b7160e01b600052603260045260246000fd5b9050602002013542611234919061466e565b116112815760405162461bcd60e51b815260206004820152601a60248201527f6275666665722074696d6520686173206e6f742070617373656400000000000060448201526064016111ea565b336112b2888888858181106112a657634e487b7160e01b600052603260045260246000fd5b905060200201356127bb565b6001600160a01b03161461132e5760405162461bcd60e51b815260206004820152603b60248201527f6d6573736167652073656e646572206e6f74207265706f7274657220666f722060448201527f676976656e207175657279496420616e642074696d657374616d70000000000060648201526084016111ea565b6113538888888885818110610ade57634e487b7160e01b600052603260045260246000fd5b61135d9083614617565b91508282106115135761137160018661466e565b81146113d95760405162461bcd60e51b815260206004820152603160248201527f696e73756666696369656e742062616c616e636520666f7220616c6c207375626044820152706d69747465642074696d657374616d707360781b60648201526084016111ea565b600b54839250600110156114d45760078401546000906113fb9060019061466e565b600b80549192509061140f9060019061466e565b8154811061142d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600b828154811061145957634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055506000600b828154811061148a57634e487b7160e01b600052603260045260246000fd5b600091825260208083209091015480835260079091526040909120549091506114b4836001614617565b600091825260066020908152604080842094845293905291902060070155505b600b8054806114f357634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810182905590910190915560078501555b600184600801600088888581811061153b57634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611572906146cc565b9150506111f7565b5080836000016001016000828254611592919061466e565b90915550506002546004546001600160a01b039091169063a9059cbb9033906103e8906115bf908661464f565b6115c9919061462f565b6115d3908561466e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561161957600080fd5b505af115801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190613e40565b61165a57600080fd5b6002546000546004546001600160a01b039283169263095ea7b39216906103e890611685908661464f565b61168f919061462f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156116d557600080fd5b505af11580156116e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170d9190613e40565b506000546004546001600160a01b039091169063d9c51cd4906103e890611734908561464f565b61173e919061462f565b6040518263ffffffff1660e01b815260040161175c91815260200190565b600060405180830381600087803b15801561177657600080fd5b505af115801561178a573d6000803e3d6000fd5b505060405133815283925088915089907fbe397b811472239aa40c62686337c1611135342d6e238e8aa16580dcd7223adf9060200160405180910390a450505050505050565b606060096000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156118555783829060005260206000209060030201604051806060016040529081600082015481526020016001820154815260200160028201548152505081526020019060010190611805565b505050509050919050565b60606000806000611871868661283f565b91509150816118985760006040518060200160405280600081525090935093505050610bd4565b6118a28682612737565b92506118ae868461269f565b935050509250929050565b81816040516118c99291906141f5565b6040518091039020841461191f5760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f66206279746573206461746100000060448201526064016111ea565b6000831161196f5760405162461bcd60e51b815260206004820152601d60248201527f746970206d7573742062652067726561746572207468616e207a65726f00000060448201526064016111ea565b60008481526009602052604090208054611a375760408051606081018252858152426020808301918252828401888152855460018181018855600088815293909320945160039182029095019485559251918401919091555160029092019190915554905163ac5c853560e01b81526001600160a01b039091169063ac5c853590611a0090869086906004016144b1565b600060405180830381600087803b158015611a1a57600080fd5b505af1158015611a2e573d6000803e3d6000fd5b50505050611c21565b6000611a428661353c565b8354909250839150611a569060019061466e565b81548110611a7457634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010154811015611b8357815442908390611a9f9060019061466e565b81548110611abd57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010181905550848260018480549050611ae5919061466e565b81548110611b0357634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016000016000828254611b239190614617565b9091555050815485908390611b3a9060019061466e565b81548110611b5857634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016002016000828254611b789190614617565b90915550611c1f9050565b816040518060600160405280878152602001428152602001878560018780549050611bae919061466e565b81548110611bcc57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160020154611be89190614617565b9052815460018181018455600093845260209384902083516003909302019182559282015192810192909255604001516002909101555b505b600085815260086020526040902054158015611c4557506000611c4386610fe3565b115b15611c8a57600c80546001810182557fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c701869055546000868152600860205260409020555b6002546040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d149190613e40565b611d305760405162461bcd60e51b81526004016111ea90614527565b336000908152600a602052604081208054869290611d4f908490614617565b9250508190555083857ff5ab15991b2cec1142b66b2c57a205c2af5e9d8fc5056bcb33b53b193990b07e858533604051611d8b939291906144c5565b60405180910390a35050505050565b600080546040516377b03e0d60e01b8152600481018490526001600160a01b03909116906377b03e0d9060240160206040518083038186803b158015611ddf57600080fd5b505afa158015611df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdd9190613ef2565b60096020528160005260406000208181548110611e3357600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b600082815260066020908152604080832086845290915290208054611eb25760405162461bcd60e51b815260206004820152600f60248201526e066656564206e6f742073657420757608c1b60448201526064016111ea565b60008211611f025760405162461bcd60e51b815260206004820152601960248201527f6d7573742062652073656e64696e6720616e20616d6f756e740000000000000060448201526064016111ea565b81816001016000828254611f169190614617565b90915550506002546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611f6d57600080fd5b505af1158015611f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa59190613e40565b611fc15760405162461bcd60e51b81526004016111ea90614527565b6007810154158015611fd7575060008160010154115b1561201757600b805460018101825560008290527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018590555460078201555b336000908152600a602052604081208054849290612036908490614617565b909155505060408051338152825460208201526001830154818301526002830154606082015260038301546080820152600483015460a0820152600583015460c0820152600683015460e0820152600783015461010082015290518391859187917fdaf477f4ffa6a044c31632ac3040e483553fb75f8437629291046a833cc352af91908190036101200190a450505050565b60008181526005602090815260409182902080548351818402810184019094528084526060939283018282801561211f57602002820191906000526020600020905b81548152602001906001019080831161210b575b50505050509050919050565b6000838360405161213d9291906141f5565b60405180910390208b146121935760405162461bcd60e51b815260206004820152601d60248201527f6964206d7573742062652068617368206f66206279746573206461746100000060448201526064016111ea565b60408051602081018d90529081018b9052606081018a90526080810189905260a0810188905260c0810187905260e081018690526101000160408051601f19818403018152918152815160209283012060008e81526006845282812082825290935291208054919250901561224a5760405162461bcd60e51b815260206004820152601f60248201527f66656564206d757374206e6f742062652073657420757020616c72656164790060448201526064016111ea565b60008b1161229a5760405162461bcd60e51b815260206004820181905260248201527f726577617264206d7573742062652067726561746572207468616e207a65726f60448201526064016111ea565b600089116122f55760405162461bcd60e51b815260206004820152602260248201527f696e74657276616c206d7573742062652067726561746572207468616e207a65604482015261726f60f01b60648201526084016111ea565b8888106123555760405162461bcd60e51b815260206004820152602860248201527f77696e646f77206d757374206265206c657373207468616e20696e74657276616044820152670d840d8cadccee8d60c31b60648201526084016111ea565b8a8155600281018a905560038082018a905560048083018a905560058084018a90556006840189905560008f81526020918252604080822080546001810182559083528383200187905586825260079092528190208f90559154915163ac5c853560e01b81526001600160a01b039092169163ac5c8535916123db9189918991016144b1565b600060405180830381600087803b1580156123f557600080fd5b505af1158015612409573d6000803e3d6000fd5b50505050818c7f25b7a245f1298a141e9a73052d47515c64a19a5550bc21f5c896f2097e155efe878733604051612442939291906144c5565b60405180910390a3821561245b5761245b828d85611e59565b509a9950505050505050505050565b6000805460405163a792765f60e01b81526004810185905260248101849052606092916001600160a01b03169063a792765f9060440160006040518083038186803b1580156124b857600080fd5b505afa1580156124cc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124f49190810190613e5a565b90969095509350505050565b61252460405180606001604052806000815260200160008152602001600081525090565b600083815260096020526040902080548390811061255257634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905092915050565b606060008267ffffffffffffffff8111156125bc57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156125e5578160200160208202803683370190505b50905060005b838110156126955760008681526006602090815260408083208a845290915281206008019086868481811061263057634e487b7160e01b600052603260045260246000fd5b90506020020135815260200190815260200160002060009054906101000a900460ff1682828151811061267357634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101528061268d816146cc565b9150506125eb565b5095945050505050565b60005460405163c5958af960e01b815260048101849052602481018390526060916001600160a01b03169063c5958af99060440160006040518083038186803b1580156126eb57600080fd5b505afa1580156126ff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fda91908101906140fa565b600c818154811061117257600080fd5b6000805460405163ce5e11bf60e01b815260048101859052602481018490526001600160a01b039091169063ce5e11bf9060440160206040518083038186803b15801561278357600080fd5b505afa158015612797573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613ef2565b6000805460405163703e2a4360e11b815260048101859052602481018490526001600160a01b039091169063e07c54869060440160206040518083038186803b15801561280757600080fd5b505afa15801561281b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda9190613d7c565b60008054604051632944908560e01b8152600481018590526024810184905282916001600160a01b031690632944908590604401604080518083038186803b15801561288a57600080fd5b505afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190613eaf565b909250905081156128db57806128d7816146cc565b9150505b600080546040516377b03e0d60e01b8152600481018790526001600160a01b03909116906377b03e0d9060240160206040518083038186803b15801561292057600080fd5b505afa158015612934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129589190613ef2565b905081811161296e576000809250925050610bd4565b6000805460405163ce5e11bf60e01b815260048101889052602481018590526001600160a01b039091169063ce5e11bf9060440160206040518083038186803b1580156129ba57600080fd5b505afa1580156129ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f29190613ef2565b905084811115612a0757600193505050610bd4565b82612a11816146cc565b935050828211612a2957600080935093505050610bd4565b60005460405163ce5e11bf60e01b815260048101889052602481018590526001600160a01b039091169063ce5e11bf9060440160206040518083038186803b158015612a7457600080fd5b505afa158015612a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aac9190613ef2565b506001935050509250929050565b6001546040516387a475fd60e01b815260048101839052600091829182916001600160a01b0316906387a475fd9060240160206040518083038186803b158015612b0357600080fd5b505afa158015612b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3b9190613ef2565b93506000612b4885611d9a565b905080612b615760008061019493509350935050612bb2565b612b708561068060018461466e565b92506000612b7e868561269f565b9050805160001415612b9d576000806101949450945094505050612bb2565b6000612ba8826135cb565b955060c893505050505b9193909250565b606080600080612bcd886106af888a61466e565b9150915081612c1e576040805160008082526020820190925290612c01565b6060815260200190600190039081612bec5790505b506040805160008152602081019091529094509250612e32915050565b6000612c2a8989610b4c565b909350905082612c7d576040805160008082526020820190925290612c5f565b6060815260200190600190039081612c4a5790505b506040805160008152602081019091529095509350612e3292505050565b6000612c89838361466e565b612c94906001614617565b905086811115612cb957612ca8878361466e565b612cb3906001614617565b92508690505b60008167ffffffffffffffff811115612ce257634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612d1557816020015b6060815260200190600190039081612d005790505b50905060008267ffffffffffffffff811115612d4157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612d6a578160200160208202803683370190505b509050606060005b84811015612e2657612d888e610680838a614617565b838281518110612da857634e487b7160e01b600052603260045260246000fd5b602002602001018181525050612de58e848381518110612dd857634e487b7160e01b600052603260045260246000fd5b602002602001015161269f565b915081848281518110612e0857634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080612e1e906146cc565b915050612d72565b50919750955050505050505b94509492505050565b600083815260096020526040902054612ea15760405162461bcd60e51b815260206004820152602260248201527f6e6f2074697073207375626d697474656420666f722074686973207175657279604482015261125960f21b60648201526084016111ea565b6000805b82811015612efb57612edd85858584818110612ed157634e487b7160e01b600052603260045260246000fd5b90506020020135613630565b612ee79083614617565b915080612ef3816146cc565b915050612ea5565b506002546004546001600160a01b039091169063a9059cbb9033906103e890612f24908661464f565b612f2e919061462f565b612f38908561466e565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015612f7e57600080fd5b505af1158015612f92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb69190613e40565b612fbf57600080fd5b6002546000546004546001600160a01b039283169263095ea7b39216906103e890612fea908661464f565b612ff4919061462f565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561303a57600080fd5b505af115801561304e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130729190613e40565b506000546004546001600160a01b039091169063d9c51cd4906103e890613099908561464f565b6130a3919061462f565b6040518263ffffffff1660e01b81526004016130c191815260200190565b600060405180830381600087803b1580156130db57600080fd5b505af11580156130ef573d6000803e3d6000fd5b505050506130fc84610fe3565b61322a576000848152600860205260409020541561322a5760008481526008602052604081205461312f9060019061466e565b600c8054919250906131439060019061466e565b8154811061316157634e487b7160e01b600052603260045260246000fd5b9060005260206000200154600c828154811061318d57634e487b7160e01b600052603260045260246000fd5b90600052602060002001819055506000600c82815481106131be57634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508160016131d89190614617565b6000828152600860205260408082209290925587815290812055600c80548061321157634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505b6040513390829086907fdff45d500502d35c7f1150acbb404c5b2e288e31a74354c8553a283dd1e806e790600090a450505050565b60006224ea0061326f834261466e565b106132bc5760405162461bcd60e51b815260206004820152601e60248201527f74696d657374616d7020746f6f206f6c6420746f20636c61696d20746970000060448201526064016111ea565b60008381526006602090815260408083208784528252808320858452600881019092529091205460ff16156133335760405162461bcd60e51b815260206004820152601660248201527f72657761726420616c726561647920636c61696d65640000000000000000000060448201526064016111ea565b600381015460028201546000919061334b908661466e565b613355919061462f565b9050600081836000016003015461336c919061464f565b600284015461337b9190614617565b90506000613389878761269f565b90508051600014156133dd5760405162461bcd60e51b815260206004820152601c60248201527f6e6f2076616c7565206578697374732061742074696d657374616d700000000060448201526064016111ea565b6000806133ea898961246a565b600588015491935091506000901561347b57600061340785613b9d565b9050600061341485613b9d565b905080613425576127109250613478565b8082106134545780613437818461466e565b6134439061271061464f565b61344d919061462f565b9250613478565b8061345f838261466e565b61346b9061271061464f565b613475919061462f565b92505b50505b86549750600061348b868b61466e565b6004890154909150811080156134a057508583105b156134c65760068801546134b590829061464f565b6134bf908a614617565b9850613519565b600588015482116135195760405162461bcd60e51b815260206004820152601760248201527f7072696365207468726573686f6c64206e6f74206d657400000000000000000060448201526064016111ea565b600188015489111561352d57600188015498505b50505050505050509392505050565b606060008061354a84611d9a565b90508061356d5760405180602001604052806000815250600092509250506135c6565b60005b81156135b15781613580816146b5565b92505061358d8583612737565b9050613599858261269f565b8051909450156135ac5791506135c69050565b613570565b60408051602081019091526000815293509150505b915091565b6000805b825181101561362a578281815181106135f857634e487b7160e01b600052603260045260246000fd5b016020015160f81c61360c8361010061464f565b6136169190614617565b915080613622816146cc565b9150506135cf565b50919050565b600061a8c061363f834261466e565b1161368c5760405162461bcd60e51b815260206004820152601a60248201527f6275666665722074696d6520686173206e6f742070617373656400000000000060448201526064016111ea565b6136968383610f56565b156136d45760405162461bcd60e51b815260206004820152600e60248201526d1d985b1d5948191a5cdc1d5d195960921b60448201526064016111ea565b6136de83836127bb565b6001600160a01b0316336001600160a01b03161461374a5760405162461bcd60e51b815260206004820152602360248201527f6d73672073656e646572206d757374206265207265706f72746572206164647260448201526265737360e81b60648201526084016111ea565b60008381526009602052604081208054909190815b600161376b848461466e565b11156137d357600261377d8484614617565b613787919061462f565b9050858482815481106137aa57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600302016001015411156137ca578091506137ce565b8092505b61375f565b60006137df888861246a565b91505084848154811061380257634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160010154811061386c5760405162461bcd60e51b815260206004820152602160248201527f746970206561726e65642062792070726576696f7573207375626d697373696f6044820152603760f91b60648201526084016111ea565b84848154811061388c57634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600101548710156138ed5760405162461bcd60e51b815260206004820152601e60248201527f74696d657374616d70206e6f7420656c696769626c6520666f7220746970000060448201526064016111ea565b600085858154811061390f57634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000154116139645760405162461bcd60e51b81526020600482015260136024820152721d1a5c08185b1c9958591e4818db185a5b5959606a1b60448201526064016111ea565b84848154811061398457634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000154955060008585815481106139ba57634e487b7160e01b600052603260045260246000fd5b6000918252602082206003909102019190915584906139de8a61032b8b6001614617565b915060009050806139f48c61032b876001614617565b90925090506001613a05828561466e565b1180613a0f575081155b15613b8e5781613a5257888481548110613a3957634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600201549950613b8e565b60009796505b6001613a64898961466e565b1115613acc576002613a768989614617565b613a80919061462f565b955084898781548110613aa357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600101541115613ac357859650613ac7565b8597505b613a58565b87613ad6816146cc565b98505083881015613b8e57888881548110613b0157634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160000154898981548110613b3357634e487b7160e01b600052603260045260246000fd5b9060005260206000209060030201600201548a8681548110613b6557634e487b7160e01b600052603260045260246000fd5b906000526020600020906003020160020154613b81919061466e565b613b8b9190614617565b99505b50505050505050505092915050565b6000805b825181101561362a57828181518110613bca57634e487b7160e01b600052603260045260246000fd5b016020015160f81c613bde8361010061464f565b613be89190614617565b915080613bf4816146cc565b915050613ba1565b6040518060400160405280613c4f60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001606081525090565b60008083601f840112613c6d578182fd5b50813567ffffffffffffffff811115613c84578182fd5b6020830191508360208260051b8501011115610bd457600080fd5b8051801515811461109857600080fd5b60008083601f840112613cc0578182fd5b50813567ffffffffffffffff811115613cd7578182fd5b602083019150836020828501011115610bd457600080fd5b600082601f830112613cff578081fd5b815167ffffffffffffffff811115613d1957613d196146fd565b613d2c601f8201601f19166020016145e6565b818152846020838601011115613d40578283fd5b613d51826020830160208701614685565b949350505050565b600060208284031215613d6a578081fd5b8135613d7581614713565b9392505050565b600060208284031215613d8d578081fd5b8151613d7581614713565b60006020808385031215613daa578182fd5b825167ffffffffffffffff80821115613dc1578384fd5b818501915085601f830112613dd4578384fd5b815181811115613de657613de66146fd565b8060051b9150613df78483016145e6565b8181528481019084860184860187018a1015613e11578788fd5b8795505b83861015613e33578051835260019590950194918601918601613e15565b5098975050505050505050565b600060208284031215613e51578081fd5b610fda82613c9f565b600080600060608486031215613e6e578182fd5b613e7784613c9f565b9250602084015167ffffffffffffffff811115613e92578283fd5b613e9e86828701613cef565b925050604084015190509250925092565b60008060408385031215613ec1578182fd5b613eca83613c9f565b9150602083015190509250929050565b600060208284031215613eeb578081fd5b5035919050565b600060208284031215613f03578081fd5b5051919050565b600080600060408486031215613f1e578283fd5b83359250602084013567ffffffffffffffff811115613f3b578283fd5b613f4786828701613c5c565b9497909650939450505050565b60008060008060608587031215613f69578081fd5b8435935060208501359250604085013567ffffffffffffffff811115613f8d578182fd5b613f9987828801613c5c565b95989497509550505050565b600080600060608486031215613fb9578081fd5b505081359360208301359350604090920135919050565b60008060408385031215613fe2578182fd5b50508035926020909101359150565b60008060008060608587031215614006578182fd5b8435935060208501359250604085013567ffffffffffffffff81111561402a578283fd5b613f9987828801613caf565b6000806000806080858703121561404b578182fd5b5050823594602084013594506040840135936060013592509050565b6000806000806000806000806000806101208b8d031215614086578788fd5b8a35995060208b0135985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135935060e08b013567ffffffffffffffff8111156140cd578384fd5b6140d98d828e01613caf565b915080945050809250506101008b013590509295989b9194979a5092959850565b60006020828403121561410b578081fd5b815167ffffffffffffffff811115614121578182fd5b613d5184828501613cef565b6000610100808385031215614140578182fd5b614149816145e6565b9050825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201528091505092915050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526141e1816020860160208601614685565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6020808252825182820181905260009190848201906040850190845b8181101561423f578351151583529284019291840191600101614221565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561423f57835183529284019291840191600101614267565b6000604082016040835280855180835260608501915060608160051b86010192506020808801855b838110156142d957605f198887030185526142c78683516141c9565b955093820193908201906001016142ab565b505085840381870152865180855287820194820193509150845b8281101561430f578451845293810193928101926001016142f3565b5091979650505050505050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b828110156143d957603f1988860301845281516101206143ac878351805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b878201519150806101008801526143c5818801836141c9565b965050509285019290850190600101614342565b5092979650505050505050565b60006020808301818452808551808352604092508286019150828160051b870101848801865b8381101561444d57888303603f1901855281518051878552614430888601826141c9565b91890151948901949094529487019492509086019060010161440c565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561423f5761449e8385518051825260208082015190830152604090810151910152565b9284019260609290920191600101614477565b600060208252613d5160208301848661419f565b6000604082526144d960408301858761419f565b90506001600160a01b0383166020830152949350505050565b600060208252610fda60208301846141c9565b60006040825261451860408301856141c9565b90508260208301529392505050565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6101008101610fdd8284805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b81518152602080830151908201526040808301519082015260608101610fdd565b604051601f8201601f1916810167ffffffffffffffff8111828210171561460f5761460f6146fd565b604052919050565b6000821982111561462a5761462a6146e7565b500190565b60008261464a57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614669576146696146e7565b500290565b600082821015614680576146806146e7565b500390565b60005b838110156146a0578181015183820152602001614688565b838111156146af576000848401525b50505050565b6000816146c4576146c46146e7565b506000190190565b60006000198214156146e0576146e06146e7565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461472857600080fd5b5056fea26469706673582212205087869cb341468ebc311df859654d93777f89343009554f68c77794df86985f64736f6c634300080300330000000000000000000000003251838bd813fdf6a97d32781e011cce8d225d59000000000000000000000000e3f32745b03627e0e84ee1fc11c4d3c7857fb41c0000000000000000000000000000000000000000000000000000000000000014
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003251838bd813fdf6a97d32781e011cce8d225d59000000000000000000000000e3f32745b03627e0e84ee1fc11c4d3c7857fb41c0000000000000000000000000000000000000000000000000000000000000014
-----Decoded View---------------
Arg [0] : _tellor (address): 0x3251838bd813fdf6a97d32781e011cce8d225d59
Arg [1] : _queryDataStorage (address): 0xe3f32745b03627e0e84ee1fc11c4d3c7857fb41c
Arg [2] : _fee (uint256): 20
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000003251838bd813fdf6a97d32781e011cce8d225d59
Arg [1] : 000000000000000000000000e3f32745b03627e0e84ee1fc11c4d3c7857fb41c
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|